OSDN Git Service

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