OSDN Git Service

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