OSDN Git Service

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