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