OSDN Git Service

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