OSDN Git Service

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