OSDN Git Service

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