OSDN Git Service

* mangle.c (finish_mangling_get_identifier): Use
[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_p (value))
866                 error ("%qD cannot be defaulted", value);
867               else
868                 {
869                   DECL_DEFAULTED_FN (value) = 1;
870                   DECL_INITIALIZED_IN_CLASS_P (value) = 1;
871                   DECL_DECLARED_INLINE_P (value) = 1;
872                 }
873             }
874           else if (TREE_CODE (TREE_TYPE (value)) == METHOD_TYPE)
875             {
876               gcc_assert (error_operand_p (init) || integer_zerop (init));
877               DECL_PURE_VIRTUAL_P (value) = 1;
878             }
879           else
880             {
881               gcc_assert (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE);
882               error ("initializer specified for static member function %qD",
883                      value);
884             }
885         }
886       else if (pedantic && TREE_CODE (value) != VAR_DECL)
887         /* Already complained in grokdeclarator.  */
888         init = NULL_TREE;
889       else if (!processing_template_decl)
890         {
891           if (TREE_CODE (init) == CONSTRUCTOR)
892             init = digest_init (TREE_TYPE (value), init);
893           else
894             init = integral_constant_value (init);
895
896           if (init != error_mark_node && !TREE_CONSTANT (init))
897             {
898               /* We can allow references to things that are effectively
899                  static, since references are initialized with the
900                  address.  */
901               if (TREE_CODE (TREE_TYPE (value)) != REFERENCE_TYPE
902                   || (TREE_STATIC (init) == 0
903                       && (!DECL_P (init) || DECL_EXTERNAL (init) == 0)))
904                 {
905                   error ("field initializer is not constant");
906                   init = error_mark_node;
907                 }
908             }
909         }
910     }
911
912   if (processing_template_decl
913       && (TREE_CODE (value) == VAR_DECL || TREE_CODE (value) == FUNCTION_DECL))
914     {
915       value = push_template_decl (value);
916       if (error_operand_p (value))
917         return error_mark_node;
918     }
919
920   if (attrlist)
921     cplus_decl_attributes (&value, attrlist, 0);
922
923   switch (TREE_CODE (value))
924     {
925     case VAR_DECL:
926       finish_static_data_member_decl (value, init, init_const_expr_p,
927                                       asmspec_tree, flags);
928       return value;
929
930     case FIELD_DECL:
931       if (asmspec)
932         error ("%<asm%> specifiers are not permitted on non-static data members");
933       if (DECL_INITIAL (value) == error_mark_node)
934         init = error_mark_node;
935       cp_finish_decl (value, init, /*init_const_expr_p=*/false,
936                       NULL_TREE, flags);
937       DECL_INITIAL (value) = init;
938       DECL_IN_AGGR_P (value) = 1;
939       return value;
940
941     case  FUNCTION_DECL:
942       if (asmspec)
943         set_user_assembler_name (value, asmspec);
944
945       cp_finish_decl (value,
946                       /*init=*/NULL_TREE,
947                       /*init_const_expr_p=*/false,
948                       asmspec_tree, flags);
949
950       /* Pass friends back this way.  */
951       if (DECL_FRIEND_P (value))
952         return void_type_node;
953
954       DECL_IN_AGGR_P (value) = 1;
955       return value;
956
957     default:
958       gcc_unreachable ();
959     }
960   return NULL_TREE;
961 }
962
963 /* Like `grokfield', but for bitfields.
964    WIDTH is non-NULL for bit fields only, and is an INTEGER_CST node.  */
965
966 tree
967 grokbitfield (const cp_declarator *declarator,
968               cp_decl_specifier_seq *declspecs, tree width,
969               tree attrlist)
970 {
971   tree value = grokdeclarator (declarator, declspecs, BITFIELD, 0, &attrlist);
972
973   if (value == error_mark_node) 
974     return NULL_TREE; /* friends went bad.  */
975
976   /* Pass friendly classes back.  */
977   if (TREE_CODE (value) == VOID_TYPE)
978     return void_type_node;
979
980   if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))
981       && (POINTER_TYPE_P (value)
982           || !dependent_type_p (TREE_TYPE (value))))
983     {
984       error ("bit-field %qD with non-integral type", value);
985       return error_mark_node;
986     }
987
988   if (TREE_CODE (value) == TYPE_DECL)
989     {
990       error ("cannot declare %qD to be a bit-field type", value);
991       return NULL_TREE;
992     }
993
994   /* Usually, finish_struct_1 catches bitfields with invalid types.
995      But, in the case of bitfields with function type, we confuse
996      ourselves into thinking they are member functions, so we must
997      check here.  */
998   if (TREE_CODE (value) == FUNCTION_DECL)
999     {
1000       error ("cannot declare bit-field %qD with function type",
1001              DECL_NAME (value));
1002       return NULL_TREE;
1003     }
1004
1005   if (DECL_IN_AGGR_P (value))
1006     {
1007       error ("%qD is already defined in the class %qT", value,
1008              DECL_CONTEXT (value));
1009       return void_type_node;
1010     }
1011
1012   if (TREE_STATIC (value))
1013     {
1014       error ("static member %qD cannot be a bit-field", value);
1015       return NULL_TREE;
1016     }
1017   cp_finish_decl (value, NULL_TREE, false, NULL_TREE, 0);
1018
1019   if (width != error_mark_node)
1020     {
1021       constant_expression_warning (width);
1022       DECL_INITIAL (value) = width;
1023       SET_DECL_C_BIT_FIELD (value);
1024     }
1025
1026   DECL_IN_AGGR_P (value) = 1;
1027
1028   if (attrlist)
1029     cplus_decl_attributes (&value, attrlist, /*flags=*/0);
1030
1031   return value;
1032 }
1033
1034 \f
1035 /* Returns true iff ATTR is an attribute which needs to be applied at
1036    instantiation time rather than template definition time.  */
1037
1038 static bool
1039 is_late_template_attribute (tree attr, tree decl)
1040 {
1041   tree name = TREE_PURPOSE (attr);
1042   tree args = TREE_VALUE (attr);
1043   const struct attribute_spec *spec = lookup_attribute_spec (name);
1044   tree arg;
1045
1046   if (!spec)
1047     /* Unknown attribute.  */
1048     return false;
1049
1050   /* Attribute weak handling wants to write out assembly right away.  */
1051   if (is_attribute_p ("weak", name))
1052     return true;
1053
1054   /* If any of the arguments are dependent expressions, we can't evaluate
1055      the attribute until instantiation time.  */
1056   for (arg = args; arg; arg = TREE_CHAIN (arg))
1057     {
1058       tree t = TREE_VALUE (arg);
1059
1060       /* If the first attribute argument is an identifier, only consider
1061          second and following arguments.  Attributes like mode, format,
1062          cleanup and several target specific attributes aren't late
1063          just because they have an IDENTIFIER_NODE as first argument.  */
1064       if (arg == args && TREE_CODE (t) == IDENTIFIER_NODE)
1065         continue;
1066
1067       if (value_dependent_expression_p (t)
1068           || type_dependent_expression_p (t))
1069         return true;
1070     }
1071
1072   if (TREE_CODE (decl) == TYPE_DECL
1073       || TYPE_P (decl)
1074       || spec->type_required)
1075     {
1076       tree type = TYPE_P (decl) ? decl : TREE_TYPE (decl);
1077
1078       /* We can't apply any attributes to a completely unknown type until
1079          instantiation time.  */
1080       enum tree_code code = TREE_CODE (type);
1081       if (code == TEMPLATE_TYPE_PARM
1082           || code == BOUND_TEMPLATE_TEMPLATE_PARM
1083           || code == TYPENAME_TYPE)
1084         return true;
1085       /* Also defer most attributes on dependent types.  This is not
1086          necessary in all cases, but is the better default.  */
1087       else if (dependent_type_p (type)
1088                /* But attribute visibility specifically works on
1089                   templates.  */
1090                && !is_attribute_p ("visibility", name))
1091         return true;
1092       else
1093         return false;
1094     }
1095   else
1096     return false;
1097 }
1098
1099 /* ATTR_P is a list of attributes.  Remove any attributes which need to be
1100    applied at instantiation time and return them.  If IS_DEPENDENT is true,
1101    the declaration itself is dependent, so all attributes should be applied
1102    at instantiation time.  */
1103
1104 static tree
1105 splice_template_attributes (tree *attr_p, tree decl)
1106 {
1107   tree *p = attr_p;
1108   tree late_attrs = NULL_TREE;
1109   tree *q = &late_attrs;
1110
1111   if (!p)
1112     return NULL_TREE;
1113
1114   for (; *p; )
1115     {
1116       if (is_late_template_attribute (*p, decl))
1117         {
1118           ATTR_IS_DEPENDENT (*p) = 1;
1119           *q = *p;
1120           *p = TREE_CHAIN (*p);
1121           q = &TREE_CHAIN (*q);
1122           *q = NULL_TREE;
1123         }
1124       else
1125         p = &TREE_CHAIN (*p);
1126     }
1127
1128   return late_attrs;
1129 }
1130
1131 /* Remove any late attributes from the list in ATTR_P and attach them to
1132    DECL_P.  */
1133
1134 static void
1135 save_template_attributes (tree *attr_p, tree *decl_p)
1136 {
1137   tree late_attrs = splice_template_attributes (attr_p, *decl_p);
1138   tree *q;
1139   tree old_attrs = NULL_TREE;
1140
1141   if (!late_attrs)
1142     return;
1143
1144   if (DECL_P (*decl_p))
1145     q = &DECL_ATTRIBUTES (*decl_p);
1146   else
1147     q = &TYPE_ATTRIBUTES (*decl_p);
1148
1149   old_attrs = *q;
1150
1151   /* Place the late attributes at the beginning of the attribute
1152      list.  */
1153   TREE_CHAIN (tree_last (late_attrs)) = *q;
1154   *q = late_attrs;
1155
1156   if (!DECL_P (*decl_p) && *decl_p == TYPE_MAIN_VARIANT (*decl_p))
1157     {
1158       /* We've added new attributes directly to the main variant, so
1159          now we need to update all of the other variants to include
1160          these new attributes.  */
1161       tree variant;
1162       for (variant = TYPE_NEXT_VARIANT (*decl_p); variant;
1163            variant = TYPE_NEXT_VARIANT (variant))
1164         {
1165           gcc_assert (TYPE_ATTRIBUTES (variant) == old_attrs);
1166           TYPE_ATTRIBUTES (variant) = TYPE_ATTRIBUTES (*decl_p);
1167         }
1168     }
1169 }
1170
1171 /* Like reconstruct_complex_type, but handle also template trees.  */
1172
1173 tree
1174 cp_reconstruct_complex_type (tree type, tree bottom)
1175 {
1176   tree inner, outer;
1177
1178   if (TREE_CODE (type) == POINTER_TYPE)
1179     {
1180       inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1181       outer = build_pointer_type_for_mode (inner, TYPE_MODE (type),
1182                                            TYPE_REF_CAN_ALIAS_ALL (type));
1183     }
1184   else if (TREE_CODE (type) == REFERENCE_TYPE)
1185     {
1186       inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1187       outer = build_reference_type_for_mode (inner, TYPE_MODE (type),
1188                                              TYPE_REF_CAN_ALIAS_ALL (type));
1189     }
1190   else if (TREE_CODE (type) == ARRAY_TYPE)
1191     {
1192       inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1193       outer = build_cplus_array_type (inner, TYPE_DOMAIN (type));
1194       /* Don't call cp_build_qualified_type on ARRAY_TYPEs, the
1195          element type qualification will be handled by the recursive
1196          cp_reconstruct_complex_type call and cp_build_qualified_type
1197          for ARRAY_TYPEs changes the element type.  */
1198       return outer;
1199     }
1200   else if (TREE_CODE (type) == FUNCTION_TYPE)
1201     {
1202       inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1203       outer = build_function_type (inner, TYPE_ARG_TYPES (type));
1204     }
1205   else if (TREE_CODE (type) == METHOD_TYPE)
1206     {
1207       inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1208       /* The build_method_type_directly() routine prepends 'this' to argument list,
1209          so we must compensate by getting rid of it.  */
1210       outer
1211         = build_method_type_directly
1212             (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type))),
1213              inner,
1214              TREE_CHAIN (TYPE_ARG_TYPES (type)));
1215     }
1216   else if (TREE_CODE (type) == OFFSET_TYPE)
1217     {
1218       inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1219       outer = build_offset_type (TYPE_OFFSET_BASETYPE (type), inner);
1220     }
1221   else
1222     return bottom;
1223
1224   return cp_build_qualified_type (outer, TYPE_QUALS (type));
1225 }
1226
1227 /* Like decl_attributes, but handle C++ complexity.  */
1228
1229 void
1230 cplus_decl_attributes (tree *decl, tree attributes, int flags)
1231 {
1232   if (*decl == NULL_TREE || *decl == void_type_node
1233       || *decl == error_mark_node
1234       || attributes == NULL_TREE)
1235     return;
1236
1237   if (processing_template_decl)
1238     {
1239       if (check_for_bare_parameter_packs (attributes))
1240         return;
1241
1242       save_template_attributes (&attributes, decl);
1243       if (attributes == NULL_TREE)
1244         return;
1245     }
1246
1247   if (TREE_CODE (*decl) == TEMPLATE_DECL)
1248     decl = &DECL_TEMPLATE_RESULT (*decl);
1249
1250   decl_attributes (decl, attributes, flags);
1251
1252   if (TREE_CODE (*decl) == TYPE_DECL)
1253     SET_IDENTIFIER_TYPE_VALUE (DECL_NAME (*decl), TREE_TYPE (*decl));
1254 }
1255 \f
1256 /* Walks through the namespace- or function-scope anonymous union
1257    OBJECT, with the indicated TYPE, building appropriate VAR_DECLs.
1258    Returns one of the fields for use in the mangled name.  */
1259
1260 static tree
1261 build_anon_union_vars (tree type, tree object)
1262 {
1263   tree main_decl = NULL_TREE;
1264   tree field;
1265
1266   /* Rather than write the code to handle the non-union case,
1267      just give an error.  */
1268   if (TREE_CODE (type) != UNION_TYPE)
1269     error ("anonymous struct not inside named type");
1270
1271   for (field = TYPE_FIELDS (type);
1272        field != NULL_TREE;
1273        field = TREE_CHAIN (field))
1274     {
1275       tree decl;
1276       tree ref;
1277
1278       if (DECL_ARTIFICIAL (field))
1279         continue;
1280       if (TREE_CODE (field) != FIELD_DECL)
1281         {
1282           permerror (input_location, "%q+#D invalid; an anonymous union can only "
1283                      "have non-static data members", field);
1284           continue;
1285         }
1286
1287       if (TREE_PRIVATE (field))
1288         permerror (input_location, "private member %q+#D in anonymous union", field);
1289       else if (TREE_PROTECTED (field))
1290         permerror (input_location, "protected member %q+#D in anonymous union", field);
1291
1292       if (processing_template_decl)
1293         ref = build_min_nt (COMPONENT_REF, object,
1294                             DECL_NAME (field), NULL_TREE);
1295       else
1296         ref = build_class_member_access_expr (object, field, NULL_TREE,
1297                                               false, tf_warning_or_error);
1298
1299       if (DECL_NAME (field))
1300         {
1301           tree base;
1302
1303           decl = build_decl (input_location,
1304                              VAR_DECL, DECL_NAME (field), TREE_TYPE (field));
1305           DECL_ANON_UNION_VAR_P (decl) = 1;
1306
1307           base = get_base_address (object);
1308           TREE_PUBLIC (decl) = TREE_PUBLIC (base);
1309           TREE_STATIC (decl) = TREE_STATIC (base);
1310           DECL_EXTERNAL (decl) = DECL_EXTERNAL (base);
1311
1312           SET_DECL_VALUE_EXPR (decl, ref);
1313           DECL_HAS_VALUE_EXPR_P (decl) = 1;
1314
1315           decl = pushdecl (decl);
1316         }
1317       else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
1318         decl = build_anon_union_vars (TREE_TYPE (field), ref);
1319       else
1320         decl = 0;
1321
1322       if (main_decl == NULL_TREE)
1323         main_decl = decl;
1324     }
1325
1326   return main_decl;
1327 }
1328
1329 /* Finish off the processing of a UNION_TYPE structure.  If the union is an
1330    anonymous union, then all members must be laid out together.  PUBLIC_P
1331    is nonzero if this union is not declared static.  */
1332
1333 void
1334 finish_anon_union (tree anon_union_decl)
1335 {
1336   tree type;
1337   tree main_decl;
1338   bool public_p;
1339
1340   if (anon_union_decl == error_mark_node)
1341     return;
1342
1343   type = TREE_TYPE (anon_union_decl);
1344   public_p = TREE_PUBLIC (anon_union_decl);
1345
1346   /* The VAR_DECL's context is the same as the TYPE's context.  */
1347   DECL_CONTEXT (anon_union_decl) = DECL_CONTEXT (TYPE_NAME (type));
1348
1349   if (TYPE_FIELDS (type) == NULL_TREE)
1350     return;
1351
1352   if (public_p)
1353     {
1354       error ("namespace-scope anonymous aggregates must be static");
1355       return;
1356     }
1357
1358   main_decl = build_anon_union_vars (type, anon_union_decl);
1359   if (main_decl == error_mark_node)
1360     return;
1361   if (main_decl == NULL_TREE)
1362     {
1363       warning (0, "anonymous union with no members");
1364       return;
1365     }
1366
1367   if (!processing_template_decl)
1368     {
1369       /* Use main_decl to set the mangled name.  */
1370       DECL_NAME (anon_union_decl) = DECL_NAME (main_decl);
1371       maybe_commonize_var (anon_union_decl);
1372       mangle_decl (anon_union_decl);
1373       DECL_NAME (anon_union_decl) = NULL_TREE;
1374     }
1375
1376   pushdecl (anon_union_decl);
1377   if (building_stmt_tree ()
1378       && at_function_scope_p ())
1379     add_decl_expr (anon_union_decl);
1380   else if (!processing_template_decl)
1381     rest_of_decl_compilation (anon_union_decl,
1382                               toplevel_bindings_p (), at_eof);
1383 }
1384 \f
1385 /* Auxiliary functions to make type signatures for
1386    `operator new' and `operator delete' correspond to
1387    what compiler will be expecting.  */
1388
1389 tree
1390 coerce_new_type (tree type)
1391 {
1392   int e = 0;
1393   tree args = TYPE_ARG_TYPES (type);
1394
1395   gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
1396
1397   if (!same_type_p (TREE_TYPE (type), ptr_type_node))
1398     {
1399       e = 1;
1400       error ("%<operator new%> must return type %qT", ptr_type_node);
1401     }
1402
1403   if (args && args != void_list_node)
1404     {
1405       if (TREE_PURPOSE (args))
1406         {
1407           /* [basic.stc.dynamic.allocation]
1408              
1409              The first parameter shall not have an associated default
1410              argument.  */
1411           error ("the first parameter of %<operator new%> cannot "
1412                  "have a default argument");
1413           /* Throw away the default argument.  */
1414           TREE_PURPOSE (args) = NULL_TREE;
1415         }
1416
1417       if (!same_type_p (TREE_VALUE (args), size_type_node))
1418         {
1419           e = 2;
1420           args = TREE_CHAIN (args);
1421         }
1422     }
1423   else
1424     e = 2;
1425
1426   if (e == 2)
1427     permerror (input_location, "%<operator new%> takes type %<size_t%> (%qT) "
1428                "as first parameter", size_type_node);
1429
1430   switch (e)
1431   {
1432     case 2:
1433       args = tree_cons (NULL_TREE, size_type_node, args);
1434       /* Fall through.  */
1435     case 1:
1436       type = build_exception_variant
1437               (build_function_type (ptr_type_node, args),
1438                TYPE_RAISES_EXCEPTIONS (type));
1439       /* Fall through.  */
1440     default:;
1441   }
1442   return type;
1443 }
1444
1445 tree
1446 coerce_delete_type (tree type)
1447 {
1448   int e = 0;
1449   tree args = TYPE_ARG_TYPES (type);
1450
1451   gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
1452
1453   if (!same_type_p (TREE_TYPE (type), void_type_node))
1454     {
1455       e = 1;
1456       error ("%<operator delete%> must return type %qT", void_type_node);
1457     }
1458
1459   if (!args || args == void_list_node
1460       || !same_type_p (TREE_VALUE (args), ptr_type_node))
1461     {
1462       e = 2;
1463       if (args && args != void_list_node)
1464         args = TREE_CHAIN (args);
1465       error ("%<operator delete%> takes type %qT as first parameter",
1466              ptr_type_node);
1467     }
1468   switch (e)
1469   {
1470     case 2:
1471       args = tree_cons (NULL_TREE, ptr_type_node, args);
1472       /* Fall through.  */
1473     case 1:
1474       type = build_exception_variant
1475               (build_function_type (void_type_node, args),
1476                TYPE_RAISES_EXCEPTIONS (type));
1477       /* Fall through.  */
1478     default:;
1479   }
1480
1481   return type;
1482 }
1483 \f
1484 /* DECL is a VAR_DECL for a vtable: walk through the entries in the vtable
1485    and mark them as needed.  */
1486
1487 static void
1488 mark_vtable_entries (tree decl)
1489 {
1490   tree fnaddr;
1491   unsigned HOST_WIDE_INT idx;
1492
1493   FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL (decl)),
1494                               idx, fnaddr)
1495     {
1496       tree fn;
1497
1498       STRIP_NOPS (fnaddr);
1499
1500       if (TREE_CODE (fnaddr) != ADDR_EXPR
1501           && TREE_CODE (fnaddr) != FDESC_EXPR)
1502         /* This entry is an offset: a virtual base class offset, a
1503            virtual call offset, an RTTI offset, etc.  */
1504         continue;
1505
1506       fn = TREE_OPERAND (fnaddr, 0);
1507       TREE_ADDRESSABLE (fn) = 1;
1508       /* When we don't have vcall offsets, we output thunks whenever
1509          we output the vtables that contain them.  With vcall offsets,
1510          we know all the thunks we'll need when we emit a virtual
1511          function, so we emit the thunks there instead.  */
1512       if (DECL_THUNK_P (fn))
1513         use_thunk (fn, /*emit_p=*/0);
1514       mark_used (fn);
1515     }
1516 }
1517
1518 /* Set DECL up to have the closest approximation of "initialized common"
1519    linkage available.  */
1520
1521 void
1522 comdat_linkage (tree decl)
1523 {
1524   if (flag_weak)
1525     make_decl_one_only (decl, cxx_comdat_group (decl));
1526   else if (TREE_CODE (decl) == FUNCTION_DECL
1527            || (TREE_CODE (decl) == VAR_DECL && DECL_ARTIFICIAL (decl)))
1528     /* We can just emit function and compiler-generated variables
1529        statically; having multiple copies is (for the most part) only
1530        a waste of space.
1531
1532        There are two correctness issues, however: the address of a
1533        template instantiation with external linkage should be the
1534        same, independent of what translation unit asks for the
1535        address, and this will not hold when we emit multiple copies of
1536        the function.  However, there's little else we can do.
1537
1538        Also, by default, the typeinfo implementation assumes that
1539        there will be only one copy of the string used as the name for
1540        each type.  Therefore, if weak symbols are unavailable, the
1541        run-time library should perform a more conservative check; it
1542        should perform a string comparison, rather than an address
1543        comparison.  */
1544     TREE_PUBLIC (decl) = 0;
1545   else
1546     {
1547       /* Static data member template instantiations, however, cannot
1548          have multiple copies.  */
1549       if (DECL_INITIAL (decl) == 0
1550           || DECL_INITIAL (decl) == error_mark_node)
1551         DECL_COMMON (decl) = 1;
1552       else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
1553         {
1554           DECL_COMMON (decl) = 1;
1555           DECL_INITIAL (decl) = error_mark_node;
1556         }
1557       else if (!DECL_EXPLICIT_INSTANTIATION (decl))
1558         {
1559           /* We can't do anything useful; leave vars for explicit
1560              instantiation.  */
1561           DECL_EXTERNAL (decl) = 1;
1562           DECL_NOT_REALLY_EXTERN (decl) = 0;
1563         }
1564     }
1565
1566   if (DECL_LANG_SPECIFIC (decl))
1567     DECL_COMDAT (decl) = 1;
1568 }
1569
1570 /* For win32 we also want to put explicit instantiations in
1571    linkonce sections, so that they will be merged with implicit
1572    instantiations; otherwise we get duplicate symbol errors.
1573    For Darwin we do not want explicit instantiations to be
1574    linkonce.  */
1575
1576 void
1577 maybe_make_one_only (tree decl)
1578 {
1579   /* We used to say that this was not necessary on targets that support weak
1580      symbols, because the implicit instantiations will defer to the explicit
1581      one.  However, that's not actually the case in SVR4; a strong definition
1582      after a weak one is an error.  Also, not making explicit
1583      instantiations one_only means that we can end up with two copies of
1584      some template instantiations.  */
1585   if (! flag_weak)
1586     return;
1587
1588   /* We can't set DECL_COMDAT on functions, or cp_finish_file will think
1589      we can get away with not emitting them if they aren't used.  We need
1590      to for variables so that cp_finish_decl will update their linkage,
1591      because their DECL_INITIAL may not have been set properly yet.  */
1592
1593   if (!TARGET_WEAK_NOT_IN_ARCHIVE_TOC
1594       || (! DECL_EXPLICIT_INSTANTIATION (decl)
1595           && ! DECL_TEMPLATE_SPECIALIZATION (decl)))
1596     {
1597       make_decl_one_only (decl, cxx_comdat_group (decl));
1598
1599       if (TREE_CODE (decl) == VAR_DECL)
1600         {
1601           DECL_COMDAT (decl) = 1;
1602           /* Mark it needed so we don't forget to emit it.  */
1603           mark_decl_referenced (decl);
1604         }
1605     }
1606 }
1607
1608 /* Returns true iff DECL, a FUNCTION_DECL, has vague linkage.  This
1609    predicate will give the right answer during parsing of the function,
1610    which other tests may not.  */
1611
1612 bool
1613 vague_linkage_fn_p (tree fn)
1614 {
1615   /* Unfortunately, import_export_decl has not always been called
1616      before the function is processed, so we cannot simply check
1617      DECL_COMDAT.  */
1618   return (DECL_COMDAT (fn)
1619           || ((DECL_DECLARED_INLINE_P (fn)
1620                || DECL_TEMPLATE_INSTANTIATION (fn))
1621               && TREE_PUBLIC (fn)));
1622 }
1623
1624 /* Determine whether or not we want to specifically import or export CTYPE,
1625    using various heuristics.  */
1626
1627 static void
1628 import_export_class (tree ctype)
1629 {
1630   /* -1 for imported, 1 for exported.  */
1631   int import_export = 0;
1632
1633   /* It only makes sense to call this function at EOF.  The reason is
1634      that this function looks at whether or not the first non-inline
1635      non-abstract virtual member function has been defined in this
1636      translation unit.  But, we can't possibly know that until we've
1637      seen the entire translation unit.  */
1638   gcc_assert (at_eof);
1639
1640   if (CLASSTYPE_INTERFACE_KNOWN (ctype))
1641     return;
1642
1643   /* If MULTIPLE_SYMBOL_SPACES is set and we saw a #pragma interface,
1644      we will have CLASSTYPE_INTERFACE_ONLY set but not
1645      CLASSTYPE_INTERFACE_KNOWN.  In that case, we don't want to use this
1646      heuristic because someone will supply a #pragma implementation
1647      elsewhere, and deducing it here would produce a conflict.  */
1648   if (CLASSTYPE_INTERFACE_ONLY (ctype))
1649     return;
1650
1651   if (lookup_attribute ("dllimport", TYPE_ATTRIBUTES (ctype)))
1652     import_export = -1;
1653   else if (lookup_attribute ("dllexport", TYPE_ATTRIBUTES (ctype)))
1654     import_export = 1;
1655   else if (CLASSTYPE_IMPLICIT_INSTANTIATION (ctype)
1656            && !flag_implicit_templates)
1657     /* For a template class, without -fimplicit-templates, check the
1658        repository.  If the virtual table is assigned to this
1659        translation unit, then export the class; otherwise, import
1660        it.  */
1661       import_export = repo_export_class_p (ctype) ? 1 : -1;
1662   else if (TYPE_POLYMORPHIC_P (ctype))
1663     {
1664       /* The ABI specifies that the virtual table and associated
1665          information are emitted with the key method, if any.  */
1666       tree method = CLASSTYPE_KEY_METHOD (ctype);
1667       /* If weak symbol support is not available, then we must be
1668          careful not to emit the vtable when the key function is
1669          inline.  An inline function can be defined in multiple
1670          translation units.  If we were to emit the vtable in each
1671          translation unit containing a definition, we would get
1672          multiple definition errors at link-time.  */
1673       if (method && (flag_weak || ! DECL_DECLARED_INLINE_P (method)))
1674         import_export = (DECL_REALLY_EXTERN (method) ? -1 : 1);
1675     }
1676
1677   /* When MULTIPLE_SYMBOL_SPACES is set, we cannot count on seeing
1678      a definition anywhere else.  */
1679   if (MULTIPLE_SYMBOL_SPACES && import_export == -1)
1680     import_export = 0;
1681
1682   /* Allow back ends the chance to overrule the decision.  */
1683   if (targetm.cxx.import_export_class)
1684     import_export = targetm.cxx.import_export_class (ctype, import_export);
1685
1686   if (import_export)
1687     {
1688       SET_CLASSTYPE_INTERFACE_KNOWN (ctype);
1689       CLASSTYPE_INTERFACE_ONLY (ctype) = (import_export < 0);
1690     }
1691 }
1692
1693 /* Return true if VAR has already been provided to the back end; in that
1694    case VAR should not be modified further by the front end.  */
1695 static bool
1696 var_finalized_p (tree var)
1697 {
1698   return varpool_node (var)->finalized;
1699 }
1700
1701 /* DECL is a VAR_DECL or FUNCTION_DECL which, for whatever reason,
1702    must be emitted in this translation unit.  Mark it as such.  */
1703
1704 void
1705 mark_needed (tree decl)
1706 {
1707   /* It's possible that we no longer need to set
1708      TREE_SYMBOL_REFERENCED here directly, but doing so is
1709      harmless.  */
1710   TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)) = 1;
1711   mark_decl_referenced (decl);
1712 }
1713
1714 /* DECL is either a FUNCTION_DECL or a VAR_DECL.  This function
1715    returns true if a definition of this entity should be provided in
1716    this object file.  Callers use this function to determine whether
1717    or not to let the back end know that a definition of DECL is
1718    available in this translation unit.  */
1719
1720 bool
1721 decl_needed_p (tree decl)
1722 {
1723   gcc_assert (TREE_CODE (decl) == VAR_DECL
1724               || TREE_CODE (decl) == FUNCTION_DECL);
1725   /* This function should only be called at the end of the translation
1726      unit.  We cannot be sure of whether or not something will be
1727      COMDAT until that point.  */
1728   gcc_assert (at_eof);
1729
1730   /* All entities with external linkage that are not COMDAT should be
1731      emitted; they may be referred to from other object files.  */
1732   if (TREE_PUBLIC (decl) && !DECL_COMDAT (decl))
1733     return true;
1734   /* If this entity was used, let the back end see it; it will decide
1735      whether or not to emit it into the object file.  */
1736   if (TREE_USED (decl)
1737       || (DECL_ASSEMBLER_NAME_SET_P (decl)
1738           && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))))
1739       return true;
1740   /* Functions marked "dllexport" must be emitted so that they are
1741      visible to other DLLs.  */
1742   if (lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))
1743     return true;
1744   /* Otherwise, DECL does not need to be emitted -- yet.  A subsequent
1745      reference to DECL might cause it to be emitted later.  */
1746   return false;
1747 }
1748
1749 /* If necessary, write out the vtables for the dynamic class CTYPE.
1750    Returns true if any vtables were emitted.  */
1751
1752 static bool
1753 maybe_emit_vtables (tree ctype)
1754 {
1755   tree vtbl;
1756   tree primary_vtbl;
1757   int needed = 0;
1758
1759   /* If the vtables for this class have already been emitted there is
1760      nothing more to do.  */
1761   primary_vtbl = CLASSTYPE_VTABLES (ctype);
1762   if (var_finalized_p (primary_vtbl))
1763     return false;
1764   /* Ignore dummy vtables made by get_vtable_decl.  */
1765   if (TREE_TYPE (primary_vtbl) == void_type_node)
1766     return false;
1767
1768   /* On some targets, we cannot determine the key method until the end
1769      of the translation unit -- which is when this function is
1770      called.  */
1771   if (!targetm.cxx.key_method_may_be_inline ())
1772     determine_key_method (ctype);
1773
1774   /* See if any of the vtables are needed.  */
1775   for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = TREE_CHAIN (vtbl))
1776     {
1777       import_export_decl (vtbl);
1778       if (DECL_NOT_REALLY_EXTERN (vtbl) && decl_needed_p (vtbl))
1779         needed = 1;
1780     }
1781   if (!needed)
1782     {
1783       /* If the references to this class' vtables are optimized away,
1784          still emit the appropriate debugging information.  See
1785          dfs_debug_mark.  */
1786       if (DECL_COMDAT (primary_vtbl)
1787           && CLASSTYPE_DEBUG_REQUESTED (ctype))
1788         note_debug_info_needed (ctype);
1789       return false;
1790     }
1791
1792   /* The ABI requires that we emit all of the vtables if we emit any
1793      of them.  */
1794   for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = TREE_CHAIN (vtbl))
1795     {
1796       /* Mark entities references from the virtual table as used.  */
1797       mark_vtable_entries (vtbl);
1798
1799       if (TREE_TYPE (DECL_INITIAL (vtbl)) == 0)
1800         {
1801           tree expr = store_init_value (vtbl, DECL_INITIAL (vtbl), LOOKUP_NORMAL);
1802
1803           /* It had better be all done at compile-time.  */
1804           gcc_assert (!expr);
1805         }
1806
1807       /* Write it out.  */
1808       DECL_EXTERNAL (vtbl) = 0;
1809       rest_of_decl_compilation (vtbl, 1, 1);
1810
1811       /* Because we're only doing syntax-checking, we'll never end up
1812          actually marking the variable as written.  */
1813       if (flag_syntax_only)
1814         TREE_ASM_WRITTEN (vtbl) = 1;
1815     }
1816
1817   /* Since we're writing out the vtable here, also write the debug
1818      info.  */
1819   note_debug_info_needed (ctype);
1820
1821   return true;
1822 }
1823
1824 /* A special return value from type_visibility meaning internal
1825    linkage.  */
1826
1827 enum { VISIBILITY_ANON = VISIBILITY_INTERNAL+1 };
1828
1829 /* walk_tree helper function for type_visibility.  */
1830
1831 static tree
1832 min_vis_r (tree *tp, int *walk_subtrees, void *data)
1833 {
1834   int *vis_p = (int *)data;
1835   if (! TYPE_P (*tp))
1836     {
1837       *walk_subtrees = 0;
1838     }
1839   else if (CLASS_TYPE_P (*tp))
1840     {
1841       if (!TREE_PUBLIC (TYPE_MAIN_DECL (*tp)))
1842         {
1843           *vis_p = VISIBILITY_ANON;
1844           return *tp;
1845         }
1846       else if (CLASSTYPE_VISIBILITY (*tp) > *vis_p)
1847         *vis_p = CLASSTYPE_VISIBILITY (*tp);
1848     }
1849   return NULL;
1850 }
1851
1852 /* Returns the visibility of TYPE, which is the minimum visibility of its
1853    component types.  */
1854
1855 static int
1856 type_visibility (tree type)
1857 {
1858   int vis = VISIBILITY_DEFAULT;
1859   cp_walk_tree_without_duplicates (&type, min_vis_r, &vis);
1860   return vis;
1861 }
1862
1863 /* Limit the visibility of DECL to VISIBILITY, if not explicitly
1864    specified (or if VISIBILITY is static).  */
1865
1866 static bool
1867 constrain_visibility (tree decl, int visibility)
1868 {
1869   if (visibility == VISIBILITY_ANON)
1870     {
1871       /* extern "C" declarations aren't affected by the anonymous
1872          namespace.  */
1873       if (!DECL_EXTERN_C_P (decl))
1874         {
1875           TREE_PUBLIC (decl) = 0;
1876           DECL_COMDAT_GROUP (decl) = NULL_TREE;
1877           DECL_INTERFACE_KNOWN (decl) = 1;
1878           if (DECL_LANG_SPECIFIC (decl))
1879             DECL_NOT_REALLY_EXTERN (decl) = 1;
1880         }
1881     }
1882   else if (visibility > DECL_VISIBILITY (decl)
1883            && !DECL_VISIBILITY_SPECIFIED (decl))
1884     {
1885       DECL_VISIBILITY (decl) = (enum symbol_visibility) visibility;
1886       return true;
1887     }
1888   return false;
1889 }
1890
1891 /* Constrain the visibility of DECL based on the visibility of its template
1892    arguments.  */
1893
1894 static void
1895 constrain_visibility_for_template (tree decl, tree targs)
1896 {
1897   /* If this is a template instantiation, check the innermost
1898      template args for visibility constraints.  The outer template
1899      args are covered by the class check.  */
1900   tree args = INNERMOST_TEMPLATE_ARGS (targs);
1901   int i;
1902   for (i = TREE_VEC_LENGTH (args); i > 0; --i)
1903     {
1904       int vis = 0;
1905
1906       tree arg = TREE_VEC_ELT (args, i-1);
1907       if (TYPE_P (arg))
1908         vis = type_visibility (arg);
1909       else if (TREE_TYPE (arg) && POINTER_TYPE_P (TREE_TYPE (arg)))
1910         {
1911           STRIP_NOPS (arg);
1912           if (TREE_CODE (arg) == ADDR_EXPR)
1913             arg = TREE_OPERAND (arg, 0);
1914           if (TREE_CODE (arg) == VAR_DECL
1915               || TREE_CODE (arg) == FUNCTION_DECL)
1916             {
1917               if (! TREE_PUBLIC (arg))
1918                 vis = VISIBILITY_ANON;
1919               else
1920                 vis = DECL_VISIBILITY (arg);
1921             }
1922         }
1923       if (vis)
1924         constrain_visibility (decl, vis);
1925     }
1926 }
1927
1928 /* Like c_determine_visibility, but with additional C++-specific
1929    behavior.
1930
1931    Function-scope entities can rely on the function's visibility because
1932    it is set in start_preparsed_function.
1933
1934    Class-scope entities cannot rely on the class's visibility until the end
1935    of the enclosing class definition.
1936
1937    Note that because namespaces have multiple independent definitions,
1938    namespace visibility is handled elsewhere using the #pragma visibility
1939    machinery rather than by decorating the namespace declaration.
1940
1941    The goal is for constraints from the type to give a diagnostic, and
1942    other constraints to be applied silently.  */
1943
1944 void
1945 determine_visibility (tree decl)
1946 {
1947   tree class_type = NULL_TREE;
1948   bool use_template;
1949   bool orig_visibility_specified;
1950   enum symbol_visibility orig_visibility;
1951
1952   /* Remember that all decls get VISIBILITY_DEFAULT when built.  */
1953
1954   /* Only relevant for names with external linkage.  */
1955   if (!TREE_PUBLIC (decl))
1956     return;
1957
1958   /* Cloned constructors and destructors get the same visibility as
1959      the underlying function.  That should be set up in
1960      maybe_clone_body.  */
1961   gcc_assert (!DECL_CLONED_FUNCTION_P (decl));
1962
1963   orig_visibility_specified = DECL_VISIBILITY_SPECIFIED (decl);
1964   orig_visibility = DECL_VISIBILITY (decl);
1965
1966   if (TREE_CODE (decl) == TYPE_DECL)
1967     {
1968       if (CLASS_TYPE_P (TREE_TYPE (decl)))
1969         use_template = CLASSTYPE_USE_TEMPLATE (TREE_TYPE (decl));
1970       else if (TYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
1971         use_template = 1;
1972       else
1973         use_template = 0;
1974     }
1975   else if (DECL_LANG_SPECIFIC (decl))
1976     use_template = DECL_USE_TEMPLATE (decl);
1977   else
1978     use_template = 0;
1979
1980   /* If DECL is a member of a class, visibility specifiers on the
1981      class can influence the visibility of the DECL.  */
1982   if (DECL_CLASS_SCOPE_P (decl))
1983     class_type = DECL_CONTEXT (decl);
1984   else
1985     {
1986       /* Not a class member.  */
1987
1988       /* Virtual tables have DECL_CONTEXT set to their associated class,
1989          so they are automatically handled above.  */
1990       gcc_assert (TREE_CODE (decl) != VAR_DECL
1991                   || !DECL_VTABLE_OR_VTT_P (decl));
1992
1993       if (DECL_FUNCTION_SCOPE_P (decl) && ! DECL_VISIBILITY_SPECIFIED (decl))
1994         {
1995           /* Local statics and classes get the visibility of their
1996              containing function by default, except that
1997              -fvisibility-inlines-hidden doesn't affect them.  */
1998           tree fn = DECL_CONTEXT (decl);
1999           if (DECL_VISIBILITY_SPECIFIED (fn) || ! DECL_CLASS_SCOPE_P (fn))
2000             {
2001               DECL_VISIBILITY (decl) = DECL_VISIBILITY (fn);
2002               DECL_VISIBILITY_SPECIFIED (decl) = 
2003                 DECL_VISIBILITY_SPECIFIED (fn);
2004             }
2005           else
2006             determine_visibility_from_class (decl, DECL_CONTEXT (fn));
2007
2008           /* Local classes in templates have CLASSTYPE_USE_TEMPLATE set,
2009              but have no TEMPLATE_INFO, so don't try to check it.  */
2010           use_template = 0;
2011         }
2012       else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl)
2013                && flag_visibility_ms_compat)
2014         {
2015           /* Under -fvisibility-ms-compat, types are visible by default,
2016              even though their contents aren't.  */
2017           tree underlying_type = TREE_TYPE (DECL_NAME (decl));
2018           int underlying_vis = type_visibility (underlying_type);
2019           if (underlying_vis == VISIBILITY_ANON
2020               || CLASSTYPE_VISIBILITY_SPECIFIED (underlying_type))
2021             constrain_visibility (decl, underlying_vis);
2022           else
2023             DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
2024         }
2025       else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl))
2026         {
2027           /* tinfo visibility is based on the type it's for.  */
2028           constrain_visibility
2029             (decl, type_visibility (TREE_TYPE (DECL_NAME (decl))));
2030
2031           /* Give the target a chance to override the visibility associated
2032              with DECL.  */
2033           if (TREE_PUBLIC (decl)
2034               && !DECL_REALLY_EXTERN (decl)
2035               && CLASS_TYPE_P (TREE_TYPE (DECL_NAME (decl)))
2036               && !CLASSTYPE_VISIBILITY_SPECIFIED (TREE_TYPE (DECL_NAME (decl))))
2037             targetm.cxx.determine_class_data_visibility (decl);
2038         }
2039       else if (use_template)
2040         /* Template instantiations and specializations get visibility based
2041            on their template unless they override it with an attribute.  */;
2042       else if (! DECL_VISIBILITY_SPECIFIED (decl))
2043         {
2044           /* Set default visibility to whatever the user supplied with
2045              #pragma GCC visibility or a namespace visibility attribute.  */
2046           DECL_VISIBILITY (decl) = default_visibility;
2047           DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
2048         }
2049     }
2050
2051   if (use_template)
2052     {
2053       /* If the specialization doesn't specify visibility, use the
2054          visibility from the template.  */
2055       tree tinfo = (TREE_CODE (decl) == TYPE_DECL
2056                     ? TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
2057                     : DECL_TEMPLATE_INFO (decl));
2058       tree args = TI_ARGS (tinfo);
2059       
2060       if (args != error_mark_node)
2061         {
2062           int depth = TMPL_ARGS_DEPTH (args);
2063           tree pattern = DECL_TEMPLATE_RESULT (TI_TEMPLATE (tinfo));
2064
2065           if (!DECL_VISIBILITY_SPECIFIED (decl))
2066             {
2067               DECL_VISIBILITY (decl) = DECL_VISIBILITY (pattern);
2068               DECL_VISIBILITY_SPECIFIED (decl)
2069                 = DECL_VISIBILITY_SPECIFIED (pattern);
2070             }
2071
2072           /* FIXME should TMPL_ARGS_DEPTH really return 1 for null input? */
2073           if (args && depth > template_class_depth (class_type))
2074             /* Limit visibility based on its template arguments.  */
2075             constrain_visibility_for_template (decl, args);
2076         }
2077     }
2078
2079   if (class_type)
2080     determine_visibility_from_class (decl, class_type);
2081
2082   if (decl_anon_ns_mem_p (decl))
2083     /* Names in an anonymous namespace get internal linkage.
2084        This might change once we implement export.  */
2085     constrain_visibility (decl, VISIBILITY_ANON);
2086   else if (TREE_CODE (decl) != TYPE_DECL)
2087     {
2088       /* Propagate anonymity from type to decl.  */
2089       int tvis = type_visibility (TREE_TYPE (decl));
2090       if (tvis == VISIBILITY_ANON
2091           || ! DECL_VISIBILITY_SPECIFIED (decl))
2092         constrain_visibility (decl, tvis);
2093     }
2094   else if (no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/true))
2095     /* DR 757: A type without linkage shall not be used as the type of a
2096        variable or function with linkage, unless
2097        o the variable or function has extern "C" linkage (7.5 [dcl.link]), or
2098        o the variable or function is not used (3.2 [basic.def.odr]) or is
2099        defined in the same translation unit.
2100
2101        Since non-extern "C" decls need to be defined in the same
2102        translation unit, we can make the type internal.  */
2103     constrain_visibility (decl, VISIBILITY_ANON);
2104
2105   /* If visibility changed and DECL already has DECL_RTL, ensure
2106      symbol flags are updated.  */
2107   if ((DECL_VISIBILITY (decl) != orig_visibility
2108        || DECL_VISIBILITY_SPECIFIED (decl) != orig_visibility_specified)
2109       && ((TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
2110           || TREE_CODE (decl) == FUNCTION_DECL)
2111       && DECL_RTL_SET_P (decl))
2112     make_decl_rtl (decl);
2113 }
2114
2115 /* By default, static data members and function members receive
2116    the visibility of their containing class.  */
2117
2118 static void
2119 determine_visibility_from_class (tree decl, tree class_type)
2120 {
2121   if (DECL_VISIBILITY_SPECIFIED (decl))
2122     return;
2123
2124   if (visibility_options.inlines_hidden
2125       /* Don't do this for inline templates; specializations might not be
2126          inline, and we don't want them to inherit the hidden
2127          visibility.  We'll set it here for all inline instantiations.  */
2128       && !processing_template_decl
2129       && TREE_CODE (decl) == FUNCTION_DECL
2130       && DECL_DECLARED_INLINE_P (decl)
2131       && (! DECL_LANG_SPECIFIC (decl)
2132           || ! DECL_EXPLICIT_INSTANTIATION (decl)))
2133     DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
2134   else
2135     {
2136       /* Default to the class visibility.  */
2137       DECL_VISIBILITY (decl) = CLASSTYPE_VISIBILITY (class_type);
2138       DECL_VISIBILITY_SPECIFIED (decl)
2139         = CLASSTYPE_VISIBILITY_SPECIFIED (class_type);
2140     }
2141
2142   /* Give the target a chance to override the visibility associated
2143      with DECL.  */
2144   if (TREE_CODE (decl) == VAR_DECL
2145       && (DECL_TINFO_P (decl)
2146           || (DECL_VTABLE_OR_VTT_P (decl)
2147               /* Construction virtual tables are not exported because
2148                  they cannot be referred to from other object files;
2149                  their name is not standardized by the ABI.  */
2150               && !DECL_CONSTRUCTION_VTABLE_P (decl)))
2151       && TREE_PUBLIC (decl)
2152       && !DECL_REALLY_EXTERN (decl)
2153       && !CLASSTYPE_VISIBILITY_SPECIFIED (class_type))
2154     targetm.cxx.determine_class_data_visibility (decl);
2155 }
2156
2157 /* Constrain the visibility of a class TYPE based on the visibility of its
2158    field types.  Warn if any fields require lesser visibility.  */
2159
2160 void
2161 constrain_class_visibility (tree type)
2162 {
2163   tree binfo;
2164   tree t;
2165   int i;
2166
2167   int vis = type_visibility (type);
2168
2169   if (vis == VISIBILITY_ANON
2170       || DECL_IN_SYSTEM_HEADER (TYPE_MAIN_DECL (type)))
2171     return;
2172
2173   /* Don't warn about visibility if the class has explicit visibility.  */
2174   if (CLASSTYPE_VISIBILITY_SPECIFIED (type))
2175     vis = VISIBILITY_INTERNAL;
2176
2177   for (t = TYPE_FIELDS (type); t; t = TREE_CHAIN (t))
2178     if (TREE_CODE (t) == FIELD_DECL && TREE_TYPE (t) != error_mark_node)
2179       {
2180         tree ftype = strip_pointer_or_array_types (TREE_TYPE (t));
2181         int subvis = type_visibility (ftype);
2182
2183         if (subvis == VISIBILITY_ANON)
2184           {
2185             if (!in_main_input_context ())
2186               warning (0, "\
2187 %qT has a field %qD whose type uses the anonymous namespace",
2188                        type, t);
2189           }
2190         else if (MAYBE_CLASS_TYPE_P (ftype)
2191                  && vis < VISIBILITY_HIDDEN
2192                  && subvis >= VISIBILITY_HIDDEN)
2193           warning (OPT_Wattributes, "\
2194 %qT declared with greater visibility than the type of its field %qD",
2195                    type, t);
2196       }
2197
2198   binfo = TYPE_BINFO (type);
2199   for (i = 0; BINFO_BASE_ITERATE (binfo, i, t); ++i)
2200     {
2201       int subvis = type_visibility (TREE_TYPE (t));
2202
2203       if (subvis == VISIBILITY_ANON)
2204         {
2205           if (!in_main_input_context())
2206             warning (0, "\
2207 %qT has a base %qT whose type uses the anonymous namespace",
2208                      type, TREE_TYPE (t));
2209         }
2210       else if (vis < VISIBILITY_HIDDEN
2211                && subvis >= VISIBILITY_HIDDEN)
2212         warning (OPT_Wattributes, "\
2213 %qT declared with greater visibility than its base %qT",
2214                  type, TREE_TYPE (t));
2215     }
2216 }
2217
2218 /* DECL is a FUNCTION_DECL or VAR_DECL.  If the object file linkage
2219    for DECL has not already been determined, do so now by setting
2220    DECL_EXTERNAL, DECL_COMDAT and other related flags.  Until this
2221    function is called entities with vague linkage whose definitions
2222    are available must have TREE_PUBLIC set.
2223
2224    If this function decides to place DECL in COMDAT, it will set
2225    appropriate flags -- but will not clear DECL_EXTERNAL.  It is up to
2226    the caller to decide whether or not to clear DECL_EXTERNAL.  Some
2227    callers defer that decision until it is clear that DECL is actually
2228    required.  */
2229
2230 void
2231 import_export_decl (tree decl)
2232 {
2233   int emit_p;
2234   bool comdat_p;
2235   bool import_p;
2236   tree class_type = NULL_TREE;
2237
2238   if (DECL_INTERFACE_KNOWN (decl))
2239     return;
2240
2241   /* We cannot determine what linkage to give to an entity with vague
2242      linkage until the end of the file.  For example, a virtual table
2243      for a class will be defined if and only if the key method is
2244      defined in this translation unit.  As a further example, consider
2245      that when compiling a translation unit that uses PCH file with
2246      "-frepo" it would be incorrect to make decisions about what
2247      entities to emit when building the PCH; those decisions must be
2248      delayed until the repository information has been processed.  */
2249   gcc_assert (at_eof);
2250   /* Object file linkage for explicit instantiations is handled in
2251      mark_decl_instantiated.  For static variables in functions with
2252      vague linkage, maybe_commonize_var is used.
2253
2254      Therefore, the only declarations that should be provided to this
2255      function are those with external linkage that are:
2256
2257      * implicit instantiations of function templates
2258
2259      * inline function
2260
2261      * implicit instantiations of static data members of class
2262        templates
2263
2264      * virtual tables
2265
2266      * typeinfo objects
2267
2268      Furthermore, all entities that reach this point must have a
2269      definition available in this translation unit.
2270
2271      The following assertions check these conditions.  */
2272   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
2273               || TREE_CODE (decl) == VAR_DECL);
2274   /* Any code that creates entities with TREE_PUBLIC cleared should
2275      also set DECL_INTERFACE_KNOWN.  */
2276   gcc_assert (TREE_PUBLIC (decl));
2277   if (TREE_CODE (decl) == FUNCTION_DECL)
2278     gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
2279                 || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
2280                 || DECL_DECLARED_INLINE_P (decl));
2281   else
2282     gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
2283                 || DECL_VTABLE_OR_VTT_P (decl)
2284                 || DECL_TINFO_P (decl));
2285   /* Check that a definition of DECL is available in this translation
2286      unit.  */
2287   gcc_assert (!DECL_REALLY_EXTERN (decl));
2288
2289   /* Assume that DECL will not have COMDAT linkage.  */
2290   comdat_p = false;
2291   /* Assume that DECL will not be imported into this translation
2292      unit.  */
2293   import_p = false;
2294
2295   /* See if the repository tells us whether or not to emit DECL in
2296      this translation unit.  */
2297   emit_p = repo_emit_p (decl);
2298   if (emit_p == 0)
2299     import_p = true;
2300   else if (emit_p == 1)
2301     {
2302       /* The repository indicates that this entity should be defined
2303          here.  Make sure the back end honors that request.  */
2304       if (TREE_CODE (decl) == VAR_DECL)
2305         mark_needed (decl);
2306       else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)
2307                || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
2308         {
2309           tree clone;
2310           FOR_EACH_CLONE (clone, decl)
2311             mark_needed (clone);
2312         }
2313       else
2314         mark_needed (decl);
2315       /* Output the definition as an ordinary strong definition.  */
2316       DECL_EXTERNAL (decl) = 0;
2317       DECL_INTERFACE_KNOWN (decl) = 1;
2318       return;
2319     }
2320
2321   if (import_p)
2322     /* We have already decided what to do with this DECL; there is no
2323        need to check anything further.  */
2324     ;
2325   else if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
2326     {
2327       class_type = DECL_CONTEXT (decl);
2328       import_export_class (class_type);
2329       if (TYPE_FOR_JAVA (class_type))
2330         import_p = true;
2331       else if (CLASSTYPE_INTERFACE_KNOWN (class_type)
2332                && CLASSTYPE_INTERFACE_ONLY (class_type))
2333         import_p = true;
2334       else if ((!flag_weak || TARGET_WEAK_NOT_IN_ARCHIVE_TOC)
2335                && !CLASSTYPE_USE_TEMPLATE (class_type)
2336                && CLASSTYPE_KEY_METHOD (class_type)
2337                && !DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (class_type)))
2338         /* The ABI requires that all virtual tables be emitted with
2339            COMDAT linkage.  However, on systems where COMDAT symbols
2340            don't show up in the table of contents for a static
2341            archive, or on systems without weak symbols (where we
2342            approximate COMDAT linkage by using internal linkage), the
2343            linker will report errors about undefined symbols because
2344            it will not see the virtual table definition.  Therefore,
2345            in the case that we know that the virtual table will be
2346            emitted in only one translation unit, we make the virtual
2347            table an ordinary definition with external linkage.  */
2348         DECL_EXTERNAL (decl) = 0;
2349       else if (CLASSTYPE_INTERFACE_KNOWN (class_type))
2350         {
2351           /* CLASS_TYPE is being exported from this translation unit,
2352              so DECL should be defined here.  */
2353           if (!flag_weak && CLASSTYPE_EXPLICIT_INSTANTIATION (class_type))
2354             /* If a class is declared in a header with the "extern
2355                template" extension, then it will not be instantiated,
2356                even in translation units that would normally require
2357                it.  Often such classes are explicitly instantiated in
2358                one translation unit.  Therefore, the explicit
2359                instantiation must be made visible to other translation
2360                units.  */
2361             DECL_EXTERNAL (decl) = 0;
2362           else
2363             {
2364               /* The generic C++ ABI says that class data is always
2365                  COMDAT, even if there is a key function.  Some
2366                  variants (e.g., the ARM EABI) says that class data
2367                  only has COMDAT linkage if the class data might be
2368                  emitted in more than one translation unit.  When the
2369                  key method can be inline and is inline, we still have
2370                  to arrange for comdat even though
2371                  class_data_always_comdat is false.  */
2372               if (!CLASSTYPE_KEY_METHOD (class_type)
2373                   || DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (class_type))
2374                   || targetm.cxx.class_data_always_comdat ())
2375                 {
2376                   /* The ABI requires COMDAT linkage.  Normally, we
2377                      only emit COMDAT things when they are needed;
2378                      make sure that we realize that this entity is
2379                      indeed needed.  */
2380                   comdat_p = true;
2381                   mark_needed (decl);
2382                 }
2383             }
2384         }
2385       else if (!flag_implicit_templates
2386                && CLASSTYPE_IMPLICIT_INSTANTIATION (class_type))
2387         import_p = true;
2388       else
2389         comdat_p = true;
2390     }
2391   else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl))
2392     {
2393       tree type = TREE_TYPE (DECL_NAME (decl));
2394       if (CLASS_TYPE_P (type))
2395         {
2396           class_type = type;
2397           import_export_class (type);
2398           if (CLASSTYPE_INTERFACE_KNOWN (type)
2399               && TYPE_POLYMORPHIC_P (type)
2400               && CLASSTYPE_INTERFACE_ONLY (type)
2401               /* If -fno-rtti was specified, then we cannot be sure
2402                  that RTTI information will be emitted with the
2403                  virtual table of the class, so we must emit it
2404                  wherever it is used.  */
2405               && flag_rtti)
2406             import_p = true;
2407           else
2408             {
2409               if (CLASSTYPE_INTERFACE_KNOWN (type)
2410                   && !CLASSTYPE_INTERFACE_ONLY (type))
2411                 {
2412                   comdat_p = (targetm.cxx.class_data_always_comdat ()
2413                               || (CLASSTYPE_KEY_METHOD (type)
2414                                   && DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (type))));
2415                   mark_needed (decl);
2416                   if (!flag_weak)
2417                     {
2418                       comdat_p = false;
2419                       DECL_EXTERNAL (decl) = 0;
2420                     }
2421                 }
2422               else
2423                 comdat_p = true;
2424             }
2425         }
2426       else
2427         comdat_p = true;
2428     }
2429   else if (DECL_TEMPLATE_INSTANTIATION (decl)
2430            || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl))
2431     {
2432       /* DECL is an implicit instantiation of a function or static
2433          data member.  */
2434       if ((flag_implicit_templates
2435            && !flag_use_repository)
2436           || (flag_implicit_inline_templates
2437               && TREE_CODE (decl) == FUNCTION_DECL
2438               && DECL_DECLARED_INLINE_P (decl)))
2439         comdat_p = true;
2440       else
2441         /* If we are not implicitly generating templates, then mark
2442            this entity as undefined in this translation unit.  */
2443         import_p = true;
2444     }
2445   else if (DECL_FUNCTION_MEMBER_P (decl))
2446     {
2447       if (!DECL_DECLARED_INLINE_P (decl))
2448         {
2449           tree ctype = DECL_CONTEXT (decl);
2450           import_export_class (ctype);
2451           if (CLASSTYPE_INTERFACE_KNOWN (ctype))
2452             {
2453               DECL_NOT_REALLY_EXTERN (decl)
2454                 = ! (CLASSTYPE_INTERFACE_ONLY (ctype)
2455                      || (DECL_DECLARED_INLINE_P (decl)
2456                          && ! flag_implement_inlines
2457                          && !DECL_VINDEX (decl)));
2458
2459               if (!DECL_NOT_REALLY_EXTERN (decl))
2460                 DECL_EXTERNAL (decl) = 1;
2461
2462               /* Always make artificials weak.  */
2463               if (DECL_ARTIFICIAL (decl) && flag_weak)
2464                 comdat_p = true;
2465               else
2466                 maybe_make_one_only (decl);
2467             }
2468         }
2469       else
2470         comdat_p = true;
2471     }
2472   else
2473     comdat_p = true;
2474
2475   if (import_p)
2476     {
2477       /* If we are importing DECL into this translation unit, mark is
2478          an undefined here.  */
2479       DECL_EXTERNAL (decl) = 1;
2480       DECL_NOT_REALLY_EXTERN (decl) = 0;
2481     }
2482   else if (comdat_p)
2483     {
2484       /* If we decided to put DECL in COMDAT, mark it accordingly at
2485          this point.  */
2486       comdat_linkage (decl);
2487     }
2488
2489   DECL_INTERFACE_KNOWN (decl) = 1;
2490 }
2491
2492 /* Return an expression that performs the destruction of DECL, which
2493    must be a VAR_DECL whose type has a non-trivial destructor, or is
2494    an array whose (innermost) elements have a non-trivial destructor.  */
2495
2496 tree
2497 build_cleanup (tree decl)
2498 {
2499   tree temp;
2500   tree type = TREE_TYPE (decl);
2501
2502   /* This function should only be called for declarations that really
2503      require cleanups.  */
2504   gcc_assert (!TYPE_HAS_TRIVIAL_DESTRUCTOR (type));
2505
2506   /* Treat all objects with destructors as used; the destructor may do
2507      something substantive.  */
2508   mark_used (decl);
2509
2510   if (TREE_CODE (type) == ARRAY_TYPE)
2511     temp = decl;
2512   else
2513     temp = build_address (decl);
2514   temp = build_delete (TREE_TYPE (temp), temp,
2515                        sfk_complete_destructor,
2516                        LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR, 0);
2517   return temp;
2518 }
2519
2520 /* Returns the initialization guard variable for the variable DECL,
2521    which has static storage duration.  */
2522
2523 tree
2524 get_guard (tree decl)
2525 {
2526   tree sname;
2527   tree guard;
2528
2529   sname = mangle_guard_variable (decl);
2530   guard = IDENTIFIER_GLOBAL_VALUE (sname);
2531   if (! guard)
2532     {
2533       tree guard_type;
2534
2535       /* We use a type that is big enough to contain a mutex as well
2536          as an integer counter.  */
2537       guard_type = targetm.cxx.guard_type ();
2538       guard = build_decl (DECL_SOURCE_LOCATION (decl),
2539                           VAR_DECL, sname, guard_type);
2540
2541       /* The guard should have the same linkage as what it guards.  */
2542       TREE_PUBLIC (guard) = TREE_PUBLIC (decl);
2543       TREE_STATIC (guard) = TREE_STATIC (decl);
2544       DECL_COMMON (guard) = DECL_COMMON (decl);
2545       DECL_COMDAT_GROUP (guard) = DECL_COMDAT_GROUP (decl);
2546       if (TREE_PUBLIC (decl))
2547         DECL_WEAK (guard) = DECL_WEAK (decl);
2548       DECL_VISIBILITY (guard) = DECL_VISIBILITY (decl);
2549       DECL_VISIBILITY_SPECIFIED (guard) = DECL_VISIBILITY_SPECIFIED (decl);
2550
2551       DECL_ARTIFICIAL (guard) = 1;
2552       DECL_IGNORED_P (guard) = 1;
2553       TREE_USED (guard) = 1;
2554       pushdecl_top_level_and_finish (guard, NULL_TREE);
2555     }
2556   return guard;
2557 }
2558
2559 /* Return those bits of the GUARD variable that should be set when the
2560    guarded entity is actually initialized.  */
2561
2562 static tree
2563 get_guard_bits (tree guard)
2564 {
2565   if (!targetm.cxx.guard_mask_bit ())
2566     {
2567       /* We only set the first byte of the guard, in order to leave room
2568          for a mutex in the high-order bits.  */
2569       guard = build1 (ADDR_EXPR,
2570                       build_pointer_type (TREE_TYPE (guard)),
2571                       guard);
2572       guard = build1 (NOP_EXPR,
2573                       build_pointer_type (char_type_node),
2574                       guard);
2575       guard = build1 (INDIRECT_REF, char_type_node, guard);
2576     }
2577
2578   return guard;
2579 }
2580
2581 /* Return an expression which determines whether or not the GUARD
2582    variable has already been initialized.  */
2583
2584 tree
2585 get_guard_cond (tree guard)
2586 {
2587   tree guard_value;
2588
2589   /* Check to see if the GUARD is zero.  */
2590   guard = get_guard_bits (guard);
2591
2592   /* Mask off all but the low bit.  */
2593   if (targetm.cxx.guard_mask_bit ())
2594     {
2595       guard_value = integer_one_node;
2596       if (!same_type_p (TREE_TYPE (guard_value), TREE_TYPE (guard)))
2597         guard_value = convert (TREE_TYPE (guard), guard_value);
2598       guard = cp_build_binary_op (input_location,
2599                                   BIT_AND_EXPR, guard, guard_value,
2600                                   tf_warning_or_error);
2601     }
2602
2603   guard_value = integer_zero_node;
2604   if (!same_type_p (TREE_TYPE (guard_value), TREE_TYPE (guard)))
2605     guard_value = convert (TREE_TYPE (guard), guard_value);
2606   return cp_build_binary_op (input_location,
2607                              EQ_EXPR, guard, guard_value,
2608                              tf_warning_or_error);
2609 }
2610
2611 /* Return an expression which sets the GUARD variable, indicating that
2612    the variable being guarded has been initialized.  */
2613
2614 tree
2615 set_guard (tree guard)
2616 {
2617   tree guard_init;
2618
2619   /* Set the GUARD to one.  */
2620   guard = get_guard_bits (guard);
2621   guard_init = integer_one_node;
2622   if (!same_type_p (TREE_TYPE (guard_init), TREE_TYPE (guard)))
2623     guard_init = convert (TREE_TYPE (guard), guard_init);
2624   return cp_build_modify_expr (guard, NOP_EXPR, guard_init, 
2625                                tf_warning_or_error);
2626 }
2627
2628 /* Start the process of running a particular set of global constructors
2629    or destructors.  Subroutine of do_[cd]tors.  */
2630
2631 static tree
2632 start_objects (int method_type, int initp)
2633 {
2634   tree body;
2635   tree fndecl;
2636   char type[10];
2637
2638   /* Make ctor or dtor function.  METHOD_TYPE may be 'I' or 'D'.  */
2639
2640   if (initp != DEFAULT_INIT_PRIORITY)
2641     {
2642       char joiner;
2643
2644 #ifdef JOINER
2645       joiner = JOINER;
2646 #else
2647       joiner = '_';
2648 #endif
2649
2650       sprintf (type, "%c%c%.5u", method_type, joiner, initp);
2651     }
2652   else
2653     sprintf (type, "%c", method_type);
2654
2655   fndecl = build_lang_decl (FUNCTION_DECL,
2656                             get_file_function_name (type),
2657                             build_function_type (void_type_node,
2658                                                  void_list_node));
2659   start_preparsed_function (fndecl, /*attrs=*/NULL_TREE, SF_PRE_PARSED);
2660
2661   TREE_PUBLIC (current_function_decl) = 0;
2662
2663   /* Mark as artificial because it's not explicitly in the user's
2664      source code.  */
2665   DECL_ARTIFICIAL (current_function_decl) = 1;
2666
2667   /* Mark this declaration as used to avoid spurious warnings.  */
2668   TREE_USED (current_function_decl) = 1;
2669
2670   /* Mark this function as a global constructor or destructor.  */
2671   if (method_type == 'I')
2672     DECL_GLOBAL_CTOR_P (current_function_decl) = 1;
2673   else
2674     DECL_GLOBAL_DTOR_P (current_function_decl) = 1;
2675
2676   body = begin_compound_stmt (BCS_FN_BODY);
2677
2678   return body;
2679 }
2680
2681 /* Finish the process of running a particular set of global constructors
2682    or destructors.  Subroutine of do_[cd]tors.  */
2683
2684 static void
2685 finish_objects (int method_type, int initp, tree body)
2686 {
2687   tree fn;
2688
2689   /* Finish up.  */
2690   finish_compound_stmt (body);
2691   fn = finish_function (0);
2692
2693   if (method_type == 'I')
2694     {
2695       DECL_STATIC_CONSTRUCTOR (fn) = 1;
2696       decl_init_priority_insert (fn, initp);
2697     }
2698   else
2699     {
2700       DECL_STATIC_DESTRUCTOR (fn) = 1;
2701       decl_fini_priority_insert (fn, initp);
2702     }
2703
2704   expand_or_defer_fn (fn);
2705 }
2706
2707 /* The names of the parameters to the function created to handle
2708    initializations and destructions for objects with static storage
2709    duration.  */
2710 #define INITIALIZE_P_IDENTIFIER "__initialize_p"
2711 #define PRIORITY_IDENTIFIER "__priority"
2712
2713 /* The name of the function we create to handle initializations and
2714    destructions for objects with static storage duration.  */
2715 #define SSDF_IDENTIFIER "__static_initialization_and_destruction"
2716
2717 /* The declaration for the __INITIALIZE_P argument.  */
2718 static GTY(()) tree initialize_p_decl;
2719
2720 /* The declaration for the __PRIORITY argument.  */
2721 static GTY(()) tree priority_decl;
2722
2723 /* The declaration for the static storage duration function.  */
2724 static GTY(()) tree ssdf_decl;
2725
2726 /* All the static storage duration functions created in this
2727    translation unit.  */
2728 static GTY(()) VEC(tree,gc) *ssdf_decls;
2729
2730 /* A map from priority levels to information about that priority
2731    level.  There may be many such levels, so efficient lookup is
2732    important.  */
2733 static splay_tree priority_info_map;
2734
2735 /* Begins the generation of the function that will handle all
2736    initialization and destruction of objects with static storage
2737    duration.  The function generated takes two parameters of type
2738    `int': __INITIALIZE_P and __PRIORITY.  If __INITIALIZE_P is
2739    nonzero, it performs initializations.  Otherwise, it performs
2740    destructions.  It only performs those initializations or
2741    destructions with the indicated __PRIORITY.  The generated function
2742    returns no value.
2743
2744    It is assumed that this function will only be called once per
2745    translation unit.  */
2746
2747 static tree
2748 start_static_storage_duration_function (unsigned count)
2749 {
2750   tree parm_types;
2751   tree type;
2752   tree body;
2753   char id[sizeof (SSDF_IDENTIFIER) + 1 /* '\0' */ + 32];
2754
2755   /* Create the identifier for this function.  It will be of the form
2756      SSDF_IDENTIFIER_<number>.  */
2757   sprintf (id, "%s_%u", SSDF_IDENTIFIER, count);
2758
2759   /* Create the parameters.  */
2760   parm_types = void_list_node;
2761   parm_types = tree_cons (NULL_TREE, integer_type_node, parm_types);
2762   parm_types = tree_cons (NULL_TREE, integer_type_node, parm_types);
2763   type = build_function_type (void_type_node, parm_types);
2764
2765   /* Create the FUNCTION_DECL itself.  */
2766   ssdf_decl = build_lang_decl (FUNCTION_DECL,
2767                                get_identifier (id),
2768                                type);
2769   TREE_PUBLIC (ssdf_decl) = 0;
2770   DECL_ARTIFICIAL (ssdf_decl) = 1;
2771
2772   /* Put this function in the list of functions to be called from the
2773      static constructors and destructors.  */
2774   if (!ssdf_decls)
2775     {
2776       ssdf_decls = VEC_alloc (tree, gc, 32);
2777
2778       /* Take this opportunity to initialize the map from priority
2779          numbers to information about that priority level.  */
2780       priority_info_map = splay_tree_new (splay_tree_compare_ints,
2781                                           /*delete_key_fn=*/0,
2782                                           /*delete_value_fn=*/
2783                                           (splay_tree_delete_value_fn) &free);
2784
2785       /* We always need to generate functions for the
2786          DEFAULT_INIT_PRIORITY so enter it now.  That way when we walk
2787          priorities later, we'll be sure to find the
2788          DEFAULT_INIT_PRIORITY.  */
2789       get_priority_info (DEFAULT_INIT_PRIORITY);
2790     }
2791
2792   VEC_safe_push (tree, gc, ssdf_decls, ssdf_decl);
2793
2794   /* Create the argument list.  */
2795   initialize_p_decl = cp_build_parm_decl
2796     (get_identifier (INITIALIZE_P_IDENTIFIER), integer_type_node);
2797   DECL_CONTEXT (initialize_p_decl) = ssdf_decl;
2798   TREE_USED (initialize_p_decl) = 1;
2799   priority_decl = cp_build_parm_decl
2800     (get_identifier (PRIORITY_IDENTIFIER), integer_type_node);
2801   DECL_CONTEXT (priority_decl) = ssdf_decl;
2802   TREE_USED (priority_decl) = 1;
2803
2804   TREE_CHAIN (initialize_p_decl) = priority_decl;
2805   DECL_ARGUMENTS (ssdf_decl) = initialize_p_decl;
2806
2807   /* Put the function in the global scope.  */
2808   pushdecl (ssdf_decl);
2809
2810   /* Start the function itself.  This is equivalent to declaring the
2811      function as:
2812
2813        static void __ssdf (int __initialize_p, init __priority_p);
2814
2815      It is static because we only need to call this function from the
2816      various constructor and destructor functions for this module.  */
2817   start_preparsed_function (ssdf_decl,
2818                             /*attrs=*/NULL_TREE,
2819                             SF_PRE_PARSED);
2820
2821   /* Set up the scope of the outermost block in the function.  */
2822   body = begin_compound_stmt (BCS_FN_BODY);
2823
2824   return body;
2825 }
2826
2827 /* Finish the generation of the function which performs initialization
2828    and destruction of objects with static storage duration.  After
2829    this point, no more such objects can be created.  */
2830
2831 static void
2832 finish_static_storage_duration_function (tree body)
2833 {
2834   /* Close out the function.  */
2835   finish_compound_stmt (body);
2836   expand_or_defer_fn (finish_function (0));
2837 }
2838
2839 /* Return the information about the indicated PRIORITY level.  If no
2840    code to handle this level has yet been generated, generate the
2841    appropriate prologue.  */
2842
2843 static priority_info
2844 get_priority_info (int priority)
2845 {
2846   priority_info pi;
2847   splay_tree_node n;
2848
2849   n = splay_tree_lookup (priority_info_map,
2850                          (splay_tree_key) priority);
2851   if (!n)
2852     {
2853       /* Create a new priority information structure, and insert it
2854          into the map.  */
2855       pi = XNEW (struct priority_info_s);
2856       pi->initializations_p = 0;
2857       pi->destructions_p = 0;
2858       splay_tree_insert (priority_info_map,
2859                          (splay_tree_key) priority,
2860                          (splay_tree_value) pi);
2861     }
2862   else
2863     pi = (priority_info) n->value;
2864
2865   return pi;
2866 }
2867
2868 /* The effective initialization priority of a DECL.  */
2869
2870 #define DECL_EFFECTIVE_INIT_PRIORITY(decl)                                    \
2871         ((!DECL_HAS_INIT_PRIORITY_P (decl) || DECL_INIT_PRIORITY (decl) == 0) \
2872          ? DEFAULT_INIT_PRIORITY : DECL_INIT_PRIORITY (decl))
2873
2874 /* Whether a DECL needs a guard to protect it against multiple
2875    initialization.  */
2876
2877 #define NEEDS_GUARD_P(decl) (TREE_PUBLIC (decl) && (DECL_COMMON (decl)      \
2878                                                     || DECL_ONE_ONLY (decl) \
2879                                                     || DECL_WEAK (decl)))
2880
2881 /* Called from one_static_initialization_or_destruction(),
2882    via walk_tree.
2883    Walks the initializer list of a global variable and looks for
2884    temporary variables (DECL_NAME() == NULL and DECL_ARTIFICIAL != 0)
2885    and that have their DECL_CONTEXT() == NULL.
2886    For each such temporary variable, set their DECL_CONTEXT() to
2887    the current function. This is necessary because otherwise
2888    some optimizers (enabled by -O2 -fprofile-arcs) might crash
2889    when trying to refer to a temporary variable that does not have
2890    it's DECL_CONTECT() properly set.  */
2891 static tree 
2892 fix_temporary_vars_context_r (tree *node,
2893                               int  *unused ATTRIBUTE_UNUSED,
2894                               void *unused1 ATTRIBUTE_UNUSED)
2895 {
2896   gcc_assert (current_function_decl);
2897
2898   if (TREE_CODE (*node) == BIND_EXPR)
2899     {
2900       tree var;
2901
2902       for (var = BIND_EXPR_VARS (*node); var; var = TREE_CHAIN (var))
2903         if (TREE_CODE (var) == VAR_DECL
2904           && !DECL_NAME (var)
2905           && DECL_ARTIFICIAL (var)
2906           && !DECL_CONTEXT (var))
2907           DECL_CONTEXT (var) = current_function_decl;
2908     }
2909
2910   return NULL_TREE;
2911 }
2912
2913 /* Set up to handle the initialization or destruction of DECL.  If
2914    INITP is nonzero, we are initializing the variable.  Otherwise, we
2915    are destroying it.  */
2916
2917 static void
2918 one_static_initialization_or_destruction (tree decl, tree init, bool initp)
2919 {
2920   tree guard_if_stmt = NULL_TREE;
2921   tree guard;
2922
2923   /* If we are supposed to destruct and there's a trivial destructor,
2924      nothing has to be done.  */
2925   if (!initp
2926       && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2927     return;
2928
2929   /* Trick the compiler into thinking we are at the file and line
2930      where DECL was declared so that error-messages make sense, and so
2931      that the debugger will show somewhat sensible file and line
2932      information.  */
2933   input_location = DECL_SOURCE_LOCATION (decl);
2934
2935   /* Make sure temporary variables in the initialiser all have
2936      their DECL_CONTEXT() set to a value different from NULL_TREE.
2937      This can happen when global variables initialisers are built.
2938      In that case, the DECL_CONTEXT() of the global variables _AND_ of all 
2939      the temporary variables that might have been generated in the
2940      accompagning initialisers is NULL_TREE, meaning the variables have been
2941      declared in the global namespace.
2942      What we want to do here is to fix that and make sure the DECL_CONTEXT()
2943      of the temporaries are set to the current function decl.  */
2944   cp_walk_tree_without_duplicates (&init,
2945                                    fix_temporary_vars_context_r,
2946                                    NULL);
2947
2948   /* Because of:
2949
2950        [class.access.spec]
2951
2952        Access control for implicit calls to the constructors,
2953        the conversion functions, or the destructor called to
2954        create and destroy a static data member is performed as
2955        if these calls appeared in the scope of the member's
2956        class.
2957
2958      we pretend we are in a static member function of the class of
2959      which the DECL is a member.  */
2960   if (member_p (decl))
2961     {
2962       DECL_CONTEXT (current_function_decl) = DECL_CONTEXT (decl);
2963       DECL_STATIC_FUNCTION_P (current_function_decl) = 1;
2964     }
2965
2966   /* Assume we don't need a guard.  */
2967   guard = NULL_TREE;
2968   /* We need a guard if this is an object with external linkage that
2969      might be initialized in more than one place.  (For example, a
2970      static data member of a template, when the data member requires
2971      construction.)  */
2972   if (NEEDS_GUARD_P (decl))
2973     {
2974       tree guard_cond;
2975
2976       guard = get_guard (decl);
2977
2978       /* When using __cxa_atexit, we just check the GUARD as we would
2979          for a local static.  */
2980       if (flag_use_cxa_atexit)
2981         {
2982           /* When using __cxa_atexit, we never try to destroy
2983              anything from a static destructor.  */
2984           gcc_assert (initp);
2985           guard_cond = get_guard_cond (guard);
2986         }
2987       /* If we don't have __cxa_atexit, then we will be running
2988          destructors from .fini sections, or their equivalents.  So,
2989          we need to know how many times we've tried to initialize this
2990          object.  We do initializations only if the GUARD is zero,
2991          i.e., if we are the first to initialize the variable.  We do
2992          destructions only if the GUARD is one, i.e., if we are the
2993          last to destroy the variable.  */
2994       else if (initp)
2995         guard_cond
2996           = cp_build_binary_op (input_location,
2997                                 EQ_EXPR,
2998                                 cp_build_unary_op (PREINCREMENT_EXPR,
2999                                                    guard,
3000                                                    /*noconvert=*/1,
3001                                                    tf_warning_or_error),
3002                                 integer_one_node,
3003                                 tf_warning_or_error);
3004       else
3005         guard_cond
3006           = cp_build_binary_op (input_location,
3007                                 EQ_EXPR,
3008                                 cp_build_unary_op (PREDECREMENT_EXPR,
3009                                                    guard,
3010                                                    /*noconvert=*/1,
3011                                                    tf_warning_or_error),
3012                                 integer_zero_node,
3013                                 tf_warning_or_error);
3014
3015       guard_if_stmt = begin_if_stmt ();
3016       finish_if_stmt_cond (guard_cond, guard_if_stmt);
3017     }
3018
3019
3020   /* If we're using __cxa_atexit, we have not already set the GUARD,
3021      so we must do so now.  */
3022   if (guard && initp && flag_use_cxa_atexit)
3023     finish_expr_stmt (set_guard (guard));
3024
3025   /* Perform the initialization or destruction.  */
3026   if (initp)
3027     {
3028       if (init)
3029         finish_expr_stmt (init);
3030
3031       /* If we're using __cxa_atexit, register a function that calls the
3032          destructor for the object.  */
3033       if (flag_use_cxa_atexit)
3034         finish_expr_stmt (register_dtor_fn (decl));
3035     }
3036   else
3037     finish_expr_stmt (build_cleanup (decl));
3038
3039   /* Finish the guard if-stmt, if necessary.  */
3040   if (guard)
3041     {
3042       finish_then_clause (guard_if_stmt);
3043       finish_if_stmt (guard_if_stmt);
3044     }
3045
3046   /* Now that we're done with DECL we don't need to pretend to be a
3047      member of its class any longer.  */
3048   DECL_CONTEXT (current_function_decl) = NULL_TREE;
3049   DECL_STATIC_FUNCTION_P (current_function_decl) = 0;
3050 }
3051
3052 /* Generate code to do the initialization or destruction of the decls in VARS,
3053    a TREE_LIST of VAR_DECL with static storage duration.
3054    Whether initialization or destruction is performed is specified by INITP.  */
3055
3056 static void
3057 do_static_initialization_or_destruction (tree vars, bool initp)
3058 {
3059   tree node, init_if_stmt, cond;
3060
3061   /* Build the outer if-stmt to check for initialization or destruction.  */
3062   init_if_stmt = begin_if_stmt ();
3063   cond = initp ? integer_one_node : integer_zero_node;
3064   cond = cp_build_binary_op (input_location,
3065                              EQ_EXPR,
3066                              initialize_p_decl,
3067                              cond,
3068                              tf_warning_or_error);
3069   finish_if_stmt_cond (cond, init_if_stmt);
3070
3071   node = vars;
3072   do {
3073     tree decl = TREE_VALUE (node);
3074     tree priority_if_stmt;
3075     int priority;
3076     priority_info pi;
3077
3078     /* If we don't need a destructor, there's nothing to do.  Avoid
3079        creating a possibly empty if-stmt.  */
3080     if (!initp && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
3081       {
3082         node = TREE_CHAIN (node);
3083         continue;
3084       }
3085
3086     /* Remember that we had an initialization or finalization at this
3087        priority.  */
3088     priority = DECL_EFFECTIVE_INIT_PRIORITY (decl);
3089     pi = get_priority_info (priority);
3090     if (initp)
3091       pi->initializations_p = 1;
3092     else
3093       pi->destructions_p = 1;
3094
3095     /* Conditionalize this initialization on being in the right priority
3096        and being initializing/finalizing appropriately.  */
3097     priority_if_stmt = begin_if_stmt ();
3098     cond = cp_build_binary_op (input_location,
3099                                EQ_EXPR,
3100                                priority_decl,
3101                                build_int_cst (NULL_TREE, priority),
3102                                tf_warning_or_error);
3103     finish_if_stmt_cond (cond, priority_if_stmt);
3104
3105     /* Process initializers with same priority.  */
3106     for (; node
3107            && DECL_EFFECTIVE_INIT_PRIORITY (TREE_VALUE (node)) == priority;
3108          node = TREE_CHAIN (node))
3109       /* Do one initialization or destruction.  */
3110       one_static_initialization_or_destruction (TREE_VALUE (node),
3111                                                 TREE_PURPOSE (node), initp);
3112
3113     /* Finish up the priority if-stmt body.  */
3114     finish_then_clause (priority_if_stmt);
3115     finish_if_stmt (priority_if_stmt);
3116
3117   } while (node);
3118
3119   /* Finish up the init/destruct if-stmt body.  */
3120   finish_then_clause (init_if_stmt);
3121   finish_if_stmt (init_if_stmt);
3122 }
3123
3124 /* VARS is a list of variables with static storage duration which may
3125    need initialization and/or finalization.  Remove those variables
3126    that don't really need to be initialized or finalized, and return
3127    the resulting list.  The order in which the variables appear in
3128    VARS is in reverse order of the order in which they should actually
3129    be initialized.  The list we return is in the unreversed order;
3130    i.e., the first variable should be initialized first.  */
3131
3132 static tree
3133 prune_vars_needing_no_initialization (tree *vars)
3134 {
3135   tree *var = vars;
3136   tree result = NULL_TREE;
3137
3138   while (*var)
3139     {
3140       tree t = *var;
3141       tree decl = TREE_VALUE (t);
3142       tree init = TREE_PURPOSE (t);
3143
3144       /* Deal gracefully with error.  */
3145       if (decl == error_mark_node)
3146         {
3147           var = &TREE_CHAIN (t);
3148           continue;
3149         }
3150
3151       /* The only things that can be initialized are variables.  */
3152       gcc_assert (TREE_CODE (decl) == VAR_DECL);
3153
3154       /* If this object is not defined, we don't need to do anything
3155          here.  */
3156       if (DECL_EXTERNAL (decl))
3157         {
3158           var = &TREE_CHAIN (t);
3159           continue;
3160         }
3161
3162       /* Also, if the initializer already contains errors, we can bail
3163          out now.  */
3164       if (init && TREE_CODE (init) == TREE_LIST
3165           && value_member (error_mark_node, init))
3166         {
3167           var = &TREE_CHAIN (t);
3168           continue;
3169         }
3170
3171       /* This variable is going to need initialization and/or
3172          finalization, so we add it to the list.  */
3173       *var = TREE_CHAIN (t);
3174       TREE_CHAIN (t) = result;
3175       result = t;
3176     }
3177
3178   return result;
3179 }
3180
3181 /* Make sure we have told the back end about all the variables in
3182    VARS.  */
3183
3184 static void
3185 write_out_vars (tree vars)
3186 {
3187   tree v;
3188
3189   for (v = vars; v; v = TREE_CHAIN (v))
3190     {
3191       tree var = TREE_VALUE (v);
3192       if (!var_finalized_p (var))
3193         {
3194           import_export_decl (var);
3195           rest_of_decl_compilation (var, 1, 1);
3196         }
3197     }
3198 }
3199
3200 /* Generate a static constructor (if CONSTRUCTOR_P) or destructor
3201    (otherwise) that will initialize all global objects with static
3202    storage duration having the indicated PRIORITY.  */
3203
3204 static void
3205 generate_ctor_or_dtor_function (bool constructor_p, int priority,
3206                                 location_t *locus)
3207 {
3208   char function_key;
3209   tree arguments;
3210   tree fndecl;
3211   tree body;
3212   size_t i;
3213
3214   input_location = *locus;
3215   /* ??? */
3216   /* Was: locus->line++; */
3217
3218   /* We use `I' to indicate initialization and `D' to indicate
3219      destruction.  */
3220   function_key = constructor_p ? 'I' : 'D';
3221
3222   /* We emit the function lazily, to avoid generating empty
3223      global constructors and destructors.  */
3224   body = NULL_TREE;
3225
3226   /* For Objective-C++, we may need to initialize metadata found in this module.
3227      This must be done _before_ any other static initializations.  */
3228   if (c_dialect_objc () && (priority == DEFAULT_INIT_PRIORITY)
3229       && constructor_p && objc_static_init_needed_p ())
3230     {
3231       body = start_objects (function_key, priority);
3232       objc_generate_static_init_call (NULL_TREE);
3233     }
3234
3235   /* Call the static storage duration function with appropriate
3236      arguments.  */
3237   for (i = 0; VEC_iterate (tree, ssdf_decls, i, fndecl); ++i)
3238     {
3239       /* Calls to pure or const functions will expand to nothing.  */
3240       if (! (flags_from_decl_or_type (fndecl) & (ECF_CONST | ECF_PURE)))
3241         {
3242           if (! body)
3243             body = start_objects (function_key, priority);
3244
3245           arguments = tree_cons (NULL_TREE,
3246                                  build_int_cst (NULL_TREE, priority),
3247                                  NULL_TREE);
3248           arguments = tree_cons (NULL_TREE,
3249                                  build_int_cst (NULL_TREE, constructor_p),
3250                                  arguments);
3251           finish_expr_stmt (cp_build_function_call (fndecl, arguments,
3252                                                     tf_warning_or_error));
3253         }
3254     }
3255
3256   /* Close out the function.  */
3257   if (body)
3258     finish_objects (function_key, priority, body);
3259 }
3260
3261 /* Generate constructor and destructor functions for the priority
3262    indicated by N.  */
3263
3264 static int
3265 generate_ctor_and_dtor_functions_for_priority (splay_tree_node n, void * data)
3266 {
3267   location_t *locus = (location_t *) data;
3268   int priority = (int) n->key;
3269   priority_info pi = (priority_info) n->value;
3270
3271   /* Generate the functions themselves, but only if they are really
3272      needed.  */
3273   if (pi->initializations_p)
3274     generate_ctor_or_dtor_function (/*constructor_p=*/true, priority, locus);
3275   if (pi->destructions_p)
3276     generate_ctor_or_dtor_function (/*constructor_p=*/false, priority, locus);
3277
3278   /* Keep iterating.  */
3279   return 0;
3280 }
3281
3282 /* Called via LANGHOOK_CALLGRAPH_ANALYZE_EXPR.  It is supposed to mark
3283    decls referenced from front-end specific constructs; it will be called
3284    only for language-specific tree nodes.
3285
3286    Here we must deal with member pointers.  */
3287
3288 tree
3289 cxx_callgraph_analyze_expr (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED)
3290 {
3291   tree t = *tp;
3292
3293   switch (TREE_CODE (t))
3294     {
3295     case PTRMEM_CST:
3296       if (TYPE_PTRMEMFUNC_P (TREE_TYPE (t)))
3297         cgraph_mark_address_taken_node (cgraph_node (PTRMEM_CST_MEMBER (t)));
3298       break;
3299     case BASELINK:
3300       if (TREE_CODE (BASELINK_FUNCTIONS (t)) == FUNCTION_DECL)
3301         cgraph_mark_address_taken_node (cgraph_node (BASELINK_FUNCTIONS (t)));
3302       break;
3303     case VAR_DECL:
3304       if (DECL_VTABLE_OR_VTT_P (t))
3305         {
3306           /* The ABI requires that all virtual tables be emitted
3307              whenever one of them is.  */
3308           tree vtbl;
3309           for (vtbl = CLASSTYPE_VTABLES (DECL_CONTEXT (t));
3310                vtbl;
3311                vtbl = TREE_CHAIN (vtbl))
3312             mark_decl_referenced (vtbl);
3313         }
3314       else if (DECL_CONTEXT (t)
3315                && TREE_CODE (DECL_CONTEXT (t)) == FUNCTION_DECL)
3316         /* If we need a static variable in a function, then we
3317            need the containing function.  */
3318         mark_decl_referenced (DECL_CONTEXT (t));
3319       break;
3320     default:
3321       break;
3322     }
3323
3324   return NULL;
3325 }
3326
3327 /* Java requires that we be able to reference a local address for a
3328    method, and not be confused by PLT entries.  If hidden aliases are
3329    supported, collect and return all the functions for which we should
3330    emit a hidden alias.  */
3331
3332 static struct pointer_set_t *
3333 collect_candidates_for_java_method_aliases (void)
3334 {
3335   struct cgraph_node *node;
3336   struct pointer_set_t *candidates = NULL;
3337
3338 #ifndef HAVE_GAS_HIDDEN
3339   return candidates;
3340 #endif
3341
3342   for (node = cgraph_nodes; node ; node = node->next)
3343     {
3344       tree fndecl = node->decl;
3345
3346       if (DECL_CONTEXT (fndecl)
3347           && TYPE_P (DECL_CONTEXT (fndecl))
3348           && TYPE_FOR_JAVA (DECL_CONTEXT (fndecl))
3349           && TARGET_USE_LOCAL_THUNK_ALIAS_P (fndecl))
3350         {
3351           if (candidates == NULL)
3352             candidates = pointer_set_create ();
3353           pointer_set_insert (candidates, fndecl);
3354         }
3355     }
3356
3357   return candidates;
3358 }
3359
3360
3361 /* Java requires that we be able to reference a local address for a
3362    method, and not be confused by PLT entries.  If hidden aliases are
3363    supported, emit one for each java function that we've emitted.
3364    CANDIDATES is the set of FUNCTION_DECLs that were gathered
3365    by collect_candidates_for_java_method_aliases.  */
3366
3367 static void
3368 build_java_method_aliases (struct pointer_set_t *candidates)
3369 {
3370   struct cgraph_node *node;
3371
3372 #ifndef HAVE_GAS_HIDDEN
3373   return;
3374 #endif
3375
3376   for (node = cgraph_nodes; node ; node = node->next)
3377     {
3378       tree fndecl = node->decl;
3379
3380       if (TREE_ASM_WRITTEN (fndecl)
3381           && pointer_set_contains (candidates, fndecl))
3382         {
3383           /* Mangle the name in a predictable way; we need to reference
3384              this from a java compiled object file.  */
3385           tree oid, nid, alias;
3386           const char *oname;
3387           char *nname;
3388
3389           oid = DECL_ASSEMBLER_NAME (fndecl);
3390           oname = IDENTIFIER_POINTER (oid);
3391           gcc_assert (oname[0] == '_' && oname[1] == 'Z');
3392           nname = ACONCAT (("_ZGA", oname+2, NULL));
3393           nid = get_identifier (nname);
3394
3395           alias = make_alias_for (fndecl, nid);
3396           TREE_PUBLIC (alias) = 1;
3397           DECL_VISIBILITY (alias) = VISIBILITY_HIDDEN;
3398
3399           assemble_alias (alias, oid);
3400         }
3401     }
3402 }
3403
3404 /* Returns true iff there is a definition available for variable or
3405    function DECL.  */
3406
3407 static bool
3408 decl_defined_p (tree decl)
3409 {
3410   if (TREE_CODE (decl) == FUNCTION_DECL)
3411     return (DECL_INITIAL (decl) != NULL_TREE);
3412   else
3413     {
3414       gcc_assert (TREE_CODE (decl) == VAR_DECL);
3415       return !DECL_EXTERNAL (decl);
3416     }
3417 }
3418
3419 /* Complain that DECL uses a type with no linkage but is never defined.  */
3420
3421 static void
3422 no_linkage_error (tree decl)
3423 {
3424   tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
3425   if (TYPE_ANONYMOUS_P (t))
3426     {
3427       permerror (0, "%q+#D, declared using anonymous type, "
3428                  "is used but never defined", decl);
3429       if (is_typedef_decl (TYPE_NAME (t)))
3430         permerror (0, "%q+#D does not refer to the unqualified type, "
3431                    "so it is not used for linkage", TYPE_NAME (t));
3432     }
3433   else
3434     permerror (0, "%q+#D, declared using local type %qT, "
3435                "is used but never defined", decl, t);
3436 }
3437
3438 /* This routine is called at the end of compilation.
3439    Its job is to create all the code needed to initialize and
3440    destroy the global aggregates.  We do the destruction
3441    first, since that way we only need to reverse the decls once.  */
3442
3443 void
3444 cp_write_global_declarations (void)
3445 {
3446   tree vars;
3447   bool reconsider;
3448   size_t i;
3449   location_t locus;
3450   unsigned ssdf_count = 0;
3451   int retries = 0;
3452   tree decl;
3453   struct pointer_set_t *candidates;
3454
3455   locus = input_location;
3456   at_eof = 1;
3457
3458   /* Bad parse errors.  Just forget about it.  */
3459   if (! global_bindings_p () || current_class_type || decl_namespace_list)
3460     return;
3461
3462   if (pch_file)
3463     c_common_write_pch ();
3464
3465   /* FIXME - huh?  was  input_line -= 1;*/
3466
3467   /* We now have to write out all the stuff we put off writing out.
3468      These include:
3469
3470        o Template specializations that we have not yet instantiated,
3471          but which are needed.
3472        o Initialization and destruction for non-local objects with
3473          static storage duration.  (Local objects with static storage
3474          duration are initialized when their scope is first entered,
3475          and are cleaned up via atexit.)
3476        o Virtual function tables.
3477
3478      All of these may cause others to be needed.  For example,
3479      instantiating one function may cause another to be needed, and
3480      generating the initializer for an object may cause templates to be
3481      instantiated, etc., etc.  */
3482
3483   timevar_push (TV_VARCONST);
3484
3485   emit_support_tinfos ();
3486
3487   do
3488     {
3489       tree t;
3490       tree decl;
3491
3492       reconsider = false;
3493
3494       /* If there are templates that we've put off instantiating, do
3495          them now.  */
3496       instantiate_pending_templates (retries);
3497       ggc_collect ();
3498
3499       /* Write out virtual tables as required.  Note that writing out
3500          the virtual table for a template class may cause the
3501          instantiation of members of that class.  If we write out
3502          vtables then we remove the class from our list so we don't
3503          have to look at it again.  */
3504
3505       while (keyed_classes != NULL_TREE
3506              && maybe_emit_vtables (TREE_VALUE (keyed_classes)))
3507         {
3508           reconsider = true;
3509           keyed_classes = TREE_CHAIN (keyed_classes);
3510         }
3511
3512       t = keyed_classes;
3513       if (t != NULL_TREE)
3514         {
3515           tree next = TREE_CHAIN (t);
3516
3517           while (next)
3518             {
3519               if (maybe_emit_vtables (TREE_VALUE (next)))
3520                 {
3521                   reconsider = true;
3522                   TREE_CHAIN (t) = TREE_CHAIN (next);
3523                 }
3524               else
3525                 t = next;
3526
3527               next = TREE_CHAIN (t);
3528             }
3529         }
3530
3531       /* Write out needed type info variables.  We have to be careful
3532          looping through unemitted decls, because emit_tinfo_decl may
3533          cause other variables to be needed. New elements will be
3534          appended, and we remove from the vector those that actually
3535          get emitted.  */
3536       for (i = VEC_length (tree, unemitted_tinfo_decls);
3537            VEC_iterate (tree, unemitted_tinfo_decls, --i, t);)
3538         if (emit_tinfo_decl (t))
3539           {
3540             reconsider = true;
3541             VEC_unordered_remove (tree, unemitted_tinfo_decls, i);
3542           }
3543
3544       /* The list of objects with static storage duration is built up
3545          in reverse order.  We clear STATIC_AGGREGATES so that any new
3546          aggregates added during the initialization of these will be
3547          initialized in the correct order when we next come around the
3548          loop.  */
3549       vars = prune_vars_needing_no_initialization (&static_aggregates);
3550
3551       if (vars)
3552         {
3553           /* We need to start a new initialization function each time
3554              through the loop.  That's because we need to know which
3555              vtables have been referenced, and TREE_SYMBOL_REFERENCED
3556              isn't computed until a function is finished, and written
3557              out.  That's a deficiency in the back end.  When this is
3558              fixed, these initialization functions could all become
3559              inline, with resulting performance improvements.  */
3560           tree ssdf_body;
3561
3562           /* Set the line and file, so that it is obviously not from
3563              the source file.  */
3564           input_location = locus;
3565           ssdf_body = start_static_storage_duration_function (ssdf_count);
3566
3567           /* Make sure the back end knows about all the variables.  */
3568           write_out_vars (vars);
3569
3570           /* First generate code to do all the initializations.  */
3571           if (vars)
3572             do_static_initialization_or_destruction (vars, /*initp=*/true);
3573
3574           /* Then, generate code to do all the destructions.  Do these
3575              in reverse order so that the most recently constructed
3576              variable is the first destroyed.  If we're using
3577              __cxa_atexit, then we don't need to do this; functions
3578              were registered at initialization time to destroy the
3579              local statics.  */
3580           if (!flag_use_cxa_atexit && vars)
3581             {
3582               vars = nreverse (vars);
3583               do_static_initialization_or_destruction (vars, /*initp=*/false);
3584             }
3585           else
3586             vars = NULL_TREE;
3587
3588           /* Finish up the static storage duration function for this
3589              round.  */
3590           input_location = locus;
3591           finish_static_storage_duration_function (ssdf_body);
3592
3593           /* All those initializations and finalizations might cause
3594              us to need more inline functions, more template
3595              instantiations, etc.  */
3596           reconsider = true;
3597           ssdf_count++;
3598           /* ??? was:  locus.line++; */
3599         }
3600
3601       /* Go through the set of inline functions whose bodies have not
3602          been emitted yet.  If out-of-line copies of these functions
3603          are required, emit them.  */
3604       for (i = 0; VEC_iterate (tree, deferred_fns, i, decl); ++i)
3605         {
3606           /* Does it need synthesizing?  */
3607           if (DECL_DEFAULTED_FN (decl) && ! DECL_INITIAL (decl)
3608               && (! DECL_REALLY_EXTERN (decl) || possibly_inlined_p (decl)))
3609             {
3610               /* Even though we're already at the top-level, we push
3611                  there again.  That way, when we pop back a few lines
3612                  hence, all of our state is restored.  Otherwise,
3613                  finish_function doesn't clean things up, and we end
3614                  up with CURRENT_FUNCTION_DECL set.  */
3615               push_to_top_level ();
3616               /* The decl's location will mark where it was first
3617                  needed.  Save that so synthesize method can indicate
3618                  where it was needed from, in case of error  */
3619               input_location = DECL_SOURCE_LOCATION (decl);
3620               synthesize_method (decl);
3621               pop_from_top_level ();
3622               reconsider = true;
3623             }
3624
3625           if (!DECL_SAVED_TREE (decl))
3626             continue;
3627
3628           /* We lie to the back end, pretending that some functions
3629              are not defined when they really are.  This keeps these
3630              functions from being put out unnecessarily.  But, we must
3631              stop lying when the functions are referenced, or if they
3632              are not comdat since they need to be put out now.  If
3633              DECL_INTERFACE_KNOWN, then we have already set
3634              DECL_EXTERNAL appropriately, so there's no need to check
3635              again, and we do not want to clear DECL_EXTERNAL if a
3636              previous call to import_export_decl set it.
3637
3638              This is done in a separate for cycle, because if some
3639              deferred function is contained in another deferred
3640              function later in deferred_fns varray,
3641              rest_of_compilation would skip this function and we
3642              really cannot expand the same function twice.  */
3643           import_export_decl (decl);
3644           if (DECL_NOT_REALLY_EXTERN (decl)
3645               && DECL_INITIAL (decl)
3646               && decl_needed_p (decl))
3647             DECL_EXTERNAL (decl) = 0;
3648
3649           /* If we're going to need to write this function out, and
3650              there's already a body for it, create RTL for it now.
3651              (There might be no body if this is a method we haven't
3652              gotten around to synthesizing yet.)  */
3653           if (!DECL_EXTERNAL (decl)
3654               && decl_needed_p (decl)
3655               && !TREE_ASM_WRITTEN (decl)
3656               && !cgraph_node (decl)->local.finalized)
3657             {
3658               /* We will output the function; no longer consider it in this
3659                  loop.  */
3660               DECL_DEFER_OUTPUT (decl) = 0;
3661               /* Generate RTL for this function now that we know we
3662                  need it.  */
3663               expand_or_defer_fn (decl);
3664               /* If we're compiling -fsyntax-only pretend that this
3665                  function has been written out so that we don't try to
3666                  expand it again.  */
3667               if (flag_syntax_only)
3668                 TREE_ASM_WRITTEN (decl) = 1;
3669               reconsider = true;
3670             }
3671         }
3672
3673       if (walk_namespaces (wrapup_globals_for_namespace, /*data=*/0))
3674         reconsider = true;
3675
3676       /* Static data members are just like namespace-scope globals.  */
3677       for (i = 0; VEC_iterate (tree, pending_statics, i, decl); ++i)
3678         {
3679           if (var_finalized_p (decl) || DECL_REALLY_EXTERN (decl)
3680               /* Don't write it out if we haven't seen a definition.  */
3681               || DECL_IN_AGGR_P (decl))
3682             continue;
3683           import_export_decl (decl);
3684           /* If this static data member is needed, provide it to the
3685              back end.  */
3686           if (DECL_NOT_REALLY_EXTERN (decl) && decl_needed_p (decl))
3687             DECL_EXTERNAL (decl) = 0;
3688         }
3689       if (VEC_length (tree, pending_statics) != 0
3690           && wrapup_global_declarations (VEC_address (tree, pending_statics),
3691                                          VEC_length (tree, pending_statics)))
3692         reconsider = true;
3693
3694       retries++;
3695     }
3696   while (reconsider);
3697
3698   /* All used inline functions must have a definition at this point.  */
3699   for (i = 0; VEC_iterate (tree, deferred_fns, i, decl); ++i)
3700     {
3701       if (/* Check online inline functions that were actually used.  */
3702           DECL_ODR_USED (decl) && DECL_DECLARED_INLINE_P (decl)
3703           /* If the definition actually was available here, then the
3704              fact that the function was not defined merely represents
3705              that for some reason (use of a template repository,
3706              #pragma interface, etc.) we decided not to emit the
3707              definition here.  */
3708           && !DECL_INITIAL (decl)
3709           /* An explicit instantiation can be used to specify
3710              that the body is in another unit. It will have
3711              already verified there was a definition.  */
3712           && !DECL_EXPLICIT_INSTANTIATION (decl))
3713         {
3714           warning (0, "inline function %q+D used but never defined", decl);
3715           /* Avoid a duplicate warning from check_global_declaration_1.  */
3716           TREE_NO_WARNING (decl) = 1;
3717         }
3718     }
3719
3720   /* So must decls that use a type with no linkage.  */
3721   for (i = 0; VEC_iterate (tree, no_linkage_decls, i, decl); ++i)
3722     if (!decl_defined_p (decl))
3723       no_linkage_error (decl);
3724
3725   /* We give C linkage to static constructors and destructors.  */
3726   push_lang_context (lang_name_c);
3727
3728   /* Generate initialization and destruction functions for all
3729      priorities for which they are required.  */
3730   if (priority_info_map)
3731     splay_tree_foreach (priority_info_map,
3732                         generate_ctor_and_dtor_functions_for_priority,
3733                         /*data=*/&locus);
3734   else if (c_dialect_objc () && objc_static_init_needed_p ())
3735     /* If this is obj-c++ and we need a static init, call
3736        generate_ctor_or_dtor_function.  */
3737     generate_ctor_or_dtor_function (/*constructor_p=*/true,
3738                                     DEFAULT_INIT_PRIORITY, &locus);
3739
3740   /* We're done with the splay-tree now.  */
3741   if (priority_info_map)
3742     splay_tree_delete (priority_info_map);
3743
3744   /* Generate any missing aliases.  */
3745   maybe_apply_pending_pragma_weaks ();
3746
3747   /* We're done with static constructors, so we can go back to "C++"
3748      linkage now.  */
3749   pop_lang_context ();
3750
3751   /* Collect candidates for Java hidden aliases.  */
3752   candidates = collect_candidates_for_java_method_aliases ();
3753
3754   cgraph_finalize_compilation_unit ();
3755
3756   /* Now, issue warnings about static, but not defined, functions,
3757      etc., and emit debugging information.  */
3758   walk_namespaces (wrapup_globals_for_namespace, /*data=*/&reconsider);
3759   if (VEC_length (tree, pending_statics) != 0)
3760     {
3761       check_global_declarations (VEC_address (tree, pending_statics),
3762                                  VEC_length (tree, pending_statics));
3763       emit_debug_global_declarations (VEC_address (tree, pending_statics),
3764                                       VEC_length (tree, pending_statics));
3765     }
3766
3767   /* Generate hidden aliases for Java.  */
3768   if (candidates)
3769     {
3770       build_java_method_aliases (candidates);
3771       pointer_set_destroy (candidates);
3772     }
3773
3774   finish_repo ();
3775
3776   /* The entire file is now complete.  If requested, dump everything
3777      to a file.  */
3778   {
3779     int flags;
3780     FILE *stream = dump_begin (TDI_tu, &flags);
3781
3782     if (stream)
3783       {
3784         dump_node (global_namespace, flags & ~TDF_SLIM, stream);
3785         dump_end (TDI_tu, stream);
3786       }
3787   }
3788
3789   timevar_pop (TV_VARCONST);
3790
3791   if (flag_detailed_statistics)
3792     {
3793       dump_tree_statistics ();
3794       dump_time_statistics ();
3795     }
3796   input_location = locus;
3797
3798 #ifdef ENABLE_CHECKING
3799   validate_conversion_obstack ();
3800 #endif /* ENABLE_CHECKING */
3801 }
3802
3803 /* FN is an OFFSET_REF, DOTSTAR_EXPR or MEMBER_REF indicating the
3804    function to call in parse-tree form; it has not yet been
3805    semantically analyzed.  ARGS are the arguments to the function.
3806    They have already been semantically analyzed.  This may change
3807    ARGS.  */
3808
3809 tree
3810 build_offset_ref_call_from_tree (tree fn, VEC(tree,gc) **args)
3811 {
3812   tree orig_fn;
3813   VEC(tree,gc) *orig_args = NULL;
3814   tree expr;
3815   tree object;
3816
3817   orig_fn = fn;
3818   object = TREE_OPERAND (fn, 0);
3819
3820   if (processing_template_decl)
3821     {
3822       gcc_assert (TREE_CODE (fn) == DOTSTAR_EXPR
3823                   || TREE_CODE (fn) == MEMBER_REF);
3824       if (type_dependent_expression_p (fn)
3825           || any_type_dependent_arguments_p (*args))
3826         return build_nt_call_vec (fn, *args);
3827
3828       orig_args = make_tree_vector_copy (*args);
3829
3830       /* Transform the arguments and add the implicit "this"
3831          parameter.  That must be done before the FN is transformed
3832          because we depend on the form of FN.  */
3833       make_args_non_dependent (*args);
3834       object = build_non_dependent_expr (object);
3835       if (TREE_CODE (fn) == DOTSTAR_EXPR)
3836         object = cp_build_unary_op (ADDR_EXPR, object, 0, tf_warning_or_error);
3837       VEC_safe_insert (tree, gc, *args, 0, object);
3838       /* Now that the arguments are done, transform FN.  */
3839       fn = build_non_dependent_expr (fn);
3840     }
3841
3842   /* A qualified name corresponding to a bound pointer-to-member is
3843      represented as an OFFSET_REF:
3844
3845         struct B { void g(); };
3846         void (B::*p)();
3847         void B::g() { (this->*p)(); }  */
3848   if (TREE_CODE (fn) == OFFSET_REF)
3849     {
3850       tree object_addr = cp_build_unary_op (ADDR_EXPR, object, 0,
3851                                          tf_warning_or_error);
3852       fn = TREE_OPERAND (fn, 1);
3853       fn = get_member_function_from_ptrfunc (&object_addr, fn);
3854       VEC_safe_insert (tree, gc, *args, 0, object_addr);
3855     }
3856
3857   expr = cp_build_function_call_vec (fn, args, tf_warning_or_error);
3858   if (processing_template_decl && expr != error_mark_node)
3859     expr = build_min_non_dep_call_vec (expr, orig_fn, orig_args);
3860
3861   if (orig_args != NULL)
3862     release_tree_vector (orig_args);
3863
3864   return expr;
3865 }
3866
3867
3868 void
3869 check_default_args (tree x)
3870 {
3871   tree arg = TYPE_ARG_TYPES (TREE_TYPE (x));
3872   bool saw_def = false;
3873   int i = 0 - (TREE_CODE (TREE_TYPE (x)) == METHOD_TYPE);
3874   for (; arg && arg != void_list_node; arg = TREE_CHAIN (arg), ++i)
3875     {
3876       if (TREE_PURPOSE (arg))
3877         saw_def = true;
3878       else if (saw_def)
3879         {
3880           error ("default argument missing for parameter %P of %q+#D", i, x);
3881           TREE_PURPOSE (arg) = error_mark_node;
3882         }
3883     }
3884 }
3885
3886 /* Return true if function DECL can be inlined.  This is used to force
3887    instantiation of methods that might be interesting for inlining.  */
3888 bool
3889 possibly_inlined_p (tree decl)
3890 {
3891   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
3892   if (DECL_UNINLINABLE (decl))
3893     return false;
3894   if (!optimize || pragma_java_exceptions)
3895     return DECL_DECLARED_INLINE_P (decl);
3896   /* When optimizing, we might inline everything when flatten
3897      attribute or heuristics inlining for size or autoinlining
3898      is used.  */
3899   return true;
3900 }
3901
3902 /* Mark DECL (either a _DECL or a BASELINK) as "used" in the program.
3903    If DECL is a specialization or implicitly declared class member,
3904    generate the actual definition.  */
3905
3906 void
3907 mark_used (tree decl)
3908 {
3909   HOST_WIDE_INT saved_processing_template_decl = 0;
3910
3911   /* If DECL is a BASELINK for a single function, then treat it just
3912      like the DECL for the function.  Otherwise, if the BASELINK is
3913      for an overloaded function, we don't know which function was
3914      actually used until after overload resolution.  */
3915   if (TREE_CODE (decl) == BASELINK)
3916     {
3917       decl = BASELINK_FUNCTIONS (decl);
3918       if (really_overloaded_fn (decl))
3919         return;
3920       decl = OVL_CURRENT (decl);
3921     }
3922
3923   /* Set TREE_USED for the benefit of -Wunused.  */
3924   TREE_USED (decl) = 1;
3925   if (DECL_CLONED_FUNCTION_P (decl))
3926     TREE_USED (DECL_CLONED_FUNCTION (decl)) = 1;
3927
3928   if (TREE_CODE (decl) == FUNCTION_DECL
3929       && DECL_DELETED_FN (decl))
3930     {
3931       error ("deleted function %q+D", decl);
3932       error ("used here");
3933       return;
3934     }
3935   /* If we don't need a value, then we don't need to synthesize DECL.  */
3936   if (cp_unevaluated_operand != 0)
3937     return;
3938
3939   /* We can only check DECL_ODR_USED on variables or functions with
3940      DECL_LANG_SPECIFIC set, and these are also the only decls that we
3941      might need special handling for.  */
3942   if ((TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != FUNCTION_DECL)
3943       || DECL_LANG_SPECIFIC (decl) == NULL
3944       || DECL_THUNK_P (decl))
3945     return;
3946
3947   /* We only want to do this processing once.  We don't need to keep trying
3948      to instantiate inline templates, because unit-at-a-time will make sure
3949      we get them compiled before functions that want to inline them.  */
3950   if (DECL_ODR_USED (decl))
3951     return;
3952
3953   /* If within finish_function, defer the rest until that function
3954      finishes, otherwise it might recurse.  */
3955   if (defer_mark_used_calls)
3956     {
3957       VEC_safe_push (tree, gc, deferred_mark_used_calls, decl);
3958       return;
3959     }
3960
3961   /* Normally, we can wait until instantiation-time to synthesize
3962      DECL.  However, if DECL is a static data member initialized with
3963      a constant, we need the value right now because a reference to
3964      such a data member is not value-dependent.  */
3965   if (TREE_CODE (decl) == VAR_DECL
3966       && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl)
3967       && DECL_CLASS_SCOPE_P (decl))
3968     {
3969       /* Don't try to instantiate members of dependent types.  We
3970          cannot just use dependent_type_p here because this function
3971          may be called from fold_non_dependent_expr, and then we may
3972          see dependent types, even though processing_template_decl
3973          will not be set.  */
3974       if (CLASSTYPE_TEMPLATE_INFO ((DECL_CONTEXT (decl)))
3975           && uses_template_parms (CLASSTYPE_TI_ARGS (DECL_CONTEXT (decl))))
3976         return;
3977       /* Pretend that we are not in a template, even if we are, so
3978          that the static data member initializer will be processed.  */
3979       saved_processing_template_decl = processing_template_decl;
3980       processing_template_decl = 0;
3981     }
3982
3983   if (processing_template_decl)
3984     return;
3985
3986   DECL_ODR_USED (decl) = 1;
3987   if (DECL_CLONED_FUNCTION_P (decl))
3988     DECL_ODR_USED (DECL_CLONED_FUNCTION (decl)) = 1;
3989
3990   /* DR 757: A type without linkage shall not be used as the type of a
3991      variable or function with linkage, unless
3992    o the variable or function has extern "C" linkage (7.5 [dcl.link]), or
3993    o the variable or function is not used (3.2 [basic.def.odr]) or is
3994    defined in the same translation unit.  */
3995   if (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"