OSDN Git Service

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