OSDN Git Service

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