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