OSDN Git Service

* Make-lang.in (cp/lex.o): Do not depend on cp/lex.h.
[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 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, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, 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
52 extern cpp_reader *parse_in;
53
54 /* This structure contains information about the initializations
55    and/or destructions required for a particular priority level.  */
56 typedef struct priority_info_s {
57   /* Nonzero if there have been any initializations at this priority
58      throughout the translation unit.  */
59   int initializations_p;
60   /* Nonzero if there have been any destructions at this priority
61      throughout the translation unit.  */
62   int destructions_p;
63 } *priority_info;
64
65 static void mark_vtable_entries (tree);
66 static void grok_function_init (tree, tree);
67 static bool maybe_emit_vtables (tree);
68 static tree build_anon_union_vars (tree);
69 static bool acceptable_java_type (tree);
70 static tree start_objects (int, int);
71 static void finish_objects (int, int, tree);
72 static tree start_static_storage_duration_function (unsigned);
73 static void finish_static_storage_duration_function (tree);
74 static priority_info get_priority_info (int);
75 static void do_static_initialization (tree, tree);
76 static void do_static_destruction (tree);
77 static tree start_static_initialization_or_destruction (tree, int);
78 static void finish_static_initialization_or_destruction (tree);
79 static void generate_ctor_or_dtor_function (bool, int, location_t *);
80 static int generate_ctor_and_dtor_functions_for_priority (splay_tree_node,
81                                                           void *);
82 static tree prune_vars_needing_no_initialization (tree *);
83 static void write_out_vars (tree);
84 static void import_export_class (tree);
85 static tree get_guard_bits (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(()) varray_type pending_statics;
91 #define pending_statics_used \
92   (pending_statics ? pending_statics->elements_used : 0)
93
94 /* A list of functions which were declared inline, but which we
95    may need to emit outline anyway.  */
96 static GTY(()) varray_type deferred_fns;
97 #define deferred_fns_used \
98   (deferred_fns ? deferred_fns->elements_used : 0)
99
100 /* Flag used when debugging spew.c */
101
102 extern int spew_debug;
103
104 /* Nonzero if we're done parsing and into end-of-file activities.  */
105
106 int at_eof;
107
108 /* Functions called along with real static constructors and destructors.  */
109
110 tree static_ctors;
111 tree static_dtors;
112
113 \f
114 /* Incorporate `const' and `volatile' qualifiers for member functions.
115    FUNCTION is a TYPE_DECL or a FUNCTION_DECL.
116    QUALS is a list of qualifiers.  Returns any explicit
117    top-level qualifiers of the method's this pointer, anything other than
118    TYPE_UNQUALIFIED will be an extension.  */
119
120 int
121 grok_method_quals (tree ctype, tree function, tree quals)
122 {
123   tree fntype = TREE_TYPE (function);
124   tree raises = TYPE_RAISES_EXCEPTIONS (fntype);
125   int type_quals = TYPE_UNQUALIFIED;
126   int dup_quals = TYPE_UNQUALIFIED;
127   int this_quals = TYPE_UNQUALIFIED;
128
129   while (quals)
130     {
131       int tq = cp_type_qual_from_rid (TREE_VALUE (quals));
132       
133       if ((type_quals | this_quals) & tq)
134         dup_quals |= tq;
135       else if (tq & TYPE_QUAL_RESTRICT)
136         this_quals |= tq;
137       else
138         type_quals |= tq;
139       quals = TREE_CHAIN (quals);
140     } 
141
142   if (dup_quals != TYPE_UNQUALIFIED)
143     error ("duplicate type qualifiers in %s declaration",
144               TREE_CODE (function) == FUNCTION_DECL 
145               ? "member function" : "type");
146
147   ctype = cp_build_qualified_type (ctype, type_quals);
148   fntype = build_method_type_directly (ctype, TREE_TYPE (fntype),
149                                        (TREE_CODE (fntype) == METHOD_TYPE
150                                         ? TREE_CHAIN (TYPE_ARG_TYPES (fntype))
151                                         : TYPE_ARG_TYPES (fntype)));
152   if (raises)
153     fntype = build_exception_variant (fntype, raises);
154
155   TREE_TYPE (function) = fntype;
156   return this_quals;
157 }
158
159 /* Build a PARM_DECL with NAME and TYPE, and set DECL_ARG_TYPE
160    appropriately.  */
161
162 tree
163 cp_build_parm_decl (tree name, tree type)
164 {
165   tree parm = build_decl (PARM_DECL, name, type);
166   /* DECL_ARG_TYPE is only used by the back end and the back end never
167      sees templates.  */
168   if (!processing_template_decl)
169     DECL_ARG_TYPE (parm) = type_passed_as (type);
170   return parm;
171 }
172
173 /* Returns a PARM_DECL for a parameter of the indicated TYPE, with the
174    indicated NAME.  */
175
176 tree
177 build_artificial_parm (tree name, tree type)
178 {
179   tree parm = cp_build_parm_decl (name, type);
180   DECL_ARTIFICIAL (parm) = 1;
181   /* All our artificial parms are implicitly `const'; they cannot be
182      assigned to.  */
183   TREE_READONLY (parm) = 1;
184   return parm;
185 }
186
187 /* Constructors for types with virtual baseclasses need an "in-charge" flag
188    saying whether this constructor is responsible for initialization of
189    virtual baseclasses or not.  All destructors also need this "in-charge"
190    flag, which additionally determines whether or not the destructor should
191    free the memory for the object.
192
193    This function adds the "in-charge" flag to member function FN if
194    appropriate.  It is called from grokclassfn and tsubst.
195    FN must be either a constructor or destructor.
196
197    The in-charge flag follows the 'this' parameter, and is followed by the
198    VTT parm (if any), then the user-written parms.  */
199
200 void
201 maybe_retrofit_in_chrg (tree fn)
202 {
203   tree basetype, arg_types, parms, parm, fntype;
204
205   /* If we've already add the in-charge parameter don't do it again.  */
206   if (DECL_HAS_IN_CHARGE_PARM_P (fn))
207     return;
208
209   /* When processing templates we can't know, in general, whether or
210      not we're going to have virtual baseclasses.  */
211   if (processing_template_decl)
212     return;
213
214   /* We don't need an in-charge parameter for constructors that don't
215      have virtual bases.  */
216   if (DECL_CONSTRUCTOR_P (fn)
217       && !TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
218     return;
219
220   arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
221   basetype = TREE_TYPE (TREE_VALUE (arg_types));
222   arg_types = TREE_CHAIN (arg_types);
223
224   parms = TREE_CHAIN (DECL_ARGUMENTS (fn));
225
226   /* If this is a subobject constructor or destructor, our caller will
227      pass us a pointer to our VTT.  */
228   if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn)))
229     {
230       parm = build_artificial_parm (vtt_parm_identifier, vtt_parm_type);
231
232       /* First add it to DECL_ARGUMENTS between 'this' and the real args...  */
233       TREE_CHAIN (parm) = parms;
234       parms = parm;
235
236       /* ...and then to TYPE_ARG_TYPES.  */
237       arg_types = hash_tree_chain (vtt_parm_type, arg_types);
238
239       DECL_HAS_VTT_PARM_P (fn) = 1;
240     }
241
242   /* Then add the in-charge parm (before the VTT parm).  */
243   parm = build_artificial_parm (in_charge_identifier, integer_type_node);
244   TREE_CHAIN (parm) = parms;
245   parms = parm;
246   arg_types = hash_tree_chain (integer_type_node, arg_types);
247
248   /* Insert our new parameter(s) into the list.  */
249   TREE_CHAIN (DECL_ARGUMENTS (fn)) = parms;
250
251   /* And rebuild the function type.  */
252   fntype = build_method_type_directly (basetype, TREE_TYPE (TREE_TYPE (fn)),
253                                        arg_types);
254   if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn)))
255     fntype = build_exception_variant (fntype,
256                                       TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn)));
257   TREE_TYPE (fn) = fntype;
258
259   /* Now we've got the in-charge parameter.  */
260   DECL_HAS_IN_CHARGE_PARM_P (fn) = 1;
261 }
262
263 /* Classes overload their constituent function names automatically.
264    When a function name is declared in a record structure,
265    its name is changed to it overloaded name.  Since names for
266    constructors and destructors can conflict, we place a leading
267    '$' for destructors.
268
269    CNAME is the name of the class we are grokking for.
270
271    FUNCTION is a FUNCTION_DECL.  It was created by `grokdeclarator'.
272
273    FLAGS contains bits saying what's special about today's
274    arguments.  1 == DESTRUCTOR.  2 == OPERATOR.
275
276    If FUNCTION is a destructor, then we must add the `auto-delete' field
277    as a second parameter.  There is some hair associated with the fact
278    that we must "declare" this variable in the manner consistent with the
279    way the rest of the arguments were declared.
280
281    QUALS are the qualifiers for the this pointer.  */
282
283 void
284 grokclassfn (tree ctype, tree function, enum overload_flags flags, tree quals)
285 {
286   tree fn_name = DECL_NAME (function);
287   int this_quals = TYPE_UNQUALIFIED;
288
289   /* Even within an `extern "C"' block, members get C++ linkage.  See
290      [dcl.link] for details.  */
291   SET_DECL_LANGUAGE (function, lang_cplusplus);
292
293   if (fn_name == NULL_TREE)
294     {
295       error ("name missing for member function");
296       fn_name = get_identifier ("<anonymous>");
297       DECL_NAME (function) = fn_name;
298     }
299
300   if (quals)
301     this_quals = grok_method_quals (ctype, function, quals);
302
303   if (TREE_CODE (TREE_TYPE (function)) == METHOD_TYPE)
304     {
305       /* Must add the class instance variable up front.  */
306       /* Right now we just make this a pointer.  But later
307          we may wish to make it special.  */
308       tree type = TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (function)));
309       tree qual_type;
310       tree parm;
311
312       /* The `this' parameter is implicitly `const'; it cannot be
313          assigned to.  */
314       this_quals |= TYPE_QUAL_CONST;
315       qual_type = cp_build_qualified_type (type, this_quals);
316       parm = build_artificial_parm (this_identifier, qual_type);
317       c_apply_type_quals_to_decl (this_quals, parm);
318       TREE_CHAIN (parm) = DECL_ARGUMENTS (function);
319       DECL_ARGUMENTS (function) = parm;
320     }
321
322   DECL_CONTEXT (function) = ctype;
323
324   if (flags == DTOR_FLAG)
325     DECL_DESTRUCTOR_P (function) = 1;
326
327   if (flags == DTOR_FLAG || DECL_CONSTRUCTOR_P (function))
328     maybe_retrofit_in_chrg (function);
329 }
330
331 /* Create an ARRAY_REF, checking for the user doing things backwards
332    along the way.  */
333
334 tree
335 grok_array_decl (tree array_expr, tree index_exp)
336 {
337   tree type;
338   tree expr;
339   tree orig_array_expr = array_expr;
340   tree orig_index_exp = index_exp;
341
342   if (error_operand_p (array_expr) || error_operand_p (index_exp))
343     return error_mark_node;
344
345   if (processing_template_decl)
346     {
347       if (type_dependent_expression_p (array_expr)
348           || type_dependent_expression_p (index_exp))
349         return build_min_nt (ARRAY_REF, array_expr, index_exp,
350                              NULL_TREE, NULL_TREE);
351       array_expr = build_non_dependent_expr (array_expr);
352       index_exp = build_non_dependent_expr (index_exp);
353     }
354
355   type = TREE_TYPE (array_expr);
356   my_friendly_assert (type, 20030626);
357   type = non_reference (type);
358
359   /* If they have an `operator[]', use that.  */
360   if (IS_AGGR_TYPE (type) || IS_AGGR_TYPE (TREE_TYPE (index_exp)))
361     expr = build_new_op (ARRAY_REF, LOOKUP_NORMAL,
362                          array_expr, index_exp, NULL_TREE,
363                          /*overloaded_p=*/NULL);
364   else
365     {
366       tree p1, p2, i1, i2;
367
368       /* Otherwise, create an ARRAY_REF for a pointer or array type.
369          It is a little-known fact that, if `a' is an array and `i' is
370          an int, you can write `i[a]', which means the same thing as
371          `a[i]'.  */
372       if (TREE_CODE (type) == ARRAY_TYPE)
373         p1 = array_expr;
374       else
375         p1 = build_expr_type_conversion (WANT_POINTER, array_expr, false);
376
377       if (TREE_CODE (TREE_TYPE (index_exp)) == ARRAY_TYPE)
378         p2 = index_exp;
379       else
380         p2 = build_expr_type_conversion (WANT_POINTER, index_exp, false);
381
382       i1 = build_expr_type_conversion (WANT_INT | WANT_ENUM, array_expr, 
383                                        false);
384       i2 = build_expr_type_conversion (WANT_INT | WANT_ENUM, index_exp, 
385                                        false);
386
387       if ((p1 && i2) && (i1 && p2))
388         error ("ambiguous conversion for array subscript");
389
390       if (p1 && i2)
391         array_expr = p1, index_exp = i2;
392       else if (i1 && p2)
393         array_expr = p2, index_exp = i1;
394       else
395         {
396           error ("invalid types `%T[%T]' for array subscript",
397                     type, TREE_TYPE (index_exp));
398           return error_mark_node;
399         }
400
401       if (array_expr == error_mark_node || index_exp == error_mark_node)
402         error ("ambiguous conversion for array subscript");
403
404       expr = build_array_ref (array_expr, index_exp);
405     }
406   if (processing_template_decl && expr != error_mark_node)
407     return build_min_non_dep (ARRAY_REF, expr, orig_array_expr, orig_index_exp,
408                               NULL_TREE, NULL_TREE);
409   return expr;
410 }
411
412 /* Given the cast expression EXP, checking out its validity.   Either return
413    an error_mark_node if there was an unavoidable error, return a cast to
414    void for trying to delete a pointer w/ the value 0, or return the
415    call to delete.  If DOING_VEC is true, we handle things differently
416    for doing an array delete.
417    Implements ARM $5.3.4.  This is called from the parser.  */
418
419 tree
420 delete_sanity (tree exp, tree size, bool doing_vec, int use_global_delete)
421 {
422   tree t, type;
423
424   if (exp == error_mark_node)
425     return exp;
426
427   if (processing_template_decl)
428     {
429       t = build_min (DELETE_EXPR, void_type_node, exp, size);
430       DELETE_EXPR_USE_GLOBAL (t) = use_global_delete;
431       DELETE_EXPR_USE_VEC (t) = doing_vec;
432       TREE_SIDE_EFFECTS (t) = 1;
433       return t;
434     }
435
436   exp = convert_from_reference (exp);
437
438   /* An array can't have been allocated by new, so complain.  */
439   if (TREE_CODE (exp) == VAR_DECL
440       && TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE)
441     warning ("deleting array `%#D'", exp);
442
443   t = build_expr_type_conversion (WANT_POINTER, exp, true);
444
445   if (t == NULL_TREE || t == error_mark_node)
446     {
447       error ("type `%#T' argument given to `delete', expected pointer",
448                 TREE_TYPE (exp));
449       return error_mark_node;
450     }
451
452   type = TREE_TYPE (t);
453
454   /* As of Valley Forge, you can delete a pointer to const.  */
455
456   /* You can't delete functions.  */
457   if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
458     {
459       error ("cannot delete a function.  Only pointer-to-objects are valid arguments to `delete'");
460       return error_mark_node;
461     }
462
463   /* Deleting ptr to void is undefined behavior [expr.delete/3].  */
464   if (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE)
465     {
466       warning ("deleting `%T' is undefined", type);
467       doing_vec = 0;
468     }
469
470   /* Deleting a pointer with the value zero is valid and has no effect.  */
471   if (integer_zerop (t))
472     return build1 (NOP_EXPR, void_type_node, t);
473
474   if (doing_vec)
475     return build_vec_delete (t, /*maxindex=*/NULL_TREE, 
476                              sfk_deleting_destructor,
477                              use_global_delete);
478   else
479     return build_delete (type, t, sfk_deleting_destructor,
480                          LOOKUP_NORMAL, use_global_delete);
481 }
482
483 /* Report an error if the indicated template declaration is not the
484    sort of thing that should be a member template.  */
485
486 void
487 check_member_template (tree tmpl)
488 {
489   tree decl;
490
491   my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 0);
492   decl = DECL_TEMPLATE_RESULT (tmpl);
493
494   if (TREE_CODE (decl) == FUNCTION_DECL
495       || (TREE_CODE (decl) == TYPE_DECL
496           && IS_AGGR_TYPE (TREE_TYPE (decl))))
497     {
498       if (current_function_decl)
499         /* 14.5.2.2 [temp.mem]
500            
501            A local class shall not have member templates.  */
502         error ("invalid declaration of member template `%#D' in local class",
503                   decl);
504       
505       if (TREE_CODE (decl) == FUNCTION_DECL && DECL_VIRTUAL_P (decl))
506         {
507           /* 14.5.2.3 [temp.mem]
508
509              A member function template shall not be virtual.  */
510           error 
511             ("invalid use of `virtual' in template declaration of `%#D'",
512              decl);
513           DECL_VIRTUAL_P (decl) = 0;
514         }
515
516       /* The debug-information generating code doesn't know what to do
517          with member templates.  */ 
518       DECL_IGNORED_P (tmpl) = 1;
519     } 
520   else
521     error ("template declaration of `%#D'", decl);
522 }
523
524 /* Return true iff TYPE is a valid Java parameter or return type.  */
525
526 static bool
527 acceptable_java_type (tree type)
528 {
529   if (TREE_CODE (type) == VOID_TYPE || TYPE_FOR_JAVA (type))
530     return 1;
531   if (TREE_CODE (type) == POINTER_TYPE || TREE_CODE (type) == REFERENCE_TYPE)
532     {
533       type = TREE_TYPE (type);
534       if (TREE_CODE (type) == RECORD_TYPE)
535         {
536           tree args;  int i;
537           if (! TYPE_FOR_JAVA (type))
538             return false;
539           if (! CLASSTYPE_TEMPLATE_INFO (type))
540             return true;
541           args = CLASSTYPE_TI_ARGS (type);
542           i = TREE_VEC_LENGTH (args);
543           while (--i >= 0)
544             {
545               type = TREE_VEC_ELT (args, i);
546               if (TREE_CODE (type) == POINTER_TYPE)
547                 type = TREE_TYPE (type);
548               if (! TYPE_FOR_JAVA (type))
549                 return false;
550             }
551           return true;
552         }
553     }
554   return false;
555 }
556
557 /* For a METHOD in a Java class CTYPE, return true if
558    the parameter and return types are valid Java types.
559    Otherwise, print appropriate error messages, and return false.  */
560
561 bool
562 check_java_method (tree method)
563 {
564   bool jerr = false;
565   tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (method));
566   tree ret_type = TREE_TYPE (TREE_TYPE (method));
567
568   if (!acceptable_java_type (ret_type))
569     {
570       error ("Java method '%D' has non-Java return type `%T'",
571                 method, ret_type);
572       jerr = true;
573     }
574
575   arg_types = TREE_CHAIN (arg_types);
576   if (DECL_HAS_IN_CHARGE_PARM_P (method))
577     arg_types = TREE_CHAIN (arg_types);
578   if (DECL_HAS_VTT_PARM_P (method))
579     arg_types = TREE_CHAIN (arg_types);
580   
581   for (; arg_types != NULL_TREE; arg_types = TREE_CHAIN (arg_types))
582     {
583       tree type = TREE_VALUE (arg_types);
584       if (!acceptable_java_type (type))
585         {
586           error ("Java method '%D' has non-Java parameter type `%T'",
587                     method, type);
588           jerr = true;
589         }
590     }
591   return !jerr;
592 }
593
594 /* Sanity check: report error if this function FUNCTION is not
595    really a member of the class (CTYPE) it is supposed to belong to.
596    TEMPLATE_PARMS is used to specifiy the template parameters of a member
597    template passed as FUNCTION_DECL. If the member template is passed as a 
598    TEMPLATE_DECL, it can be NULL since the parameters can be extracted
599    from the declaration. If the function is not a function template, it
600    must be NULL.
601    It returns the original declaration for the function, or NULL_TREE
602    if no declaration was found (and an error was emitted).  */
603
604 tree
605 check_classfn (tree ctype, tree function, tree template_parms)
606 {
607   int ix;
608   bool is_template;
609   
610   if (DECL_USE_TEMPLATE (function)
611       && !(TREE_CODE (function) == TEMPLATE_DECL
612            && DECL_TEMPLATE_SPECIALIZATION (function))
613       && is_member_template (DECL_TI_TEMPLATE (function)))
614     /* Since this is a specialization of a member template,
615        we're not going to find the declaration in the class.
616        For example, in:
617        
618          struct S { template <typename T> void f(T); };
619          template <> void S::f(int);
620        
621        we're not going to find `S::f(int)', but there's no
622        reason we should, either.  We let our callers know we didn't
623        find the method, but we don't complain.  */
624     return NULL_TREE;
625
626   /* Basic sanity check: for a template function, the template parameters
627      either were not passed, or they are the same of DECL_TEMPLATE_PARMS.  */
628   if (TREE_CODE (function) == TEMPLATE_DECL)
629     {
630       my_friendly_assert (!template_parms 
631                           || comp_template_parms 
632                               (template_parms, 
633                                DECL_TEMPLATE_PARMS (function)),
634                           20040303);
635       template_parms = DECL_TEMPLATE_PARMS (function);
636     }
637
638   /* OK, is this a definition of a member template?  */
639   is_template = (template_parms != NULL_TREE);
640
641   ix = lookup_fnfields_1 (complete_type (ctype),
642                           DECL_CONSTRUCTOR_P (function) ? ctor_identifier :
643                           DECL_DESTRUCTOR_P (function) ? dtor_identifier :
644                           DECL_NAME (function));
645
646   if (ix >= 0)
647     {
648       tree methods = CLASSTYPE_METHOD_VEC (ctype);
649       tree fndecls, fndecl = 0;
650       bool is_conv_op;
651       bool pop_p;
652       const char *format = NULL;
653       
654       pop_p = push_scope (ctype);
655       for (fndecls = TREE_VEC_ELT (methods, ix);
656            fndecls; fndecls = OVL_NEXT (fndecls))
657         {
658           tree p1, p2;
659           
660           fndecl = OVL_CURRENT (fndecls);
661           p1 = TYPE_ARG_TYPES (TREE_TYPE (function));
662           p2 = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
663
664           /* We cannot simply call decls_match because this doesn't
665              work for static member functions that are pretending to
666              be methods, and because the name may have been changed by
667              asm("new_name").  */ 
668               
669            /* Get rid of the this parameter on functions that become
670               static.  */
671           if (DECL_STATIC_FUNCTION_P (fndecl)
672               && TREE_CODE (TREE_TYPE (function)) == METHOD_TYPE)
673             p1 = TREE_CHAIN (p1);
674
675           /* A member template definition only matches a member template
676              declaration.  */
677           if (is_template != (TREE_CODE (fndecl) == TEMPLATE_DECL))
678             continue;
679               
680           if (same_type_p (TREE_TYPE (TREE_TYPE (function)),
681                            TREE_TYPE (TREE_TYPE (fndecl)))
682               && compparms (p1, p2)
683               && (!is_template
684                   || comp_template_parms (template_parms, 
685                                           DECL_TEMPLATE_PARMS (fndecl)))
686               && (DECL_TEMPLATE_SPECIALIZATION (function)
687                   == DECL_TEMPLATE_SPECIALIZATION (fndecl))
688               && (!DECL_TEMPLATE_SPECIALIZATION (function)
689                   || (DECL_TI_TEMPLATE (function) 
690                       == DECL_TI_TEMPLATE (fndecl))))
691             break;
692         }
693       if (pop_p)
694         pop_scope (ctype);
695       if (fndecls)
696         return OVL_CURRENT (fndecls);
697       error ("prototype for `%#D' does not match any in class `%T'",
698              function, ctype);
699       is_conv_op = DECL_CONV_FN_P (fndecl);
700
701       if (is_conv_op)
702         ix = CLASSTYPE_FIRST_CONVERSION_SLOT;
703       fndecls = TREE_VEC_ELT (methods, ix);
704       while (fndecls)
705         {
706           fndecl = OVL_CURRENT (fndecls);
707           fndecls = OVL_NEXT (fndecls);
708
709           if (!fndecls && is_conv_op)
710             {
711               if (TREE_VEC_LENGTH (methods) > ix)
712                 {
713                   ix++;
714                   fndecls = TREE_VEC_ELT (methods, ix);
715                   if (!DECL_CONV_FN_P (OVL_CURRENT (fndecls)))
716                     {
717                       fndecls = NULL_TREE;
718                       is_conv_op = false;
719                     }
720                 }
721               else
722                 is_conv_op = false;
723             }
724           if (format)
725             format = "                %#D";
726           else if (fndecls)
727             format = "candidates are: %#D";
728           else
729             format = "candidate is: %#D";
730           cp_error_at (format, fndecl);
731         }
732     }
733   else if (!COMPLETE_TYPE_P (ctype))
734     cxx_incomplete_type_error (function, ctype);
735   else
736     error ("no `%#D' member function declared in class `%T'",
737            function, ctype);
738
739   /* If we did not find the method in the class, add it to avoid
740      spurious errors (unless the CTYPE is not yet defined, in which
741      case we'll only confuse ourselves when the function is declared
742      properly within the class.  */
743   if (COMPLETE_TYPE_P (ctype))
744     add_method (ctype, function, /*error_p=*/1);
745   return NULL_TREE;
746 }
747
748 /* We have just processed the DECL, which is a static data member.
749    Its initializer, if present, is INIT.  The ASMSPEC_TREE, if
750    present, is the assembly-language name for the data member.
751    FLAGS is as for cp_finish_decl.  */
752
753 void
754 finish_static_data_member_decl (tree decl, tree init, tree asmspec_tree,
755                                 int flags)
756 {
757   my_friendly_assert (TREE_PUBLIC (decl), 0);
758
759   DECL_CONTEXT (decl) = current_class_type;
760
761   /* We cannot call pushdecl here, because that would fill in the
762      TREE_CHAIN of our decl.  Instead, we modify cp_finish_decl to do
763      the right thing, namely, to put this decl out straight away.  */
764   /* current_class_type can be NULL_TREE in case of error.  */
765   if (!asmspec_tree && current_class_type)
766     DECL_INITIAL (decl) = error_mark_node;
767
768   if (! processing_template_decl)
769     {
770       if (!pending_statics)
771         VARRAY_TREE_INIT (pending_statics, 32, "pending_statics");
772       VARRAY_PUSH_TREE (pending_statics, decl);
773     }
774
775   if (LOCAL_CLASS_P (current_class_type))
776     pedwarn ("local class `%#T' shall not have static data member `%#D'",
777              current_class_type, decl);
778
779   /* Static consts need not be initialized in the class definition.  */
780   if (init != NULL_TREE && TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
781     {
782       static int explained = 0;
783           
784       error ("initializer invalid for static member with constructor");
785       if (!explained)
786         {
787           error ("(an out of class initialization is required)");
788           explained = 1;
789         }
790       init = NULL_TREE;
791     }
792   /* Force the compiler to know when an uninitialized static const
793      member is being used.  */
794   if (CP_TYPE_CONST_P (TREE_TYPE (decl)) && init == 0)
795     TREE_USED (decl) = 1;
796   DECL_INITIAL (decl) = init;
797   DECL_IN_AGGR_P (decl) = 1;
798
799   cp_finish_decl (decl, init, asmspec_tree, flags);
800 }
801
802 /* Process the specs, declarator (NULL if omitted) and width (NULL if omitted)
803    of a structure component, returning a _DECL node.
804    QUALS is a list of type qualifiers for this decl (such as for declaring
805    const member functions).
806
807    This is done during the parsing of the struct declaration.
808    The _DECL nodes are chained together and the lot of them
809    are ultimately passed to `build_struct' to make the RECORD_TYPE node.
810
811    If class A defines that certain functions in class B are friends, then
812    the way I have set things up, it is B who is interested in permission
813    granted by A.  However, it is in A's context that these declarations
814    are parsed.  By returning a void_type_node, class A does not attempt
815    to incorporate the declarations of the friends within its structure.
816
817    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
818    CHANGES TO CODE IN `start_method'.  */
819
820 tree
821 grokfield (const cp_declarator *declarator, 
822            cp_decl_specifier_seq *declspecs, 
823            tree init, tree asmspec_tree,
824            tree attrlist)
825 {
826   tree value;
827   const char *asmspec = 0;
828   int flags = LOOKUP_ONLYCONVERTING;
829
830   if (!declspecs->any_specifiers_p
831       && declarator->kind == cdk_id
832       && TREE_CODE (declarator->u.id.name) == SCOPE_REF
833       && (TREE_CODE (TREE_OPERAND (declarator->u.id.name, 1)) 
834           == IDENTIFIER_NODE))
835     {
836       /* Access declaration */
837       if (! IS_AGGR_TYPE_CODE (TREE_CODE 
838                                (TREE_OPERAND (declarator->u.id.name, 0))))
839         ;
840       else if (TREE_COMPLEXITY (declarator->u.id.name) == current_class_depth)
841         pop_nested_class ();
842       return do_class_using_decl (declarator->u.id.name);
843     }
844
845   if (init
846       && TREE_CODE (init) == TREE_LIST
847       && TREE_VALUE (init) == error_mark_node
848       && TREE_CHAIN (init) == NULL_TREE)
849     init = NULL_TREE;
850
851   value = grokdeclarator (declarator, declspecs, FIELD, init != 0, &attrlist);
852   if (! value || error_operand_p (value))
853     /* friend or constructor went bad.  */
854     return error_mark_node;
855
856   if (TREE_CODE (value) == TYPE_DECL && init)
857     {
858       error ("typedef `%D' is initialized (use __typeof__ instead)", value);
859       init = NULL_TREE;
860     }
861
862   /* Pass friendly classes back.  */
863   if (value == void_type_node)
864     return value;
865
866   /* Pass friend decls back.  */
867   if ((TREE_CODE (value) == FUNCTION_DECL
868        || TREE_CODE (value) == TEMPLATE_DECL)
869       && DECL_CONTEXT (value) != current_class_type)
870     return value;
871
872   if (DECL_NAME (value) != NULL_TREE
873       && IDENTIFIER_POINTER (DECL_NAME (value))[0] == '_'
874       && ! strcmp (IDENTIFIER_POINTER (DECL_NAME (value)), "_vptr"))
875     error ("member `%D' conflicts with virtual function table field name",
876               value);
877
878   /* Stash away type declarations.  */
879   if (TREE_CODE (value) == TYPE_DECL)
880     {
881       DECL_NONLOCAL (value) = 1;
882       DECL_CONTEXT (value) = current_class_type;
883
884       if (processing_template_decl)
885         value = push_template_decl (value);
886
887       return value;
888     }
889
890   if (DECL_IN_AGGR_P (value))
891     {
892       error ("`%D' is already defined in `%T'", value,
893                 DECL_CONTEXT (value));
894       return void_type_node;
895     }
896
897   if (asmspec_tree)
898     asmspec = TREE_STRING_POINTER (asmspec_tree);
899
900   if (init)
901     {
902       if (TREE_CODE (value) == FUNCTION_DECL)
903         {
904           grok_function_init (value, init);
905           init = NULL_TREE;
906         }
907       else if (pedantic && TREE_CODE (value) != VAR_DECL)
908         /* Already complained in grokdeclarator.  */
909         init = NULL_TREE;
910       else
911         {
912           /* We allow initializers to become parameters to base
913              initializers.  */
914           if (TREE_CODE (init) == TREE_LIST)
915             {
916               if (TREE_CHAIN (init) == NULL_TREE)
917                 init = TREE_VALUE (init);
918               else
919                 init = digest_init (TREE_TYPE (value), init, (tree *)0);
920             }
921
922           if (!processing_template_decl)
923             {
924               if (TREE_CODE (init) == CONST_DECL)
925                 init = DECL_INITIAL (init);
926               else if (TREE_READONLY_DECL_P (init))
927                 init = decl_constant_value (init);
928               else if (TREE_CODE (init) == CONSTRUCTOR)
929                 init = digest_init (TREE_TYPE (value), init, (tree *)0);
930               if (init != error_mark_node && ! TREE_CONSTANT (init))
931                 {
932                   /* We can allow references to things that are effectively
933                      static, since references are initialized with the
934                      address.  */
935                   if (TREE_CODE (TREE_TYPE (value)) != REFERENCE_TYPE
936                       || (TREE_STATIC (init) == 0
937                           && (!DECL_P (init) || DECL_EXTERNAL (init) == 0)))
938                     {
939                       error ("field initializer is not constant");
940                       init = error_mark_node;
941                     }
942                 }
943             }
944         }
945     }
946
947   if (processing_template_decl
948       && (TREE_CODE (value) == VAR_DECL || TREE_CODE (value) == FUNCTION_DECL))
949     {
950       value = push_template_decl (value);
951       if (error_operand_p (value))
952         return error_mark_node;
953     }
954
955   if (attrlist)
956     cplus_decl_attributes (&value, attrlist, 0);
957
958   if (TREE_CODE (value) == VAR_DECL)
959     {
960       finish_static_data_member_decl (value, init, asmspec_tree, 
961                                       flags);
962       return value;
963     }
964   if (TREE_CODE (value) == FIELD_DECL)
965     {
966       if (asmspec)
967         error ("`asm' specifiers are not permitted on non-static data members");
968       if (DECL_INITIAL (value) == error_mark_node)
969         init = error_mark_node;
970       cp_finish_decl (value, init, NULL_TREE, flags);
971       DECL_INITIAL (value) = init;
972       DECL_IN_AGGR_P (value) = 1;
973       return value;
974     }
975   if (TREE_CODE (value) == FUNCTION_DECL)
976     {
977       if (asmspec)
978         {
979           /* This must override the asm specifier which was placed
980              by grokclassfn.  Lay this out fresh.  */
981           SET_DECL_RTL (value, NULL_RTX);
982           change_decl_assembler_name (value, get_identifier (asmspec));
983         }
984       if (!DECL_FRIEND_P (value))
985         grok_special_member_properties (value);
986       
987       cp_finish_decl (value, init, asmspec_tree, flags);
988
989       /* Pass friends back this way.  */
990       if (DECL_FRIEND_P (value))
991         return void_type_node;
992
993       DECL_IN_AGGR_P (value) = 1;
994       return value;
995     }
996   abort ();
997   /* NOTREACHED */
998   return NULL_TREE;
999 }
1000
1001 /* Like `grokfield', but for bitfields.
1002    WIDTH is non-NULL for bit fields only, and is an INTEGER_CST node.  */
1003
1004 tree
1005 grokbitfield (const cp_declarator *declarator, 
1006               cp_decl_specifier_seq *declspecs, tree width)
1007 {
1008   tree value = grokdeclarator (declarator, declspecs, BITFIELD, 0, NULL);
1009
1010   if (! value) return NULL_TREE; /* friends went bad.  */
1011
1012   /* Pass friendly classes back.  */
1013   if (TREE_CODE (value) == VOID_TYPE)
1014     return void_type_node;
1015
1016   if (TREE_CODE (value) == TYPE_DECL)
1017     {
1018       error ("cannot declare `%D' to be a bit-field type", value);
1019       return NULL_TREE;
1020     }
1021
1022   /* Usually, finish_struct_1 catches bitfields with invalid types.
1023      But, in the case of bitfields with function type, we confuse
1024      ourselves into thinking they are member functions, so we must
1025      check here.  */
1026   if (TREE_CODE (value) == FUNCTION_DECL)
1027     {
1028       error ("cannot declare bit-field `%D' with function type",
1029              DECL_NAME (value));
1030       return NULL_TREE;
1031     }
1032
1033   if (DECL_IN_AGGR_P (value))
1034     {
1035       error ("`%D' is already defined in the class %T", value,
1036                   DECL_CONTEXT (value));
1037       return void_type_node;
1038     }
1039
1040   if (TREE_STATIC (value))
1041     {
1042       error ("static member `%D' cannot be a bit-field", value);
1043       return NULL_TREE;
1044     }
1045   cp_finish_decl (value, NULL_TREE, NULL_TREE, 0);
1046
1047   if (width != error_mark_node)
1048     {
1049       constant_expression_warning (width);
1050       DECL_INITIAL (value) = width;
1051       SET_DECL_C_BIT_FIELD (value);
1052     }
1053
1054   DECL_IN_AGGR_P (value) = 1;
1055   return value;
1056 }
1057
1058 /* When a function is declared with an initializer,
1059    do the right thing.  Currently, there are two possibilities:
1060
1061    class B
1062    {
1063     public:
1064      // initialization possibility #1.
1065      virtual void f () = 0;
1066      int g ();
1067    };
1068    
1069    class D1 : B
1070    {
1071     public:
1072      int d1;
1073      // error, no f ();
1074    };
1075    
1076    class D2 : B
1077    {
1078     public:
1079      int d2;
1080      void f ();
1081    };
1082    
1083    class D3 : B
1084    {
1085     public:
1086      int d3;
1087      // initialization possibility #2
1088      void f () = B::f;
1089    };
1090
1091 */
1092
1093 static void
1094 grok_function_init (tree decl, tree init)
1095 {
1096   /* An initializer for a function tells how this function should
1097      be inherited.  */
1098   tree type = TREE_TYPE (decl);
1099
1100   if (TREE_CODE (type) == FUNCTION_TYPE)
1101     error ("initializer specified for non-member function `%D'", decl);
1102   else if (integer_zerop (init))
1103     DECL_PURE_VIRTUAL_P (decl) = 1;
1104   else
1105     error ("invalid initializer for virtual method `%D'", decl);
1106 }
1107 \f
1108 void
1109 cplus_decl_attributes (tree *decl, tree attributes, int flags)
1110 {
1111   if (*decl == NULL_TREE || *decl == void_type_node)
1112     return;
1113
1114   if (TREE_CODE (*decl) == TEMPLATE_DECL)
1115     decl = &DECL_TEMPLATE_RESULT (*decl);
1116
1117   decl_attributes (decl, attributes, flags);
1118
1119   if (TREE_CODE (*decl) == TYPE_DECL)
1120     SET_IDENTIFIER_TYPE_VALUE (DECL_NAME (*decl), TREE_TYPE (*decl));
1121 }
1122 \f
1123 /* Walks through the namespace- or function-scope anonymous union OBJECT,
1124    building appropriate ALIAS_DECLs.  Returns one of the fields for use in
1125    the mangled name.  */
1126
1127 static tree
1128 build_anon_union_vars (tree object)
1129 {
1130   tree type = TREE_TYPE (object);
1131   tree main_decl = NULL_TREE;
1132   tree field;
1133
1134   /* Rather than write the code to handle the non-union case,
1135      just give an error.  */
1136   if (TREE_CODE (type) != UNION_TYPE)
1137     error ("anonymous struct not inside named type");
1138
1139   for (field = TYPE_FIELDS (type); 
1140        field != NULL_TREE; 
1141        field = TREE_CHAIN (field))
1142     {
1143       tree decl;
1144       tree ref;
1145
1146       if (DECL_ARTIFICIAL (field))
1147         continue;
1148       if (TREE_CODE (field) != FIELD_DECL)
1149         {
1150           cp_pedwarn_at ("\
1151 `%#D' invalid; an anonymous union can only have non-static data members",
1152                          field);
1153           continue;
1154         }
1155
1156       if (TREE_PRIVATE (field))
1157         cp_pedwarn_at ("private member `%#D' in anonymous union", field);
1158       else if (TREE_PROTECTED (field))
1159         cp_pedwarn_at ("protected member `%#D' in anonymous union", field);
1160
1161       if (processing_template_decl)
1162         ref = build_min_nt (COMPONENT_REF, object,
1163                             DECL_NAME (field), NULL_TREE);
1164       else
1165         ref = build_class_member_access_expr (object, field, NULL_TREE,
1166                                               false);
1167
1168       if (DECL_NAME (field))
1169         {
1170           decl = build_decl (ALIAS_DECL, DECL_NAME (field), TREE_TYPE (field));
1171           DECL_INITIAL (decl) = ref;        
1172           TREE_PUBLIC (decl) = 0;
1173           TREE_STATIC (decl) = 0;
1174           DECL_EXTERNAL (decl) = 1;
1175           decl = pushdecl (decl);
1176         }
1177       else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
1178         decl = build_anon_union_vars (ref);
1179       else
1180         decl = 0;
1181
1182       if (main_decl == NULL_TREE)
1183         main_decl = decl;
1184     }
1185
1186   return main_decl;
1187 }
1188
1189 /* Finish off the processing of a UNION_TYPE structure.  If the union is an
1190    anonymous union, then all members must be laid out together.  PUBLIC_P
1191    is nonzero if this union is not declared static.  */
1192
1193 void
1194 finish_anon_union (tree anon_union_decl)
1195 {
1196   tree type = TREE_TYPE (anon_union_decl);
1197   tree main_decl;
1198   bool public_p = TREE_PUBLIC (anon_union_decl);
1199
1200   /* The VAR_DECL's context is the same as the TYPE's context.  */
1201   DECL_CONTEXT (anon_union_decl) = DECL_CONTEXT (TYPE_NAME (type));
1202   
1203   if (TYPE_FIELDS (type) == NULL_TREE)
1204     return;
1205
1206   if (public_p)
1207     {
1208       error ("namespace-scope anonymous aggregates must be static");
1209       return;
1210     }
1211
1212   main_decl = build_anon_union_vars (anon_union_decl);
1213   if (main_decl == NULL_TREE)
1214     {
1215       warning ("anonymous union with no members");
1216       return;
1217     }
1218
1219   if (!processing_template_decl)
1220     {
1221       /* Use main_decl to set the mangled name.  */
1222       DECL_NAME (anon_union_decl) = DECL_NAME (main_decl);
1223       mangle_decl (anon_union_decl);
1224       DECL_NAME (anon_union_decl) = NULL_TREE;
1225     }
1226
1227   pushdecl (anon_union_decl);
1228   if (building_stmt_tree ()
1229       && at_function_scope_p ())
1230     add_decl_stmt (anon_union_decl);
1231   else if (!processing_template_decl)
1232     rest_of_decl_compilation (anon_union_decl, NULL,
1233                               toplevel_bindings_p (), at_eof);
1234 }
1235 \f
1236 /* Auxiliary functions to make type signatures for
1237    `operator new' and `operator delete' correspond to
1238    what compiler will be expecting.  */
1239
1240 tree
1241 coerce_new_type (tree type)
1242 {
1243   int e = 0;
1244   tree args = TYPE_ARG_TYPES (type);
1245
1246   my_friendly_assert (TREE_CODE (type) == FUNCTION_TYPE, 20001107);
1247   
1248   if (!same_type_p (TREE_TYPE (type), ptr_type_node))
1249     e = 1, error ("`operator new' must return type `%T'", ptr_type_node);
1250
1251   if (!args || args == void_list_node
1252       || !same_type_p (TREE_VALUE (args), size_type_node))
1253     {
1254       e = 2;
1255       if (args && args != void_list_node)
1256         args = TREE_CHAIN (args);
1257       pedwarn ("`operator new' takes type `size_t' (`%T') as first parameter", size_type_node);
1258     }
1259   switch (e)
1260   {
1261     case 2:
1262       args = tree_cons (NULL_TREE, size_type_node, args);
1263       /* Fall through.  */
1264     case 1:
1265       type = build_exception_variant
1266               (build_function_type (ptr_type_node, args),
1267                TYPE_RAISES_EXCEPTIONS (type));
1268       /* Fall through.  */
1269     default:;
1270   }
1271   return type;
1272 }
1273
1274 tree
1275 coerce_delete_type (tree type)
1276 {
1277   int e = 0;
1278   tree args = TYPE_ARG_TYPES (type);
1279   
1280   my_friendly_assert (TREE_CODE (type) == FUNCTION_TYPE, 20001107);
1281
1282   if (!same_type_p (TREE_TYPE (type), void_type_node))
1283     e = 1, error ("`operator delete' must return type `%T'", void_type_node);
1284
1285   if (!args || args == void_list_node
1286       || !same_type_p (TREE_VALUE (args), ptr_type_node))
1287     {
1288       e = 2;
1289       if (args && args != void_list_node)
1290         args = TREE_CHAIN (args);
1291       error ("`operator delete' takes type `%T' as first parameter", ptr_type_node);
1292     }
1293   switch (e)
1294   {
1295     case 2:
1296       args = tree_cons (NULL_TREE, ptr_type_node, args);
1297       /* Fall through.  */
1298     case 1:
1299       type = build_exception_variant
1300               (build_function_type (void_type_node, args),
1301                TYPE_RAISES_EXCEPTIONS (type));
1302       /* Fall through.  */
1303     default:;
1304   }
1305
1306   return type;
1307 }
1308 \f
1309 static void
1310 mark_vtable_entries (tree decl)
1311 {
1312   tree entries = CONSTRUCTOR_ELTS (DECL_INITIAL (decl));
1313
1314   for (; entries; entries = TREE_CHAIN (entries))
1315     {
1316       tree fnaddr = TREE_VALUE (entries);
1317       tree fn;
1318
1319       STRIP_NOPS (fnaddr);
1320
1321       if (TREE_CODE (fnaddr) != ADDR_EXPR
1322           && TREE_CODE (fnaddr) != FDESC_EXPR)
1323         /* This entry is an offset: a virtual base class offset, a
1324            virtual call offset, an RTTI offset, etc.  */
1325         continue;
1326
1327       fn = TREE_OPERAND (fnaddr, 0);
1328       TREE_ADDRESSABLE (fn) = 1;
1329       /* When we don't have vcall offsets, we output thunks whenever
1330          we output the vtables that contain them.  With vcall offsets,
1331          we know all the thunks we'll need when we emit a virtual
1332          function, so we emit the thunks there instead.  */
1333       if (DECL_THUNK_P (fn)) 
1334         use_thunk (fn, /*emit_p=*/0);
1335       mark_used (fn);
1336     }
1337 }
1338
1339 /* Set DECL up to have the closest approximation of "initialized common"
1340    linkage available.  */
1341
1342 void
1343 comdat_linkage (tree decl)
1344 {
1345   if (flag_weak)
1346     make_decl_one_only (decl);
1347   else if (TREE_CODE (decl) == FUNCTION_DECL 
1348            || (TREE_CODE (decl) == VAR_DECL && DECL_ARTIFICIAL (decl)))
1349     /* We can just emit function and compiler-generated variables
1350        statically; having multiple copies is (for the most part) only
1351        a waste of space.  
1352
1353        There are two correctness issues, however: the address of a
1354        template instantiation with external linkage should be the
1355        same, independent of what translation unit asks for the
1356        address, and this will not hold when we emit multiple copies of
1357        the function.  However, there's little else we can do.  
1358
1359        Also, by default, the typeinfo implementation assumes that
1360        there will be only one copy of the string used as the name for
1361        each type.  Therefore, if weak symbols are unavailable, the
1362        run-time library should perform a more conservative check; it
1363        should perform a string comparison, rather than an address
1364        comparison.  */
1365     TREE_PUBLIC (decl) = 0;
1366   else
1367     {
1368       /* Static data member template instantiations, however, cannot
1369          have multiple copies.  */
1370       if (DECL_INITIAL (decl) == 0
1371           || DECL_INITIAL (decl) == error_mark_node)
1372         DECL_COMMON (decl) = 1;
1373       else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
1374         {
1375           DECL_COMMON (decl) = 1;
1376           DECL_INITIAL (decl) = error_mark_node;
1377         }
1378       else if (!DECL_EXPLICIT_INSTANTIATION (decl))
1379         {
1380           /* We can't do anything useful; leave vars for explicit
1381              instantiation.  */
1382           DECL_EXTERNAL (decl) = 1;
1383           DECL_NOT_REALLY_EXTERN (decl) = 0;
1384         }
1385     }
1386
1387   if (DECL_LANG_SPECIFIC (decl))
1388     DECL_COMDAT (decl) = 1;
1389 }
1390
1391 /* For win32 we also want to put explicit instantiations in
1392    linkonce sections, so that they will be merged with implicit
1393    instantiations; otherwise we get duplicate symbol errors.  
1394    For Darwin we do not want explicit instantiations to be 
1395    linkonce.  */
1396
1397 void
1398 maybe_make_one_only (tree decl)
1399 {
1400   /* We used to say that this was not necessary on targets that support weak
1401      symbols, because the implicit instantiations will defer to the explicit
1402      one.  However, that's not actually the case in SVR4; a strong definition
1403      after a weak one is an error.  Also, not making explicit
1404      instantiations one_only means that we can end up with two copies of
1405      some template instantiations.  */
1406   if (! flag_weak)
1407     return;
1408
1409   /* We can't set DECL_COMDAT on functions, or finish_file will think
1410      we can get away with not emitting them if they aren't used.  We need
1411      to for variables so that cp_finish_decl will update their linkage,
1412      because their DECL_INITIAL may not have been set properly yet.  */
1413
1414   if (!TARGET_WEAK_NOT_IN_ARCHIVE_TOC
1415       || (! DECL_EXPLICIT_INSTANTIATION (decl)
1416           && ! DECL_TEMPLATE_SPECIALIZATION (decl)))
1417     {
1418       make_decl_one_only (decl);
1419
1420       if (TREE_CODE (decl) == VAR_DECL)
1421         {
1422           DECL_COMDAT (decl) = 1;
1423           /* Mark it needed so we don't forget to emit it.  */
1424           mark_decl_referenced (decl);
1425         }
1426     }
1427 }
1428
1429 /* Set TREE_PUBLIC and/or DECL_EXTERN on the vtable DECL,
1430    based on TYPE and other static flags.
1431
1432    Note that anything public is tagged TREE_PUBLIC, whether
1433    it's public in this file or in another one.  */
1434
1435 void
1436 import_export_vtable (tree decl, tree type, int final)
1437 {
1438   if (DECL_INTERFACE_KNOWN (decl))
1439     return;
1440
1441   if (TYPE_FOR_JAVA (type))
1442     {
1443       TREE_PUBLIC (decl) = 1;
1444       DECL_EXTERNAL (decl) = 1;
1445       DECL_INTERFACE_KNOWN (decl) = 1;
1446     }
1447   else if (CLASSTYPE_INTERFACE_KNOWN (type))
1448     {
1449       TREE_PUBLIC (decl) = 1;
1450       DECL_EXTERNAL (decl) = CLASSTYPE_INTERFACE_ONLY (type);
1451       DECL_INTERFACE_KNOWN (decl) = 1;
1452     }
1453   else
1454     {
1455       /* We can only wait to decide if we have real non-inline virtual
1456          functions in our class, or if we come from a template.  */
1457
1458       int found = (CLASSTYPE_TEMPLATE_INSTANTIATION (type)
1459                    || CLASSTYPE_KEY_METHOD (type) != NULL_TREE);
1460
1461       if (final || ! found)
1462         {
1463           comdat_linkage (decl);
1464           DECL_EXTERNAL (decl) = 0;
1465         }
1466       else
1467         {
1468           TREE_PUBLIC (decl) = 1;
1469           DECL_EXTERNAL (decl) = 1;
1470         }
1471     }
1472 }
1473
1474 /* Determine whether or not we want to specifically import or export CTYPE,
1475    using various heuristics.  */
1476
1477 static void
1478 import_export_class (tree ctype)
1479 {
1480   /* -1 for imported, 1 for exported.  */
1481   int import_export = 0;
1482
1483   /* It only makes sense to call this function at EOF.  The reason is
1484      that this function looks at whether or not the first non-inline
1485      non-abstract virtual member function has been defined in this
1486      translation unit.  But, we can't possibly know that until we've
1487      seen the entire translation unit.  */
1488   my_friendly_assert (at_eof, 20000226);
1489
1490   if (CLASSTYPE_INTERFACE_KNOWN (ctype))
1491     return;
1492
1493   /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma interface,
1494      we will have CLASSTYPE_INTERFACE_ONLY set but not
1495      CLASSTYPE_INTERFACE_KNOWN.  In that case, we don't want to use this
1496      heuristic because someone will supply a #pragma implementation
1497      elsewhere, and deducing it here would produce a conflict.  */
1498   if (CLASSTYPE_INTERFACE_ONLY (ctype))
1499     return;
1500
1501   if (lookup_attribute ("dllimport", TYPE_ATTRIBUTES (ctype)))
1502     import_export = -1;
1503   else if (lookup_attribute ("dllexport", TYPE_ATTRIBUTES (ctype)))
1504     import_export = 1;
1505
1506   /* If we got -fno-implicit-templates, we import template classes that
1507      weren't explicitly instantiated.  */
1508   if (import_export == 0
1509       && CLASSTYPE_IMPLICIT_INSTANTIATION (ctype)
1510       && ! flag_implicit_templates)
1511     import_export = -1;
1512
1513   /* Base our import/export status on that of the first non-inline,
1514      non-pure virtual function, if any.  */
1515   if (import_export == 0
1516       && TYPE_POLYMORPHIC_P (ctype))
1517     {
1518       tree method = CLASSTYPE_KEY_METHOD (ctype);
1519       if (method)
1520         import_export = (DECL_REALLY_EXTERN (method) ? -1 : 1);
1521     }
1522
1523 #ifdef MULTIPLE_SYMBOL_SPACES
1524   if (import_export == -1)
1525     import_export = 0;
1526 #endif
1527
1528   if (import_export)
1529     {
1530       SET_CLASSTYPE_INTERFACE_KNOWN (ctype);
1531       CLASSTYPE_INTERFACE_ONLY (ctype) = (import_export < 0);
1532     }
1533 }
1534
1535 /* Return true if VAR has already been provided to the back end; in that
1536    case VAR should not be modified further by the front end.  */
1537 static bool
1538 var_finalized_p (tree var)
1539 {
1540   if (flag_unit_at_a_time)
1541     return cgraph_varpool_node (var)->finalized;
1542   else
1543     return TREE_ASM_WRITTEN (var);
1544 }
1545
1546 /* If necessary, write out the vtables for the dynamic class CTYPE.
1547    Returns true if any vtables were emitted.  */
1548
1549 static bool
1550 maybe_emit_vtables (tree ctype)
1551 {
1552   tree vtbl;
1553   tree primary_vtbl;
1554   bool needed = false;
1555   bool weaken_vtables;
1556
1557   /* If the vtables for this class have already been emitted there is
1558      nothing more to do.  */
1559   primary_vtbl = CLASSTYPE_VTABLES (ctype);
1560   if (var_finalized_p (primary_vtbl))
1561     return false;
1562   /* Ignore dummy vtables made by get_vtable_decl.  */
1563   if (TREE_TYPE (primary_vtbl) == void_type_node)
1564     return false;
1565
1566   import_export_class (ctype);
1567   import_export_vtable (primary_vtbl, ctype, 1);
1568
1569   /* See if any of the vtables are needed.  */
1570   for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = TREE_CHAIN (vtbl))
1571     if (!DECL_EXTERNAL (vtbl) && DECL_NEEDED_P (vtbl))
1572       break;
1573   if (!vtbl)
1574     {
1575       /* If the references to this class' vtables are optimized away,
1576          still emit the appropriate debugging information.  See
1577          dfs_debug_mark.  */
1578       if (DECL_COMDAT (primary_vtbl) 
1579           && CLASSTYPE_DEBUG_REQUESTED (ctype))
1580         note_debug_info_needed (ctype);
1581       return false;
1582     }
1583   else if (TREE_PUBLIC (vtbl) && !DECL_COMDAT (vtbl))
1584     needed = true;
1585   
1586   /* Determine whether to make vtables weak.  The ABI requires that we
1587       do so.  There are two cases in which we have to violate the ABI
1588       specification: targets where we don't have weak symbols
1589       (obviously), and targets where weak symbols don't appear in
1590       static archives' tables of contents.  On such targets, avoiding
1591       undefined symbol link errors requires that we only make a symbol
1592       weak if we know that it will be emitted everywhere it's needed.
1593       So on such targets we don't make vtables weak in the common case
1594       where we're emitting a vtable of a nontemplate class in the 
1595       translation unit containing the definition of a noninline key
1596       method. */
1597   if (flag_weak && !TARGET_WEAK_NOT_IN_ARCHIVE_TOC)
1598     weaken_vtables = true;
1599   else if (flag_weak)
1600     {
1601       if (CLASSTYPE_USE_TEMPLATE (ctype))
1602         weaken_vtables = CLASSTYPE_IMPLICIT_INSTANTIATION (ctype);
1603       else
1604         weaken_vtables = !CLASSTYPE_KEY_METHOD (ctype)
1605           || DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (ctype));
1606     }
1607   else
1608     weaken_vtables = false;
1609
1610   /* The ABI requires that we emit all of the vtables if we emit any
1611      of them.  */
1612   for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = TREE_CHAIN (vtbl))
1613     {
1614       /* Write it out.  */
1615       import_export_vtable (vtbl, ctype, 1);
1616       mark_vtable_entries (vtbl);
1617
1618       /* If we know that DECL is needed, mark it as such for the varpool.  */
1619       if (needed)
1620         cgraph_varpool_mark_needed_node (cgraph_varpool_node (vtbl));
1621
1622       if (TREE_TYPE (DECL_INITIAL (vtbl)) == 0)
1623         {
1624           /* It had better be all done at compile-time.  */
1625           if (store_init_value (vtbl, DECL_INITIAL (vtbl)))
1626             abort ();
1627         }
1628
1629       if (write_symbols == DWARF_DEBUG || write_symbols == DWARF2_DEBUG)
1630         {
1631           /* Mark the VAR_DECL node representing the vtable itself as a
1632              "gratuitous" one, thereby forcing dwarfout.c to ignore it.
1633              It is rather important that such things be ignored because
1634              any effort to actually generate DWARF for them will run
1635              into trouble when/if we encounter code like:
1636
1637                 #pragma interface
1638                 struct S { virtual void member (); };
1639
1640               because the artificial declaration of the vtable itself (as
1641               manufactured by the g++ front end) will say that the vtable
1642               is a static member of `S' but only *after* the debug output
1643               for the definition of `S' has already been output.  This causes
1644               grief because the DWARF entry for the definition of the vtable
1645               will try to refer back to an earlier *declaration* of the
1646               vtable as a static member of `S' and there won't be one.
1647               We might be able to arrange to have the "vtable static member"
1648               attached to the member list for `S' before the debug info for
1649               `S' get written (which would solve the problem) but that would
1650               require more intrusive changes to the g++ front end.  */
1651
1652           DECL_IGNORED_P (vtbl) = 1;
1653         }
1654
1655       /* Always make vtables weak.  Or at least almost always; see above. */
1656       if (weaken_vtables)
1657         comdat_linkage (vtbl);
1658
1659       rest_of_decl_compilation (vtbl, NULL, 1, 1);
1660
1661       /* Because we're only doing syntax-checking, we'll never end up
1662          actually marking the variable as written.  */
1663       if (flag_syntax_only)
1664         TREE_ASM_WRITTEN (vtbl) = 1;
1665     }
1666
1667   /* Since we're writing out the vtable here, also write the debug
1668      info.  */
1669   note_debug_info_needed (ctype);
1670
1671   return true;
1672 }
1673
1674 /* Determines the proper settings of TREE_PUBLIC and DECL_EXTERNAL for an
1675    inline function or template instantiation at end-of-file.  */
1676
1677 void
1678 import_export_decl (tree decl)
1679 {
1680   if (DECL_INTERFACE_KNOWN (decl))
1681     return;
1682
1683   if (DECL_TEMPLATE_INSTANTIATION (decl)
1684       || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl))
1685     {
1686       DECL_NOT_REALLY_EXTERN (decl) = 1;
1687       if ((DECL_IMPLICIT_INSTANTIATION (decl)
1688            || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl))
1689           && (flag_implicit_templates
1690               || (flag_implicit_inline_templates
1691                   && TREE_CODE (decl) == FUNCTION_DECL 
1692                   && DECL_DECLARED_INLINE_P (decl))))
1693         {
1694           if (!TREE_PUBLIC (decl))
1695             /* Templates are allowed to have internal linkage.  See 
1696                [basic.link].  */
1697             ;
1698           else
1699             comdat_linkage (decl);
1700         }
1701       else
1702         {
1703           DECL_EXTERNAL (decl) = 1;
1704           DECL_NOT_REALLY_EXTERN (decl) = 0;
1705         }
1706     }
1707   else if (DECL_FUNCTION_MEMBER_P (decl))
1708     {
1709       if (!DECL_DECLARED_INLINE_P (decl))
1710         {
1711           tree ctype = DECL_CONTEXT (decl);
1712           import_export_class (ctype);
1713           if (CLASSTYPE_INTERFACE_KNOWN (ctype))
1714             {
1715               DECL_NOT_REALLY_EXTERN (decl)
1716                 = ! (CLASSTYPE_INTERFACE_ONLY (ctype)
1717                      || (DECL_DECLARED_INLINE_P (decl) 
1718                          && ! flag_implement_inlines
1719                          && !DECL_VINDEX (decl)));
1720
1721               if (!DECL_NOT_REALLY_EXTERN (decl))
1722                 DECL_EXTERNAL (decl) = 1;
1723
1724               /* Always make artificials weak.  */
1725               if (DECL_ARTIFICIAL (decl) && flag_weak)
1726                 comdat_linkage (decl);
1727               else
1728                 maybe_make_one_only (decl);
1729             }
1730         }
1731       else
1732         comdat_linkage (decl);
1733     }
1734   else
1735     comdat_linkage (decl);
1736
1737   DECL_INTERFACE_KNOWN (decl) = 1;
1738 }
1739
1740 /* Here, we only decide whether or not the tinfo node should be
1741    emitted with the vtable.  IS_IN_LIBRARY is nonzero iff the
1742    typeinfo for TYPE should be in the runtime library.  */
1743
1744 void
1745 import_export_tinfo (tree decl, tree type, bool is_in_library)
1746 {
1747   if (DECL_INTERFACE_KNOWN (decl))
1748     return;
1749   
1750   if (IS_AGGR_TYPE (type))
1751     import_export_class (type);
1752       
1753   if (IS_AGGR_TYPE (type) && CLASSTYPE_INTERFACE_KNOWN (type)
1754       && TYPE_POLYMORPHIC_P (type)
1755       /* If -fno-rtti, we're not necessarily emitting this stuff with
1756          the class, so go ahead and emit it now.  This can happen when
1757          a class is used in exception handling.  */
1758       && flag_rtti)
1759     {
1760       DECL_NOT_REALLY_EXTERN (decl) = !CLASSTYPE_INTERFACE_ONLY (type);
1761       DECL_COMDAT (decl) = 0;
1762     }
1763   else
1764     {
1765       DECL_NOT_REALLY_EXTERN (decl) = 1;
1766       DECL_COMDAT (decl) = 1;
1767     }
1768
1769   /* Now override some cases.  */
1770   if (flag_weak)
1771     DECL_COMDAT (decl) = 1;
1772   else if (is_in_library)
1773     DECL_COMDAT (decl) = 0;
1774   
1775   DECL_INTERFACE_KNOWN (decl) = 1;
1776 }
1777
1778 /* Return an expression that performs the destruction of DECL, which
1779    must be a VAR_DECL whose type has a non-trivial destructor, or is
1780    an array whose (innermost) elements have a non-trivial destructor.  */
1781
1782 tree
1783 build_cleanup (tree decl)
1784 {
1785   tree temp;
1786   tree type = TREE_TYPE (decl);
1787
1788   /* This function should only be called for declarations that really
1789      require cleanups.  */
1790   my_friendly_assert (!TYPE_HAS_TRIVIAL_DESTRUCTOR (type), 20030106);
1791
1792   /* Treat all objects with destructors as used; the destructor may do
1793      something substantive.  */
1794   mark_used (decl);
1795
1796   if (TREE_CODE (type) == ARRAY_TYPE)
1797     temp = decl;
1798   else
1799     {
1800       cxx_mark_addressable (decl);
1801       temp = build1 (ADDR_EXPR, build_pointer_type (type), decl);
1802     }
1803   temp = build_delete (TREE_TYPE (temp), temp,
1804                        sfk_complete_destructor,
1805                        LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR, 0);
1806   return temp;
1807 }
1808
1809 /* Returns the initialization guard variable for the variable DECL,
1810    which has static storage duration.  */
1811
1812 tree
1813 get_guard (tree decl)
1814 {
1815   tree sname;
1816   tree guard;
1817
1818   sname = mangle_guard_variable (decl);
1819   guard = IDENTIFIER_GLOBAL_VALUE (sname);
1820   if (! guard)
1821     {
1822       tree guard_type;
1823
1824       /* We use a type that is big enough to contain a mutex as well
1825          as an integer counter.  */
1826       guard_type = long_long_integer_type_node;
1827       guard = build_decl (VAR_DECL, sname, guard_type);
1828       
1829       /* The guard should have the same linkage as what it guards.  */
1830       TREE_PUBLIC (guard) = TREE_PUBLIC (decl);
1831       TREE_STATIC (guard) = TREE_STATIC (decl);
1832       DECL_COMMON (guard) = DECL_COMMON (decl);
1833       DECL_ONE_ONLY (guard) = DECL_ONE_ONLY (decl);
1834       if (TREE_PUBLIC (decl))
1835         DECL_WEAK (guard) = DECL_WEAK (decl);
1836       
1837       DECL_ARTIFICIAL (guard) = 1;
1838       TREE_USED (guard) = 1;
1839       pushdecl_top_level_and_finish (guard, NULL_TREE);
1840     }
1841   return guard;
1842 }
1843
1844 /* Return those bits of the GUARD variable that should be set when the
1845    guarded entity is actually initialized.  */
1846
1847 static tree
1848 get_guard_bits (tree guard)
1849 {
1850   /* We only set the first byte of the guard, in order to leave room
1851      for a mutex in the high-order bits.  */
1852   guard = build1 (ADDR_EXPR, 
1853                   build_pointer_type (TREE_TYPE (guard)),
1854                   guard);
1855   guard = build1 (NOP_EXPR, 
1856                   build_pointer_type (char_type_node), 
1857                   guard);
1858   guard = build1 (INDIRECT_REF, char_type_node, guard);
1859
1860   return guard;
1861 }
1862
1863 /* Return an expression which determines whether or not the GUARD
1864    variable has already been initialized.  */
1865
1866 tree
1867 get_guard_cond (tree guard)
1868 {
1869   tree guard_value;
1870
1871   /* Check to see if the GUARD is zero.  */
1872   guard = get_guard_bits (guard);
1873   guard_value = integer_zero_node;
1874   if (!same_type_p (TREE_TYPE (guard_value), TREE_TYPE (guard)))
1875     guard_value = convert (TREE_TYPE (guard), guard_value);
1876   return cp_build_binary_op (EQ_EXPR, guard, guard_value);
1877 }
1878
1879 /* Return an expression which sets the GUARD variable, indicating that
1880    the variable being guarded has been initialized.  */
1881
1882 tree
1883 set_guard (tree guard)
1884 {
1885   tree guard_init;
1886
1887   /* Set the GUARD to one.  */
1888   guard = get_guard_bits (guard);
1889   guard_init = integer_one_node;
1890   if (!same_type_p (TREE_TYPE (guard_init), TREE_TYPE (guard)))
1891     guard_init = convert (TREE_TYPE (guard), guard_init);
1892   return build_modify_expr (guard, NOP_EXPR, guard_init);
1893 }
1894
1895 /* Start the process of running a particular set of global constructors
1896    or destructors.  Subroutine of do_[cd]tors.  */
1897
1898 static tree
1899 start_objects (int method_type, int initp)
1900 {
1901   tree body;
1902   tree fndecl;
1903   char type[10];
1904
1905   /* Make ctor or dtor function.  METHOD_TYPE may be 'I' or 'D'.  */
1906
1907   if (initp != DEFAULT_INIT_PRIORITY)
1908     {
1909       char joiner;
1910
1911 #ifdef JOINER
1912       joiner = JOINER;
1913 #else
1914       joiner = '_';
1915 #endif
1916
1917       sprintf (type, "%c%c%.5u", method_type, joiner, initp);
1918     }
1919   else
1920     sprintf (type, "%c", method_type);
1921
1922   fndecl = build_lang_decl (FUNCTION_DECL, 
1923                             get_file_function_name_long (type),
1924                             build_function_type (void_type_node,
1925                                                  void_list_node));
1926   start_preparsed_function (fndecl, /*attrs=*/NULL_TREE, SF_PRE_PARSED);
1927
1928   /* It can be a static function as long as collect2 does not have
1929      to scan the object file to find its ctor/dtor routine.  */
1930   TREE_PUBLIC (current_function_decl) = ! targetm.have_ctors_dtors;
1931
1932   /* Mark this declaration as used to avoid spurious warnings.  */
1933   TREE_USED (current_function_decl) = 1;
1934
1935   /* Mark this function as a global constructor or destructor.  */
1936   if (method_type == 'I')
1937     DECL_GLOBAL_CTOR_P (current_function_decl) = 1;
1938   else
1939     DECL_GLOBAL_DTOR_P (current_function_decl) = 1;
1940   DECL_LANG_SPECIFIC (current_function_decl)->decl_flags.u2sel = 1;
1941
1942   body = begin_compound_stmt (BCS_FN_BODY);
1943
1944   /* We cannot allow these functions to be elided, even if they do not
1945      have external linkage.  And, there's no point in deferring
1946      compilation of thes functions; they're all going to have to be
1947      out anyhow.  */
1948   DECL_INLINE (current_function_decl) = 0;
1949   DECL_UNINLINABLE (current_function_decl) = 1;
1950
1951   return body;
1952 }
1953
1954 /* Finish the process of running a particular set of global constructors
1955    or destructors.  Subroutine of do_[cd]tors.  */
1956
1957 static void
1958 finish_objects (int method_type, int initp, tree body)
1959 {
1960   tree fn;
1961
1962   /* Finish up.  */
1963   finish_compound_stmt (body);
1964   fn = finish_function (0);
1965   expand_or_defer_fn (fn);
1966
1967   /* When only doing semantic analysis, and no RTL generation, we
1968      can't call functions that directly emit assembly code; there is
1969      no assembly file in which to put the code.  */
1970   if (flag_syntax_only)
1971     return;
1972
1973   if (targetm.have_ctors_dtors)
1974     {
1975       rtx fnsym = XEXP (DECL_RTL (fn), 0);
1976       if (method_type == 'I')
1977         (* targetm.asm_out.constructor) (fnsym, initp);
1978       else
1979         (* targetm.asm_out.destructor) (fnsym, initp);
1980     }
1981 }
1982
1983 /* The names of the parameters to the function created to handle
1984    initializations and destructions for objects with static storage
1985    duration.  */
1986 #define INITIALIZE_P_IDENTIFIER "__initialize_p"
1987 #define PRIORITY_IDENTIFIER "__priority"
1988
1989 /* The name of the function we create to handle initializations and
1990    destructions for objects with static storage duration.  */
1991 #define SSDF_IDENTIFIER "__static_initialization_and_destruction"
1992
1993 /* The declaration for the __INITIALIZE_P argument.  */
1994 static GTY(()) tree initialize_p_decl;
1995
1996 /* The declaration for the __PRIORITY argument.  */
1997 static GTY(()) tree priority_decl;
1998
1999 /* The declaration for the static storage duration function.  */
2000 static GTY(()) tree ssdf_decl;
2001
2002 /* All the static storage duration functions created in this
2003    translation unit.  */
2004 static GTY(()) varray_type ssdf_decls;
2005
2006 /* A map from priority levels to information about that priority
2007    level.  There may be many such levels, so efficient lookup is
2008    important.  */
2009 static splay_tree priority_info_map;
2010
2011 /* Begins the generation of the function that will handle all
2012    initialization and destruction of objects with static storage
2013    duration.  The function generated takes two parameters of type
2014    `int': __INITIALIZE_P and __PRIORITY.  If __INITIALIZE_P is
2015    nonzero, it performs initializations.  Otherwise, it performs
2016    destructions.  It only performs those initializations or
2017    destructions with the indicated __PRIORITY.  The generated function
2018    returns no value.  
2019
2020    It is assumed that this function will only be called once per
2021    translation unit.  */
2022
2023 static tree
2024 start_static_storage_duration_function (unsigned count)
2025 {
2026   tree parm_types;
2027   tree type;
2028   tree body;
2029   char id[sizeof (SSDF_IDENTIFIER) + 1 /* '\0' */ + 32];
2030
2031   /* Create the identifier for this function.  It will be of the form
2032      SSDF_IDENTIFIER_<number>.  */
2033   sprintf (id, "%s_%u", SSDF_IDENTIFIER, count);
2034
2035   /* Create the parameters.  */
2036   parm_types = void_list_node;
2037   parm_types = tree_cons (NULL_TREE, integer_type_node, parm_types);
2038   parm_types = tree_cons (NULL_TREE, integer_type_node, parm_types);
2039   type = build_function_type (void_type_node, parm_types);
2040
2041   /* Create the FUNCTION_DECL itself.  */
2042   ssdf_decl = build_lang_decl (FUNCTION_DECL, 
2043                                get_identifier (id),
2044                                type);
2045   TREE_PUBLIC (ssdf_decl) = 0;
2046   DECL_ARTIFICIAL (ssdf_decl) = 1;
2047
2048   /* Put this function in the list of functions to be called from the
2049      static constructors and destructors.  */
2050   if (!ssdf_decls)
2051     {
2052       VARRAY_TREE_INIT (ssdf_decls, 32, "ssdf_decls");
2053
2054       /* Take this opportunity to initialize the map from priority
2055          numbers to information about that priority level.  */
2056       priority_info_map = splay_tree_new (splay_tree_compare_ints,
2057                                           /*delete_key_fn=*/0,
2058                                           /*delete_value_fn=*/
2059                                           (splay_tree_delete_value_fn) &free);
2060
2061       /* We always need to generate functions for the
2062          DEFAULT_INIT_PRIORITY so enter it now.  That way when we walk
2063          priorities later, we'll be sure to find the
2064          DEFAULT_INIT_PRIORITY.  */
2065       get_priority_info (DEFAULT_INIT_PRIORITY);
2066     }
2067
2068   VARRAY_PUSH_TREE (ssdf_decls, ssdf_decl);
2069
2070   /* Create the argument list.  */
2071   initialize_p_decl = cp_build_parm_decl
2072     (get_identifier (INITIALIZE_P_IDENTIFIER), integer_type_node);
2073   DECL_CONTEXT (initialize_p_decl) = ssdf_decl;
2074   TREE_USED (initialize_p_decl) = 1;
2075   priority_decl = cp_build_parm_decl
2076     (get_identifier (PRIORITY_IDENTIFIER), integer_type_node);
2077   DECL_CONTEXT (priority_decl) = ssdf_decl;
2078   TREE_USED (priority_decl) = 1;
2079
2080   TREE_CHAIN (initialize_p_decl) = priority_decl;
2081   DECL_ARGUMENTS (ssdf_decl) = initialize_p_decl;
2082
2083   /* Put the function in the global scope.  */
2084   pushdecl (ssdf_decl);
2085
2086   /* Start the function itself.  This is equivalent to declaring the
2087      function as:
2088
2089        static void __ssdf (int __initialize_p, init __priority_p);
2090        
2091      It is static because we only need to call this function from the
2092      various constructor and destructor functions for this module.  */
2093   start_preparsed_function (ssdf_decl,
2094                             /*attrs=*/NULL_TREE,
2095                             SF_PRE_PARSED);
2096
2097   /* Set up the scope of the outermost block in the function.  */
2098   body = begin_compound_stmt (BCS_FN_BODY);
2099
2100   /* This function must not be deferred because we are depending on
2101      its compilation to tell us what is TREE_SYMBOL_REFERENCED.  */
2102   DECL_INLINE (ssdf_decl) = 0;
2103   DECL_UNINLINABLE (ssdf_decl) = 1;
2104
2105   return body;
2106 }
2107
2108 /* Finish the generation of the function which performs initialization
2109    and destruction of objects with static storage duration.  After
2110    this point, no more such objects can be created.  */
2111
2112 static void
2113 finish_static_storage_duration_function (tree body)
2114 {
2115   /* Close out the function.  */
2116   finish_compound_stmt (body);
2117   expand_or_defer_fn (finish_function (0));
2118 }
2119
2120 /* Return the information about the indicated PRIORITY level.  If no
2121    code to handle this level has yet been generated, generate the
2122    appropriate prologue.  */
2123
2124 static priority_info
2125 get_priority_info (int priority)
2126 {
2127   priority_info pi;
2128   splay_tree_node n;
2129
2130   n = splay_tree_lookup (priority_info_map, 
2131                          (splay_tree_key) priority);
2132   if (!n)
2133     {
2134       /* Create a new priority information structure, and insert it
2135          into the map.  */
2136       pi = xmalloc (sizeof (struct priority_info_s));
2137       pi->initializations_p = 0;
2138       pi->destructions_p = 0;
2139       splay_tree_insert (priority_info_map,
2140                          (splay_tree_key) priority,
2141                          (splay_tree_value) pi);
2142     }
2143   else
2144     pi = (priority_info) n->value;
2145
2146   return pi;
2147 }
2148
2149 /* Set up to handle the initialization or destruction of DECL.  If
2150    INITP is nonzero, we are initializing the variable.  Otherwise, we
2151    are destroying it.  */
2152
2153 static tree
2154 start_static_initialization_or_destruction (tree decl, int initp)
2155 {
2156   tree guard_if_stmt = NULL_TREE;
2157   int priority;
2158   tree cond;
2159   tree guard;
2160   tree init_cond;
2161   priority_info pi;
2162
2163   /* Figure out the priority for this declaration.  */
2164   priority = DECL_INIT_PRIORITY (decl);
2165   if (!priority)
2166     priority = DEFAULT_INIT_PRIORITY;
2167
2168   /* Remember that we had an initialization or finalization at this
2169      priority.  */
2170   pi = get_priority_info (priority);
2171   if (initp)
2172     pi->initializations_p = 1;
2173   else
2174     pi->destructions_p = 1;
2175
2176   /* Trick the compiler into thinking we are at the file and line
2177      where DECL was declared so that error-messages make sense, and so
2178      that the debugger will show somewhat sensible file and line
2179      information.  */
2180   input_location = DECL_SOURCE_LOCATION (decl);
2181
2182   /* Because of:
2183
2184        [class.access.spec]
2185
2186        Access control for implicit calls to the constructors,
2187        the conversion functions, or the destructor called to
2188        create and destroy a static data member is performed as
2189        if these calls appeared in the scope of the member's
2190        class.  
2191
2192      we pretend we are in a static member function of the class of
2193      which the DECL is a member.  */
2194   if (member_p (decl))
2195     {
2196       DECL_CONTEXT (current_function_decl) = DECL_CONTEXT (decl);
2197       DECL_STATIC_FUNCTION_P (current_function_decl) = 1;
2198     }
2199   
2200   /* Conditionalize this initialization on being in the right priority
2201      and being initializing/finalizing appropriately.  */
2202   guard_if_stmt = begin_if_stmt ();
2203   cond = cp_build_binary_op (EQ_EXPR,
2204                              priority_decl,
2205                              build_int_2 (priority, 0));
2206   init_cond = initp ? integer_one_node : integer_zero_node;
2207   init_cond = cp_build_binary_op (EQ_EXPR,
2208                                   initialize_p_decl,
2209                                   init_cond);
2210   cond = cp_build_binary_op (TRUTH_ANDIF_EXPR, cond, init_cond);
2211
2212   /* Assume we don't need a guard.  */
2213   guard = NULL_TREE;
2214   /* We need a guard if this is an object with external linkage that
2215      might be initialized in more than one place.  (For example, a
2216      static data member of a template, when the data member requires
2217      construction.)  */
2218   if (TREE_PUBLIC (decl) && (DECL_COMMON (decl) 
2219                              || DECL_ONE_ONLY (decl)
2220                              || DECL_WEAK (decl)))
2221     {
2222       tree guard_cond;
2223
2224       guard = get_guard (decl);
2225
2226       /* When using __cxa_atexit, we just check the GUARD as we would
2227          for a local static.  */
2228       if (flag_use_cxa_atexit)
2229         {
2230           /* When using __cxa_atexit, we never try to destroy
2231              anything from a static destructor.  */
2232           my_friendly_assert (initp, 20000629);
2233           guard_cond = get_guard_cond (guard);
2234         }
2235       /* If we don't have __cxa_atexit, then we will be running
2236          destructors from .fini sections, or their equivalents.  So,
2237          we need to know how many times we've tried to initialize this
2238          object.  We do initializations only if the GUARD is zero,
2239          i.e., if we are the first to initialize the variable.  We do
2240          destructions only if the GUARD is one, i.e., if we are the
2241          last to destroy the variable.  */
2242       else if (initp)
2243         guard_cond 
2244           = cp_build_binary_op (EQ_EXPR,
2245                                 build_unary_op (PREINCREMENT_EXPR,
2246                                                 guard,
2247                                                 /*noconvert=*/1),
2248                                 integer_one_node);
2249       else
2250         guard_cond 
2251           = cp_build_binary_op (EQ_EXPR,
2252                                 build_unary_op (PREDECREMENT_EXPR,
2253                                                 guard,
2254                                                 /*noconvert=*/1),
2255                                 integer_zero_node);
2256
2257       cond = cp_build_binary_op (TRUTH_ANDIF_EXPR, cond, guard_cond);
2258     }
2259
2260   finish_if_stmt_cond (cond, guard_if_stmt);
2261
2262   /* If we're using __cxa_atexit, we have not already set the GUARD,
2263      so we must do so now.  */
2264   if (guard && initp && flag_use_cxa_atexit)
2265     finish_expr_stmt (set_guard (guard));
2266
2267   return guard_if_stmt;
2268 }
2269
2270 /* We've just finished generating code to do an initialization or
2271    finalization.  GUARD_IF_STMT is the if-statement we used to guard
2272    the initialization.  */
2273
2274 static void
2275 finish_static_initialization_or_destruction (tree guard_if_stmt)
2276 {
2277   finish_then_clause (guard_if_stmt);
2278   finish_if_stmt (guard_if_stmt);
2279
2280   /* Now that we're done with DECL we don't need to pretend to be a
2281      member of its class any longer.  */
2282   DECL_CONTEXT (current_function_decl) = NULL_TREE;
2283   DECL_STATIC_FUNCTION_P (current_function_decl) = 0;
2284 }
2285
2286 /* Generate code to do the initialization of DECL, a VAR_DECL with
2287    static storage duration.  The initialization is INIT.  */
2288
2289 static void
2290 do_static_initialization (tree decl, tree init)
2291 {
2292   tree guard_if_stmt;
2293
2294   /* Set up for the initialization.  */
2295   guard_if_stmt
2296     = start_static_initialization_or_destruction (decl,
2297                                                   /*initp=*/1);
2298
2299   /* Perform the initialization.  */
2300   if (init)
2301     finish_expr_stmt (init);
2302
2303   /* If we're using __cxa_atexit, register a a function that calls the
2304      destructor for the object.  */
2305   if (flag_use_cxa_atexit)
2306     register_dtor_fn (decl);
2307
2308   /* Finish up.  */
2309   finish_static_initialization_or_destruction (guard_if_stmt);
2310 }
2311
2312 /* Generate code to do the static destruction of DECL.  If DECL may be
2313    initialized more than once in different object files, GUARD is the
2314    guard variable to check.  PRIORITY is the priority for the
2315    destruction.  */
2316
2317 static void
2318 do_static_destruction (tree decl)
2319 {
2320   tree guard_if_stmt;
2321
2322   /* If we're using __cxa_atexit, then destructors are registered
2323      immediately after objects are initialized.  */
2324   my_friendly_assert (!flag_use_cxa_atexit, 20000121);
2325
2326   /* If we don't need a destructor, there's nothing to do.  */
2327   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2328     return;
2329
2330   /* Actually do the destruction.  */
2331   guard_if_stmt = start_static_initialization_or_destruction (decl,
2332                                                               /*initp=*/0);
2333   finish_expr_stmt (build_cleanup (decl));
2334   finish_static_initialization_or_destruction (guard_if_stmt);
2335 }
2336
2337 /* VARS is a list of variables with static storage duration which may
2338    need initialization and/or finalization.  Remove those variables
2339    that don't really need to be initialized or finalized, and return
2340    the resulting list.  The order in which the variables appear in
2341    VARS is in reverse order of the order in which they should actually
2342    be initialized.  The list we return is in the unreversed order;
2343    i.e., the first variable should be initialized first.  */
2344
2345 static tree
2346 prune_vars_needing_no_initialization (tree *vars)
2347 {
2348   tree *var = vars;
2349   tree result = NULL_TREE;
2350
2351   while (*var)
2352     {
2353       tree t = *var;
2354       tree decl = TREE_VALUE (t);
2355       tree init = TREE_PURPOSE (t);
2356
2357       /* Deal gracefully with error.  */
2358       if (decl == error_mark_node)
2359         {
2360           var = &TREE_CHAIN (t);
2361           continue;
2362         }
2363
2364       /* The only things that can be initialized are variables.  */
2365       my_friendly_assert (TREE_CODE (decl) == VAR_DECL, 19990420);
2366
2367       /* If this object is not defined, we don't need to do anything
2368          here.  */
2369       if (DECL_EXTERNAL (decl))
2370         {
2371           var = &TREE_CHAIN (t);
2372           continue;
2373         }
2374
2375       /* Also, if the initializer already contains errors, we can bail
2376          out now.  */
2377       if (init && TREE_CODE (init) == TREE_LIST 
2378           && value_member (error_mark_node, init))
2379         {
2380           var = &TREE_CHAIN (t);
2381           continue;
2382         }
2383
2384       /* This variable is going to need initialization and/or
2385          finalization, so we add it to the list.  */
2386       *var = TREE_CHAIN (t);
2387       TREE_CHAIN (t) = result;
2388       result = t;
2389     }
2390
2391   return result;
2392 }
2393
2394 /* Make sure we have told the back end about all the variables in
2395    VARS.  */
2396
2397 static void
2398 write_out_vars (tree vars)
2399 {
2400   tree v;
2401
2402   for (v = vars; v; v = TREE_CHAIN (v))
2403     if (!var_finalized_p (TREE_VALUE (v)))
2404       rest_of_decl_compilation (TREE_VALUE (v), 0, 1, 1);
2405 }
2406
2407 /* Generate a static constructor (if CONSTRUCTOR_P) or destructor
2408    (otherwise) that will initialize all gobal objects with static
2409    storage duration having the indicated PRIORITY.  */
2410
2411 static void
2412 generate_ctor_or_dtor_function (bool constructor_p, int priority,
2413                                 location_t *locus)
2414 {
2415   char function_key;
2416   tree arguments;
2417   tree fndecl;
2418   tree body;
2419   size_t i;
2420
2421   input_location = *locus;
2422   locus->line++;
2423   
2424   /* We use `I' to indicate initialization and `D' to indicate
2425      destruction.  */
2426   function_key = constructor_p ? 'I' : 'D';
2427
2428   /* We emit the function lazily, to avoid generating empty
2429      global constructors and destructors.  */
2430   body = NULL_TREE;
2431
2432   /* Call the static storage duration function with appropriate
2433      arguments.  */
2434   if (ssdf_decls)
2435     for (i = 0; i < ssdf_decls->elements_used; ++i) 
2436       {
2437         fndecl = VARRAY_TREE (ssdf_decls, i);
2438
2439         /* Calls to pure or const functions will expand to nothing.  */
2440         if (! (flags_from_decl_or_type (fndecl) & (ECF_CONST | ECF_PURE)))
2441           {
2442             if (! body)
2443               body = start_objects (function_key, priority);
2444
2445             arguments = tree_cons (NULL_TREE, build_int_2 (priority, 0), 
2446                                    NULL_TREE);
2447             arguments = tree_cons (NULL_TREE, build_int_2 (constructor_p, 0),
2448                                    arguments);
2449             finish_expr_stmt (build_function_call (fndecl, arguments));
2450           }
2451       }
2452
2453   /* If we're generating code for the DEFAULT_INIT_PRIORITY, throw in
2454      calls to any functions marked with attributes indicating that
2455      they should be called at initialization- or destruction-time.  */
2456   if (priority == DEFAULT_INIT_PRIORITY)
2457     {
2458       tree fns;
2459
2460       for (fns = constructor_p ? static_ctors : static_dtors; 
2461            fns;
2462            fns = TREE_CHAIN (fns))
2463         {
2464           fndecl = TREE_VALUE (fns);
2465
2466           /* Calls to pure/const functions will expand to nothing.  */
2467           if (! (flags_from_decl_or_type (fndecl) & (ECF_CONST | ECF_PURE)))
2468             {
2469               if (! body)
2470                 body = start_objects (function_key, priority);
2471               finish_expr_stmt (build_function_call (fndecl, NULL_TREE));
2472             }
2473         }
2474     }
2475
2476   /* Close out the function.  */
2477   if (body)
2478     finish_objects (function_key, priority, body);
2479 }
2480
2481 /* Generate constructor and destructor functions for the priority
2482    indicated by N.  */
2483
2484 static int
2485 generate_ctor_and_dtor_functions_for_priority (splay_tree_node n, void * data)
2486 {
2487   location_t *locus = data;
2488   int priority = (int) n->key;
2489   priority_info pi = (priority_info) n->value;
2490
2491   /* Generate the functions themselves, but only if they are really
2492      needed.  */
2493   if (pi->initializations_p
2494       || (priority == DEFAULT_INIT_PRIORITY && static_ctors))
2495     generate_ctor_or_dtor_function (/*constructor_p=*/true, priority, locus);
2496   if (pi->destructions_p
2497       || (priority == DEFAULT_INIT_PRIORITY && static_dtors))
2498     generate_ctor_or_dtor_function (/*constructor_p=*/false, priority, locus);
2499
2500   /* Keep iterating.  */
2501   return 0;
2502 }
2503
2504 /* Called via LANGHOOK_CALLGRAPH_ANALYZE_EXPR.  It is supposed to mark
2505    decls referenced from frontend specific constructs; it will be called
2506    only for language-specific tree nodes.
2507
2508    Here we must deal with member pointers.  */
2509
2510 tree
2511 cxx_callgraph_analyze_expr (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
2512                             tree from ATTRIBUTE_UNUSED)
2513 {
2514   tree t = *tp;
2515
2516   if (flag_unit_at_a_time)
2517     switch (TREE_CODE (t))
2518       {
2519       case PTRMEM_CST:
2520         if (TYPE_PTRMEMFUNC_P (TREE_TYPE (t)))
2521           cgraph_mark_needed_node (cgraph_node (PTRMEM_CST_MEMBER (t)));
2522         break;
2523       case BASELINK:
2524         if (TREE_CODE (BASELINK_FUNCTIONS (t)) == FUNCTION_DECL)
2525           cgraph_mark_needed_node (cgraph_node (BASELINK_FUNCTIONS (t)));
2526         break;
2527
2528       default:
2529         break;
2530       }
2531
2532   return NULL;
2533 }
2534
2535 /* This routine is called from the last rule in yyparse ().
2536    Its job is to create all the code needed to initialize and
2537    destroy the global aggregates.  We do the destruction
2538    first, since that way we only need to reverse the decls once.  */
2539
2540 void
2541 finish_file (void)
2542 {
2543   tree vars;
2544   bool reconsider;
2545   size_t i;
2546   location_t locus;
2547   unsigned ssdf_count = 0;
2548
2549   locus = input_location;
2550   at_eof = 1;
2551
2552   /* Bad parse errors.  Just forget about it.  */
2553   if (! global_bindings_p () || current_class_type || decl_namespace_list)
2554     return;
2555
2556   if (pch_file)
2557     c_common_write_pch ();
2558
2559   /* Otherwise, GDB can get confused, because in only knows
2560      about source for LINENO-1 lines.  */
2561   input_line -= 1;
2562
2563   interface_unknown = 1;
2564   interface_only = 0;
2565
2566   /* We now have to write out all the stuff we put off writing out.
2567      These include:
2568
2569        o Template specializations that we have not yet instantiated,
2570          but which are needed.
2571        o Initialization and destruction for non-local objects with
2572          static storage duration.  (Local objects with static storage
2573          duration are initialized when their scope is first entered,
2574          and are cleaned up via atexit.)
2575        o Virtual function tables.  
2576
2577      All of these may cause others to be needed.  For example,
2578      instantiating one function may cause another to be needed, and
2579      generating the initializer for an object may cause templates to be
2580      instantiated, etc., etc.  */
2581
2582   timevar_push (TV_VARCONST);
2583
2584   emit_support_tinfos ();
2585
2586   do 
2587     {
2588       tree t;
2589       size_t n_old, n_new;
2590
2591       reconsider = false;
2592
2593       /* If there are templates that we've put off instantiating, do
2594          them now.  */
2595       instantiate_pending_templates ();
2596       ggc_collect ();
2597
2598       /* Write out virtual tables as required.  Note that writing out
2599          the virtual table for a template class may cause the
2600          instantiation of members of that class.  If we write out
2601          vtables then we remove the class from our list so we don't
2602          have to look at it again.  */
2603  
2604       while (keyed_classes != NULL_TREE
2605              && maybe_emit_vtables (TREE_VALUE (keyed_classes)))
2606         {
2607           reconsider = true;
2608           keyed_classes = TREE_CHAIN (keyed_classes);
2609         }
2610  
2611       t = keyed_classes;
2612       if (t != NULL_TREE)
2613         {
2614           tree next = TREE_CHAIN (t);
2615  
2616           while (next)
2617             {
2618               if (maybe_emit_vtables (TREE_VALUE (next)))
2619                 {
2620                   reconsider = true;
2621                   TREE_CHAIN (t) = TREE_CHAIN (next);
2622                 }
2623               else
2624                 t = next;
2625  
2626               next = TREE_CHAIN (t);
2627             }
2628         }
2629        
2630       /* Write out needed type info variables.  We have to be careful
2631          looping through unemitted decls, because emit_tinfo_decl may
2632          cause other variables to be needed.  We stick new elements
2633          (and old elements that we may need to reconsider) at the end
2634          of the array, then shift them back to the beginning once we're
2635          done.  */
2636   
2637       n_old = VARRAY_ACTIVE_SIZE (unemitted_tinfo_decls);
2638       for (i = 0; i < n_old; ++i)
2639         {
2640           tree tinfo_decl = VARRAY_TREE (unemitted_tinfo_decls, i);
2641           if (emit_tinfo_decl (tinfo_decl))
2642             reconsider = true;
2643           else
2644             VARRAY_PUSH_TREE (unemitted_tinfo_decls, tinfo_decl);
2645         }
2646   
2647       /* The only elements we want to keep are the new ones.  Copy
2648          them to the beginning of the array, then get rid of the
2649          leftovers.  */
2650       n_new = VARRAY_ACTIVE_SIZE (unemitted_tinfo_decls) - n_old;
2651       if (n_new)
2652         memmove (&VARRAY_TREE (unemitted_tinfo_decls, 0),
2653                  &VARRAY_TREE (unemitted_tinfo_decls, n_old),
2654                  n_new * sizeof (tree));
2655       memset (&VARRAY_TREE (unemitted_tinfo_decls, n_new),
2656               0, n_old * sizeof (tree));
2657       VARRAY_ACTIVE_SIZE (unemitted_tinfo_decls) = n_new;
2658
2659       /* The list of objects with static storage duration is built up
2660          in reverse order.  We clear STATIC_AGGREGATES so that any new
2661          aggregates added during the initialization of these will be
2662          initialized in the correct order when we next come around the
2663          loop.  */
2664       vars = prune_vars_needing_no_initialization (&static_aggregates);
2665
2666       if (vars)
2667         {
2668           tree v;
2669
2670           /* We need to start a new initialization function each time
2671              through the loop.  That's because we need to know which
2672              vtables have been referenced, and TREE_SYMBOL_REFERENCED
2673              isn't computed until a function is finished, and written
2674              out.  That's a deficiency in the back-end.  When this is
2675              fixed, these initialization functions could all become
2676              inline, with resulting performance improvements.  */
2677           tree ssdf_body;
2678
2679           /* Set the line and file, so that it is obviously not from
2680              the source file.  */
2681           input_location = locus;
2682           ssdf_body = start_static_storage_duration_function (ssdf_count);
2683
2684           /* Make sure the back end knows about all the variables.  */
2685           write_out_vars (vars);
2686
2687           /* First generate code to do all the initializations.  */
2688           for (v = vars; v; v = TREE_CHAIN (v))
2689             do_static_initialization (TREE_VALUE (v),
2690                                       TREE_PURPOSE (v));
2691
2692           /* Then, generate code to do all the destructions.  Do these
2693              in reverse order so that the most recently constructed
2694              variable is the first destroyed.  If we're using
2695              __cxa_atexit, then we don't need to do this; functions
2696              were registered at initialization time to destroy the
2697              local statics.  */
2698           if (!flag_use_cxa_atexit)
2699             {
2700               vars = nreverse (vars);
2701               for (v = vars; v; v = TREE_CHAIN (v))
2702                 do_static_destruction (TREE_VALUE (v));
2703             }
2704           else
2705             vars = NULL_TREE;
2706
2707           /* Finish up the static storage duration function for this
2708              round.  */
2709           input_location = locus;
2710           finish_static_storage_duration_function (ssdf_body);
2711
2712           /* All those initializations and finalizations might cause
2713              us to need more inline functions, more template
2714              instantiations, etc.  */
2715           reconsider = true;
2716           ssdf_count++;
2717           locus.line++;
2718         }
2719       
2720       for (i = 0; i < deferred_fns_used; ++i)
2721         {
2722           tree decl = VARRAY_TREE (deferred_fns, i);
2723
2724           if (! DECL_DECLARED_INLINE_P (decl) || ! TREE_USED (decl))
2725             abort ();
2726
2727           /* Does it need synthesizing?  */
2728           if (DECL_ARTIFICIAL (decl) && ! DECL_INITIAL (decl)
2729               && TREE_USED (decl)
2730               && (! DECL_REALLY_EXTERN (decl) || DECL_INLINE (decl)))
2731             {
2732               /* Even though we're already at the top-level, we push
2733                  there again.  That way, when we pop back a few lines
2734                  hence, all of our state is restored.  Otherwise,
2735                  finish_function doesn't clean things up, and we end
2736                  up with CURRENT_FUNCTION_DECL set.  */
2737               push_to_top_level ();
2738               synthesize_method (decl);
2739               pop_from_top_level ();
2740               reconsider = true;
2741             }
2742
2743           if (!DECL_SAVED_TREE (decl))
2744             continue;
2745
2746           import_export_decl (decl);
2747
2748           /* We lie to the back-end, pretending that some functions
2749              are not defined when they really are.  This keeps these
2750              functions from being put out unnecessarily.  But, we must
2751              stop lying when the functions are referenced, or if they
2752              are not comdat since they need to be put out now.  This
2753              is done in a separate for cycle, because if some deferred
2754              function is contained in another deferred function later
2755              in deferred_fns varray, rest_of_compilation would skip
2756              this function and we really cannot expand the same
2757              function twice.  */
2758           if (DECL_NOT_REALLY_EXTERN (decl)
2759               && DECL_INITIAL (decl)
2760               && DECL_NEEDED_P (decl))
2761             DECL_EXTERNAL (decl) = 0;
2762
2763           /* If we're going to need to write this function out, and
2764              there's already a body for it, create RTL for it now.
2765              (There might be no body if this is a method we haven't
2766              gotten around to synthesizing yet.)  */
2767           if (!DECL_EXTERNAL (decl)
2768               && DECL_NEEDED_P (decl)
2769               && !TREE_ASM_WRITTEN (decl)
2770               && (!flag_unit_at_a_time 
2771                   || !cgraph_node (decl)->local.finalized))
2772             {
2773               /* We will output the function; no longer consider it in this
2774                  loop.  */
2775               DECL_DEFER_OUTPUT (decl) = 0;
2776               /* Generate RTL for this function now that we know we
2777                  need it.  */
2778               expand_or_defer_fn (decl);
2779               /* If we're compiling -fsyntax-only pretend that this
2780                  function has been written out so that we don't try to
2781                  expand it again.  */
2782               if (flag_syntax_only)
2783                 TREE_ASM_WRITTEN (decl) = 1;
2784               reconsider = true;
2785             }
2786         }
2787
2788       if (walk_namespaces (wrapup_globals_for_namespace, /*data=*/0))
2789         reconsider = true;
2790
2791       /* Static data members are just like namespace-scope globals.  */
2792       for (i = 0; i < pending_statics_used; ++i) 
2793         {
2794           tree decl = VARRAY_TREE (pending_statics, i);
2795           if (var_finalized_p (decl))
2796             continue;
2797           import_export_decl (decl);
2798           if (DECL_NOT_REALLY_EXTERN (decl) && ! DECL_IN_AGGR_P (decl))
2799             DECL_EXTERNAL (decl) = 0;
2800         }
2801       if (pending_statics
2802           && wrapup_global_declarations (&VARRAY_TREE (pending_statics, 0),
2803                                          pending_statics_used))
2804         reconsider = true;
2805
2806       if (cgraph_assemble_pending_functions ())
2807         reconsider = true;
2808     } 
2809   while (reconsider);
2810
2811   /* All used inline functions must have a definition at this point.  */
2812   for (i = 0; i < deferred_fns_used; ++i)
2813     {
2814       tree decl = VARRAY_TREE (deferred_fns, i);
2815
2816       if (!TREE_ASM_WRITTEN (decl) && !DECL_SAVED_TREE (decl)
2817           /* An explicit instantiation can be used to specify
2818              that the body is in another unit. It will have
2819              already verified there was a definition.  */
2820           && !DECL_EXPLICIT_INSTANTIATION (decl))
2821         {
2822           cp_warning_at ("inline function `%D' used but never defined", decl);
2823           /* This symbol is effectively an "extern" declaration now.
2824              This is not strictly necessary, but removes a duplicate
2825              warning.  */
2826           TREE_PUBLIC (decl) = 1;
2827         }
2828       
2829     }
2830   
2831   /* We give C linkage to static constructors and destructors.  */
2832   push_lang_context (lang_name_c);
2833
2834   /* Generate initialization and destruction functions for all
2835      priorities for which they are required.  */
2836   if (priority_info_map)
2837     splay_tree_foreach (priority_info_map, 
2838                         generate_ctor_and_dtor_functions_for_priority,
2839                         /*data=*/&locus);
2840   else
2841     {
2842       
2843       if (static_ctors)
2844         generate_ctor_or_dtor_function (/*constructor_p=*/true,
2845                                         DEFAULT_INIT_PRIORITY, &locus);
2846       if (static_dtors)
2847         generate_ctor_or_dtor_function (/*constructor_p=*/false,
2848                                         DEFAULT_INIT_PRIORITY, &locus);
2849     }
2850
2851   /* We're done with the splay-tree now.  */
2852   if (priority_info_map)
2853     splay_tree_delete (priority_info_map);
2854
2855   /* We're done with static constructors, so we can go back to "C++"
2856      linkage now.  */
2857   pop_lang_context ();
2858
2859   if (flag_unit_at_a_time)
2860     {
2861       cgraph_finalize_compilation_unit ();
2862       cgraph_optimize ();
2863     }
2864
2865   /* Emit mudflap static registration function.  This must be done
2866      after all the user functions have been expanded.  */
2867   if (flag_mudflap)
2868     mudflap_finish_file ();
2869
2870   /* Now, issue warnings about static, but not defined, functions,
2871      etc., and emit debugging information.  */
2872   walk_namespaces (wrapup_globals_for_namespace, /*data=*/&reconsider);
2873   if (pending_statics)
2874     check_global_declarations (&VARRAY_TREE (pending_statics, 0),
2875                                pending_statics_used);
2876
2877   finish_repo ();
2878
2879   /* The entire file is now complete.  If requested, dump everything
2880      to a file.  */
2881   {
2882     int flags;
2883     FILE *stream = dump_begin (TDI_tu, &flags);
2884
2885     if (stream)
2886       {
2887         dump_node (global_namespace, flags & ~TDF_SLIM, stream);
2888         dump_end (TDI_tu, stream);
2889       }
2890   }
2891   
2892   timevar_pop (TV_VARCONST);
2893
2894   if (flag_detailed_statistics)
2895     {
2896       dump_tree_statistics ();
2897       dump_time_statistics ();
2898     }
2899   input_location = locus;
2900
2901 #ifdef ENABLE_CHECKING
2902   validate_conversion_obstack ();
2903 #endif /* ENABLE_CHECKING */
2904 }
2905
2906 /* FN is an OFFSET_REF, DOTSTAR_EXPR or MEMBER_REF indicating the
2907    function to call in parse-tree form; it has not yet been
2908    semantically analyzed.  ARGS are the arguments to the function.
2909    They have already been semantically analyzed.  */
2910
2911 tree
2912 build_offset_ref_call_from_tree (tree fn, tree args)
2913 {
2914   tree orig_fn;
2915   tree orig_args;
2916   tree expr;
2917   tree object;
2918
2919   orig_fn = fn;
2920   orig_args = args;
2921   object = TREE_OPERAND (fn, 0);
2922
2923   if (processing_template_decl)
2924     {
2925       my_friendly_assert (TREE_CODE (fn) == DOTSTAR_EXPR
2926                           || TREE_CODE (fn) == MEMBER_REF,
2927                           20030708);
2928       if (type_dependent_expression_p (fn)
2929           || any_type_dependent_arguments_p (args))
2930         return build_min_nt (CALL_EXPR, fn, args, NULL_TREE);
2931
2932       /* Transform the arguments and add the implicit "this"
2933          parameter.  That must be done before the FN is transformed
2934          because we depend on the form of FN.  */
2935       args = build_non_dependent_args (args);
2936       if (TREE_CODE (fn) == DOTSTAR_EXPR)
2937         object = build_unary_op (ADDR_EXPR, object, 0);
2938       object = build_non_dependent_expr (object);
2939       args = tree_cons (NULL_TREE, object, args);
2940       /* Now that the arguments are done, transform FN.  */
2941       fn = build_non_dependent_expr (fn);
2942     }
2943
2944   /* A qualified name corresponding to a bound pointer-to-member is
2945      represented as an OFFSET_REF:
2946
2947         struct B { void g(); };
2948         void (B::*p)();
2949         void B::g() { (this->*p)(); }  */
2950   if (TREE_CODE (fn) == OFFSET_REF)
2951     {
2952       tree object_addr = build_unary_op (ADDR_EXPR, object, 0);
2953       fn = TREE_OPERAND (fn, 1);
2954       fn = get_member_function_from_ptrfunc (&object_addr, fn);
2955       args = tree_cons (NULL_TREE, object_addr, args);
2956     }
2957
2958   expr = build_function_call (fn, args);
2959   if (processing_template_decl && expr != error_mark_node)
2960     return build_min_non_dep (CALL_EXPR, expr, orig_fn, orig_args, NULL_TREE);
2961   return expr;
2962 }
2963   
2964
2965 void
2966 check_default_args (tree x)
2967 {
2968   tree arg = TYPE_ARG_TYPES (TREE_TYPE (x));
2969   bool saw_def = false;
2970   int i = 0 - (TREE_CODE (TREE_TYPE (x)) == METHOD_TYPE);
2971   for (; arg && arg != void_list_node; arg = TREE_CHAIN (arg), ++i)
2972     {
2973       if (TREE_PURPOSE (arg))
2974         saw_def = true;
2975       else if (saw_def)
2976         {
2977           cp_error_at ("default argument missing for parameter %P of `%+#D'",
2978                        i, x);
2979           break;
2980         }
2981     }
2982 }
2983
2984 void
2985 mark_used (tree decl)
2986 {
2987   TREE_USED (decl) = 1;
2988   if (processing_template_decl || skip_evaluation)
2989     return;
2990
2991   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl)
2992       && !TREE_ASM_WRITTEN (decl))
2993     /* Remember it, so we can check it was defined.  */
2994     {
2995       if (DECL_DEFERRED_FN (decl))
2996         return;
2997       DECL_DEFERRED_FN (decl) = 1;
2998       DECL_DEFER_OUTPUT (decl) = 1;
2999       if (!deferred_fns)
3000         VARRAY_TREE_INIT (deferred_fns, 32, "deferred_fns");
3001       
3002       VARRAY_PUSH_TREE (deferred_fns, decl);
3003     }
3004   
3005   assemble_external (decl);
3006
3007   /* Is it a synthesized method that needs to be synthesized?  */
3008   if (TREE_CODE (decl) == FUNCTION_DECL
3009       && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl)
3010       && DECL_ARTIFICIAL (decl) 
3011       && !DECL_THUNK_P (decl)
3012       && ! DECL_INITIAL (decl)
3013       /* Kludge: don't synthesize for default args.  */
3014       && current_function_decl)
3015     {
3016       synthesize_method (decl);
3017       /* If we've already synthesized the method we don't need to
3018          instantiate it, so we can return right away.  */
3019       return;
3020     }
3021
3022   /* If this is a function or variable that is an instance of some
3023      template, we now know that we will need to actually do the
3024      instantiation. We check that DECL is not an explicit
3025      instantiation because that is not checked in instantiate_decl.  */
3026   if ((DECL_NON_THUNK_FUNCTION_P (decl) || TREE_CODE (decl) == VAR_DECL)
3027       && DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)
3028       && (!DECL_EXPLICIT_INSTANTIATION (decl)
3029           || (TREE_CODE (decl) == FUNCTION_DECL 
3030               && DECL_INLINE (DECL_TEMPLATE_RESULT 
3031                               (template_for_substitution (decl))))))
3032     {
3033       bool defer;
3034
3035       /* Normally, we put off instantiating functions in order to
3036          improve compile times.  Maintaining a stack of active
3037          functions is expensive, and the inliner knows to
3038          instantiate any functions it might need.
3039
3040          However, if instantiating this function might help us mark
3041          the current function TREE_NOTHROW, we go ahead and
3042          instantiate it now.  
3043          
3044          This is not needed for unit-at-a-time since we reorder the functions
3045          in topological order anyway.
3046          */
3047       defer = (!flag_exceptions
3048                || flag_unit_at_a_time
3049                || !optimize
3050                || TREE_CODE (decl) != FUNCTION_DECL
3051                /* If the called function can't throw, we don't need to
3052                   generate its body to find that out.  */
3053                || TREE_NOTHROW (decl)
3054                || !cfun
3055                || !current_function_decl
3056                /* If we already know the current function can't throw,
3057                   then we don't need to work hard to prove it.  */
3058                || TREE_NOTHROW (current_function_decl)
3059                /* If we already know that the current function *can*
3060                   throw, there's no point in gathering more
3061                   information.  */
3062                || cp_function_chain->can_throw);
3063
3064       instantiate_decl (decl, defer, /*undefined_ok=*/0);
3065     }
3066 }
3067
3068 #include "gt-cp-decl2.h"