OSDN Git Service

2011-01-13 Kai Tietz <kai.tietz@onevision.com>
[pf3gnuchains/gcc-fork.git] / gcc / cp / decl2.c
1 /* Process declarations and variables for C++ compiler.
2    Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
4    Free Software Foundation, Inc.
5    Hacked by Michael Tiemann (tiemann@cygnus.com)
6
7 This file is part of GCC.
8
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
13
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3.  If not see
21 <http://www.gnu.org/licenses/>.  */
22
23
24 /* Process declarations and symbol lookup for C++ front end.
25    Also constructs types; the standard scalar types at initialization,
26    and structure, union, array and enum types when they are declared.  */
27
28 /* ??? not all decl nodes are given the most useful possible
29    line numbers.  For example, the CONST_DECLs for enum values.  */
30
31 #include "config.h"
32 #include "system.h"
33 #include "coretypes.h"
34 #include "tm.h"
35 #include "tree.h"
36 #include "flags.h"
37 #include "cp-tree.h"
38 #include "decl.h"
39 #include "output.h"
40 #include "toplev.h"
41 #include "timevar.h"
42 #include "cpplib.h"
43 #include "target.h"
44 #include "c-family/c-common.h"
45 #include "c-family/c-objc.h"
46 #include "tree-mudflap.h"
47 #include "cgraph.h"
48 #include "tree-inline.h"
49 #include "c-family/c-pragma.h"
50 #include "tree-dump.h"
51 #include "intl.h"
52 #include "gimple.h"
53 #include "pointer-set.h"
54 #include "splay-tree.h"
55 #include "langhooks.h"
56 #include "c-family/c-ada-spec.h"
57
58 extern cpp_reader *parse_in;
59
60 /* This structure contains information about the initializations
61    and/or destructions required for a particular priority level.  */
62 typedef struct priority_info_s {
63   /* Nonzero if there have been any initializations at this priority
64      throughout the translation unit.  */
65   int initializations_p;
66   /* Nonzero if there have been any destructions at this priority
67      throughout the translation unit.  */
68   int destructions_p;
69 } *priority_info;
70
71 static void mark_vtable_entries (tree);
72 static bool maybe_emit_vtables (tree);
73 static bool acceptable_java_type (tree);
74 static tree start_objects (int, int);
75 static void finish_objects (int, int, tree);
76 static tree start_static_storage_duration_function (unsigned);
77 static void finish_static_storage_duration_function (tree);
78 static priority_info get_priority_info (int);
79 static void do_static_initialization_or_destruction (tree, bool);
80 static void one_static_initialization_or_destruction (tree, tree, bool);
81 static void generate_ctor_or_dtor_function (bool, int, location_t *);
82 static int generate_ctor_and_dtor_functions_for_priority (splay_tree_node,
83                                                           void *);
84 static tree prune_vars_needing_no_initialization (tree *);
85 static void write_out_vars (tree);
86 static void import_export_class (tree);
87 static tree get_guard_bits (tree);
88 static void determine_visibility_from_class (tree, tree);
89 static bool decl_defined_p (tree);
90
91 /* A list of static class variables.  This is needed, because a
92    static class variable can be declared inside the class without
93    an initializer, and then initialized, statically, outside the class.  */
94 static GTY(()) VEC(tree,gc) *pending_statics;
95
96 /* A list of functions which were declared inline, but which we
97    may need to emit outline anyway.  */
98 static GTY(()) VEC(tree,gc) *deferred_fns;
99
100 /* A list of decls that use types with no linkage, which we need to make
101    sure are defined.  */
102 static GTY(()) VEC(tree,gc) *no_linkage_decls;
103
104 /* Nonzero if we're done parsing and into end-of-file activities.  */
105
106 int at_eof;
107
108 \f
109
110 /* Return a member function type (a METHOD_TYPE), given FNTYPE (a
111    FUNCTION_TYPE), CTYPE (class type), and QUALS (the cv-qualifiers
112    that apply to the function).  */
113
114 tree
115 build_memfn_type (tree fntype, tree ctype, cp_cv_quals quals)
116 {
117   tree raises;
118   tree attrs;
119   int type_quals;
120
121   if (fntype == error_mark_node || ctype == error_mark_node)
122     return error_mark_node;
123
124   gcc_assert (TREE_CODE (fntype) == FUNCTION_TYPE
125               || TREE_CODE (fntype) == METHOD_TYPE);
126
127   type_quals = quals & ~TYPE_QUAL_RESTRICT;
128   ctype = cp_build_qualified_type (ctype, type_quals);
129   raises = TYPE_RAISES_EXCEPTIONS (fntype);
130   attrs = TYPE_ATTRIBUTES (fntype);
131   fntype = build_method_type_directly (ctype, TREE_TYPE (fntype),
132                                        (TREE_CODE (fntype) == METHOD_TYPE
133                                         ? TREE_CHAIN (TYPE_ARG_TYPES (fntype))
134                                         : TYPE_ARG_TYPES (fntype)));
135   if (raises)
136     fntype = build_exception_variant (fntype, raises);
137   if (attrs)
138     fntype = cp_build_type_attribute_variant (fntype, attrs);
139
140   return fntype;
141 }
142
143 /* Return a variant of FNTYPE, a FUNCTION_TYPE or METHOD_TYPE, with its
144    return type changed to NEW_RET.  */
145
146 tree
147 change_return_type (tree new_ret, tree fntype)
148 {
149   tree newtype;
150   tree args = TYPE_ARG_TYPES (fntype);
151   tree raises = TYPE_RAISES_EXCEPTIONS (fntype);
152   tree attrs = TYPE_ATTRIBUTES (fntype);
153
154   if (same_type_p (new_ret, TREE_TYPE (fntype)))
155     return fntype;
156
157   if (TREE_CODE (fntype) == FUNCTION_TYPE)
158     {
159       newtype = build_function_type (new_ret, args);
160       newtype = apply_memfn_quals (newtype, type_memfn_quals (fntype));
161     }
162   else
163     newtype = build_method_type_directly
164       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (fntype))),
165        new_ret, TREE_CHAIN (args));
166   if (raises)
167     newtype = build_exception_variant (newtype, raises);
168   if (attrs)
169     newtype = cp_build_type_attribute_variant (newtype, attrs);
170
171   return newtype;
172 }
173
174 /* Build a PARM_DECL with NAME and TYPE, and set DECL_ARG_TYPE
175    appropriately.  */
176
177 tree
178 cp_build_parm_decl (tree name, tree type)
179 {
180   tree parm = build_decl (input_location,
181                           PARM_DECL, name, type);
182   /* DECL_ARG_TYPE is only used by the back end and the back end never
183      sees templates.  */
184   if (!processing_template_decl)
185     DECL_ARG_TYPE (parm) = type_passed_as (type);
186
187   /* If the type is a pack expansion, then we have a function
188      parameter pack. */
189   if (type && TREE_CODE (type) == TYPE_PACK_EXPANSION)
190     FUNCTION_PARAMETER_PACK_P (parm) = 1;
191
192   return parm;
193 }
194
195 /* Returns a PARM_DECL for a parameter of the indicated TYPE, with the
196    indicated NAME.  */
197
198 tree
199 build_artificial_parm (tree name, tree type)
200 {
201   tree parm = cp_build_parm_decl (name, type);
202   DECL_ARTIFICIAL (parm) = 1;
203   /* All our artificial parms are implicitly `const'; they cannot be
204      assigned to.  */
205   TREE_READONLY (parm) = 1;
206   return parm;
207 }
208
209 /* Constructors for types with virtual baseclasses need an "in-charge" flag
210    saying whether this constructor is responsible for initialization of
211    virtual baseclasses or not.  All destructors also need this "in-charge"
212    flag, which additionally determines whether or not the destructor should
213    free the memory for the object.
214
215    This function adds the "in-charge" flag to member function FN if
216    appropriate.  It is called from grokclassfn and tsubst.
217    FN must be either a constructor or destructor.
218
219    The in-charge flag follows the 'this' parameter, and is followed by the
220    VTT parm (if any), then the user-written parms.  */
221
222 void
223 maybe_retrofit_in_chrg (tree fn)
224 {
225   tree basetype, arg_types, parms, parm, fntype;
226
227   /* If we've already add the in-charge parameter don't do it again.  */
228   if (DECL_HAS_IN_CHARGE_PARM_P (fn))
229     return;
230
231   /* When processing templates we can't know, in general, whether or
232      not we're going to have virtual baseclasses.  */
233   if (processing_template_decl)
234     return;
235
236   /* We don't need an in-charge parameter for constructors that don't
237      have virtual bases.  */
238   if (DECL_CONSTRUCTOR_P (fn)
239       && !CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fn)))
240     return;
241
242   arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
243   basetype = TREE_TYPE (TREE_VALUE (arg_types));
244   arg_types = TREE_CHAIN (arg_types);
245
246   parms = DECL_CHAIN (DECL_ARGUMENTS (fn));
247
248   /* If this is a subobject constructor or destructor, our caller will
249      pass us a pointer to our VTT.  */
250   if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fn)))
251     {
252       parm = build_artificial_parm (vtt_parm_identifier, vtt_parm_type);
253
254       /* First add it to DECL_ARGUMENTS between 'this' and the real args...  */
255       DECL_CHAIN (parm) = parms;
256       parms = parm;
257
258       /* ...and then to TYPE_ARG_TYPES.  */
259       arg_types = hash_tree_chain (vtt_parm_type, arg_types);
260
261       DECL_HAS_VTT_PARM_P (fn) = 1;
262     }
263
264   /* Then add the in-charge parm (before the VTT parm).  */
265   parm = build_artificial_parm (in_charge_identifier, integer_type_node);
266   DECL_CHAIN (parm) = parms;
267   parms = parm;
268   arg_types = hash_tree_chain (integer_type_node, arg_types);
269
270   /* Insert our new parameter(s) into the list.  */
271   DECL_CHAIN (DECL_ARGUMENTS (fn)) = parms;
272
273   /* And rebuild the function type.  */
274   fntype = build_method_type_directly (basetype, TREE_TYPE (TREE_TYPE (fn)),
275                                        arg_types);
276   if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn)))
277     fntype = build_exception_variant (fntype,
278                                       TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn)));
279   if (TYPE_ATTRIBUTES (TREE_TYPE (fn)))
280     fntype = (cp_build_type_attribute_variant
281               (fntype, TYPE_ATTRIBUTES (TREE_TYPE (fn))));
282   TREE_TYPE (fn) = fntype;
283
284   /* Now we've got the in-charge parameter.  */
285   DECL_HAS_IN_CHARGE_PARM_P (fn) = 1;
286 }
287
288 /* Classes overload their constituent function names automatically.
289    When a function name is declared in a record structure,
290    its name is changed to it overloaded name.  Since names for
291    constructors and destructors can conflict, we place a leading
292    '$' for destructors.
293
294    CNAME is the name of the class we are grokking for.
295
296    FUNCTION is a FUNCTION_DECL.  It was created by `grokdeclarator'.
297
298    FLAGS contains bits saying what's special about today's
299    arguments.  DTOR_FLAG == DESTRUCTOR.
300
301    If FUNCTION is a destructor, then we must add the `auto-delete' field
302    as a second parameter.  There is some hair associated with the fact
303    that we must "declare" this variable in the manner consistent with the
304    way the rest of the arguments were declared.
305
306    QUALS are the qualifiers for the this pointer.  */
307
308 void
309 grokclassfn (tree ctype, tree function, enum overload_flags flags)
310 {
311   tree fn_name = DECL_NAME (function);
312
313   /* Even within an `extern "C"' block, members get C++ linkage.  See
314      [dcl.link] for details.  */
315   SET_DECL_LANGUAGE (function, lang_cplusplus);
316
317   if (fn_name == NULL_TREE)
318     {
319       error ("name missing for member function");
320       fn_name = get_identifier ("<anonymous>");
321       DECL_NAME (function) = fn_name;
322     }
323
324   DECL_CONTEXT (function) = ctype;
325
326   if (flags == DTOR_FLAG)
327     DECL_DESTRUCTOR_P (function) = 1;
328
329   if (flags == DTOR_FLAG || DECL_CONSTRUCTOR_P (function))
330     maybe_retrofit_in_chrg (function);
331 }
332
333 /* Create an ARRAY_REF, checking for the user doing things backwards
334    along the way.  */
335
336 tree
337 grok_array_decl (tree array_expr, tree index_exp)
338 {
339   tree type;
340   tree expr;
341   tree orig_array_expr = array_expr;
342   tree orig_index_exp = index_exp;
343
344   if (error_operand_p (array_expr) || error_operand_p (index_exp))
345     return error_mark_node;
346
347   if (processing_template_decl)
348     {
349       if (type_dependent_expression_p (array_expr)
350           || type_dependent_expression_p (index_exp))
351         return build_min_nt (ARRAY_REF, array_expr, index_exp,
352                              NULL_TREE, NULL_TREE);
353       array_expr = build_non_dependent_expr (array_expr);
354       index_exp = build_non_dependent_expr (index_exp);
355     }
356
357   type = TREE_TYPE (array_expr);
358   gcc_assert (type);
359   type = non_reference (type);
360
361   /* If they have an `operator[]', use that.  */
362   if (MAYBE_CLASS_TYPE_P (type) || MAYBE_CLASS_TYPE_P (TREE_TYPE (index_exp)))
363     expr = build_new_op (ARRAY_REF, LOOKUP_NORMAL,
364                          array_expr, index_exp, NULL_TREE,
365                          /*overloaded_p=*/NULL, tf_warning_or_error);
366   else
367     {
368       tree p1, p2, i1, i2;
369
370       /* Otherwise, create an ARRAY_REF for a pointer or array type.
371          It is a little-known fact that, if `a' is an array and `i' is
372          an int, you can write `i[a]', which means the same thing as
373          `a[i]'.  */
374       if (TREE_CODE (type) == ARRAY_TYPE)
375         p1 = array_expr;
376       else
377         p1 = build_expr_type_conversion (WANT_POINTER, array_expr, false);
378
379       if (TREE_CODE (TREE_TYPE (index_exp)) == ARRAY_TYPE)
380         p2 = index_exp;
381       else
382         p2 = build_expr_type_conversion (WANT_POINTER, index_exp, false);
383
384       i1 = build_expr_type_conversion (WANT_INT | WANT_ENUM, array_expr,
385                                        false);
386       i2 = build_expr_type_conversion (WANT_INT | WANT_ENUM, index_exp,
387                                        false);
388
389       if ((p1 && i2) && (i1 && p2))
390         error ("ambiguous conversion for array subscript");
391
392       if (p1 && i2)
393         array_expr = p1, index_exp = i2;
394       else if (i1 && p2)
395         array_expr = p2, index_exp = i1;
396       else
397         {
398           error ("invalid types %<%T[%T]%> for array subscript",
399                  type, TREE_TYPE (index_exp));
400           return error_mark_node;
401         }
402
403       if (array_expr == error_mark_node || index_exp == error_mark_node)
404         error ("ambiguous conversion for array subscript");
405
406       expr = build_array_ref (input_location, array_expr, index_exp);
407     }
408   if (processing_template_decl && expr != error_mark_node)
409     return build_min_non_dep (ARRAY_REF, expr, orig_array_expr, orig_index_exp,
410                               NULL_TREE, NULL_TREE);
411   return expr;
412 }
413
414 /* Given the cast expression EXP, checking out its validity.   Either return
415    an error_mark_node if there was an unavoidable error, return a cast to
416    void for trying to delete a pointer w/ the value 0, or return the
417    call to delete.  If DOING_VEC is true, we handle things differently
418    for doing an array delete.
419    Implements ARM $5.3.4.  This is called from the parser.  */
420
421 tree
422 delete_sanity (tree exp, tree size, bool doing_vec, int use_global_delete)
423 {
424   tree t, type;
425
426   if (exp == error_mark_node)
427     return exp;
428
429   if (processing_template_decl)
430     {
431       t = build_min (DELETE_EXPR, void_type_node, exp, size);
432       DELETE_EXPR_USE_GLOBAL (t) = use_global_delete;
433       DELETE_EXPR_USE_VEC (t) = doing_vec;
434       TREE_SIDE_EFFECTS (t) = 1;
435       return t;
436     }
437
438   /* An array can't have been allocated by new, so complain.  */
439   if (TREE_CODE (exp) == VAR_DECL
440       && TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE)
441     warning (0, "deleting array %q#D", exp);
442
443   t = build_expr_type_conversion (WANT_POINTER, exp, true);
444
445   if (t == NULL_TREE || t == error_mark_node)
446     {
447       error ("type %q#T argument given to %<delete%>, expected pointer",
448              TREE_TYPE (exp));
449       return error_mark_node;
450     }
451
452   type = TREE_TYPE (t);
453
454   /* As of Valley Forge, you can delete a pointer to const.  */
455
456   /* You can't delete functions.  */
457   if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
458     {
459       error ("cannot delete a function.  Only pointer-to-objects are "
460              "valid arguments to %<delete%>");
461       return error_mark_node;
462     }
463
464   /* Deleting ptr to void is undefined behavior [expr.delete/3].  */
465   if (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE)
466     {
467       warning (0, "deleting %qT is undefined", type);
468       doing_vec = 0;
469     }
470
471   /* Deleting a pointer with the value zero is valid and has no effect.  */
472   if (integer_zerop (t))
473     return build1 (NOP_EXPR, void_type_node, t);
474
475   if (doing_vec)
476     return build_vec_delete (t, /*maxindex=*/NULL_TREE,
477                              sfk_deleting_destructor,
478                              use_global_delete);
479   else
480     return build_delete (type, t, sfk_deleting_destructor,
481                          LOOKUP_NORMAL, use_global_delete);
482 }
483
484 /* Report an error if the indicated template declaration is not the
485    sort of thing that should be a member template.  */
486
487 void
488 check_member_template (tree tmpl)
489 {
490   tree decl;
491
492   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
493   decl = DECL_TEMPLATE_RESULT (tmpl);
494
495   if (TREE_CODE (decl) == FUNCTION_DECL
496       || (TREE_CODE (decl) == TYPE_DECL
497           && MAYBE_CLASS_TYPE_P (TREE_TYPE (decl))))
498     {
499       /* The parser rejects template declarations in local classes.  */
500       gcc_assert (!current_function_decl);
501       /* The parser rejects any use of virtual in a function template.  */
502       gcc_assert (!(TREE_CODE (decl) == FUNCTION_DECL
503                     && DECL_VIRTUAL_P (decl)));
504
505       /* The debug-information generating code doesn't know what to do
506          with member templates.  */
507       DECL_IGNORED_P (tmpl) = 1;
508     }
509   else
510     error ("template declaration of %q#D", decl);
511 }
512
513 /* Return true iff TYPE is a valid Java parameter or return type.  */
514
515 static bool
516 acceptable_java_type (tree type)
517 {
518   if (type == error_mark_node)
519     return false;
520
521   if (TREE_CODE (type) == VOID_TYPE || TYPE_FOR_JAVA (type))
522     return true;
523   if (TREE_CODE (type) == POINTER_TYPE || TREE_CODE (type) == REFERENCE_TYPE)
524     {
525       type = TREE_TYPE (type);
526       if (TREE_CODE (type) == RECORD_TYPE)
527         {
528           tree args;  int i;
529           if (! TYPE_FOR_JAVA (type))
530             return false;
531           if (! CLASSTYPE_TEMPLATE_INFO (type))
532             return true;
533           args = CLASSTYPE_TI_ARGS (type);
534           i = TREE_VEC_LENGTH (args);
535           while (--i >= 0)
536             {
537               type = TREE_VEC_ELT (args, i);
538               if (TREE_CODE (type) == POINTER_TYPE)
539                 type = TREE_TYPE (type);
540               if (! TYPE_FOR_JAVA (type))
541                 return false;
542             }
543           return true;
544         }
545     }
546   return false;
547 }
548
549 /* For a METHOD in a Java class CTYPE, return true if
550    the parameter and return types are valid Java types.
551    Otherwise, print appropriate error messages, and return false.  */
552
553 bool
554 check_java_method (tree method)
555 {
556   bool jerr = false;
557   tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (method));
558   tree ret_type = TREE_TYPE (TREE_TYPE (method));
559
560   if (!acceptable_java_type (ret_type))
561     {
562       error ("Java method %qD has non-Java return type %qT",
563              method, ret_type);
564       jerr = true;
565     }
566
567   arg_types = TREE_CHAIN (arg_types);
568   if (DECL_HAS_IN_CHARGE_PARM_P (method))
569     arg_types = TREE_CHAIN (arg_types);
570   if (DECL_HAS_VTT_PARM_P (method))
571     arg_types = TREE_CHAIN (arg_types);
572
573   for (; arg_types != NULL_TREE; arg_types = TREE_CHAIN (arg_types))
574     {
575       tree type = TREE_VALUE (arg_types);
576       if (!acceptable_java_type (type))
577         {
578           if (type != error_mark_node)
579             error ("Java method %qD has non-Java parameter type %qT",
580                    method, type);
581           jerr = true;
582         }
583     }
584   return !jerr;
585 }
586
587 /* Sanity check: report error if this function FUNCTION is not
588    really a member of the class (CTYPE) it is supposed to belong to.
589    TEMPLATE_PARMS is used to specify the template parameters of a member
590    template passed as FUNCTION_DECL. If the member template is passed as a
591    TEMPLATE_DECL, it can be NULL since the parameters can be extracted
592    from the declaration. If the function is not a function template, it
593    must be NULL.
594    It returns the original declaration for the function, NULL_TREE if
595    no declaration was found, error_mark_node if an error was emitted.  */
596
597 tree
598 check_classfn (tree ctype, tree function, tree template_parms)
599 {
600   int ix;
601   bool is_template;
602   tree pushed_scope;
603   
604   if (DECL_USE_TEMPLATE (function)
605       && !(TREE_CODE (function) == TEMPLATE_DECL
606            && DECL_TEMPLATE_SPECIALIZATION (function))
607       && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (function)))
608     /* Since this is a specialization of a member template,
609        we're not going to find the declaration in the class.
610        For example, in:
611
612          struct S { template <typename T> void f(T); };
613          template <> void S::f(int);
614
615        we're not going to find `S::f(int)', but there's no
616        reason we should, either.  We let our callers know we didn't
617        find the method, but we don't complain.  */
618     return NULL_TREE;
619
620   /* Basic sanity check: for a template function, the template parameters
621      either were not passed, or they are the same of DECL_TEMPLATE_PARMS.  */
622   if (TREE_CODE (function) == TEMPLATE_DECL)
623     {
624       if (template_parms
625           && !comp_template_parms (template_parms,
626                                    DECL_TEMPLATE_PARMS (function)))
627         {
628           error ("template parameter lists provided don%'t match the "
629                  "template parameters of %qD", function);
630           return error_mark_node;
631         }
632       template_parms = DECL_TEMPLATE_PARMS (function);
633     }
634
635   /* OK, is this a definition of a member template?  */
636   is_template = (template_parms != NULL_TREE);
637
638   /* We must enter the scope here, because conversion operators are
639      named by target type, and type equivalence relies on typenames
640      resolving within the scope of CTYPE.  */
641   pushed_scope = push_scope (ctype);
642   ix = class_method_index_for_fn (complete_type (ctype), function);
643   if (ix >= 0)
644     {
645       VEC(tree,gc) *methods = CLASSTYPE_METHOD_VEC (ctype);
646       tree fndecls, fndecl = 0;
647       bool is_conv_op;
648       const char *format = NULL;
649
650       for (fndecls = VEC_index (tree, methods, ix);
651            fndecls; fndecls = OVL_NEXT (fndecls))
652         {
653           tree p1, p2;
654
655           fndecl = OVL_CURRENT (fndecls);
656           p1 = TYPE_ARG_TYPES (TREE_TYPE (function));
657           p2 = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
658
659           /* We cannot simply call decls_match because this doesn't
660              work for static member functions that are pretending to
661              be methods, and because the name may have been changed by
662              asm("new_name").  */
663
664            /* Get rid of the this parameter on functions that become
665               static.  */
666           if (DECL_STATIC_FUNCTION_P (fndecl)
667               && TREE_CODE (TREE_TYPE (function)) == METHOD_TYPE)
668             p1 = TREE_CHAIN (p1);
669
670           /* A member template definition only matches a member template
671              declaration.  */
672           if (is_template != (TREE_CODE (fndecl) == TEMPLATE_DECL))
673             continue;
674
675           if (same_type_p (TREE_TYPE (TREE_TYPE (function)),
676                            TREE_TYPE (TREE_TYPE (fndecl)))
677               && compparms (p1, p2)
678               && (!is_template
679                   || comp_template_parms (template_parms,
680                                           DECL_TEMPLATE_PARMS (fndecl)))
681               && (DECL_TEMPLATE_SPECIALIZATION (function)
682                   == DECL_TEMPLATE_SPECIALIZATION (fndecl))
683               && (!DECL_TEMPLATE_SPECIALIZATION (function)
684                   || (DECL_TI_TEMPLATE (function)
685                       == DECL_TI_TEMPLATE (fndecl))))
686             break;
687         }
688       if (fndecls)
689         {
690           if (pushed_scope)
691             pop_scope (pushed_scope);
692           return OVL_CURRENT (fndecls);
693         }
694       
695       error_at (DECL_SOURCE_LOCATION (function),
696                 "prototype for %q#D does not match any in class %qT",
697                 function, ctype);
698       is_conv_op = DECL_CONV_FN_P (fndecl);
699
700       if (is_conv_op)
701         ix = CLASSTYPE_FIRST_CONVERSION_SLOT;
702       fndecls = VEC_index (tree, methods, ix);
703       while (fndecls)
704         {
705           fndecl = OVL_CURRENT (fndecls);
706           fndecls = OVL_NEXT (fndecls);
707
708           if (!fndecls && is_conv_op)
709             {
710               if (VEC_length (tree, methods) > (size_t) ++ix)
711                 {
712                   fndecls = VEC_index (tree, methods, ix);
713                   if (!DECL_CONV_FN_P (OVL_CURRENT (fndecls)))
714                     {
715                       fndecls = NULL_TREE;
716                       is_conv_op = false;
717                     }
718                 }
719               else
720                 is_conv_op = false;
721             }
722           if (format)
723             format = "                %+#D";
724           else if (fndecls)
725             format = N_("candidates are: %+#D");
726           else
727             format = N_("candidate is: %+#D");
728           error (format, fndecl);
729         }
730     }
731   else if (!COMPLETE_TYPE_P (ctype))
732     cxx_incomplete_type_error (function, ctype);
733   else
734     error ("no %q#D member function declared in class %qT",
735            function, ctype);
736
737   if (pushed_scope)
738     pop_scope (pushed_scope);
739   return error_mark_node;
740 }
741
742 /* DECL is a function with vague linkage.  Remember it so that at the
743    end of the translation unit we can decide whether or not to emit
744    it.  */
745
746 void
747 note_vague_linkage_fn (tree decl)
748 {
749   DECL_DEFER_OUTPUT (decl) = 1;
750   VEC_safe_push (tree, gc, deferred_fns, decl);
751 }
752
753 /* We have just processed the DECL, which is a static data member.
754    The other parameters are as for cp_finish_decl.  */
755
756 void
757 finish_static_data_member_decl (tree decl,
758                                 tree init, bool init_const_expr_p,
759                                 tree asmspec_tree,
760                                 int flags)
761 {
762   DECL_CONTEXT (decl) = current_class_type;
763
764   /* We cannot call pushdecl here, because that would fill in the
765      TREE_CHAIN of our decl.  Instead, we modify cp_finish_decl to do
766      the right thing, namely, to put this decl out straight away.  */
767
768   if (! processing_template_decl)
769     VEC_safe_push (tree, gc, pending_statics, decl);
770
771   if (LOCAL_CLASS_P (current_class_type))
772     permerror (input_location, "local class %q#T shall not have static data member %q#D",
773                current_class_type, decl);
774
775   DECL_IN_AGGR_P (decl) = 1;
776
777   if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
778       && TYPE_DOMAIN (TREE_TYPE (decl)) == NULL_TREE)
779     SET_VAR_HAD_UNKNOWN_BOUND (decl);
780
781   cp_finish_decl (decl, init, init_const_expr_p, asmspec_tree, flags);
782 }
783
784 /* DECLARATOR and DECLSPECS correspond to a class member.  The other
785    parameters are as for cp_finish_decl.  Return the DECL for the
786    class member declared.  */
787
788 tree
789 grokfield (const cp_declarator *declarator,
790            cp_decl_specifier_seq *declspecs,
791            tree init, bool init_const_expr_p,
792            tree asmspec_tree,
793            tree attrlist)
794 {
795   tree value;
796   const char *asmspec = 0;
797   int flags = LOOKUP_ONLYCONVERTING;
798   tree name;
799
800   if (init
801       && TREE_CODE (init) == TREE_LIST
802       && TREE_VALUE (init) == error_mark_node
803       && TREE_CHAIN (init) == NULL_TREE)
804     init = NULL_TREE;
805
806   value = grokdeclarator (declarator, declspecs, FIELD, init != 0, &attrlist);
807   if (! value || error_operand_p (value))
808     /* friend or constructor went bad.  */
809     return error_mark_node;
810
811   if (TREE_CODE (value) == TYPE_DECL && init)
812     {
813       error ("typedef %qD is initialized (use decltype instead)", value);
814       init = NULL_TREE;
815     }
816
817   /* Pass friendly classes back.  */
818   if (value == void_type_node)
819     return value;
820
821   /* Pass friend decls back.  */
822   if ((TREE_CODE (value) == FUNCTION_DECL
823        || TREE_CODE (value) == TEMPLATE_DECL)
824       && DECL_CONTEXT (value) != current_class_type)
825     return value;
826
827   name = DECL_NAME (value);
828
829   if (name != NULL_TREE)
830     {
831       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
832         {
833           error ("explicit template argument list not allowed");
834           return error_mark_node;
835         }
836
837       if (IDENTIFIER_POINTER (name)[0] == '_'
838           && ! strcmp (IDENTIFIER_POINTER (name), "_vptr"))
839         error ("member %qD conflicts with virtual function table field name",
840                value);
841     }
842
843   /* Stash away type declarations.  */
844   if (TREE_CODE (value) == TYPE_DECL)
845     {
846       DECL_NONLOCAL (value) = 1;
847       DECL_CONTEXT (value) = current_class_type;
848
849       if (processing_template_decl)
850         value = push_template_decl (value);
851
852       if (attrlist)
853         {
854           int attrflags = 0;
855
856           /* If this is a typedef that names the class for linkage purposes
857              (7.1.3p8), apply any attributes directly to the type.  */
858           if (TAGGED_TYPE_P (TREE_TYPE (value))
859               && value == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (value))))
860             attrflags = ATTR_FLAG_TYPE_IN_PLACE;
861
862           cplus_decl_attributes (&value, attrlist, attrflags);
863         }
864
865       if (declspecs->specs[(int)ds_typedef]
866           && TREE_TYPE (value) != error_mark_node
867           && TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (value))) != value)
868         set_underlying_type (value);
869
870       return value;
871     }
872
873   if (DECL_IN_AGGR_P (value))
874     {
875       error ("%qD is already defined in %qT", value, DECL_CONTEXT (value));
876       return void_type_node;
877     }
878
879   if (asmspec_tree && asmspec_tree != error_mark_node)
880     asmspec = TREE_STRING_POINTER (asmspec_tree);
881
882   if (init)
883     {
884       if (TREE_CODE (value) == FUNCTION_DECL)
885         {
886           /* Initializers for functions are rejected early in the parser.
887              If we get here, it must be a pure specifier for a method.  */
888           if (init == ridpointers[(int)RID_DELETE])
889             {
890               DECL_DELETED_FN (value) = 1;
891               DECL_DECLARED_INLINE_P (value) = 1;
892               DECL_INITIAL (value) = error_mark_node;
893             }
894           else if (init == ridpointers[(int)RID_DEFAULT])
895             {
896               if (defaultable_fn_check (value))
897                 {
898                   DECL_DEFAULTED_FN (value) = 1;
899                   DECL_INITIALIZED_IN_CLASS_P (value) = 1;
900                   DECL_DECLARED_INLINE_P (value) = 1;
901                 }
902             }
903           else if (TREE_CODE (TREE_TYPE (value)) == METHOD_TYPE)
904             {
905               if (integer_zerop (init))
906                 DECL_PURE_VIRTUAL_P (value) = 1;
907               else if (error_operand_p (init))
908                 ; /* An error has already been reported.  */
909               else
910                 error ("invalid initializer for member function %qD",
911                        value);
912             }
913           else
914             {
915               gcc_assert (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE);
916               error ("initializer specified for static member function %qD",
917                      value);
918             }
919         }
920       else if (pedantic && TREE_CODE (value) != VAR_DECL)
921         /* Already complained in grokdeclarator.  */
922         init = NULL_TREE;
923       else if (!processing_template_decl)
924         {
925           if (TREE_CODE (init) == CONSTRUCTOR)
926             init = digest_init (TREE_TYPE (value), init);
927           init = maybe_constant_init (init);
928
929           if (init != error_mark_node && !TREE_CONSTANT (init))
930             {
931               /* We can allow references to things that are effectively
932                  static, since references are initialized with the
933                  address.  */
934               if (TREE_CODE (TREE_TYPE (value)) != REFERENCE_TYPE
935                   || (TREE_STATIC (init) == 0
936                       && (!DECL_P (init) || DECL_EXTERNAL (init) == 0)))
937                 {
938                   error ("field initializer is not constant");
939                   init = error_mark_node;
940                 }
941             }
942         }
943     }
944
945   if (processing_template_decl
946       && (TREE_CODE (value) == VAR_DECL || TREE_CODE (value) == FUNCTION_DECL))
947     {
948       value = push_template_decl (value);
949       if (error_operand_p (value))
950         return error_mark_node;
951     }
952
953   if (attrlist)
954     cplus_decl_attributes (&value, attrlist, 0);
955
956   switch (TREE_CODE (value))
957     {
958     case VAR_DECL:
959       finish_static_data_member_decl (value, init, init_const_expr_p,
960                                       asmspec_tree, flags);
961       return value;
962
963     case FIELD_DECL:
964       if (asmspec)
965         error ("%<asm%> specifiers are not permitted on non-static data members");
966       if (DECL_INITIAL (value) == error_mark_node)
967         init = error_mark_node;
968       cp_finish_decl (value, init, /*init_const_expr_p=*/false,
969                       NULL_TREE, flags);
970       DECL_INITIAL (value) = init;
971       DECL_IN_AGGR_P (value) = 1;
972       return value;
973
974     case  FUNCTION_DECL:
975       if (asmspec)
976         set_user_assembler_name (value, asmspec);
977
978       cp_finish_decl (value,
979                       /*init=*/NULL_TREE,
980                       /*init_const_expr_p=*/false,
981                       asmspec_tree, flags);
982
983       /* Pass friends back this way.  */
984       if (DECL_FRIEND_P (value))
985         return void_type_node;
986
987       DECL_IN_AGGR_P (value) = 1;
988       return value;
989
990     default:
991       gcc_unreachable ();
992     }
993   return NULL_TREE;
994 }
995
996 /* Like `grokfield', but for bitfields.
997    WIDTH is non-NULL for bit fields only, and is an INTEGER_CST node.  */
998
999 tree
1000 grokbitfield (const cp_declarator *declarator,
1001               cp_decl_specifier_seq *declspecs, tree width,
1002               tree attrlist)
1003 {
1004   tree value = grokdeclarator (declarator, declspecs, BITFIELD, 0, &attrlist);
1005
1006   if (value == error_mark_node) 
1007     return NULL_TREE; /* friends went bad.  */
1008
1009   /* Pass friendly classes back.  */
1010   if (TREE_CODE (value) == VOID_TYPE)
1011     return void_type_node;
1012
1013   if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))
1014       && (POINTER_TYPE_P (value)
1015           || !dependent_type_p (TREE_TYPE (value))))
1016     {
1017       error ("bit-field %qD with non-integral type", value);
1018       return error_mark_node;
1019     }
1020
1021   if (TREE_CODE (value) == TYPE_DECL)
1022     {
1023       error ("cannot declare %qD to be a bit-field type", value);
1024       return NULL_TREE;
1025     }
1026
1027   /* Usually, finish_struct_1 catches bitfields with invalid types.
1028      But, in the case of bitfields with function type, we confuse
1029      ourselves into thinking they are member functions, so we must
1030      check here.  */
1031   if (TREE_CODE (value) == FUNCTION_DECL)
1032     {
1033       error ("cannot declare bit-field %qD with function type",
1034              DECL_NAME (value));
1035       return NULL_TREE;
1036     }
1037
1038   if (DECL_IN_AGGR_P (value))
1039     {
1040       error ("%qD is already defined in the class %qT", value,
1041              DECL_CONTEXT (value));
1042       return void_type_node;
1043     }
1044
1045   if (TREE_STATIC (value))
1046     {
1047       error ("static member %qD cannot be a bit-field", value);
1048       return NULL_TREE;
1049     }
1050   cp_finish_decl (value, NULL_TREE, false, NULL_TREE, 0);
1051
1052   if (width != error_mark_node)
1053     {
1054       /* The width must be an integer type.  */
1055       if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (width)))
1056         error ("width of bit-field %qD has non-integral type %qT", value,
1057                TREE_TYPE (width));
1058       DECL_INITIAL (value) = width;
1059       SET_DECL_C_BIT_FIELD (value);
1060     }
1061
1062   DECL_IN_AGGR_P (value) = 1;
1063
1064   if (attrlist)
1065     cplus_decl_attributes (&value, attrlist, /*flags=*/0);
1066
1067   return value;
1068 }
1069
1070 \f
1071 /* Returns true iff ATTR is an attribute which needs to be applied at
1072    instantiation time rather than template definition time.  */
1073
1074 static bool
1075 is_late_template_attribute (tree attr, tree decl)
1076 {
1077   tree name = TREE_PURPOSE (attr);
1078   tree args = TREE_VALUE (attr);
1079   const struct attribute_spec *spec = lookup_attribute_spec (name);
1080   tree arg;
1081
1082   if (!spec)
1083     /* Unknown attribute.  */
1084     return false;
1085
1086   /* Attribute weak handling wants to write out assembly right away.  */
1087   if (is_attribute_p ("weak", name))
1088     return true;
1089
1090   /* If any of the arguments are dependent expressions, we can't evaluate
1091      the attribute until instantiation time.  */
1092   for (arg = args; arg; arg = TREE_CHAIN (arg))
1093     {
1094       tree t = TREE_VALUE (arg);
1095
1096       /* If the first attribute argument is an identifier, only consider
1097          second and following arguments.  Attributes like mode, format,
1098          cleanup and several target specific attributes aren't late
1099          just because they have an IDENTIFIER_NODE as first argument.  */
1100       if (arg == args && TREE_CODE (t) == IDENTIFIER_NODE)
1101         continue;
1102
1103       if (value_dependent_expression_p (t)
1104           || type_dependent_expression_p (t))
1105         return true;
1106     }
1107
1108   if (TREE_CODE (decl) == TYPE_DECL
1109       || TYPE_P (decl)
1110       || spec->type_required)
1111     {
1112       tree type = TYPE_P (decl) ? decl : TREE_TYPE (decl);
1113
1114       /* We can't apply any attributes to a completely unknown type until
1115          instantiation time.  */
1116       enum tree_code code = TREE_CODE (type);
1117       if (code == TEMPLATE_TYPE_PARM
1118           || code == BOUND_TEMPLATE_TEMPLATE_PARM
1119           || code == TYPENAME_TYPE)
1120         return true;
1121       /* Also defer most attributes on dependent types.  This is not
1122          necessary in all cases, but is the better default.  */
1123       else if (dependent_type_p (type)
1124                /* But attribute visibility specifically works on
1125                   templates.  */
1126                && !is_attribute_p ("visibility", name))
1127         return true;
1128       else
1129         return false;
1130     }
1131   else
1132     return false;
1133 }
1134
1135 /* ATTR_P is a list of attributes.  Remove any attributes which need to be
1136    applied at instantiation time and return them.  If IS_DEPENDENT is true,
1137    the declaration itself is dependent, so all attributes should be applied
1138    at instantiation time.  */
1139
1140 static tree
1141 splice_template_attributes (tree *attr_p, tree decl)
1142 {
1143   tree *p = attr_p;
1144   tree late_attrs = NULL_TREE;
1145   tree *q = &late_attrs;
1146
1147   if (!p)
1148     return NULL_TREE;
1149
1150   for (; *p; )
1151     {
1152       if (is_late_template_attribute (*p, decl))
1153         {
1154           ATTR_IS_DEPENDENT (*p) = 1;
1155           *q = *p;
1156           *p = TREE_CHAIN (*p);
1157           q = &TREE_CHAIN (*q);
1158           *q = NULL_TREE;
1159         }
1160       else
1161         p = &TREE_CHAIN (*p);
1162     }
1163
1164   return late_attrs;
1165 }
1166
1167 /* Remove any late attributes from the list in ATTR_P and attach them to
1168    DECL_P.  */
1169
1170 static void
1171 save_template_attributes (tree *attr_p, tree *decl_p)
1172 {
1173   tree late_attrs = splice_template_attributes (attr_p, *decl_p);
1174   tree *q;
1175   tree old_attrs = NULL_TREE;
1176
1177   if (!late_attrs)
1178     return;
1179
1180   if (DECL_P (*decl_p))
1181     q = &DECL_ATTRIBUTES (*decl_p);
1182   else
1183     q = &TYPE_ATTRIBUTES (*decl_p);
1184
1185   old_attrs = *q;
1186
1187   /* Place the late attributes at the beginning of the attribute
1188      list.  */
1189   TREE_CHAIN (tree_last (late_attrs)) = *q;
1190   *q = late_attrs;
1191
1192   if (!DECL_P (*decl_p) && *decl_p == TYPE_MAIN_VARIANT (*decl_p))
1193     {
1194       /* We've added new attributes directly to the main variant, so
1195          now we need to update all of the other variants to include
1196          these new attributes.  */
1197       tree variant;
1198       for (variant = TYPE_NEXT_VARIANT (*decl_p); variant;
1199            variant = TYPE_NEXT_VARIANT (variant))
1200         {
1201           gcc_assert (TYPE_ATTRIBUTES (variant) == old_attrs);
1202           TYPE_ATTRIBUTES (variant) = TYPE_ATTRIBUTES (*decl_p);
1203         }
1204     }
1205 }
1206
1207 /* Like reconstruct_complex_type, but handle also template trees.  */
1208
1209 tree
1210 cp_reconstruct_complex_type (tree type, tree bottom)
1211 {
1212   tree inner, outer;
1213
1214   if (TREE_CODE (type) == POINTER_TYPE)
1215     {
1216       inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1217       outer = build_pointer_type_for_mode (inner, TYPE_MODE (type),
1218                                            TYPE_REF_CAN_ALIAS_ALL (type));
1219     }
1220   else if (TREE_CODE (type) == REFERENCE_TYPE)
1221     {
1222       inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1223       outer = build_reference_type_for_mode (inner, TYPE_MODE (type),
1224                                              TYPE_REF_CAN_ALIAS_ALL (type));
1225     }
1226   else if (TREE_CODE (type) == ARRAY_TYPE)
1227     {
1228       inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1229       outer = build_cplus_array_type (inner, TYPE_DOMAIN (type));
1230       /* Don't call cp_build_qualified_type on ARRAY_TYPEs, the
1231          element type qualification will be handled by the recursive
1232          cp_reconstruct_complex_type call and cp_build_qualified_type
1233          for ARRAY_TYPEs changes the element type.  */
1234       return outer;
1235     }
1236   else if (TREE_CODE (type) == FUNCTION_TYPE)
1237     {
1238       inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1239       outer = build_function_type (inner, TYPE_ARG_TYPES (type));
1240       outer = apply_memfn_quals (outer, type_memfn_quals (type));
1241     }
1242   else if (TREE_CODE (type) == METHOD_TYPE)
1243     {
1244       inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1245       /* The build_method_type_directly() routine prepends 'this' to argument list,
1246          so we must compensate by getting rid of it.  */
1247       outer
1248         = build_method_type_directly
1249             (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type))),
1250              inner,
1251              TREE_CHAIN (TYPE_ARG_TYPES (type)));
1252     }
1253   else if (TREE_CODE (type) == OFFSET_TYPE)
1254     {
1255       inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1256       outer = build_offset_type (TYPE_OFFSET_BASETYPE (type), inner);
1257     }
1258   else
1259     return bottom;
1260
1261   if (TYPE_ATTRIBUTES (type))
1262     outer = cp_build_type_attribute_variant (outer, TYPE_ATTRIBUTES (type));
1263   return cp_build_qualified_type (outer, cp_type_quals (type));
1264 }
1265
1266 /* Like decl_attributes, but handle C++ complexity.  */
1267
1268 void
1269 cplus_decl_attributes (tree *decl, tree attributes, int flags)
1270 {
1271   if (*decl == NULL_TREE || *decl == void_type_node
1272       || *decl == error_mark_node
1273       || attributes == NULL_TREE)
1274     return;
1275
1276   if (processing_template_decl)
1277     {
1278       if (check_for_bare_parameter_packs (attributes))
1279         return;
1280
1281       save_template_attributes (&attributes, decl);
1282       if (attributes == NULL_TREE)
1283         return;
1284     }
1285
1286   if (TREE_CODE (*decl) == TEMPLATE_DECL)
1287     decl = &DECL_TEMPLATE_RESULT (*decl);
1288
1289   decl_attributes (decl, attributes, flags);
1290
1291   if (TREE_CODE (*decl) == TYPE_DECL)
1292     SET_IDENTIFIER_TYPE_VALUE (DECL_NAME (*decl), TREE_TYPE (*decl));
1293 }
1294 \f
1295 /* Walks through the namespace- or function-scope anonymous union
1296    OBJECT, with the indicated TYPE, building appropriate VAR_DECLs.
1297    Returns one of the fields for use in the mangled name.  */
1298
1299 static tree
1300 build_anon_union_vars (tree type, tree object)
1301 {
1302   tree main_decl = NULL_TREE;
1303   tree field;
1304
1305   /* Rather than write the code to handle the non-union case,
1306      just give an error.  */
1307   if (TREE_CODE (type) != UNION_TYPE)
1308     error ("anonymous struct not inside named type");
1309
1310   for (field = TYPE_FIELDS (type);
1311        field != NULL_TREE;
1312        field = DECL_CHAIN (field))
1313     {
1314       tree decl;
1315       tree ref;
1316
1317       if (DECL_ARTIFICIAL (field))
1318         continue;
1319       if (TREE_CODE (field) != FIELD_DECL)
1320         {
1321           permerror (input_location, "%q+#D invalid; an anonymous union can only "
1322                      "have non-static data members", field);
1323           continue;
1324         }
1325
1326       if (TREE_PRIVATE (field))
1327         permerror (input_location, "private member %q+#D in anonymous union", field);
1328       else if (TREE_PROTECTED (field))
1329         permerror (input_location, "protected member %q+#D in anonymous union", field);
1330
1331       if (processing_template_decl)
1332         ref = build_min_nt (COMPONENT_REF, object,
1333                             DECL_NAME (field), NULL_TREE);
1334       else
1335         ref = build_class_member_access_expr (object, field, NULL_TREE,
1336                                               false, tf_warning_or_error);
1337
1338       if (DECL_NAME (field))
1339         {
1340           tree base;
1341
1342           decl = build_decl (input_location,
1343                              VAR_DECL, DECL_NAME (field), TREE_TYPE (field));
1344           DECL_ANON_UNION_VAR_P (decl) = 1;
1345           DECL_ARTIFICIAL (decl) = 1;
1346
1347           base = get_base_address (object);
1348           TREE_PUBLIC (decl) = TREE_PUBLIC (base);
1349           TREE_STATIC (decl) = TREE_STATIC (base);
1350           DECL_EXTERNAL (decl) = DECL_EXTERNAL (base);
1351
1352           SET_DECL_VALUE_EXPR (decl, ref);
1353           DECL_HAS_VALUE_EXPR_P (decl) = 1;
1354
1355           decl = pushdecl (decl);
1356         }
1357       else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
1358         decl = build_anon_union_vars (TREE_TYPE (field), ref);
1359       else
1360         decl = 0;
1361
1362       if (main_decl == NULL_TREE)
1363         main_decl = decl;
1364     }
1365
1366   return main_decl;
1367 }
1368
1369 /* Finish off the processing of a UNION_TYPE structure.  If the union is an
1370    anonymous union, then all members must be laid out together.  PUBLIC_P
1371    is nonzero if this union is not declared static.  */
1372
1373 void
1374 finish_anon_union (tree anon_union_decl)
1375 {
1376   tree type;
1377   tree main_decl;
1378   bool public_p;
1379
1380   if (anon_union_decl == error_mark_node)
1381     return;
1382
1383   type = TREE_TYPE (anon_union_decl);
1384   public_p = TREE_PUBLIC (anon_union_decl);
1385
1386   /* The VAR_DECL's context is the same as the TYPE's context.  */
1387   DECL_CONTEXT (anon_union_decl) = DECL_CONTEXT (TYPE_NAME (type));
1388
1389   if (TYPE_FIELDS (type) == NULL_TREE)
1390     return;
1391
1392   if (public_p)
1393     {
1394       error ("namespace-scope anonymous aggregates must be static");
1395       return;
1396     }
1397
1398   main_decl = build_anon_union_vars (type, anon_union_decl);
1399   if (main_decl == error_mark_node)
1400     return;
1401   if (main_decl == NULL_TREE)
1402     {
1403       warning (0, "anonymous union with no members");
1404       return;
1405     }
1406
1407   if (!processing_template_decl)
1408     {
1409       /* Use main_decl to set the mangled name.  */
1410       DECL_NAME (anon_union_decl) = DECL_NAME (main_decl);
1411       maybe_commonize_var (anon_union_decl);
1412       mangle_decl (anon_union_decl);
1413       DECL_NAME (anon_union_decl) = NULL_TREE;
1414     }
1415
1416   pushdecl (anon_union_decl);
1417   if (building_stmt_tree ()
1418       && at_function_scope_p ())
1419     add_decl_expr (anon_union_decl);
1420   else if (!processing_template_decl)
1421     rest_of_decl_compilation (anon_union_decl,
1422                               toplevel_bindings_p (), at_eof);
1423 }
1424 \f
1425 /* Auxiliary functions to make type signatures for
1426    `operator new' and `operator delete' correspond to
1427    what compiler will be expecting.  */
1428
1429 tree
1430 coerce_new_type (tree type)
1431 {
1432   int e = 0;
1433   tree args = TYPE_ARG_TYPES (type);
1434
1435   gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
1436
1437   if (!same_type_p (TREE_TYPE (type), ptr_type_node))
1438     {
1439       e = 1;
1440       error ("%<operator new%> must return type %qT", ptr_type_node);
1441     }
1442
1443   if (args && args != void_list_node)
1444     {
1445       if (TREE_PURPOSE (args))
1446         {
1447           /* [basic.stc.dynamic.allocation]
1448              
1449              The first parameter shall not have an associated default
1450              argument.  */
1451           error ("the first parameter of %<operator new%> cannot "
1452                  "have a default argument");
1453           /* Throw away the default argument.  */
1454           TREE_PURPOSE (args) = NULL_TREE;
1455         }
1456
1457       if (!same_type_p (TREE_VALUE (args), size_type_node))
1458         {
1459           e = 2;
1460           args = TREE_CHAIN (args);
1461         }
1462     }
1463   else
1464     e = 2;
1465
1466   if (e == 2)
1467     permerror (input_location, "%<operator new%> takes type %<size_t%> (%qT) "
1468                "as first parameter", size_type_node);
1469
1470   switch (e)
1471   {
1472     case 2:
1473       args = tree_cons (NULL_TREE, size_type_node, args);
1474       /* Fall through.  */
1475     case 1:
1476       type = build_exception_variant
1477               (build_function_type (ptr_type_node, args),
1478                TYPE_RAISES_EXCEPTIONS (type));
1479       /* Fall through.  */
1480     default:;
1481   }
1482   return type;
1483 }
1484
1485 tree
1486 coerce_delete_type (tree type)
1487 {
1488   int e = 0;
1489   tree args = TYPE_ARG_TYPES (type);
1490
1491   gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
1492
1493   if (!same_type_p (TREE_TYPE (type), void_type_node))
1494     {
1495       e = 1;
1496       error ("%<operator delete%> must return type %qT", void_type_node);
1497     }
1498
1499   if (!args || args == void_list_node
1500       || !same_type_p (TREE_VALUE (args), ptr_type_node))
1501     {
1502       e = 2;
1503       if (args && args != void_list_node)
1504         args = TREE_CHAIN (args);
1505       error ("%<operator delete%> takes type %qT as first parameter",
1506              ptr_type_node);
1507     }
1508   switch (e)
1509   {
1510     case 2:
1511       args = tree_cons (NULL_TREE, ptr_type_node, args);
1512       /* Fall through.  */
1513     case 1:
1514       type = build_exception_variant
1515               (build_function_type (void_type_node, args),
1516                TYPE_RAISES_EXCEPTIONS (type));
1517       /* Fall through.  */
1518     default:;
1519   }
1520
1521   return type;
1522 }
1523 \f
1524 /* DECL is a VAR_DECL for a vtable: walk through the entries in the vtable
1525    and mark them as needed.  */
1526
1527 static void
1528 mark_vtable_entries (tree decl)
1529 {
1530   tree fnaddr;
1531   unsigned HOST_WIDE_INT idx;
1532
1533   FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL (decl)),
1534                               idx, fnaddr)
1535     {
1536       tree fn;
1537
1538       STRIP_NOPS (fnaddr);
1539
1540       if (TREE_CODE (fnaddr) != ADDR_EXPR
1541           && TREE_CODE (fnaddr) != FDESC_EXPR)
1542         /* This entry is an offset: a virtual base class offset, a
1543            virtual call offset, an RTTI offset, etc.  */
1544         continue;
1545
1546       fn = TREE_OPERAND (fnaddr, 0);
1547       TREE_ADDRESSABLE (fn) = 1;
1548       /* When we don't have vcall offsets, we output thunks whenever
1549          we output the vtables that contain them.  With vcall offsets,
1550          we know all the thunks we'll need when we emit a virtual
1551          function, so we emit the thunks there instead.  */
1552       if (DECL_THUNK_P (fn))
1553         use_thunk (fn, /*emit_p=*/0);
1554       mark_used (fn);
1555     }
1556 }
1557
1558 /* Set DECL up to have the closest approximation of "initialized common"
1559    linkage available.  */
1560
1561 void
1562 comdat_linkage (tree decl)
1563 {
1564   if (flag_weak)
1565     make_decl_one_only (decl, cxx_comdat_group (decl));
1566   else if (TREE_CODE (decl) == FUNCTION_DECL
1567            || (TREE_CODE (decl) == VAR_DECL && DECL_ARTIFICIAL (decl)))
1568     /* We can just emit function and compiler-generated variables
1569        statically; having multiple copies is (for the most part) only
1570        a waste of space.
1571
1572        There are two correctness issues, however: the address of a
1573        template instantiation with external linkage should be the
1574        same, independent of what translation unit asks for the
1575        address, and this will not hold when we emit multiple copies of
1576        the function.  However, there's little else we can do.
1577
1578        Also, by default, the typeinfo implementation assumes that
1579        there will be only one copy of the string used as the name for
1580        each type.  Therefore, if weak symbols are unavailable, the
1581        run-time library should perform a more conservative check; it
1582        should perform a string comparison, rather than an address
1583        comparison.  */
1584     TREE_PUBLIC (decl) = 0;
1585   else
1586     {
1587       /* Static data member template instantiations, however, cannot
1588          have multiple copies.  */
1589       if (DECL_INITIAL (decl) == 0
1590           || DECL_INITIAL (decl) == error_mark_node)
1591         DECL_COMMON (decl) = 1;
1592       else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
1593         {
1594           DECL_COMMON (decl) = 1;
1595           DECL_INITIAL (decl) = error_mark_node;
1596         }
1597       else if (!DECL_EXPLICIT_INSTANTIATION (decl))
1598         {
1599           /* We can't do anything useful; leave vars for explicit
1600              instantiation.  */
1601           DECL_EXTERNAL (decl) = 1;
1602           DECL_NOT_REALLY_EXTERN (decl) = 0;
1603         }
1604     }
1605
1606   DECL_COMDAT (decl) = 1;
1607 }
1608
1609 /* For win32 we also want to put explicit instantiations in
1610    linkonce sections, so that they will be merged with implicit
1611    instantiations; otherwise we get duplicate symbol errors.
1612    For Darwin we do not want explicit instantiations to be
1613    linkonce.  */
1614
1615 void
1616 maybe_make_one_only (tree decl)
1617 {
1618   /* We used to say that this was not necessary on targets that support weak
1619      symbols, because the implicit instantiations will defer to the explicit
1620      one.  However, that's not actually the case in SVR4; a strong definition
1621      after a weak one is an error.  Also, not making explicit
1622      instantiations one_only means that we can end up with two copies of
1623      some template instantiations.  */
1624   if (! flag_weak)
1625     return;
1626
1627   /* We can't set DECL_COMDAT on functions, or cp_finish_file will think
1628      we can get away with not emitting them if they aren't used.  We need
1629      to for variables so that cp_finish_decl will update their linkage,
1630      because their DECL_INITIAL may not have been set properly yet.  */
1631
1632   if (!TARGET_WEAK_NOT_IN_ARCHIVE_TOC
1633       || (! DECL_EXPLICIT_INSTANTIATION (decl)
1634           && ! DECL_TEMPLATE_SPECIALIZATION (decl)))
1635     {
1636       make_decl_one_only (decl, cxx_comdat_group (decl));
1637
1638       if (TREE_CODE (decl) == VAR_DECL)
1639         {
1640           DECL_COMDAT (decl) = 1;
1641           /* Mark it needed so we don't forget to emit it.  */
1642           mark_decl_referenced (decl);
1643         }
1644     }
1645 }
1646
1647 /* Returns true iff DECL, a FUNCTION_DECL or VAR_DECL, has vague linkage.
1648    This predicate will give the right answer during parsing of the
1649    function, which other tests may not.  */
1650
1651 bool
1652 vague_linkage_p (tree decl)
1653 {
1654   /* Unfortunately, import_export_decl has not always been called
1655      before the function is processed, so we cannot simply check
1656      DECL_COMDAT.  */
1657   return (DECL_COMDAT (decl)
1658           || (((TREE_CODE (decl) == FUNCTION_DECL
1659                 && DECL_DECLARED_INLINE_P (decl))
1660                || (DECL_LANG_SPECIFIC (decl)
1661                    && DECL_TEMPLATE_INSTANTIATION (decl)))
1662               && TREE_PUBLIC (decl)));
1663 }
1664
1665 /* Determine whether or not we want to specifically import or export CTYPE,
1666    using various heuristics.  */
1667
1668 static void
1669 import_export_class (tree ctype)
1670 {
1671   /* -1 for imported, 1 for exported.  */
1672   int import_export = 0;
1673
1674   /* It only makes sense to call this function at EOF.  The reason is
1675      that this function looks at whether or not the first non-inline
1676      non-abstract virtual member function has been defined in this
1677      translation unit.  But, we can't possibly know that until we've
1678      seen the entire translation unit.  */
1679   gcc_assert (at_eof);
1680
1681   if (CLASSTYPE_INTERFACE_KNOWN (ctype))
1682     return;
1683
1684   /* If MULTIPLE_SYMBOL_SPACES is set and we saw a #pragma interface,
1685      we will have CLASSTYPE_INTERFACE_ONLY set but not
1686      CLASSTYPE_INTERFACE_KNOWN.  In that case, we don't want to use this
1687      heuristic because someone will supply a #pragma implementation
1688      elsewhere, and deducing it here would produce a conflict.  */
1689   if (CLASSTYPE_INTERFACE_ONLY (ctype))
1690     return;
1691
1692   if (lookup_attribute ("dllimport", TYPE_ATTRIBUTES (ctype)))
1693     import_export = -1;
1694   else if (lookup_attribute ("dllexport", TYPE_ATTRIBUTES (ctype)))
1695     import_export = 1;
1696   else if (CLASSTYPE_IMPLICIT_INSTANTIATION (ctype)
1697            && !flag_implicit_templates)
1698     /* For a template class, without -fimplicit-templates, check the
1699        repository.  If the virtual table is assigned to this
1700        translation unit, then export the class; otherwise, import
1701        it.  */
1702       import_export = repo_export_class_p (ctype) ? 1 : -1;
1703   else if (TYPE_POLYMORPHIC_P (ctype))
1704     {
1705       /* The ABI specifies that the virtual table and associated
1706          information are emitted with the key method, if any.  */
1707       tree method = CLASSTYPE_KEY_METHOD (ctype);
1708       /* If weak symbol support is not available, then we must be
1709          careful not to emit the vtable when the key function is
1710          inline.  An inline function can be defined in multiple
1711          translation units.  If we were to emit the vtable in each
1712          translation unit containing a definition, we would get
1713          multiple definition errors at link-time.  */
1714       if (method && (flag_weak || ! DECL_DECLARED_INLINE_P (method)))
1715         import_export = (DECL_REALLY_EXTERN (method) ? -1 : 1);
1716     }
1717
1718   /* When MULTIPLE_SYMBOL_SPACES is set, we cannot count on seeing
1719      a definition anywhere else.  */
1720   if (MULTIPLE_SYMBOL_SPACES && import_export == -1)
1721     import_export = 0;
1722
1723   /* Allow back ends the chance to overrule the decision.  */
1724   if (targetm.cxx.import_export_class)
1725     import_export = targetm.cxx.import_export_class (ctype, import_export);
1726
1727   if (import_export)
1728     {
1729       SET_CLASSTYPE_INTERFACE_KNOWN (ctype);
1730       CLASSTYPE_INTERFACE_ONLY (ctype) = (import_export < 0);
1731     }
1732 }
1733
1734 /* Return true if VAR has already been provided to the back end; in that
1735    case VAR should not be modified further by the front end.  */
1736 static bool
1737 var_finalized_p (tree var)
1738 {
1739   return varpool_node (var)->finalized;
1740 }
1741
1742 /* DECL is a VAR_DECL or FUNCTION_DECL which, for whatever reason,
1743    must be emitted in this translation unit.  Mark it as such.  */
1744
1745 void
1746 mark_needed (tree decl)
1747 {
1748   /* It's possible that we no longer need to set
1749      TREE_SYMBOL_REFERENCED here directly, but doing so is
1750      harmless.  */
1751   TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)) = 1;
1752   mark_decl_referenced (decl);
1753 }
1754
1755 /* DECL is either a FUNCTION_DECL or a VAR_DECL.  This function
1756    returns true if a definition of this entity should be provided in
1757    this object file.  Callers use this function to determine whether
1758    or not to let the back end know that a definition of DECL is
1759    available in this translation unit.  */
1760
1761 bool
1762 decl_needed_p (tree decl)
1763 {
1764   gcc_assert (TREE_CODE (decl) == VAR_DECL
1765               || TREE_CODE (decl) == FUNCTION_DECL);
1766   /* This function should only be called at the end of the translation
1767      unit.  We cannot be sure of whether or not something will be
1768      COMDAT until that point.  */
1769   gcc_assert (at_eof);
1770
1771   /* All entities with external linkage that are not COMDAT should be
1772      emitted; they may be referred to from other object files.  */
1773   if (TREE_PUBLIC (decl) && !DECL_COMDAT (decl))
1774     return true;
1775   /* If this entity was used, let the back end see it; it will decide
1776      whether or not to emit it into the object file.  */
1777   if (TREE_USED (decl)
1778       || (DECL_ASSEMBLER_NAME_SET_P (decl)
1779           && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))))
1780       return true;
1781   /* Functions marked "dllexport" must be emitted so that they are
1782      visible to other DLLs.  */
1783   if (lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))
1784     return true;
1785   /* Otherwise, DECL does not need to be emitted -- yet.  A subsequent
1786      reference to DECL might cause it to be emitted later.  */
1787   return false;
1788 }
1789
1790 /* If necessary, write out the vtables for the dynamic class CTYPE.
1791    Returns true if any vtables were emitted.  */
1792
1793 static bool
1794 maybe_emit_vtables (tree ctype)
1795 {
1796   tree vtbl;
1797   tree primary_vtbl;
1798   int needed = 0;
1799   struct varpool_node *current = NULL, *last = NULL, *first = NULL;
1800
1801   /* If the vtables for this class have already been emitted there is
1802      nothing more to do.  */
1803   primary_vtbl = CLASSTYPE_VTABLES (ctype);
1804   if (var_finalized_p (primary_vtbl))
1805     return false;
1806   /* Ignore dummy vtables made by get_vtable_decl.  */
1807   if (TREE_TYPE (primary_vtbl) == void_type_node)
1808     return false;
1809
1810   /* On some targets, we cannot determine the key method until the end
1811      of the translation unit -- which is when this function is
1812      called.  */
1813   if (!targetm.cxx.key_method_may_be_inline ())
1814     determine_key_method (ctype);
1815
1816   /* See if any of the vtables are needed.  */
1817   for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = DECL_CHAIN (vtbl))
1818     {
1819       import_export_decl (vtbl);
1820       if (DECL_NOT_REALLY_EXTERN (vtbl) && decl_needed_p (vtbl))
1821         needed = 1;
1822     }
1823   if (!needed)
1824     {
1825       /* If the references to this class' vtables are optimized away,
1826          still emit the appropriate debugging information.  See
1827          dfs_debug_mark.  */
1828       if (DECL_COMDAT (primary_vtbl)
1829           && CLASSTYPE_DEBUG_REQUESTED (ctype))
1830         note_debug_info_needed (ctype);
1831       return false;
1832     }
1833
1834   /* The ABI requires that we emit all of the vtables if we emit any
1835      of them.  */
1836   for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = DECL_CHAIN (vtbl))
1837     {
1838       /* Mark entities references from the virtual table as used.  */
1839       mark_vtable_entries (vtbl);
1840
1841       if (TREE_TYPE (DECL_INITIAL (vtbl)) == 0)
1842         {
1843           tree expr = store_init_value (vtbl, DECL_INITIAL (vtbl), LOOKUP_NORMAL);
1844
1845           /* It had better be all done at compile-time.  */
1846           gcc_assert (!expr);
1847         }
1848
1849       /* Write it out.  */
1850       DECL_EXTERNAL (vtbl) = 0;
1851       rest_of_decl_compilation (vtbl, 1, 1);
1852
1853       /* Because we're only doing syntax-checking, we'll never end up
1854          actually marking the variable as written.  */
1855       if (flag_syntax_only)
1856         TREE_ASM_WRITTEN (vtbl) = 1;
1857       else if (DECL_COMDAT (vtbl))
1858         {
1859           current = varpool_node (vtbl);
1860           if (last)
1861             last->same_comdat_group = current;
1862           last = current;
1863           if (!first)
1864             first = current;
1865         }
1866     }
1867
1868   if (first != last)
1869     last->same_comdat_group = first;
1870
1871   /* Since we're writing out the vtable here, also write the debug
1872      info.  */
1873   note_debug_info_needed (ctype);
1874
1875   return true;
1876 }
1877
1878 /* A special return value from type_visibility meaning internal
1879    linkage.  */
1880
1881 enum { VISIBILITY_ANON = VISIBILITY_INTERNAL+1 };
1882
1883 /* walk_tree helper function for type_visibility.  */
1884
1885 static tree
1886 min_vis_r (tree *tp, int *walk_subtrees, void *data)
1887 {
1888   int *vis_p = (int *)data;
1889   if (! TYPE_P (*tp))
1890     {
1891       *walk_subtrees = 0;
1892     }
1893   else if (CLASS_TYPE_P (*tp))
1894     {
1895       if (!TREE_PUBLIC (TYPE_MAIN_DECL (*tp)))
1896         {
1897           *vis_p = VISIBILITY_ANON;
1898           return *tp;
1899         }
1900       else if (CLASSTYPE_VISIBILITY (*tp) > *vis_p)
1901         *vis_p = CLASSTYPE_VISIBILITY (*tp);
1902     }
1903   return NULL;
1904 }
1905
1906 /* Returns the visibility of TYPE, which is the minimum visibility of its
1907    component types.  */
1908
1909 static int
1910 type_visibility (tree type)
1911 {
1912   int vis = VISIBILITY_DEFAULT;
1913   cp_walk_tree_without_duplicates (&type, min_vis_r, &vis);
1914   return vis;
1915 }
1916
1917 /* Limit the visibility of DECL to VISIBILITY, if not explicitly
1918    specified (or if VISIBILITY is static).  */
1919
1920 static bool
1921 constrain_visibility (tree decl, int visibility)
1922 {
1923   if (visibility == VISIBILITY_ANON)
1924     {
1925       /* extern "C" declarations aren't affected by the anonymous
1926          namespace.  */
1927       if (!DECL_EXTERN_C_P (decl))
1928         {
1929           TREE_PUBLIC (decl) = 0;
1930           DECL_WEAK (decl) = 0;
1931           DECL_COMMON (decl) = 0;
1932           DECL_COMDAT_GROUP (decl) = NULL_TREE;
1933           DECL_INTERFACE_KNOWN (decl) = 1;
1934           if (DECL_LANG_SPECIFIC (decl))
1935             DECL_NOT_REALLY_EXTERN (decl) = 1;
1936         }
1937     }
1938   else if (visibility > DECL_VISIBILITY (decl)
1939            && !DECL_VISIBILITY_SPECIFIED (decl))
1940     {
1941       DECL_VISIBILITY (decl) = (enum symbol_visibility) visibility;
1942       return true;
1943     }
1944   return false;
1945 }
1946
1947 /* Constrain the visibility of DECL based on the visibility of its template
1948    arguments.  */
1949
1950 static void
1951 constrain_visibility_for_template (tree decl, tree targs)
1952 {
1953   /* If this is a template instantiation, check the innermost
1954      template args for visibility constraints.  The outer template
1955      args are covered by the class check.  */
1956   tree args = INNERMOST_TEMPLATE_ARGS (targs);
1957   int i;
1958   for (i = TREE_VEC_LENGTH (args); i > 0; --i)
1959     {
1960       int vis = 0;
1961
1962       tree arg = TREE_VEC_ELT (args, i-1);
1963       if (TYPE_P (arg))
1964         vis = type_visibility (arg);
1965       else if (TREE_TYPE (arg) && POINTER_TYPE_P (TREE_TYPE (arg)))
1966         {
1967           STRIP_NOPS (arg);
1968           if (TREE_CODE (arg) == ADDR_EXPR)
1969             arg = TREE_OPERAND (arg, 0);
1970           if (TREE_CODE (arg) == VAR_DECL
1971               || TREE_CODE (arg) == FUNCTION_DECL)
1972             {
1973               if (! TREE_PUBLIC (arg))
1974                 vis = VISIBILITY_ANON;
1975               else
1976                 vis = DECL_VISIBILITY (arg);
1977             }
1978         }
1979       if (vis)
1980         constrain_visibility (decl, vis);
1981     }
1982 }
1983
1984 /* Like c_determine_visibility, but with additional C++-specific
1985    behavior.
1986
1987    Function-scope entities can rely on the function's visibility because
1988    it is set in start_preparsed_function.
1989
1990    Class-scope entities cannot rely on the class's visibility until the end
1991    of the enclosing class definition.
1992
1993    Note that because namespaces have multiple independent definitions,
1994    namespace visibility is handled elsewhere using the #pragma visibility
1995    machinery rather than by decorating the namespace declaration.
1996
1997    The goal is for constraints from the type to give a diagnostic, and
1998    other constraints to be applied silently.  */
1999
2000 void
2001 determine_visibility (tree decl)
2002 {
2003   tree class_type = NULL_TREE;
2004   bool use_template;
2005   bool orig_visibility_specified;
2006   enum symbol_visibility orig_visibility;
2007
2008   /* Remember that all decls get VISIBILITY_DEFAULT when built.  */
2009
2010   /* Only relevant for names with external linkage.  */
2011   if (!TREE_PUBLIC (decl))
2012     return;
2013
2014   /* Cloned constructors and destructors get the same visibility as
2015      the underlying function.  That should be set up in
2016      maybe_clone_body.  */
2017   gcc_assert (!DECL_CLONED_FUNCTION_P (decl));
2018
2019   orig_visibility_specified = DECL_VISIBILITY_SPECIFIED (decl);
2020   orig_visibility = DECL_VISIBILITY (decl);
2021
2022   if (TREE_CODE (decl) == TYPE_DECL)
2023     {
2024       if (CLASS_TYPE_P (TREE_TYPE (decl)))
2025         use_template = CLASSTYPE_USE_TEMPLATE (TREE_TYPE (decl));
2026       else if (TYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
2027         use_template = 1;
2028       else
2029         use_template = 0;
2030     }
2031   else if (DECL_LANG_SPECIFIC (decl))
2032     use_template = DECL_USE_TEMPLATE (decl);
2033   else
2034     use_template = 0;
2035
2036   /* If DECL is a member of a class, visibility specifiers on the
2037      class can influence the visibility of the DECL.  */
2038   if (DECL_CLASS_SCOPE_P (decl))
2039     class_type = DECL_CONTEXT (decl);
2040   else
2041     {
2042       /* Not a class member.  */
2043
2044       /* Virtual tables have DECL_CONTEXT set to their associated class,
2045          so they are automatically handled above.  */
2046       gcc_assert (TREE_CODE (decl) != VAR_DECL
2047                   || !DECL_VTABLE_OR_VTT_P (decl));
2048
2049       if (DECL_FUNCTION_SCOPE_P (decl) && ! DECL_VISIBILITY_SPECIFIED (decl))
2050         {
2051           /* Local statics and classes get the visibility of their
2052              containing function by default, except that
2053              -fvisibility-inlines-hidden doesn't affect them.  */
2054           tree fn = DECL_CONTEXT (decl);
2055           if (DECL_VISIBILITY_SPECIFIED (fn) || ! DECL_CLASS_SCOPE_P (fn))
2056             {
2057               DECL_VISIBILITY (decl) = DECL_VISIBILITY (fn);
2058               DECL_VISIBILITY_SPECIFIED (decl) = 
2059                 DECL_VISIBILITY_SPECIFIED (fn);
2060             }
2061           else
2062             determine_visibility_from_class (decl, DECL_CONTEXT (fn));
2063
2064           /* Local classes in templates have CLASSTYPE_USE_TEMPLATE set,
2065              but have no TEMPLATE_INFO, so don't try to check it.  */
2066           use_template = 0;
2067         }
2068       else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl)
2069                && flag_visibility_ms_compat)
2070         {
2071           /* Under -fvisibility-ms-compat, types are visible by default,
2072              even though their contents aren't.  */
2073           tree underlying_type = TREE_TYPE (DECL_NAME (decl));
2074           int underlying_vis = type_visibility (underlying_type);
2075           if (underlying_vis == VISIBILITY_ANON
2076               || (CLASS_TYPE_P (underlying_type)
2077                   && CLASSTYPE_VISIBILITY_SPECIFIED (underlying_type)))
2078             constrain_visibility (decl, underlying_vis);
2079           else
2080             DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
2081         }
2082       else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl))
2083         {
2084           /* tinfo visibility is based on the type it's for.  */
2085           constrain_visibility
2086             (decl, type_visibility (TREE_TYPE (DECL_NAME (decl))));
2087
2088           /* Give the target a chance to override the visibility associated
2089              with DECL.  */
2090           if (TREE_PUBLIC (decl)
2091               && !DECL_REALLY_EXTERN (decl)
2092               && CLASS_TYPE_P (TREE_TYPE (DECL_NAME (decl)))
2093               && !CLASSTYPE_VISIBILITY_SPECIFIED (TREE_TYPE (DECL_NAME (decl))))
2094             targetm.cxx.determine_class_data_visibility (decl);
2095         }
2096       else if (use_template)
2097         /* Template instantiations and specializations get visibility based
2098            on their template unless they override it with an attribute.  */;
2099       else if (! DECL_VISIBILITY_SPECIFIED (decl))
2100         {
2101           /* Set default visibility to whatever the user supplied with
2102              #pragma GCC visibility or a namespace visibility attribute.  */
2103           DECL_VISIBILITY (decl) = default_visibility;
2104           DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
2105         }
2106     }
2107
2108   if (use_template)
2109     {
2110       /* If the specialization doesn't specify visibility, use the
2111          visibility from the template.  */
2112       tree tinfo = (TREE_CODE (decl) == TYPE_DECL
2113                     ? TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
2114                     : DECL_TEMPLATE_INFO (decl));
2115       tree args = TI_ARGS (tinfo);
2116       
2117       if (args != error_mark_node)
2118         {
2119           int depth = TMPL_ARGS_DEPTH (args);
2120           tree pattern = DECL_TEMPLATE_RESULT (TI_TEMPLATE (tinfo));
2121
2122           if (!DECL_VISIBILITY_SPECIFIED (decl))
2123             {
2124               DECL_VISIBILITY (decl) = DECL_VISIBILITY (pattern);
2125               DECL_VISIBILITY_SPECIFIED (decl)
2126                 = DECL_VISIBILITY_SPECIFIED (pattern);
2127             }
2128
2129           /* FIXME should TMPL_ARGS_DEPTH really return 1 for null input? */
2130           if (args && depth > template_class_depth (class_type))
2131             /* Limit visibility based on its template arguments.  */
2132             constrain_visibility_for_template (decl, args);
2133         }
2134     }
2135
2136   if (class_type)
2137     determine_visibility_from_class (decl, class_type);
2138
2139   if (decl_anon_ns_mem_p (decl))
2140     /* Names in an anonymous namespace get internal linkage.
2141        This might change once we implement export.  */
2142     constrain_visibility (decl, VISIBILITY_ANON);
2143   else if (TREE_CODE (decl) != TYPE_DECL)
2144     {
2145       /* Propagate anonymity from type to decl.  */
2146       int tvis = type_visibility (TREE_TYPE (decl));
2147       if (tvis == VISIBILITY_ANON
2148           || ! DECL_VISIBILITY_SPECIFIED (decl))
2149         constrain_visibility (decl, tvis);
2150     }
2151   else if (no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/true))
2152     /* DR 757: A type without linkage shall not be used as the type of a
2153        variable or function with linkage, unless
2154        o the variable or function has extern "C" linkage (7.5 [dcl.link]), or
2155        o the variable or function is not used (3.2 [basic.def.odr]) or is
2156        defined in the same translation unit.
2157
2158        Since non-extern "C" decls need to be defined in the same
2159        translation unit, we can make the type internal.  */
2160     constrain_visibility (decl, VISIBILITY_ANON);
2161
2162   /* If visibility changed and DECL already has DECL_RTL, ensure
2163      symbol flags are updated.  */
2164   if ((DECL_VISIBILITY (decl) != orig_visibility
2165        || DECL_VISIBILITY_SPECIFIED (decl) != orig_visibility_specified)
2166       && ((TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
2167           || TREE_CODE (decl) == FUNCTION_DECL)
2168       && DECL_RTL_SET_P (decl))
2169     make_decl_rtl (decl);
2170 }
2171
2172 /* By default, static data members and function members receive
2173    the visibility of their containing class.  */
2174
2175 static void
2176 determine_visibility_from_class (tree decl, tree class_type)
2177 {
2178   if (DECL_VISIBILITY_SPECIFIED (decl))
2179     return;
2180
2181   if (visibility_options.inlines_hidden
2182       /* Don't do this for inline templates; specializations might not be
2183          inline, and we don't want them to inherit the hidden
2184          visibility.  We'll set it here for all inline instantiations.  */
2185       && !processing_template_decl
2186       && TREE_CODE (decl) == FUNCTION_DECL
2187       && DECL_DECLARED_INLINE_P (decl)
2188       && (! DECL_LANG_SPECIFIC (decl)
2189           || ! DECL_EXPLICIT_INSTANTIATION (decl)))
2190     DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
2191   else
2192     {
2193       /* Default to the class visibility.  */
2194       DECL_VISIBILITY (decl) = CLASSTYPE_VISIBILITY (class_type);
2195       DECL_VISIBILITY_SPECIFIED (decl)
2196         = CLASSTYPE_VISIBILITY_SPECIFIED (class_type);
2197     }
2198
2199   /* Give the target a chance to override the visibility associated
2200      with DECL.  */
2201   if (TREE_CODE (decl) == VAR_DECL
2202       && (DECL_TINFO_P (decl)
2203           || (DECL_VTABLE_OR_VTT_P (decl)
2204               /* Construction virtual tables are not exported because
2205                  they cannot be referred to from other object files;
2206                  their name is not standardized by the ABI.  */
2207               && !DECL_CONSTRUCTION_VTABLE_P (decl)))
2208       && TREE_PUBLIC (decl)
2209       && !DECL_REALLY_EXTERN (decl)
2210       && !CLASSTYPE_VISIBILITY_SPECIFIED (class_type))
2211     targetm.cxx.determine_class_data_visibility (decl);
2212 }
2213
2214 /* Constrain the visibility of a class TYPE based on the visibility of its
2215    field types.  Warn if any fields require lesser visibility.  */
2216
2217 void
2218 constrain_class_visibility (tree type)
2219 {
2220   tree binfo;
2221   tree t;
2222   int i;
2223
2224   int vis = type_visibility (type);
2225
2226   if (vis == VISIBILITY_ANON
2227       || DECL_IN_SYSTEM_HEADER (TYPE_MAIN_DECL (type)))
2228     return;
2229
2230   /* Don't warn about visibility if the class has explicit visibility.  */
2231   if (CLASSTYPE_VISIBILITY_SPECIFIED (type))
2232     vis = VISIBILITY_INTERNAL;
2233
2234   for (t = TYPE_FIELDS (type); t; t = DECL_CHAIN (t))
2235     if (TREE_CODE (t) == FIELD_DECL && TREE_TYPE (t) != error_mark_node)
2236       {
2237         tree ftype = strip_pointer_or_array_types (TREE_TYPE (t));
2238         int subvis = type_visibility (ftype);
2239
2240         if (subvis == VISIBILITY_ANON)
2241           {
2242             if (!in_main_input_context ())
2243               warning (0, "\
2244 %qT has a field %qD whose type uses the anonymous namespace",
2245                        type, t);
2246           }
2247         else if (MAYBE_CLASS_TYPE_P (ftype)
2248                  && vis < VISIBILITY_HIDDEN
2249                  && subvis >= VISIBILITY_HIDDEN)
2250           warning (OPT_Wattributes, "\
2251 %qT declared with greater visibility than the type of its field %qD",
2252                    type, t);
2253       }
2254
2255   binfo = TYPE_BINFO (type);
2256   for (i = 0; BINFO_BASE_ITERATE (binfo, i, t); ++i)
2257     {
2258       int subvis = type_visibility (TREE_TYPE (t));
2259
2260       if (subvis == VISIBILITY_ANON)
2261         {
2262           if (!in_main_input_context())
2263             warning (0, "\
2264 %qT has a base %qT whose type uses the anonymous namespace",
2265                      type, TREE_TYPE (t));
2266         }
2267       else if (vis < VISIBILITY_HIDDEN
2268                && subvis >= VISIBILITY_HIDDEN)
2269         warning (OPT_Wattributes, "\
2270 %qT declared with greater visibility than its base %qT",
2271                  type, TREE_TYPE (t));
2272     }
2273 }
2274
2275 /* DECL is a FUNCTION_DECL or VAR_DECL.  If the object file linkage
2276    for DECL has not already been determined, do so now by setting
2277    DECL_EXTERNAL, DECL_COMDAT and other related flags.  Until this
2278    function is called entities with vague linkage whose definitions
2279    are available must have TREE_PUBLIC set.
2280
2281    If this function decides to place DECL in COMDAT, it will set
2282    appropriate flags -- but will not clear DECL_EXTERNAL.  It is up to
2283    the caller to decide whether or not to clear DECL_EXTERNAL.  Some
2284    callers defer that decision until it is clear that DECL is actually
2285    required.  */
2286
2287 void
2288 import_export_decl (tree decl)
2289 {
2290   int emit_p;
2291   bool comdat_p;
2292   bool import_p;
2293   tree class_type = NULL_TREE;
2294
2295   if (DECL_INTERFACE_KNOWN (decl))
2296     return;
2297
2298   /* We cannot determine what linkage to give to an entity with vague
2299      linkage until the end of the file.  For example, a virtual table
2300      for a class will be defined if and only if the key method is
2301      defined in this translation unit.  As a further example, consider
2302      that when compiling a translation unit that uses PCH file with
2303      "-frepo" it would be incorrect to make decisions about what
2304      entities to emit when building the PCH; those decisions must be
2305      delayed until the repository information has been processed.  */
2306   gcc_assert (at_eof);
2307   /* Object file linkage for explicit instantiations is handled in
2308      mark_decl_instantiated.  For static variables in functions with
2309      vague linkage, maybe_commonize_var is used.
2310
2311      Therefore, the only declarations that should be provided to this
2312      function are those with external linkage that are:
2313
2314      * implicit instantiations of function templates
2315
2316      * inline function
2317
2318      * implicit instantiations of static data members of class
2319        templates
2320
2321      * virtual tables
2322
2323      * typeinfo objects
2324
2325      Furthermore, all entities that reach this point must have a
2326      definition available in this translation unit.
2327
2328      The following assertions check these conditions.  */
2329   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
2330               || TREE_CODE (decl) == VAR_DECL);
2331   /* Any code that creates entities with TREE_PUBLIC cleared should
2332      also set DECL_INTERFACE_KNOWN.  */
2333   gcc_assert (TREE_PUBLIC (decl));
2334   if (TREE_CODE (decl) == FUNCTION_DECL)
2335     gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
2336                 || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
2337                 || DECL_DECLARED_INLINE_P (decl));
2338   else
2339     gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
2340                 || DECL_VTABLE_OR_VTT_P (decl)
2341                 || DECL_TINFO_P (decl));
2342   /* Check that a definition of DECL is available in this translation
2343      unit.  */
2344   gcc_assert (!DECL_REALLY_EXTERN (decl));
2345
2346   /* Assume that DECL will not have COMDAT linkage.  */
2347   comdat_p = false;
2348   /* Assume that DECL will not be imported into this translation
2349      unit.  */
2350   import_p = false;
2351
2352   /* See if the repository tells us whether or not to emit DECL in
2353      this translation unit.  */
2354   emit_p = repo_emit_p (decl);
2355   if (emit_p == 0)
2356     import_p = true;
2357   else if (emit_p == 1)
2358     {
2359       /* The repository indicates that this entity should be defined
2360          here.  Make sure the back end honors that request.  */
2361       if (TREE_CODE (decl) == VAR_DECL)
2362         mark_needed (decl);
2363       else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)
2364                || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
2365         {
2366           tree clone;
2367           FOR_EACH_CLONE (clone, decl)
2368             mark_needed (clone);
2369         }
2370       else
2371         mark_needed (decl);
2372       /* Output the definition as an ordinary strong definition.  */
2373       DECL_EXTERNAL (decl) = 0;
2374       DECL_INTERFACE_KNOWN (decl) = 1;
2375       return;
2376     }
2377
2378   if (import_p)
2379     /* We have already decided what to do with this DECL; there is no
2380        need to check anything further.  */
2381     ;
2382   else if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
2383     {
2384       class_type = DECL_CONTEXT (decl);
2385       import_export_class (class_type);
2386       if (TYPE_FOR_JAVA (class_type))
2387         import_p = true;
2388       else if (CLASSTYPE_INTERFACE_KNOWN (class_type)
2389                && CLASSTYPE_INTERFACE_ONLY (class_type))
2390         import_p = true;
2391       else if ((!flag_weak || TARGET_WEAK_NOT_IN_ARCHIVE_TOC)
2392                && !CLASSTYPE_USE_TEMPLATE (class_type)
2393                && CLASSTYPE_KEY_METHOD (class_type)
2394                && !DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (class_type)))
2395         /* The ABI requires that all virtual tables be emitted with
2396            COMDAT linkage.  However, on systems where COMDAT symbols
2397            don't show up in the table of contents for a static
2398            archive, or on systems without weak symbols (where we
2399            approximate COMDAT linkage by using internal linkage), the
2400            linker will report errors about undefined symbols because
2401            it will not see the virtual table definition.  Therefore,
2402            in the case that we know that the virtual table will be
2403            emitted in only one translation unit, we make the virtual
2404            table an ordinary definition with external linkage.  */
2405         DECL_EXTERNAL (decl) = 0;
2406       else if (CLASSTYPE_INTERFACE_KNOWN (class_type))
2407         {
2408           /* CLASS_TYPE is being exported from this translation unit,
2409              so DECL should be defined here.  */
2410           if (!flag_weak && CLASSTYPE_EXPLICIT_INSTANTIATION (class_type))
2411             /* If a class is declared in a header with the "extern
2412                template" extension, then it will not be instantiated,
2413                even in translation units that would normally require
2414                it.  Often such classes are explicitly instantiated in
2415                one translation unit.  Therefore, the explicit
2416                instantiation must be made visible to other translation
2417                units.  */
2418             DECL_EXTERNAL (decl) = 0;
2419           else
2420             {
2421               /* The generic C++ ABI says that class data is always
2422                  COMDAT, even if there is a key function.  Some
2423                  variants (e.g., the ARM EABI) says that class data
2424                  only has COMDAT linkage if the class data might be
2425                  emitted in more than one translation unit.  When the
2426                  key method can be inline and is inline, we still have
2427                  to arrange for comdat even though
2428                  class_data_always_comdat is false.  */
2429               if (!CLASSTYPE_KEY_METHOD (class_type)
2430                   || DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (class_type))
2431                   || targetm.cxx.class_data_always_comdat ())
2432                 {
2433                   /* The ABI requires COMDAT linkage.  Normally, we
2434                      only emit COMDAT things when they are needed;
2435                      make sure that we realize that this entity is
2436                      indeed needed.  */
2437                   comdat_p = true;
2438                   mark_needed (decl);
2439                 }
2440             }
2441         }
2442       else if (!flag_implicit_templates
2443                && CLASSTYPE_IMPLICIT_INSTANTIATION (class_type))
2444         import_p = true;
2445       else
2446         comdat_p = true;
2447     }
2448   else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl))
2449     {
2450       tree type = TREE_TYPE (DECL_NAME (decl));
2451       if (CLASS_TYPE_P (type))
2452         {
2453           class_type = type;
2454           import_export_class (type);
2455           if (CLASSTYPE_INTERFACE_KNOWN (type)
2456               && TYPE_POLYMORPHIC_P (type)
2457               && CLASSTYPE_INTERFACE_ONLY (type)
2458               /* If -fno-rtti was specified, then we cannot be sure
2459                  that RTTI information will be emitted with the
2460                  virtual table of the class, so we must emit it
2461                  wherever it is used.  */
2462               && flag_rtti)
2463             import_p = true;
2464           else
2465             {
2466               if (CLASSTYPE_INTERFACE_KNOWN (type)
2467                   && !CLASSTYPE_INTERFACE_ONLY (type))
2468                 {
2469                   comdat_p = (targetm.cxx.class_data_always_comdat ()
2470                               || (CLASSTYPE_KEY_METHOD (type)
2471                                   && DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (type))));
2472                   mark_needed (decl);
2473                   if (!flag_weak)
2474                     {
2475                       comdat_p = false;
2476                       DECL_EXTERNAL (decl) = 0;
2477                     }
2478                 }
2479               else
2480                 comdat_p = true;
2481             }
2482         }
2483       else
2484         comdat_p = true;
2485     }
2486   else if (DECL_TEMPLATE_INSTANTIATION (decl)
2487            || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl))
2488     {
2489       /* DECL is an implicit instantiation of a function or static
2490          data member.  */
2491       if ((flag_implicit_templates
2492            && !flag_use_repository)
2493           || (flag_implicit_inline_templates
2494               && TREE_CODE (decl) == FUNCTION_DECL
2495               && DECL_DECLARED_INLINE_P (decl)))
2496         comdat_p = true;
2497       else
2498         /* If we are not implicitly generating templates, then mark
2499            this entity as undefined in this translation unit.  */
2500         import_p = true;
2501     }
2502   else if (DECL_FUNCTION_MEMBER_P (decl))
2503     {
2504       if (!DECL_DECLARED_INLINE_P (decl))
2505         {
2506           tree ctype = DECL_CONTEXT (decl);
2507           import_export_class (ctype);
2508           if (CLASSTYPE_INTERFACE_KNOWN (ctype))
2509             {
2510               DECL_NOT_REALLY_EXTERN (decl)
2511                 = ! (CLASSTYPE_INTERFACE_ONLY (ctype)
2512                      || (DECL_DECLARED_INLINE_P (decl)
2513                          && ! flag_implement_inlines
2514                          && !DECL_VINDEX (decl)));
2515
2516               if (!DECL_NOT_REALLY_EXTERN (decl))
2517                 DECL_EXTERNAL (decl) = 1;
2518
2519               /* Always make artificials weak.  */
2520               if (DECL_ARTIFICIAL (decl) && flag_weak)
2521                 comdat_p = true;
2522               else
2523                 maybe_make_one_only (decl);
2524             }
2525         }
2526       else
2527         comdat_p = true;
2528     }
2529   else
2530     comdat_p = true;
2531
2532   if (import_p)
2533     {
2534       /* If we are importing DECL into this translation unit, mark is
2535          an undefined here.  */
2536       DECL_EXTERNAL (decl) = 1;
2537       DECL_NOT_REALLY_EXTERN (decl) = 0;
2538     }
2539   else if (comdat_p)
2540     {
2541       /* If we decided to put DECL in COMDAT, mark it accordingly at
2542          this point.  */
2543       comdat_linkage (decl);
2544     }
2545
2546   DECL_INTERFACE_KNOWN (decl) = 1;
2547 }
2548
2549 /* Return an expression that performs the destruction of DECL, which
2550    must be a VAR_DECL whose type has a non-trivial destructor, or is
2551    an array whose (innermost) elements have a non-trivial destructor.  */
2552
2553 tree
2554 build_cleanup (tree decl)
2555 {
2556   tree temp;
2557   tree type = TREE_TYPE (decl);
2558
2559   /* This function should only be called for declarations that really
2560      require cleanups.  */
2561   gcc_assert (!TYPE_HAS_TRIVIAL_DESTRUCTOR (type));
2562
2563   /* Treat all objects with destructors as used; the destructor may do
2564      something substantive.  */
2565   mark_used (decl);
2566
2567   if (TREE_CODE (type) == ARRAY_TYPE)
2568     temp = decl;
2569   else
2570     temp = build_address (decl);
2571   temp = build_delete (TREE_TYPE (temp), temp,
2572                        sfk_complete_destructor,
2573                        LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR, 0);
2574   return temp;
2575 }
2576
2577 /* Returns the initialization guard variable for the variable DECL,
2578    which has static storage duration.  */
2579
2580 tree
2581 get_guard (tree decl)
2582 {
2583   tree sname;
2584   tree guard;
2585
2586   sname = mangle_guard_variable (decl);
2587   guard = IDENTIFIER_GLOBAL_VALUE (sname);
2588   if (! guard)
2589     {
2590       tree guard_type;
2591
2592       /* We use a type that is big enough to contain a mutex as well
2593          as an integer counter.  */
2594       guard_type = targetm.cxx.guard_type ();
2595       guard = build_decl (DECL_SOURCE_LOCATION (decl),
2596                           VAR_DECL, sname, guard_type);
2597
2598       /* The guard should have the same linkage as what it guards.  */
2599       TREE_PUBLIC (guard) = TREE_PUBLIC (decl);
2600       TREE_STATIC (guard) = TREE_STATIC (decl);
2601       DECL_COMMON (guard) = DECL_COMMON (decl);
2602       DECL_COMDAT (guard) = DECL_COMDAT (decl);
2603       if (DECL_ONE_ONLY (decl))
2604         make_decl_one_only (guard, cxx_comdat_group (guard));
2605       if (TREE_PUBLIC (decl))
2606         DECL_WEAK (guard) = DECL_WEAK (decl);
2607       DECL_VISIBILITY (guard) = DECL_VISIBILITY (decl);
2608       DECL_VISIBILITY_SPECIFIED (guard) = DECL_VISIBILITY_SPECIFIED (decl);
2609
2610       DECL_ARTIFICIAL (guard) = 1;
2611       DECL_IGNORED_P (guard) = 1;
2612       TREE_USED (guard) = 1;
2613       pushdecl_top_level_and_finish (guard, NULL_TREE);
2614     }
2615   return guard;
2616 }
2617
2618 /* Return those bits of the GUARD variable that should be set when the
2619    guarded entity is actually initialized.  */
2620
2621 static tree
2622 get_guard_bits (tree guard)
2623 {
2624   if (!targetm.cxx.guard_mask_bit ())
2625     {
2626       /* We only set the first byte of the guard, in order to leave room
2627          for a mutex in the high-order bits.  */
2628       guard = build1 (ADDR_EXPR,
2629                       build_pointer_type (TREE_TYPE (guard)),
2630                       guard);
2631       guard = build1 (NOP_EXPR,
2632                       build_pointer_type (char_type_node),
2633                       guard);
2634       guard = build1 (INDIRECT_REF, char_type_node, guard);
2635     }
2636
2637   return guard;
2638 }
2639
2640 /* Return an expression which determines whether or not the GUARD
2641    variable has already been initialized.  */
2642
2643 tree
2644 get_guard_cond (tree guard)
2645 {
2646   tree guard_value;
2647
2648   /* Check to see if the GUARD is zero.  */
2649   guard = get_guard_bits (guard);
2650
2651   /* Mask off all but the low bit.  */
2652   if (targetm.cxx.guard_mask_bit ())
2653     {
2654       guard_value = integer_one_node;
2655       if (!same_type_p (TREE_TYPE (guard_value), TREE_TYPE (guard)))
2656         guard_value = convert (TREE_TYPE (guard), guard_value);
2657       guard = cp_build_binary_op (input_location,
2658                                   BIT_AND_EXPR, guard, guard_value,
2659                                   tf_warning_or_error);
2660     }
2661
2662   guard_value = integer_zero_node;
2663   if (!same_type_p (TREE_TYPE (guard_value), TREE_TYPE (guard)))
2664     guard_value = convert (TREE_TYPE (guard), guard_value);
2665   return cp_build_binary_op (input_location,
2666                              EQ_EXPR, guard, guard_value,
2667                              tf_warning_or_error);
2668 }
2669
2670 /* Return an expression which sets the GUARD variable, indicating that
2671    the variable being guarded has been initialized.  */
2672
2673 tree
2674 set_guard (tree guard)
2675 {
2676   tree guard_init;
2677
2678   /* Set the GUARD to one.  */
2679   guard = get_guard_bits (guard);
2680   guard_init = integer_one_node;
2681   if (!same_type_p (TREE_TYPE (guard_init), TREE_TYPE (guard)))
2682     guard_init = convert (TREE_TYPE (guard), guard_init);
2683   return cp_build_modify_expr (guard, NOP_EXPR, guard_init, 
2684                                tf_warning_or_error);
2685 }
2686
2687 /* Start the process of running a particular set of global constructors
2688    or destructors.  Subroutine of do_[cd]tors.  */
2689
2690 static tree
2691 start_objects (int method_type, int initp)
2692 {
2693   tree body;
2694   tree fndecl;
2695   char type[14];
2696
2697   /* Make ctor or dtor function.  METHOD_TYPE may be 'I' or 'D'.  */
2698
2699   if (initp != DEFAULT_INIT_PRIORITY)
2700     {
2701       char joiner;
2702
2703 #ifdef JOINER
2704       joiner = JOINER;
2705 #else
2706       joiner = '_';
2707 #endif
2708
2709       sprintf (type, "sub_%c%c%.5u", method_type, joiner, initp);
2710     }
2711   else
2712     sprintf (type, "sub_%c", method_type);
2713
2714   fndecl = build_lang_decl (FUNCTION_DECL,
2715                             get_file_function_name (type),
2716                             build_function_type_list (void_type_node,
2717                                                       NULL_TREE));
2718   start_preparsed_function (fndecl, /*attrs=*/NULL_TREE, SF_PRE_PARSED);
2719
2720   TREE_PUBLIC (current_function_decl) = 0;
2721
2722   /* Mark as artificial because it's not explicitly in the user's
2723      source code.  */
2724   DECL_ARTIFICIAL (current_function_decl) = 1;
2725
2726   /* Mark this declaration as used to avoid spurious warnings.  */
2727   TREE_USED (current_function_decl) = 1;
2728
2729   /* Mark this function as a global constructor or destructor.  */
2730   if (method_type == 'I')
2731     DECL_GLOBAL_CTOR_P (current_function_decl) = 1;
2732   else
2733     DECL_GLOBAL_DTOR_P (current_function_decl) = 1;
2734
2735   body = begin_compound_stmt (BCS_FN_BODY);
2736
2737   return body;
2738 }
2739
2740 /* Finish the process of running a particular set of global constructors
2741    or destructors.  Subroutine of do_[cd]tors.  */
2742
2743 static void
2744 finish_objects (int method_type, int initp, tree body)
2745 {
2746   tree fn;
2747
2748   /* Finish up.  */
2749   finish_compound_stmt (body);
2750   fn = finish_function (0);
2751
2752   if (method_type == 'I')
2753     {
2754       DECL_STATIC_CONSTRUCTOR (fn) = 1;
2755       decl_init_priority_insert (fn, initp);
2756     }
2757   else
2758     {
2759       DECL_STATIC_DESTRUCTOR (fn) = 1;
2760       decl_fini_priority_insert (fn, initp);
2761     }
2762
2763   expand_or_defer_fn (fn);
2764 }
2765
2766 /* The names of the parameters to the function created to handle
2767    initializations and destructions for objects with static storage
2768    duration.  */
2769 #define INITIALIZE_P_IDENTIFIER "__initialize_p"
2770 #define PRIORITY_IDENTIFIER "__priority"
2771
2772 /* The name of the function we create to handle initializations and
2773    destructions for objects with static storage duration.  */
2774 #define SSDF_IDENTIFIER "__static_initialization_and_destruction"
2775
2776 /* The declaration for the __INITIALIZE_P argument.  */
2777 static GTY(()) tree initialize_p_decl;
2778
2779 /* The declaration for the __PRIORITY argument.  */
2780 static GTY(()) tree priority_decl;
2781
2782 /* The declaration for the static storage duration function.  */
2783 static GTY(()) tree ssdf_decl;
2784
2785 /* All the static storage duration functions created in this
2786    translation unit.  */
2787 static GTY(()) VEC(tree,gc) *ssdf_decls;
2788
2789 /* A map from priority levels to information about that priority
2790    level.  There may be many such levels, so efficient lookup is
2791    important.  */
2792 static splay_tree priority_info_map;
2793
2794 /* Begins the generation of the function that will handle all
2795    initialization and destruction of objects with static storage
2796    duration.  The function generated takes two parameters of type
2797    `int': __INITIALIZE_P and __PRIORITY.  If __INITIALIZE_P is
2798    nonzero, it performs initializations.  Otherwise, it performs
2799    destructions.  It only performs those initializations or
2800    destructions with the indicated __PRIORITY.  The generated function
2801    returns no value.
2802
2803    It is assumed that this function will only be called once per
2804    translation unit.  */
2805
2806 static tree
2807 start_static_storage_duration_function (unsigned count)
2808 {
2809   tree type;
2810   tree body;
2811   char id[sizeof (SSDF_IDENTIFIER) + 1 /* '\0' */ + 32];
2812
2813   /* Create the identifier for this function.  It will be of the form
2814      SSDF_IDENTIFIER_<number>.  */
2815   sprintf (id, "%s_%u", SSDF_IDENTIFIER, count);
2816
2817   type = build_function_type_list (void_type_node,
2818                                    integer_type_node, integer_type_node,
2819                                    NULL_TREE);
2820
2821   /* Create the FUNCTION_DECL itself.  */
2822   ssdf_decl = build_lang_decl (FUNCTION_DECL,
2823                                get_identifier (id),
2824                                type);
2825   TREE_PUBLIC (ssdf_decl) = 0;
2826   DECL_ARTIFICIAL (ssdf_decl) = 1;
2827
2828   /* Put this function in the list of functions to be called from the
2829      static constructors and destructors.  */
2830   if (!ssdf_decls)
2831     {
2832       ssdf_decls = VEC_alloc (tree, gc, 32);
2833
2834       /* Take this opportunity to initialize the map from priority
2835          numbers to information about that priority level.  */
2836       priority_info_map = splay_tree_new (splay_tree_compare_ints,
2837                                           /*delete_key_fn=*/0,
2838                                           /*delete_value_fn=*/
2839                                           (splay_tree_delete_value_fn) &free);
2840
2841       /* We always need to generate functions for the
2842          DEFAULT_INIT_PRIORITY so enter it now.  That way when we walk
2843          priorities later, we'll be sure to find the
2844          DEFAULT_INIT_PRIORITY.  */
2845       get_priority_info (DEFAULT_INIT_PRIORITY);
2846     }
2847
2848   VEC_safe_push (tree, gc, ssdf_decls, ssdf_decl);
2849
2850   /* Create the argument list.  */
2851   initialize_p_decl = cp_build_parm_decl
2852     (get_identifier (INITIALIZE_P_IDENTIFIER), integer_type_node);
2853   DECL_CONTEXT (initialize_p_decl) = ssdf_decl;
2854   TREE_USED (initialize_p_decl) = 1;
2855   priority_decl = cp_build_parm_decl
2856     (get_identifier (PRIORITY_IDENTIFIER), integer_type_node);
2857   DECL_CONTEXT (priority_decl) = ssdf_decl;
2858   TREE_USED (priority_decl) = 1;
2859
2860   DECL_CHAIN (initialize_p_decl) = priority_decl;
2861   DECL_ARGUMENTS (ssdf_decl) = initialize_p_decl;
2862
2863   /* Put the function in the global scope.  */
2864   pushdecl (ssdf_decl);
2865
2866   /* Start the function itself.  This is equivalent to declaring the
2867      function as:
2868
2869        static void __ssdf (int __initialize_p, init __priority_p);
2870
2871      It is static because we only need to call this function from the
2872      various constructor and destructor functions for this module.  */
2873   start_preparsed_function (ssdf_decl,
2874                             /*attrs=*/NULL_TREE,
2875                             SF_PRE_PARSED);
2876
2877   /* Set up the scope of the outermost block in the function.  */
2878   body = begin_compound_stmt (BCS_FN_BODY);
2879
2880   return body;
2881 }
2882
2883 /* Finish the generation of the function which performs initialization
2884    and destruction of objects with static storage duration.  After
2885    this point, no more such objects can be created.  */
2886
2887 static void
2888 finish_static_storage_duration_function (tree body)
2889 {
2890   /* Close out the function.  */
2891   finish_compound_stmt (body);
2892   expand_or_defer_fn (finish_function (0));
2893 }
2894
2895 /* Return the information about the indicated PRIORITY level.  If no
2896    code to handle this level has yet been generated, generate the
2897    appropriate prologue.  */
2898
2899 static priority_info
2900 get_priority_info (int priority)
2901 {
2902   priority_info pi;
2903   splay_tree_node n;
2904
2905   n = splay_tree_lookup (priority_info_map,
2906                          (splay_tree_key) priority);
2907   if (!n)
2908     {
2909       /* Create a new priority information structure, and insert it
2910          into the map.  */
2911       pi = XNEW (struct priority_info_s);
2912       pi->initializations_p = 0;
2913       pi->destructions_p = 0;
2914       splay_tree_insert (priority_info_map,
2915                          (splay_tree_key) priority,
2916                          (splay_tree_value) pi);
2917     }
2918   else
2919     pi = (priority_info) n->value;
2920
2921   return pi;
2922 }
2923
2924 /* The effective initialization priority of a DECL.  */
2925
2926 #define DECL_EFFECTIVE_INIT_PRIORITY(decl)                                    \
2927         ((!DECL_HAS_INIT_PRIORITY_P (decl) || DECL_INIT_PRIORITY (decl) == 0) \
2928          ? DEFAULT_INIT_PRIORITY : DECL_INIT_PRIORITY (decl))
2929
2930 /* Whether a DECL needs a guard to protect it against multiple
2931    initialization.  */
2932
2933 #define NEEDS_GUARD_P(decl) (TREE_PUBLIC (decl) && (DECL_COMMON (decl)      \
2934                                                     || DECL_ONE_ONLY (decl) \
2935                                                     || DECL_WEAK (decl)))
2936
2937 /* Called from one_static_initialization_or_destruction(),
2938    via walk_tree.
2939    Walks the initializer list of a global variable and looks for
2940    temporary variables (DECL_NAME() == NULL and DECL_ARTIFICIAL != 0)
2941    and that have their DECL_CONTEXT() == NULL.
2942    For each such temporary variable, set their DECL_CONTEXT() to
2943    the current function. This is necessary because otherwise
2944    some optimizers (enabled by -O2 -fprofile-arcs) might crash
2945    when trying to refer to a temporary variable that does not have
2946    it's DECL_CONTECT() properly set.  */
2947 static tree 
2948 fix_temporary_vars_context_r (tree *node,
2949                               int  *unused ATTRIBUTE_UNUSED,
2950                               void *unused1 ATTRIBUTE_UNUSED)
2951 {
2952   gcc_assert (current_function_decl);
2953
2954   if (TREE_CODE (*node) == BIND_EXPR)
2955     {
2956       tree var;
2957
2958       for (var = BIND_EXPR_VARS (*node); var; var = DECL_CHAIN (var))
2959         if (TREE_CODE (var) == VAR_DECL
2960           && !DECL_NAME (var)
2961           && DECL_ARTIFICIAL (var)
2962           && !DECL_CONTEXT (var))
2963           DECL_CONTEXT (var) = current_function_decl;
2964     }
2965
2966   return NULL_TREE;
2967 }
2968
2969 /* Set up to handle the initialization or destruction of DECL.  If
2970    INITP is nonzero, we are initializing the variable.  Otherwise, we
2971    are destroying it.  */
2972
2973 static void
2974 one_static_initialization_or_destruction (tree decl, tree init, bool initp)
2975 {
2976   tree guard_if_stmt = NULL_TREE;
2977   tree guard;
2978
2979   /* If we are supposed to destruct and there's a trivial destructor,
2980      nothing has to be done.  */
2981   if (!initp
2982       && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2983     return;
2984
2985   /* Trick the compiler into thinking we are at the file and line
2986      where DECL was declared so that error-messages make sense, and so
2987      that the debugger will show somewhat sensible file and line
2988      information.  */
2989   input_location = DECL_SOURCE_LOCATION (decl);
2990
2991   /* Make sure temporary variables in the initialiser all have
2992      their DECL_CONTEXT() set to a value different from NULL_TREE.
2993      This can happen when global variables initialisers are built.
2994      In that case, the DECL_CONTEXT() of the global variables _AND_ of all 
2995      the temporary variables that might have been generated in the
2996      accompagning initialisers is NULL_TREE, meaning the variables have been
2997      declared in the global namespace.
2998      What we want to do here is to fix that and make sure the DECL_CONTEXT()
2999      of the temporaries are set to the current function decl.  */
3000   cp_walk_tree_without_duplicates (&init,
3001                                    fix_temporary_vars_context_r,
3002                                    NULL);
3003
3004   /* Because of:
3005
3006        [class.access.spec]
3007
3008        Access control for implicit calls to the constructors,
3009        the conversion functions, or the destructor called to
3010        create and destroy a static data member is performed as
3011        if these calls appeared in the scope of the member's
3012        class.
3013
3014      we pretend we are in a static member function of the class of
3015      which the DECL is a member.  */
3016   if (member_p (decl))
3017     {
3018       DECL_CONTEXT (current_function_decl) = DECL_CONTEXT (decl);
3019       DECL_STATIC_FUNCTION_P (current_function_decl) = 1;
3020     }
3021
3022   /* Assume we don't need a guard.  */
3023   guard = NULL_TREE;
3024   /* We need a guard if this is an object with external linkage that
3025      might be initialized in more than one place.  (For example, a
3026      static data member of a template, when the data member requires
3027      construction.)  */
3028   if (NEEDS_GUARD_P (decl))
3029     {
3030       tree guard_cond;
3031
3032       guard = get_guard (decl);
3033
3034       /* When using __cxa_atexit, we just check the GUARD as we would
3035          for a local static.  */
3036       if (flag_use_cxa_atexit)
3037         {
3038           /* When using __cxa_atexit, we never try to destroy
3039              anything from a static destructor.  */
3040           gcc_assert (initp);
3041           guard_cond = get_guard_cond (guard);
3042         }
3043       /* If we don't have __cxa_atexit, then we will be running
3044          destructors from .fini sections, or their equivalents.  So,
3045          we need to know how many times we've tried to initialize this
3046          object.  We do initializations only if the GUARD is zero,
3047          i.e., if we are the first to initialize the variable.  We do
3048          destructions only if the GUARD is one, i.e., if we are the
3049          last to destroy the variable.  */
3050       else if (initp)
3051         guard_cond
3052           = cp_build_binary_op (input_location,
3053                                 EQ_EXPR,
3054                                 cp_build_unary_op (PREINCREMENT_EXPR,
3055                                                    guard,
3056                                                    /*noconvert=*/1,
3057                                                    tf_warning_or_error),
3058                                 integer_one_node,
3059                                 tf_warning_or_error);
3060       else
3061         guard_cond
3062           = cp_build_binary_op (input_location,
3063                                 EQ_EXPR,
3064                                 cp_build_unary_op (PREDECREMENT_EXPR,
3065                                                    guard,
3066                                                    /*noconvert=*/1,
3067                                                    tf_warning_or_error),
3068                                 integer_zero_node,
3069                                 tf_warning_or_error);
3070
3071       guard_if_stmt = begin_if_stmt ();
3072       finish_if_stmt_cond (guard_cond, guard_if_stmt);
3073     }
3074
3075
3076   /* If we're using __cxa_atexit, we have not already set the GUARD,
3077      so we must do so now.  */
3078   if (guard && initp && flag_use_cxa_atexit)
3079     finish_expr_stmt (set_guard (guard));
3080
3081   /* Perform the initialization or destruction.  */
3082   if (initp)
3083     {
3084       if (init)
3085         finish_expr_stmt (init);
3086
3087       /* If we're using __cxa_atexit, register a function that calls the
3088          destructor for the object.  */
3089       if (flag_use_cxa_atexit)
3090         finish_expr_stmt (register_dtor_fn (decl));
3091     }
3092   else
3093     finish_expr_stmt (build_cleanup (decl));
3094
3095   /* Finish the guard if-stmt, if necessary.  */
3096   if (guard)
3097     {
3098       finish_then_clause (guard_if_stmt);
3099       finish_if_stmt (guard_if_stmt);
3100     }
3101
3102   /* Now that we're done with DECL we don't need to pretend to be a
3103      member of its class any longer.  */
3104   DECL_CONTEXT (current_function_decl) = NULL_TREE;
3105   DECL_STATIC_FUNCTION_P (current_function_decl) = 0;
3106 }
3107
3108 /* Generate code to do the initialization or destruction of the decls in VARS,
3109    a TREE_LIST of VAR_DECL with static storage duration.
3110    Whether initialization or destruction is performed is specified by INITP.  */
3111
3112 static void
3113 do_static_initialization_or_destruction (tree vars, bool initp)
3114 {
3115   tree node, init_if_stmt, cond;
3116
3117   /* Build the outer if-stmt to check for initialization or destruction.  */
3118   init_if_stmt = begin_if_stmt ();
3119   cond = initp ? integer_one_node : integer_zero_node;
3120   cond = cp_build_binary_op (input_location,
3121                              EQ_EXPR,
3122                              initialize_p_decl,
3123                              cond,
3124                              tf_warning_or_error);
3125   finish_if_stmt_cond (cond, init_if_stmt);
3126
3127   node = vars;
3128   do {
3129     tree decl = TREE_VALUE (node);
3130     tree priority_if_stmt;
3131     int priority;
3132     priority_info pi;
3133
3134     /* If we don't need a destructor, there's nothing to do.  Avoid
3135        creating a possibly empty if-stmt.  */
3136     if (!initp && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
3137       {
3138         node = TREE_CHAIN (node);
3139         continue;
3140       }
3141
3142     /* Remember that we had an initialization or finalization at this
3143        priority.  */
3144     priority = DECL_EFFECTIVE_INIT_PRIORITY (decl);
3145     pi = get_priority_info (priority);
3146     if (initp)
3147       pi->initializations_p = 1;
3148     else
3149       pi->destructions_p = 1;
3150
3151     /* Conditionalize this initialization on being in the right priority
3152        and being initializing/finalizing appropriately.  */
3153     priority_if_stmt = begin_if_stmt ();
3154     cond = cp_build_binary_op (input_location,
3155                                EQ_EXPR,
3156                                priority_decl,
3157                                build_int_cst (NULL_TREE, priority),
3158                                tf_warning_or_error);
3159     finish_if_stmt_cond (cond, priority_if_stmt);
3160
3161     /* Process initializers with same priority.  */
3162     for (; node
3163            && DECL_EFFECTIVE_INIT_PRIORITY (TREE_VALUE (node)) == priority;
3164          node = TREE_CHAIN (node))
3165       /* Do one initialization or destruction.  */
3166       one_static_initialization_or_destruction (TREE_VALUE (node),
3167                                                 TREE_PURPOSE (node), initp);
3168
3169     /* Finish up the priority if-stmt body.  */
3170     finish_then_clause (priority_if_stmt);
3171     finish_if_stmt (priority_if_stmt);
3172
3173   } while (node);
3174
3175   /* Finish up the init/destruct if-stmt body.  */
3176   finish_then_clause (init_if_stmt);
3177   finish_if_stmt (init_if_stmt);
3178 }
3179
3180 /* VARS is a list of variables with static storage duration which may
3181    need initialization and/or finalization.  Remove those variables
3182    that don't really need to be initialized or finalized, and return
3183    the resulting list.  The order in which the variables appear in
3184    VARS is in reverse order of the order in which they should actually
3185    be initialized.  The list we return is in the unreversed order;
3186    i.e., the first variable should be initialized first.  */
3187
3188 static tree
3189 prune_vars_needing_no_initialization (tree *vars)
3190 {
3191   tree *var = vars;
3192   tree result = NULL_TREE;
3193
3194   while (*var)
3195     {
3196       tree t = *var;
3197       tree decl = TREE_VALUE (t);
3198       tree init = TREE_PURPOSE (t);
3199
3200       /* Deal gracefully with error.  */
3201       if (decl == error_mark_node)
3202         {
3203           var = &TREE_CHAIN (t);
3204           continue;
3205         }
3206
3207       /* The only things that can be initialized are variables.  */
3208       gcc_assert (TREE_CODE (decl) == VAR_DECL);
3209
3210       /* If this object is not defined, we don't need to do anything
3211          here.  */
3212       if (DECL_EXTERNAL (decl))
3213         {
3214           var = &TREE_CHAIN (t);
3215           continue;
3216         }
3217
3218       /* Also, if the initializer already contains errors, we can bail
3219          out now.  */
3220       if (init && TREE_CODE (init) == TREE_LIST
3221           && value_member (error_mark_node, init))
3222         {
3223           var = &TREE_CHAIN (t);
3224           continue;
3225         }
3226
3227       /* This variable is going to need initialization and/or
3228          finalization, so we add it to the list.  */
3229       *var = TREE_CHAIN (t);
3230       TREE_CHAIN (t) = result;
3231       result = t;
3232     }
3233
3234   return result;
3235 }
3236
3237 /* Make sure we have told the back end about all the variables in
3238    VARS.  */
3239
3240 static void
3241 write_out_vars (tree vars)
3242 {
3243   tree v;
3244
3245   for (v = vars; v; v = TREE_CHAIN (v))
3246     {
3247       tree var = TREE_VALUE (v);
3248       if (!var_finalized_p (var))
3249         {
3250           import_export_decl (var);
3251           rest_of_decl_compilation (var, 1, 1);
3252         }
3253     }
3254 }
3255
3256 /* Generate a static constructor (if CONSTRUCTOR_P) or destructor
3257    (otherwise) that will initialize all global objects with static
3258    storage duration having the indicated PRIORITY.  */
3259
3260 static void
3261 generate_ctor_or_dtor_function (bool constructor_p, int priority,
3262                                 location_t *locus)
3263 {
3264   char function_key;
3265   tree fndecl;
3266   tree body;
3267   size_t i;
3268
3269   input_location = *locus;
3270   /* ??? */
3271   /* Was: locus->line++; */
3272
3273   /* We use `I' to indicate initialization and `D' to indicate
3274      destruction.  */
3275   function_key = constructor_p ? 'I' : 'D';
3276
3277   /* We emit the function lazily, to avoid generating empty
3278      global constructors and destructors.  */
3279   body = NULL_TREE;
3280
3281   /* For Objective-C++, we may need to initialize metadata found in this module.
3282      This must be done _before_ any other static initializations.  */
3283   if (c_dialect_objc () && (priority == DEFAULT_INIT_PRIORITY)
3284       && constructor_p && objc_static_init_needed_p ())
3285     {
3286       body = start_objects (function_key, priority);
3287       objc_generate_static_init_call (NULL_TREE);
3288     }
3289
3290   /* Call the static storage duration function with appropriate
3291      arguments.  */
3292   FOR_EACH_VEC_ELT (tree, ssdf_decls, i, fndecl)
3293     {
3294       /* Calls to pure or const functions will expand to nothing.  */
3295       if (! (flags_from_decl_or_type (fndecl) & (ECF_CONST | ECF_PURE)))
3296         {
3297           tree call;
3298
3299           if (! body)
3300             body = start_objects (function_key, priority);
3301
3302           call = cp_build_function_call_nary (fndecl, tf_warning_or_error,
3303                                               build_int_cst (NULL_TREE,
3304                                                              constructor_p),
3305                                               build_int_cst (NULL_TREE,
3306                                                              priority),
3307                                               NULL_TREE);
3308           finish_expr_stmt (call);
3309         }
3310     }
3311
3312   /* Close out the function.  */
3313   if (body)
3314     finish_objects (function_key, priority, body);
3315 }
3316
3317 /* Generate constructor and destructor functions for the priority
3318    indicated by N.  */
3319
3320 static int
3321 generate_ctor_and_dtor_functions_for_priority (splay_tree_node n, void * data)
3322 {
3323   location_t *locus = (location_t *) data;
3324   int priority = (int) n->key;
3325   priority_info pi = (priority_info) n->value;
3326
3327   /* Generate the functions themselves, but only if they are really
3328      needed.  */
3329   if (pi->initializations_p)
3330     generate_ctor_or_dtor_function (/*constructor_p=*/true, priority, locus);
3331   if (pi->destructions_p)
3332     generate_ctor_or_dtor_function (/*constructor_p=*/false, priority, locus);
3333
3334   /* Keep iterating.  */
3335   return 0;
3336 }
3337
3338 /* Called via LANGHOOK_CALLGRAPH_ANALYZE_EXPR.  It is supposed to mark
3339    decls referenced from front-end specific constructs; it will be called
3340    only for language-specific tree nodes.
3341
3342    Here we must deal with member pointers.  */
3343
3344 tree
3345 cxx_callgraph_analyze_expr (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED)
3346 {
3347   tree t = *tp;
3348
3349   switch (TREE_CODE (t))
3350     {
3351     case PTRMEM_CST:
3352       if (TYPE_PTRMEMFUNC_P (TREE_TYPE (t)))
3353         cgraph_mark_address_taken_node (cgraph_node (PTRMEM_CST_MEMBER (t)));
3354       break;
3355     case BASELINK:
3356       if (TREE_CODE (BASELINK_FUNCTIONS (t)) == FUNCTION_DECL)
3357         cgraph_mark_address_taken_node (cgraph_node (BASELINK_FUNCTIONS (t)));
3358       break;
3359     case VAR_DECL:
3360       if (DECL_CONTEXT (t)
3361           && flag_use_repository
3362           && TREE_CODE (DECL_CONTEXT (t)) == FUNCTION_DECL)
3363         /* If we need a static variable in a function, then we
3364            need the containing function.  */
3365         mark_decl_referenced (DECL_CONTEXT (t));
3366       break;
3367     default:
3368       break;
3369     }
3370
3371   return NULL;
3372 }
3373
3374 /* Java requires that we be able to reference a local address for a
3375    method, and not be confused by PLT entries.  If hidden aliases are
3376    supported, collect and return all the functions for which we should
3377    emit a hidden alias.  */
3378
3379 static struct pointer_set_t *
3380 collect_candidates_for_java_method_aliases (void)
3381 {
3382   struct cgraph_node *node;
3383   struct pointer_set_t *candidates = NULL;
3384
3385 #ifndef HAVE_GAS_HIDDEN
3386   return candidates;
3387 #endif
3388
3389   for (node = cgraph_nodes; node ; node = node->next)
3390     {
3391       tree fndecl = node->decl;
3392
3393       if (DECL_CONTEXT (fndecl)
3394           && TYPE_P (DECL_CONTEXT (fndecl))
3395           && TYPE_FOR_JAVA (DECL_CONTEXT (fndecl))
3396           && TARGET_USE_LOCAL_THUNK_ALIAS_P (fndecl))
3397         {
3398           if (candidates == NULL)
3399             candidates = pointer_set_create ();
3400           pointer_set_insert (candidates, fndecl);
3401         }
3402     }
3403
3404   return candidates;
3405 }
3406
3407
3408 /* Java requires that we be able to reference a local address for a
3409    method, and not be confused by PLT entries.  If hidden aliases are
3410    supported, emit one for each java function that we've emitted.
3411    CANDIDATES is the set of FUNCTION_DECLs that were gathered
3412    by collect_candidates_for_java_method_aliases.  */
3413
3414 static void
3415 build_java_method_aliases (struct pointer_set_t *candidates)
3416 {
3417   struct cgraph_node *node;
3418
3419 #ifndef HAVE_GAS_HIDDEN
3420   return;
3421 #endif
3422
3423   for (node = cgraph_nodes; node ; node = node->next)
3424     {
3425       tree fndecl = node->decl;
3426
3427       if (TREE_ASM_WRITTEN (fndecl)
3428           && pointer_set_contains (candidates, fndecl))
3429         {
3430           /* Mangle the name in a predictable way; we need to reference
3431              this from a java compiled object file.  */
3432           tree oid, nid, alias;
3433           const char *oname;
3434           char *nname;
3435
3436           oid = DECL_ASSEMBLER_NAME (fndecl);
3437           oname = IDENTIFIER_POINTER (oid);
3438           gcc_assert (oname[0] == '_' && oname[1] == 'Z');
3439           nname = ACONCAT (("_ZGA", oname+2, NULL));
3440           nid = get_identifier (nname);
3441
3442           alias = make_alias_for (fndecl, nid);
3443           TREE_PUBLIC (alias) = 1;
3444           DECL_VISIBILITY (alias) = VISIBILITY_HIDDEN;
3445
3446           assemble_alias (alias, oid);
3447         }
3448     }
3449 }
3450
3451 /* Return C++ property of T, based on given operation OP.  */
3452
3453 static int
3454 cpp_check (tree t, cpp_operation op)
3455 {
3456   switch (op)
3457     {
3458       case IS_ABSTRACT:
3459         return DECL_PURE_VIRTUAL_P (t);
3460       case IS_CONSTRUCTOR:
3461         return DECL_CONSTRUCTOR_P (t);
3462       case IS_DESTRUCTOR:
3463         return DECL_DESTRUCTOR_P (t);
3464       case IS_COPY_CONSTRUCTOR:
3465         return DECL_COPY_CONSTRUCTOR_P (t);
3466       case IS_TEMPLATE:
3467         return TREE_CODE (t) == TEMPLATE_DECL;
3468       default:
3469         return 0;
3470     }
3471 }
3472
3473 /* Collect source file references recursively, starting from NAMESPC.  */
3474
3475 static void 
3476 collect_source_refs (tree namespc) 
3477 {
3478   tree t;
3479
3480   if (!namespc) 
3481     return;
3482
3483   /* Iterate over names in this name space.  */
3484   for (t = NAMESPACE_LEVEL (namespc)->names; t; t = TREE_CHAIN (t))
3485     if (!DECL_IS_BUILTIN (t) )
3486       collect_source_ref (DECL_SOURCE_FILE (t));
3487   
3488   /* Dump siblings, if any */
3489   collect_source_refs (TREE_CHAIN (namespc));
3490
3491   /* Dump children, if any */
3492   collect_source_refs (NAMESPACE_LEVEL (namespc)->namespaces);
3493 }
3494
3495 /* Collect decls relevant to SOURCE_FILE from all namespaces recursively,
3496    starting from NAMESPC.  */
3497
3498 static void
3499 collect_ada_namespace (tree namespc, const char *source_file)
3500 {
3501   if (!namespc)
3502     return;
3503
3504   /* Collect decls from this namespace */
3505   collect_ada_nodes (NAMESPACE_LEVEL (namespc)->names, source_file);
3506
3507   /* Collect siblings, if any */
3508   collect_ada_namespace (TREE_CHAIN (namespc), source_file);
3509
3510   /* Collect children, if any */
3511   collect_ada_namespace (NAMESPACE_LEVEL (namespc)->namespaces, source_file);
3512 }
3513
3514 /* Returns true iff there is a definition available for variable or
3515    function DECL.  */
3516
3517 static bool
3518 decl_defined_p (tree decl)
3519 {
3520   if (TREE_CODE (decl) == FUNCTION_DECL)
3521     return (DECL_INITIAL (decl) != NULL_TREE);
3522   else
3523     {
3524       gcc_assert (TREE_CODE (decl) == VAR_DECL);
3525       return !DECL_EXTERNAL (decl);
3526     }
3527 }
3528
3529 /* Nonzero for a VAR_DECL whose value can be used in a constant expression.
3530
3531       [expr.const]
3532
3533       An integral constant-expression can only involve ... const
3534       variables of integral or enumeration types initialized with
3535       constant expressions ...
3536
3537       C++0x also allows constexpr variables and temporaries initialized
3538       with constant expressions.  We handle the former here, but the latter
3539       are just folded away in cxx_eval_constant_expression.
3540
3541    The standard does not require that the expression be non-volatile.
3542    G++ implements the proposed correction in DR 457.  */
3543
3544 bool
3545 decl_constant_var_p (tree decl)
3546 {
3547   bool ret;
3548   tree type = TREE_TYPE (decl);
3549   if (TREE_CODE (decl) != VAR_DECL)
3550     return false;
3551   if (DECL_DECLARED_CONSTEXPR_P (decl))
3552     ret = true;
3553   else if (CP_TYPE_CONST_NON_VOLATILE_P (type)
3554            && INTEGRAL_OR_ENUMERATION_TYPE_P (type))
3555     {
3556       /* We don't know if a template static data member is initialized with
3557          a constant expression until we instantiate its initializer.  */
3558       mark_used (decl);
3559       ret = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl);
3560     }
3561   else
3562     ret = false;
3563
3564   gcc_assert (!ret || DECL_INITIAL (decl));
3565   return ret;
3566 }
3567
3568 /* Returns true if DECL could be a symbolic constant variable, depending on
3569    its initializer.  */
3570
3571 bool
3572 decl_maybe_constant_var_p (tree decl)
3573 {
3574   tree type = TREE_TYPE (decl);
3575   if (TREE_CODE (decl) != VAR_DECL)
3576     return false;
3577   if (DECL_DECLARED_CONSTEXPR_P (decl))
3578     return true;
3579   return (CP_TYPE_CONST_NON_VOLATILE_P (type)
3580           && INTEGRAL_OR_ENUMERATION_TYPE_P (type));
3581 }
3582
3583 /* Complain that DECL uses a type with no linkage but is never defined.  */
3584
3585 static void
3586 no_linkage_error (tree decl)
3587 {
3588   tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
3589   if (TYPE_ANONYMOUS_P (t))
3590     {
3591       permerror (0, "%q+#D, declared using anonymous type, "
3592                  "is used but never defined", decl);
3593       if (is_typedef_decl (TYPE_NAME (t)))
3594         permerror (0, "%q+#D does not refer to the unqualified type, "
3595                    "so it is not used for linkage", TYPE_NAME (t));
3596     }
3597   else
3598     permerror (0, "%q+#D, declared using local type %qT, "
3599                "is used but never defined", decl, t);
3600 }
3601
3602 /* Collect declarations from all namespaces relevant to SOURCE_FILE.  */
3603
3604 static void
3605 collect_all_refs (const char *source_file)
3606 {
3607   collect_ada_namespace (global_namespace, source_file);
3608 }
3609
3610 /* This routine is called at the end of compilation.
3611    Its job is to create all the code needed to initialize and
3612    destroy the global aggregates.  We do the destruction
3613    first, since that way we only need to reverse the decls once.  */
3614
3615 void
3616 cp_write_global_declarations (void)
3617 {
3618   tree vars;
3619   bool reconsider;
3620   size_t i;
3621   location_t locus;
3622   unsigned ssdf_count = 0;
3623   int retries = 0;
3624   tree decl;
3625   struct pointer_set_t *candidates;
3626
3627   locus = input_location;
3628   at_eof = 1;
3629
3630   /* Bad parse errors.  Just forget about it.  */
3631   if (! global_bindings_p () || current_class_type
3632       || !VEC_empty (tree,decl_namespace_list))
3633     return;
3634
3635   if (pch_file)
3636     c_common_write_pch ();
3637
3638   /* Handle -fdump-ada-spec[-slim] */
3639   if (dump_enabled_p (TDI_ada))
3640     {
3641       if (get_dump_file_info (TDI_ada)->flags & TDF_SLIM)
3642         collect_source_ref (main_input_filename);
3643       else
3644         collect_source_refs (global_namespace);
3645
3646       dump_ada_specs (collect_all_refs, cpp_check);
3647     }
3648
3649   /* FIXME - huh?  was  input_line -= 1;*/
3650
3651   /* We now have to write out all the stuff we put off writing out.
3652      These include:
3653
3654        o Template specializations that we have not yet instantiated,
3655          but which are needed.
3656        o Initialization and destruction for non-local objects with
3657          static storage duration.  (Local objects with static storage
3658          duration are initialized when their scope is first entered,
3659          and are cleaned up via atexit.)
3660        o Virtual function tables.
3661
3662      All of these may cause others to be needed.  For example,
3663      instantiating one function may cause another to be needed, and
3664      generating the initializer for an object may cause templates to be
3665      instantiated, etc., etc.  */
3666
3667   timevar_push (TV_VARCONST);
3668
3669   emit_support_tinfos ();
3670
3671   do
3672     {
3673       tree t;
3674       tree decl;
3675
3676       reconsider = false;
3677
3678       /* If there are templates that we've put off instantiating, do
3679          them now.  */
3680       instantiate_pending_templates (retries);
3681       ggc_collect ();
3682
3683       /* Write out virtual tables as required.  Note that writing out
3684          the virtual table for a template class may cause the
3685          instantiation of members of that class.  If we write out
3686          vtables then we remove the class from our list so we don't
3687          have to look at it again.  */
3688
3689       while (keyed_classes != NULL_TREE
3690              && maybe_emit_vtables (TREE_VALUE (keyed_classes)))
3691         {
3692           reconsider = true;
3693           keyed_classes = TREE_CHAIN (keyed_classes);
3694         }
3695
3696       t = keyed_classes;
3697       if (t != NULL_TREE)
3698         {
3699           tree next = TREE_CHAIN (t);
3700
3701           while (next)
3702             {
3703               if (maybe_emit_vtables (TREE_VALUE (next)))
3704                 {
3705                   reconsider = true;
3706                   TREE_CHAIN (t) = TREE_CHAIN (next);
3707                 }
3708               else
3709                 t = next;
3710
3711               next = TREE_CHAIN (t);
3712             }
3713         }
3714
3715       /* Write out needed type info variables.  We have to be careful
3716          looping through unemitted decls, because emit_tinfo_decl may
3717          cause other variables to be needed. New elements will be
3718          appended, and we remove from the vector those that actually
3719          get emitted.  */
3720       for (i = VEC_length (tree, unemitted_tinfo_decls);
3721            VEC_iterate (tree, unemitted_tinfo_decls, --i, t);)
3722         if (emit_tinfo_decl (t))
3723           {
3724             reconsider = true;
3725             VEC_unordered_remove (tree, unemitted_tinfo_decls, i);
3726           }
3727
3728       /* The list of objects with static storage duration is built up
3729          in reverse order.  We clear STATIC_AGGREGATES so that any new
3730          aggregates added during the initialization of these will be
3731          initialized in the correct order when we next come around the
3732          loop.  */
3733       vars = prune_vars_needing_no_initialization (&static_aggregates);
3734
3735       if (vars)
3736         {
3737           /* We need to start a new initialization function each time
3738              through the loop.  That's because we need to know which
3739              vtables have been referenced, and TREE_SYMBOL_REFERENCED
3740              isn't computed until a function is finished, and written
3741              out.  That's a deficiency in the back end.  When this is
3742              fixed, these initialization functions could all become
3743              inline, with resulting performance improvements.  */
3744           tree ssdf_body;
3745
3746           /* Set the line and file, so that it is obviously not from
3747              the source file.  */
3748           input_location = locus;
3749           ssdf_body = start_static_storage_duration_function (ssdf_count);
3750
3751           /* Make sure the back end knows about all the variables.  */
3752           write_out_vars (vars);
3753
3754           /* First generate code to do all the initializations.  */
3755           if (vars)
3756             do_static_initialization_or_destruction (vars, /*initp=*/true);
3757
3758           /* Then, generate code to do all the destructions.  Do these
3759              in reverse order so that the most recently constructed
3760              variable is the first destroyed.  If we're using
3761              __cxa_atexit, then we don't need to do this; functions
3762              were registered at initialization time to destroy the
3763              local statics.  */
3764           if (!flag_use_cxa_atexit && vars)
3765             {
3766               vars = nreverse (vars);
3767               do_static_initialization_or_destruction (vars, /*initp=*/false);
3768             }
3769           else
3770             vars = NULL_TREE;
3771
3772           /* Finish up the static storage duration function for this
3773              round.  */
3774           input_location = locus;
3775           finish_static_storage_duration_function (ssdf_body);
3776
3777           /* All those initializations and finalizations might cause
3778              us to need more inline functions, more template
3779              instantiations, etc.  */
3780           reconsider = true;
3781           ssdf_count++;
3782           /* ??? was:  locus.line++; */
3783         }
3784
3785       /* Go through the set of inline functions whose bodies have not
3786          been emitted yet.  If out-of-line copies of these functions
3787          are required, emit them.  */
3788       FOR_EACH_VEC_ELT (tree, deferred_fns, i, decl)
3789         {
3790           /* Does it need synthesizing?  */
3791           if (DECL_DEFAULTED_FN (decl) && ! DECL_INITIAL (decl)
3792               && (! DECL_REALLY_EXTERN (decl) || possibly_inlined_p (decl)))
3793             {
3794               /* Even though we're already at the top-level, we push
3795                  there again.  That way, when we pop back a few lines
3796                  hence, all of our state is restored.  Otherwise,
3797                  finish_function doesn't clean things up, and we end
3798                  up with CURRENT_FUNCTION_DECL set.  */
3799               push_to_top_level ();
3800               /* The decl's location will mark where it was first
3801                  needed.  Save that so synthesize method can indicate
3802                  where it was needed from, in case of error  */
3803               input_location = DECL_SOURCE_LOCATION (decl);
3804               synthesize_method (decl);
3805               pop_from_top_level ();
3806               reconsider = true;
3807             }
3808
3809           if (!DECL_SAVED_TREE (decl))
3810             continue;
3811
3812           /* We lie to the back end, pretending that some functions
3813              are not defined when they really are.  This keeps these
3814              functions from being put out unnecessarily.  But, we must
3815              stop lying when the functions are referenced, or if they
3816              are not comdat since they need to be put out now.  If
3817              DECL_INTERFACE_KNOWN, then we have already set
3818              DECL_EXTERNAL appropriately, so there's no need to check
3819              again, and we do not want to clear DECL_EXTERNAL if a
3820              previous call to import_export_decl set it.
3821
3822              This is done in a separate for cycle, because if some
3823              deferred function is contained in another deferred
3824              function later in deferred_fns varray,
3825              rest_of_compilation would skip this function and we
3826              really cannot expand the same function twice.  */
3827           import_export_decl (decl);
3828           if (DECL_NOT_REALLY_EXTERN (decl)
3829               && DECL_INITIAL (decl)
3830               && decl_needed_p (decl))
3831             {
3832               struct cgraph_node *node = cgraph_get_node (decl), *alias, *next;
3833
3834               DECL_EXTERNAL (decl) = 0;
3835               /* If we mark !DECL_EXTERNAL one of the same body aliases,
3836                  we need to mark all of them that way.  */
3837               if (node && node->same_body)
3838                 {
3839                   DECL_EXTERNAL (node->decl) = 0;
3840                   for (alias = node->same_body; alias; alias = alias->next)
3841                     DECL_EXTERNAL (alias->decl) = 0;
3842                 }
3843               /* If we mark !DECL_EXTERNAL one of the symbols in some comdat
3844                  group, we need to mark all symbols in the same comdat group
3845                  that way.  */
3846               if (node->same_comdat_group)
3847                 for (next = node->same_comdat_group;
3848                      next != node;
3849                      next = next->same_comdat_group)
3850                   {
3851                     DECL_EXTERNAL (next->decl) = 0;
3852                     if (next->same_body)
3853                       {
3854                         for (alias = next->same_body;
3855                              alias;
3856                              alias = alias->next)
3857                           DECL_EXTERNAL (alias->decl) = 0;
3858                       }
3859                   }
3860             }
3861
3862           /* If we're going to need to write this function out, and
3863              there's already a body for it, create RTL for it now.
3864              (There might be no body if this is a method we haven't
3865              gotten around to synthesizing yet.)  */
3866           if (!DECL_EXTERNAL (decl)
3867               && decl_needed_p (decl)
3868               && !TREE_ASM_WRITTEN (decl)
3869               && !cgraph_node (decl)->local.finalized)
3870             {
3871               /* We will output the function; no longer consider it in this
3872                  loop.  */
3873               DECL_DEFER_OUTPUT (decl) = 0;
3874               /* Generate RTL for this function now that we know we
3875                  need it.  */
3876               expand_or_defer_fn (decl);
3877               /* If we're compiling -fsyntax-only pretend that this
3878                  function has been written out so that we don't try to
3879                  expand it again.  */
3880               if (flag_syntax_only)
3881                 TREE_ASM_WRITTEN (decl) = 1;
3882               reconsider = true;
3883             }
3884         }
3885
3886       if (walk_namespaces (wrapup_globals_for_namespace, /*data=*/0))
3887         reconsider = true;
3888
3889       /* Static data members are just like namespace-scope globals.  */
3890       FOR_EACH_VEC_ELT (tree, pending_statics, i, decl)
3891         {
3892           if (var_finalized_p (decl) || DECL_REALLY_EXTERN (decl)
3893               /* Don't write it out if we haven't seen a definition.  */
3894               || DECL_IN_AGGR_P (decl))
3895             continue;
3896           import_export_decl (decl);
3897           /* If this static data member is needed, provide it to the
3898              back end.  */
3899           if (DECL_NOT_REALLY_EXTERN (decl) && decl_needed_p (decl))
3900             DECL_EXTERNAL (decl) = 0;
3901         }
3902       if (VEC_length (tree, pending_statics) != 0
3903           && wrapup_global_declarations (VEC_address (tree, pending_statics),
3904                                          VEC_length (tree, pending_statics)))
3905         reconsider = true;
3906
3907       retries++;
3908     }
3909   while (reconsider);
3910
3911   /* All used inline functions must have a definition at this point.  */
3912   FOR_EACH_VEC_ELT (tree, deferred_fns, i, decl)
3913     {
3914       if (/* Check online inline functions that were actually used.  */
3915           DECL_ODR_USED (decl) && DECL_DECLARED_INLINE_P (decl)
3916           /* If the definition actually was available here, then the
3917              fact that the function was not defined merely represents
3918              that for some reason (use of a template repository,
3919              #pragma interface, etc.) we decided not to emit the
3920              definition here.  */
3921           && !DECL_INITIAL (decl)
3922           /* An explicit instantiation can be used to specify
3923              that the body is in another unit. It will have
3924              already verified there was a definition.  */
3925           && !DECL_EXPLICIT_INSTANTIATION (decl))
3926         {
3927           warning (0, "inline function %q+D used but never defined", decl);
3928           /* Avoid a duplicate warning from check_global_declaration_1.  */
3929           TREE_NO_WARNING (decl) = 1;
3930         }
3931     }
3932
3933   /* So must decls that use a type with no linkage.  */
3934   FOR_EACH_VEC_ELT (tree, no_linkage_decls, i, decl)
3935     if (!decl_defined_p (decl))
3936       no_linkage_error (decl);
3937
3938   /* Then, do the Objective-C stuff.  This is where all the
3939      Objective-C module stuff gets generated (symtab,
3940      class/protocol/selector lists etc).  This must be done after C++
3941      templates, destructors etc. so that selectors used in C++
3942      templates are properly allocated.  */
3943   if (c_dialect_objc ())
3944     objc_write_global_declarations ();
3945
3946   /* We give C linkage to static constructors and destructors.  */
3947   push_lang_context (lang_name_c);
3948
3949   /* Generate initialization and destruction functions for all
3950      priorities for which they are required.  */
3951   if (priority_info_map)
3952     splay_tree_foreach (priority_info_map,
3953                         generate_ctor_and_dtor_functions_for_priority,
3954                         /*data=*/&locus);
3955   else if (c_dialect_objc () && objc_static_init_needed_p ())
3956     /* If this is obj-c++ and we need a static init, call
3957        generate_ctor_or_dtor_function.  */
3958     generate_ctor_or_dtor_function (/*constructor_p=*/true,
3959                                     DEFAULT_INIT_PRIORITY, &locus);
3960
3961   /* We're done with the splay-tree now.  */
3962   if (priority_info_map)
3963     splay_tree_delete (priority_info_map);
3964
3965   /* Generate any missing aliases.  */
3966   maybe_apply_pending_pragma_weaks ();
3967
3968   /* We're done with static constructors, so we can go back to "C++"
3969      linkage now.  */
3970   pop_lang_context ();
3971
3972   /* Collect candidates for Java hidden aliases.  */
3973   candidates = collect_candidates_for_java_method_aliases ();
3974
3975   cgraph_finalize_compilation_unit ();
3976
3977   /* Now, issue warnings about static, but not defined, functions,
3978      etc., and emit debugging information.  */
3979   walk_namespaces (wrapup_globals_for_namespace, /*data=*/&reconsider);
3980   if (VEC_length (tree, pending_statics) != 0)
3981     {
3982       check_global_declarations (VEC_address (tree, pending_statics),
3983                                  VEC_length (tree, pending_statics));
3984       emit_debug_global_declarations (VEC_address (tree, pending_statics),
3985                                       VEC_length (tree, pending_statics));
3986     }
3987
3988   perform_deferred_noexcept_checks ();
3989
3990   /* Generate hidden aliases for Java.  */
3991   if (candidates)
3992     {
3993       build_java_method_aliases (candidates);
3994       pointer_set_destroy (candidates);
3995     }
3996
3997   finish_repo ();
3998
3999   /* The entire file is now complete.  If requested, dump everything
4000      to a file.  */
4001   {
4002     int flags;
4003     FILE *stream = dump_begin (TDI_tu, &flags);
4004
4005     if (stream)
4006       {
4007         dump_node (global_namespace, flags & ~TDF_SLIM, stream);
4008         dump_end (TDI_tu, stream);
4009       }
4010   }
4011
4012   timevar_pop (TV_VARCONST);
4013
4014   if (flag_detailed_statistics)
4015     {
4016       dump_tree_statistics ();
4017       dump_time_statistics ();
4018     }
4019   input_location = locus;
4020
4021 #ifdef ENABLE_CHECKING
4022   validate_conversion_obstack ();
4023 #endif /* ENABLE_CHECKING */
4024 }
4025
4026 /* FN is an OFFSET_REF, DOTSTAR_EXPR or MEMBER_REF indicating the
4027    function to call in parse-tree form; it has not yet been
4028    semantically analyzed.  ARGS are the arguments to the function.
4029    They have already been semantically analyzed.  This may change
4030    ARGS.  */
4031
4032 tree
4033 build_offset_ref_call_from_tree (tree fn, VEC(tree,gc) **args)
4034 {
4035   tree orig_fn;
4036   VEC(tree,gc) *orig_args = NULL;
4037   tree expr;
4038   tree object;
4039
4040   orig_fn = fn;
4041   object = TREE_OPERAND (fn, 0);
4042
4043   if (processing_template_decl)
4044     {
4045       gcc_assert (TREE_CODE (fn) == DOTSTAR_EXPR
4046                   || TREE_CODE (fn) == MEMBER_REF);
4047       if (type_dependent_expression_p (fn)
4048           || any_type_dependent_arguments_p (*args))
4049         return build_nt_call_vec (fn, *args);
4050
4051       orig_args = make_tree_vector_copy (*args);
4052
4053       /* Transform the arguments and add the implicit "this"
4054          parameter.  That must be done before the FN is transformed
4055          because we depend on the form of FN.  */
4056       make_args_non_dependent (*args);
4057       object = build_non_dependent_expr (object);
4058       if (TREE_CODE (fn) == DOTSTAR_EXPR)
4059         object = cp_build_addr_expr (object, tf_warning_or_error);
4060       VEC_safe_insert (tree, gc, *args, 0, object);
4061       /* Now that the arguments are done, transform FN.  */
4062       fn = build_non_dependent_expr (fn);
4063     }
4064
4065   /* A qualified name corresponding to a bound pointer-to-member is
4066      represented as an OFFSET_REF:
4067
4068         struct B { void g(); };
4069         void (B::*p)();
4070         void B::g() { (this->*p)(); }  */
4071   if (TREE_CODE (fn) == OFFSET_REF)
4072     {
4073       tree object_addr = cp_build_addr_expr (object, tf_warning_or_error);
4074       fn = TREE_OPERAND (fn, 1);
4075       fn = get_member_function_from_ptrfunc (&object_addr, fn);
4076       VEC_safe_insert (tree, gc, *args, 0, object_addr);
4077     }
4078
4079   expr = cp_build_function_call_vec (fn, args, tf_warning_or_error);
4080   if (processing_template_decl && expr != error_mark_node)
4081     expr = build_min_non_dep_call_vec (expr, orig_fn, orig_args);
4082
4083   if (orig_args != NULL)
4084     release_tree_vector (orig_args);
4085
4086   return expr;
4087 }
4088
4089
4090 void
4091 check_default_args (tree x)
4092 {
4093   tree arg = TYPE_ARG_TYPES (TREE_TYPE (x));
4094   bool saw_def = false;
4095   int i = 0 - (TREE_CODE (TREE_TYPE (x)) == METHOD_TYPE);
4096   for (; arg && arg != void_list_node; arg = TREE_CHAIN (arg), ++i)
4097     {
4098       if (TREE_PURPOSE (arg))
4099         saw_def = true;
4100       else if (saw_def)
4101         {
4102           error ("default argument missing for parameter %P of %q+#D", i, x);
4103           TREE_PURPOSE (arg) = error_mark_node;
4104         }
4105     }
4106 }
4107
4108 /* Return true if function DECL can be inlined.  This is used to force
4109    instantiation of methods that might be interesting for inlining.  */
4110 bool
4111 possibly_inlined_p (tree decl)
4112 {
4113   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
4114   if (DECL_UNINLINABLE (decl))
4115     return false;
4116   if (!optimize || pragma_java_exceptions)
4117     return DECL_DECLARED_INLINE_P (decl);
4118   /* When optimizing, we might inline everything when flatten
4119      attribute or heuristics inlining for size or autoinlining
4120      is used.  */
4121   return true;
4122 }
4123
4124 /* Mark DECL (either a _DECL or a BASELINK) as "used" in the program.
4125    If DECL is a specialization or implicitly declared class member,
4126    generate the actual definition.  */
4127
4128 void
4129 mark_used (tree decl)
4130 {
4131   /* If DECL is a BASELINK for a single function, then treat it just
4132      like the DECL for the function.  Otherwise, if the BASELINK is
4133      for an overloaded function, we don't know which function was
4134      actually used until after overload resolution.  */
4135   if (TREE_CODE (decl) == BASELINK)
4136     {
4137       decl = BASELINK_FUNCTIONS (decl);
4138       if (really_overloaded_fn (decl))
4139         return;
4140       decl = OVL_CURRENT (decl);
4141     }
4142
4143   /* Set TREE_USED for the benefit of -Wunused.  */
4144   TREE_USED (decl) = 1;
4145   if (DECL_CLONED_FUNCTION_P (decl))
4146     TREE_USED (DECL_CLONED_FUNCTION (decl)) = 1;
4147
4148   if (TREE_CODE (decl) == FUNCTION_DECL
4149       && DECL_DELETED_FN (decl))
4150     {
4151       if (DECL_ARTIFICIAL (decl))
4152         {
4153           if (DECL_OVERLOADED_OPERATOR_P (decl) == TYPE_EXPR
4154               && LAMBDA_TYPE_P (DECL_CONTEXT (decl)))
4155             {
4156               /* We mark a lambda conversion op as deleted if we can't
4157                  generate it properly; see maybe_add_lambda_conv_op.  */
4158               sorry ("converting lambda which uses %<...%> to "
4159                      "function pointer");
4160               return;
4161             }
4162         }
4163       error ("use of deleted function %qD", decl);
4164       if (!maybe_explain_implicit_delete (decl))
4165         error_at (DECL_SOURCE_LOCATION (decl), "declared here");
4166       return;
4167     }
4168
4169   /* We can only check DECL_ODR_USED on variables or functions with
4170      DECL_LANG_SPECIFIC set, and these are also the only decls that we
4171      might need special handling for.  */
4172   if ((TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != FUNCTION_DECL)
4173       || DECL_LANG_SPECIFIC (decl) == NULL
4174       || DECL_THUNK_P (decl))
4175     return;
4176
4177   /* We only want to do this processing once.  We don't need to keep trying
4178      to instantiate inline templates, because unit-at-a-time will make sure
4179      we get them compiled before functions that want to inline them.  */
4180   if (DECL_ODR_USED (decl))
4181     return;
4182
4183   /* If within finish_function, defer the rest until that function
4184      finishes, otherwise it might recurse.  */
4185   if (defer_mark_used_calls)
4186     {
4187       VEC_safe_push (tree, gc, deferred_mark_used_calls, decl);
4188       return;
4189     }
4190
4191   /* Normally, we can wait until instantiation-time to synthesize DECL.
4192      However, if DECL is a static data member initialized with a constant
4193      or a constexpr function, we need it right now because a reference to
4194      such a data member or a call to such function is not value-dependent.  */
4195   if ((decl_maybe_constant_var_p (decl)
4196        || (TREE_CODE (decl) == FUNCTION_DECL
4197            && DECL_DECLARED_CONSTEXPR_P (decl)))
4198       && !DECL_INITIAL (decl)
4199       && DECL_LANG_SPECIFIC (decl)
4200       && DECL_TEMPLATE_INSTANTIATION (decl))
4201     {
4202       /* Instantiating a function will result in garbage collection.  We
4203          must treat this situation as if we were within the body of a
4204          function so as to avoid collecting live data only referenced from
4205          the stack (such as overload resolution candidates).  */
4206       ++function_depth;
4207       instantiate_decl (decl, /*defer_ok=*/false,
4208                         /*expl_inst_class_mem_p=*/false);
4209       --function_depth;
4210     }
4211
4212   /* If we don't need a value, then we don't need to synthesize DECL.  */
4213   if (cp_unevaluated_operand != 0)
4214     return;
4215
4216   if (processing_template_decl)
4217     return;
4218
4219   /* Check this too in case we're within fold_non_dependent_expr.  */
4220   if (DECL_TEMPLATE_INFO (decl)
4221       && uses_template_parms (DECL_TI_ARGS (decl)))
4222     return;
4223
4224   DECL_ODR_USED (decl) = 1;
4225   if (DECL_CLONED_FUNCTION_P (decl))
4226     DECL_ODR_USED (DECL_CLONED_FUNCTION (decl)) = 1;
4227
4228   /* DR 757: A type without linkage shall not be used as the type of a
4229      variable or function with linkage, unless
4230    o the variable or function has extern "C" linkage (7.5 [dcl.link]), or
4231    o the variable or function is not used (3.2 [basic.def.odr]) or is
4232    defined in the same translation unit.  */
4233   if (cxx_dialect > cxx98
4234       && decl_linkage (decl) != lk_none
4235       && !DECL_EXTERN_C_P (decl)
4236       && !DECL_ARTIFICIAL (decl)
4237       && !decl_defined_p (decl)
4238       && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
4239     {
4240       if (is_local_extern (decl))
4241         /* There's no way to define a local extern, and adding it to
4242            the vector interferes with GC, so give an error now.  */
4243         no_linkage_error (decl);
4244       else
4245         VEC_safe_push (tree, gc, no_linkage_decls, decl);
4246     }
4247
4248   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl)
4249       && !DECL_INITIAL (decl) && !DECL_ARTIFICIAL (decl))
4250     /* Remember it, so we can check it was defined.  */
4251     note_vague_linkage_fn (decl);
4252
4253   /* Is it a synthesized method that needs to be synthesized?  */
4254   if (TREE_CODE (decl) == FUNCTION_DECL
4255       && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl)
4256       && DECL_DEFAULTED_FN (decl)
4257       && ! DECL_INITIAL (decl))
4258     {
4259       /* Remember the current location for a function we will end up
4260          synthesizing.  Then we can inform the user where it was
4261          required in the case of error.  */
4262       DECL_SOURCE_LOCATION (decl) = input_location;
4263
4264       /* Synthesizing an implicitly defined member function will result in
4265          garbage collection.  We must treat this situation as if we were
4266          within the body of a function so as to avoid collecting live data
4267          on the stack (such as overload resolution candidates).
4268
4269          We could just let cp_write_global_declarations handle synthesizing
4270          this function, since we just added it to deferred_fns, but doing
4271          it at the use site produces better error messages.  */
4272       ++function_depth;
4273       synthesize_method (decl);
4274       --function_depth;
4275       /* If this is a synthesized method we don't need to
4276          do the instantiation test below.  */
4277     }
4278   else if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
4279            && DECL_TEMPLATE_INFO (decl)
4280            && (!DECL_EXPLICIT_INSTANTIATION (decl)
4281                || always_instantiate_p (decl)))
4282     /* If this is a function or variable that is an instance of some
4283        template, we now know that we will need to actually do the
4284        instantiation. We check that DECL is not an explicit
4285        instantiation because that is not checked in instantiate_decl.
4286
4287        We put off instantiating functions in order to improve compile
4288        times.  Maintaining a stack of active functions is expensive,
4289        and the inliner knows to instantiate any functions it might
4290        need.  Therefore, we always try to defer instantiation.  */
4291     instantiate_decl (decl, /*defer_ok=*/true,
4292                       /*expl_inst_class_mem_p=*/false);
4293 }
4294
4295 #include "gt-cp-decl2.h"