OSDN Git Service

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