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