OSDN Git Service

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