OSDN Git Service

* c-common.h (lang_post_pch_load): New variable.
[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 /* DECL is a function with vague linkage.  Remember it so that at the
733    end of the translation unit we can decide whether or not to emit
734    it.  */
735
736 void
737 note_vague_linkage_fn (tree decl)
738 {
739   if (!DECL_DEFERRED_FN (decl))
740     {
741       DECL_DEFERRED_FN (decl) = 1;
742       DECL_DEFER_OUTPUT (decl) = 1;
743       if (!deferred_fns)
744         VARRAY_TREE_INIT (deferred_fns, 32, "deferred_fns");
745       VARRAY_PUSH_TREE (deferred_fns, decl);
746     }
747 }
748
749 /* Like note_vague_linkage_fn but for variables.  */
750
751 static void
752 note_vague_linkage_var (tree var)
753 {
754   if (!pending_statics)
755     VARRAY_TREE_INIT (pending_statics, 32, "pending_statics");
756   VARRAY_PUSH_TREE (pending_statics, var);
757 }
758
759 /* We have just processed the DECL, which is a static data member.
760    Its initializer, if present, is INIT.  The ASMSPEC_TREE, if
761    present, is the assembly-language name for the data member.
762    FLAGS is as for cp_finish_decl.  */
763
764 void
765 finish_static_data_member_decl (tree decl, tree init, tree asmspec_tree,
766                                 int flags)
767 {
768   my_friendly_assert (TREE_PUBLIC (decl), 0);
769
770   DECL_CONTEXT (decl) = current_class_type;
771
772   /* We cannot call pushdecl here, because that would fill in the
773      TREE_CHAIN of our decl.  Instead, we modify cp_finish_decl to do
774      the right thing, namely, to put this decl out straight away.  */
775   /* current_class_type can be NULL_TREE in case of error.  */
776   if (!asmspec_tree && current_class_type)
777     DECL_INITIAL (decl) = error_mark_node;
778
779   if (! processing_template_decl)
780     note_vague_linkage_var (decl);
781
782   if (LOCAL_CLASS_P (current_class_type))
783     pedwarn ("local class `%#T' shall not have static data member `%#D'",
784              current_class_type, decl);
785
786   /* Static consts need not be initialized in the class definition.  */
787   if (init != NULL_TREE && TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
788     {
789       static int explained = 0;
790           
791       error ("initializer invalid for static member with constructor");
792       if (!explained)
793         {
794           error ("(an out of class initialization is required)");
795           explained = 1;
796         }
797       init = NULL_TREE;
798     }
799   /* Force the compiler to know when an uninitialized static const
800      member is being used.  */
801   if (CP_TYPE_CONST_P (TREE_TYPE (decl)) && init == 0)
802     TREE_USED (decl) = 1;
803   DECL_INITIAL (decl) = init;
804   DECL_IN_AGGR_P (decl) = 1;
805
806   cp_finish_decl (decl, init, asmspec_tree, flags);
807 }
808
809 /* Process the specs, declarator (NULL if omitted) and width (NULL if omitted)
810    of a structure component, returning a _DECL node.
811    QUALS is a list of type qualifiers for this decl (such as for declaring
812    const member functions).
813
814    This is done during the parsing of the struct declaration.
815    The _DECL nodes are chained together and the lot of them
816    are ultimately passed to `build_struct' to make the RECORD_TYPE node.
817
818    If class A defines that certain functions in class B are friends, then
819    the way I have set things up, it is B who is interested in permission
820    granted by A.  However, it is in A's context that these declarations
821    are parsed.  By returning a void_type_node, class A does not attempt
822    to incorporate the declarations of the friends within its structure.
823
824    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
825    CHANGES TO CODE IN `start_method'.  */
826
827 tree
828 grokfield (const cp_declarator *declarator, 
829            cp_decl_specifier_seq *declspecs, 
830            tree init, tree asmspec_tree,
831            tree attrlist)
832 {
833   tree value;
834   const char *asmspec = 0;
835   int flags = LOOKUP_ONLYCONVERTING;
836
837   if (!declspecs->any_specifiers_p
838       && declarator->kind == cdk_id
839       && TREE_CODE (declarator->u.id.name) == SCOPE_REF
840       && (TREE_CODE (TREE_OPERAND (declarator->u.id.name, 1)) 
841           == IDENTIFIER_NODE))
842     /* Access declaration */
843     return do_class_using_decl (declarator->u.id.name);
844
845   if (init
846       && TREE_CODE (init) == TREE_LIST
847       && TREE_VALUE (init) == error_mark_node
848       && TREE_CHAIN (init) == NULL_TREE)
849     init = NULL_TREE;
850
851   value = grokdeclarator (declarator, declspecs, FIELD, init != 0, &attrlist);
852   if (! value || error_operand_p (value))
853     /* friend or constructor went bad.  */
854     return error_mark_node;
855
856   if (TREE_CODE (value) == TYPE_DECL && init)
857     {
858       error ("typedef `%D' is initialized (use __typeof__ instead)", value);
859       init = NULL_TREE;
860     }
861
862   /* Pass friendly classes back.  */
863   if (value == void_type_node)
864     return value;
865
866   /* Pass friend decls back.  */
867   if ((TREE_CODE (value) == FUNCTION_DECL
868        || TREE_CODE (value) == TEMPLATE_DECL)
869       && DECL_CONTEXT (value) != current_class_type)
870     return value;
871
872   if (DECL_NAME (value) != NULL_TREE
873       && IDENTIFIER_POINTER (DECL_NAME (value))[0] == '_'
874       && ! strcmp (IDENTIFIER_POINTER (DECL_NAME (value)), "_vptr"))
875     error ("member `%D' conflicts with virtual function table field name",
876               value);
877
878   /* Stash away type declarations.  */
879   if (TREE_CODE (value) == TYPE_DECL)
880     {
881       DECL_NONLOCAL (value) = 1;
882       DECL_CONTEXT (value) = current_class_type;
883
884       if (processing_template_decl)
885         value = push_template_decl (value);
886
887       return value;
888     }
889
890   if (DECL_IN_AGGR_P (value))
891     {
892       error ("`%D' is already defined in `%T'", value,
893                 DECL_CONTEXT (value));
894       return void_type_node;
895     }
896
897   if (asmspec_tree)
898     asmspec = TREE_STRING_POINTER (asmspec_tree);
899
900   if (init)
901     {
902       if (TREE_CODE (value) == FUNCTION_DECL)
903         {
904           grok_function_init (value, init);
905           init = NULL_TREE;
906         }
907       else if (pedantic && TREE_CODE (value) != VAR_DECL)
908         /* Already complained in grokdeclarator.  */
909         init = NULL_TREE;
910       else
911         {
912           /* We allow initializers to become parameters to base
913              initializers.  */
914           if (TREE_CODE (init) == TREE_LIST)
915             {
916               if (TREE_CHAIN (init) == NULL_TREE)
917                 init = TREE_VALUE (init);
918               else
919                 init = digest_init (TREE_TYPE (value), init, (tree *)0);
920             }
921
922           if (!processing_template_decl)
923             {
924               if (TREE_CODE (init) == CONST_DECL)
925                 init = DECL_INITIAL (init);
926               else if (TREE_READONLY_DECL_P (init))
927                 init = decl_constant_value (init);
928               else if (TREE_CODE (init) == CONSTRUCTOR)
929                 init = digest_init (TREE_TYPE (value), init, (tree *)0);
930               if (init != error_mark_node && ! TREE_CONSTANT (init))
931                 {
932                   /* We can allow references to things that are effectively
933                      static, since references are initialized with the
934                      address.  */
935                   if (TREE_CODE (TREE_TYPE (value)) != REFERENCE_TYPE
936                       || (TREE_STATIC (init) == 0
937                           && (!DECL_P (init) || DECL_EXTERNAL (init) == 0)))
938                     {
939                       error ("field initializer is not constant");
940                       init = error_mark_node;
941                     }
942                 }
943             }
944         }
945     }
946
947   if (processing_template_decl
948       && (TREE_CODE (value) == VAR_DECL || TREE_CODE (value) == FUNCTION_DECL))
949     {
950       value = push_template_decl (value);
951       if (error_operand_p (value))
952         return error_mark_node;
953     }
954
955   if (attrlist)
956     cplus_decl_attributes (&value, attrlist, 0);
957
958   if (TREE_CODE (value) == VAR_DECL)
959     {
960       finish_static_data_member_decl (value, init, asmspec_tree, 
961                                       flags);
962       return value;
963     }
964   if (TREE_CODE (value) == FIELD_DECL)
965     {
966       if (asmspec)
967         error ("`asm' specifiers are not permitted on non-static data members");
968       if (DECL_INITIAL (value) == error_mark_node)
969         init = error_mark_node;
970       cp_finish_decl (value, init, NULL_TREE, flags);
971       DECL_INITIAL (value) = init;
972       DECL_IN_AGGR_P (value) = 1;
973       return value;
974     }
975   if (TREE_CODE (value) == FUNCTION_DECL)
976     {
977       if (asmspec)
978         {
979           /* This must override the asm specifier which was placed
980              by grokclassfn.  Lay this out fresh.  */
981           SET_DECL_RTL (value, NULL_RTX);
982           change_decl_assembler_name (value, get_identifier (asmspec));
983         }
984       if (!DECL_FRIEND_P (value))
985         grok_special_member_properties (value);
986       
987       cp_finish_decl (value, init, asmspec_tree, flags);
988
989       /* Pass friends back this way.  */
990       if (DECL_FRIEND_P (value))
991         return void_type_node;
992
993       DECL_IN_AGGR_P (value) = 1;
994       return value;
995     }
996   abort ();
997   /* NOTREACHED */
998   return NULL_TREE;
999 }
1000
1001 /* Like `grokfield', but for bitfields.
1002    WIDTH is non-NULL for bit fields only, and is an INTEGER_CST node.  */
1003
1004 tree
1005 grokbitfield (const cp_declarator *declarator, 
1006               cp_decl_specifier_seq *declspecs, tree width)
1007 {
1008   tree value = grokdeclarator (declarator, declspecs, BITFIELD, 0, NULL);
1009
1010   if (! value) return NULL_TREE; /* friends went bad.  */
1011
1012   /* Pass friendly classes back.  */
1013   if (TREE_CODE (value) == VOID_TYPE)
1014     return void_type_node;
1015
1016   if (TREE_CODE (value) == TYPE_DECL)
1017     {
1018       error ("cannot declare `%D' to be a bit-field type", value);
1019       return NULL_TREE;
1020     }
1021
1022   /* Usually, finish_struct_1 catches bitfields with invalid types.
1023      But, in the case of bitfields with function type, we confuse
1024      ourselves into thinking they are member functions, so we must
1025      check here.  */
1026   if (TREE_CODE (value) == FUNCTION_DECL)
1027     {
1028       error ("cannot declare bit-field `%D' with function type",
1029              DECL_NAME (value));
1030       return NULL_TREE;
1031     }
1032
1033   if (DECL_IN_AGGR_P (value))
1034     {
1035       error ("`%D' is already defined in the class %T", value,
1036                   DECL_CONTEXT (value));
1037       return void_type_node;
1038     }
1039
1040   if (TREE_STATIC (value))
1041     {
1042       error ("static member `%D' cannot be a bit-field", value);
1043       return NULL_TREE;
1044     }
1045   cp_finish_decl (value, NULL_TREE, NULL_TREE, 0);
1046
1047   if (width != error_mark_node)
1048     {
1049       constant_expression_warning (width);
1050       DECL_INITIAL (value) = width;
1051       SET_DECL_C_BIT_FIELD (value);
1052     }
1053
1054   DECL_IN_AGGR_P (value) = 1;
1055   return value;
1056 }
1057
1058 /* When a function is declared with an initializer,
1059    do the right thing.  Currently, there are two possibilities:
1060
1061    class B
1062    {
1063     public:
1064      // initialization possibility #1.
1065      virtual void f () = 0;
1066      int g ();
1067    };
1068    
1069    class D1 : B
1070    {
1071     public:
1072      int d1;
1073      // error, no f ();
1074    };
1075    
1076    class D2 : B
1077    {
1078     public:
1079      int d2;
1080      void f ();
1081    };
1082    
1083    class D3 : B
1084    {
1085     public:
1086      int d3;
1087      // initialization possibility #2
1088      void f () = B::f;
1089    };
1090
1091 */
1092
1093 static void
1094 grok_function_init (tree decl, tree init)
1095 {
1096   /* An initializer for a function tells how this function should
1097      be inherited.  */
1098   tree type = TREE_TYPE (decl);
1099
1100   if (TREE_CODE (type) == FUNCTION_TYPE)
1101     error ("initializer specified for non-member function `%D'", decl);
1102   else if (integer_zerop (init))
1103     DECL_PURE_VIRTUAL_P (decl) = 1;
1104   else
1105     error ("invalid initializer for virtual method `%D'", decl);
1106 }
1107 \f
1108 void
1109 cplus_decl_attributes (tree *decl, tree attributes, int flags)
1110 {
1111   if (*decl == NULL_TREE || *decl == void_type_node)
1112     return;
1113
1114   if (TREE_CODE (*decl) == TEMPLATE_DECL)
1115     decl = &DECL_TEMPLATE_RESULT (*decl);
1116
1117   decl_attributes (decl, attributes, flags);
1118
1119   if (TREE_CODE (*decl) == TYPE_DECL)
1120     SET_IDENTIFIER_TYPE_VALUE (DECL_NAME (*decl), TREE_TYPE (*decl));
1121 }
1122 \f
1123 /* Walks through the namespace- or function-scope anonymous union OBJECT,
1124    building appropriate ALIAS_DECLs.  Returns one of the fields for use in
1125    the mangled name.  */
1126
1127 static tree
1128 build_anon_union_vars (tree object)
1129 {
1130   tree type = TREE_TYPE (object);
1131   tree main_decl = NULL_TREE;
1132   tree field;
1133
1134   /* Rather than write the code to handle the non-union case,
1135      just give an error.  */
1136   if (TREE_CODE (type) != UNION_TYPE)
1137     error ("anonymous struct not inside named type");
1138
1139   for (field = TYPE_FIELDS (type); 
1140        field != NULL_TREE; 
1141        field = TREE_CHAIN (field))
1142     {
1143       tree decl;
1144       tree ref;
1145
1146       if (DECL_ARTIFICIAL (field))
1147         continue;
1148       if (TREE_CODE (field) != FIELD_DECL)
1149         {
1150           cp_pedwarn_at ("\
1151 `%#D' invalid; an anonymous union can only have non-static data members",
1152                          field);
1153           continue;
1154         }
1155
1156       if (TREE_PRIVATE (field))
1157         cp_pedwarn_at ("private member `%#D' in anonymous union", field);
1158       else if (TREE_PROTECTED (field))
1159         cp_pedwarn_at ("protected member `%#D' in anonymous union", field);
1160
1161       if (processing_template_decl)
1162         ref = build_min_nt (COMPONENT_REF, object,
1163                             DECL_NAME (field), NULL_TREE);
1164       else
1165         ref = build_class_member_access_expr (object, field, NULL_TREE,
1166                                               false);
1167
1168       if (DECL_NAME (field))
1169         {
1170           decl = build_decl (ALIAS_DECL, DECL_NAME (field), TREE_TYPE (field));
1171           DECL_INITIAL (decl) = ref;        
1172           TREE_PUBLIC (decl) = 0;
1173           TREE_STATIC (decl) = 0;
1174           DECL_EXTERNAL (decl) = 1;
1175           decl = pushdecl (decl);
1176         }
1177       else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
1178         decl = build_anon_union_vars (ref);
1179       else
1180         decl = 0;
1181
1182       if (main_decl == NULL_TREE)
1183         main_decl = decl;
1184     }
1185
1186   return main_decl;
1187 }
1188
1189 /* Finish off the processing of a UNION_TYPE structure.  If the union is an
1190    anonymous union, then all members must be laid out together.  PUBLIC_P
1191    is nonzero if this union is not declared static.  */
1192
1193 void
1194 finish_anon_union (tree anon_union_decl)
1195 {
1196   tree type = TREE_TYPE (anon_union_decl);
1197   tree main_decl;
1198   bool public_p = TREE_PUBLIC (anon_union_decl);
1199
1200   /* The VAR_DECL's context is the same as the TYPE's context.  */
1201   DECL_CONTEXT (anon_union_decl) = DECL_CONTEXT (TYPE_NAME (type));
1202   
1203   if (TYPE_FIELDS (type) == NULL_TREE)
1204     return;
1205
1206   if (public_p)
1207     {
1208       error ("namespace-scope anonymous aggregates must be static");
1209       return;
1210     }
1211
1212   main_decl = build_anon_union_vars (anon_union_decl);
1213   if (main_decl == NULL_TREE)
1214     {
1215       warning ("anonymous union with no members");
1216       return;
1217     }
1218
1219   if (!processing_template_decl)
1220     {
1221       /* Use main_decl to set the mangled name.  */
1222       DECL_NAME (anon_union_decl) = DECL_NAME (main_decl);
1223       mangle_decl (anon_union_decl);
1224       DECL_NAME (anon_union_decl) = NULL_TREE;
1225     }
1226
1227   pushdecl (anon_union_decl);
1228   if (building_stmt_tree ()
1229       && at_function_scope_p ())
1230     add_decl_expr (anon_union_decl);
1231   else if (!processing_template_decl)
1232     rest_of_decl_compilation (anon_union_decl, NULL,
1233                               toplevel_bindings_p (), at_eof);
1234 }
1235 \f
1236 /* Auxiliary functions to make type signatures for
1237    `operator new' and `operator delete' correspond to
1238    what compiler will be expecting.  */
1239
1240 tree
1241 coerce_new_type (tree type)
1242 {
1243   int e = 0;
1244   tree args = TYPE_ARG_TYPES (type);
1245
1246   my_friendly_assert (TREE_CODE (type) == FUNCTION_TYPE, 20001107);
1247   
1248   if (!same_type_p (TREE_TYPE (type), ptr_type_node))
1249     e = 1, error ("`operator new' must return type `%T'", ptr_type_node);
1250
1251   if (!args || args == void_list_node
1252       || !same_type_p (TREE_VALUE (args), size_type_node))
1253     {
1254       e = 2;
1255       if (args && args != void_list_node)
1256         args = TREE_CHAIN (args);
1257       pedwarn ("`operator new' takes type `size_t' (`%T') as first parameter", size_type_node);
1258     }
1259   switch (e)
1260   {
1261     case 2:
1262       args = tree_cons (NULL_TREE, size_type_node, args);
1263       /* Fall through.  */
1264     case 1:
1265       type = build_exception_variant
1266               (build_function_type (ptr_type_node, args),
1267                TYPE_RAISES_EXCEPTIONS (type));
1268       /* Fall through.  */
1269     default:;
1270   }
1271   return type;
1272 }
1273
1274 tree
1275 coerce_delete_type (tree type)
1276 {
1277   int e = 0;
1278   tree args = TYPE_ARG_TYPES (type);
1279   
1280   my_friendly_assert (TREE_CODE (type) == FUNCTION_TYPE, 20001107);
1281
1282   if (!same_type_p (TREE_TYPE (type), void_type_node))
1283     e = 1, error ("`operator delete' must return type `%T'", void_type_node);
1284
1285   if (!args || args == void_list_node
1286       || !same_type_p (TREE_VALUE (args), ptr_type_node))
1287     {
1288       e = 2;
1289       if (args && args != void_list_node)
1290         args = TREE_CHAIN (args);
1291       error ("`operator delete' takes type `%T' as first parameter", ptr_type_node);
1292     }
1293   switch (e)
1294   {
1295     case 2:
1296       args = tree_cons (NULL_TREE, ptr_type_node, args);
1297       /* Fall through.  */
1298     case 1:
1299       type = build_exception_variant
1300               (build_function_type (void_type_node, args),
1301                TYPE_RAISES_EXCEPTIONS (type));
1302       /* Fall through.  */
1303     default:;
1304   }
1305
1306   return type;
1307 }
1308 \f
1309 static void
1310 mark_vtable_entries (tree decl)
1311 {
1312   tree entries = CONSTRUCTOR_ELTS (DECL_INITIAL (decl));
1313
1314   for (; entries; entries = TREE_CHAIN (entries))
1315     {
1316       tree fnaddr = TREE_VALUE (entries);
1317       tree fn;
1318
1319       STRIP_NOPS (fnaddr);
1320
1321       if (TREE_CODE (fnaddr) != ADDR_EXPR
1322           && TREE_CODE (fnaddr) != FDESC_EXPR)
1323         /* This entry is an offset: a virtual base class offset, a
1324            virtual call offset, an RTTI offset, etc.  */
1325         continue;
1326
1327       fn = TREE_OPERAND (fnaddr, 0);
1328       TREE_ADDRESSABLE (fn) = 1;
1329       /* When we don't have vcall offsets, we output thunks whenever
1330          we output the vtables that contain them.  With vcall offsets,
1331          we know all the thunks we'll need when we emit a virtual
1332          function, so we emit the thunks there instead.  */
1333       if (DECL_THUNK_P (fn)) 
1334         use_thunk (fn, /*emit_p=*/0);
1335       mark_used (fn);
1336     }
1337 }
1338
1339 /* Set DECL up to have the closest approximation of "initialized common"
1340    linkage available.  */
1341
1342 void
1343 comdat_linkage (tree decl)
1344 {
1345   if (flag_weak)
1346     make_decl_one_only (decl);
1347   else if (TREE_CODE (decl) == FUNCTION_DECL 
1348            || (TREE_CODE (decl) == VAR_DECL && DECL_ARTIFICIAL (decl)))
1349     /* We can just emit function and compiler-generated variables
1350        statically; having multiple copies is (for the most part) only
1351        a waste of space.  
1352
1353        There are two correctness issues, however: the address of a
1354        template instantiation with external linkage should be the
1355        same, independent of what translation unit asks for the
1356        address, and this will not hold when we emit multiple copies of
1357        the function.  However, there's little else we can do.  
1358
1359        Also, by default, the typeinfo implementation assumes that
1360        there will be only one copy of the string used as the name for
1361        each type.  Therefore, if weak symbols are unavailable, the
1362        run-time library should perform a more conservative check; it
1363        should perform a string comparison, rather than an address
1364        comparison.  */
1365     TREE_PUBLIC (decl) = 0;
1366   else
1367     {
1368       /* Static data member template instantiations, however, cannot
1369          have multiple copies.  */
1370       if (DECL_INITIAL (decl) == 0
1371           || DECL_INITIAL (decl) == error_mark_node)
1372         DECL_COMMON (decl) = 1;
1373       else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
1374         {
1375           DECL_COMMON (decl) = 1;
1376           DECL_INITIAL (decl) = error_mark_node;
1377         }
1378       else if (!DECL_EXPLICIT_INSTANTIATION (decl))
1379         {
1380           /* We can't do anything useful; leave vars for explicit
1381              instantiation.  */
1382           DECL_EXTERNAL (decl) = 1;
1383           DECL_NOT_REALLY_EXTERN (decl) = 0;
1384         }
1385     }
1386
1387   if (DECL_LANG_SPECIFIC (decl))
1388     DECL_COMDAT (decl) = 1;
1389 }
1390
1391 /* For win32 we also want to put explicit instantiations in
1392    linkonce sections, so that they will be merged with implicit
1393    instantiations; otherwise we get duplicate symbol errors.  
1394    For Darwin we do not want explicit instantiations to be 
1395    linkonce.  */
1396
1397 void
1398 maybe_make_one_only (tree decl)
1399 {
1400   /* We used to say that this was not necessary on targets that support weak
1401      symbols, because the implicit instantiations will defer to the explicit
1402      one.  However, that's not actually the case in SVR4; a strong definition
1403      after a weak one is an error.  Also, not making explicit
1404      instantiations one_only means that we can end up with two copies of
1405      some template instantiations.  */
1406   if (! flag_weak)
1407     return;
1408
1409   /* We can't set DECL_COMDAT on functions, or finish_file will think
1410      we can get away with not emitting them if they aren't used.  We need
1411      to for variables so that cp_finish_decl will update their linkage,
1412      because their DECL_INITIAL may not have been set properly yet.  */
1413
1414   if (!TARGET_WEAK_NOT_IN_ARCHIVE_TOC
1415       || (! DECL_EXPLICIT_INSTANTIATION (decl)
1416           && ! DECL_TEMPLATE_SPECIALIZATION (decl)))
1417     {
1418       make_decl_one_only (decl);
1419
1420       if (TREE_CODE (decl) == VAR_DECL)
1421         {
1422           DECL_COMDAT (decl) = 1;
1423           /* Mark it needed so we don't forget to emit it.  */
1424           mark_decl_referenced (decl);
1425         }
1426     }
1427 }
1428
1429 /* Determine whether or not we want to specifically import or export CTYPE,
1430    using various heuristics.  */
1431
1432 static void
1433 import_export_class (tree ctype)
1434 {
1435   /* -1 for imported, 1 for exported.  */
1436   int import_export = 0;
1437
1438   /* It only makes sense to call this function at EOF.  The reason is
1439      that this function looks at whether or not the first non-inline
1440      non-abstract virtual member function has been defined in this
1441      translation unit.  But, we can't possibly know that until we've
1442      seen the entire translation unit.  */
1443   my_friendly_assert (at_eof, 20000226);
1444
1445   if (CLASSTYPE_INTERFACE_KNOWN (ctype))
1446     return;
1447
1448   /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma interface,
1449      we will have CLASSTYPE_INTERFACE_ONLY set but not
1450      CLASSTYPE_INTERFACE_KNOWN.  In that case, we don't want to use this
1451      heuristic because someone will supply a #pragma implementation
1452      elsewhere, and deducing it here would produce a conflict.  */
1453   if (CLASSTYPE_INTERFACE_ONLY (ctype))
1454     return;
1455
1456   if (lookup_attribute ("dllimport", TYPE_ATTRIBUTES (ctype)))
1457     import_export = -1;
1458   else if (lookup_attribute ("dllexport", TYPE_ATTRIBUTES (ctype)))
1459     import_export = 1;
1460   else if (CLASSTYPE_IMPLICIT_INSTANTIATION (ctype)
1461            && !flag_implicit_templates)
1462     /* For a template class, without -fimplicit-templates, check the
1463        repository.  If the virtual table is assigned to this
1464        translation unit, then export the class; otherwise, import
1465        it.  */
1466       import_export = repo_export_class_p (ctype) ? 1 : -1;
1467   else if (TYPE_POLYMORPHIC_P (ctype))
1468     {
1469       /* The ABI specifies that the virtual table and associated
1470          information are emitted with the key method, if any.  */
1471       tree method = CLASSTYPE_KEY_METHOD (ctype);
1472       /* If weak symbol support is not available, then we must be
1473          careful not to emit the vtable when the key function is
1474          inline.  An inline function can be defined in multiple
1475          translation units.  If we were to emit the vtable in each
1476          translation unit containing a definition, we would get
1477          multiple definition errors at link-time.  */
1478       if (method && (flag_weak || ! DECL_DECLARED_INLINE_P (method)))
1479         import_export = (DECL_REALLY_EXTERN (method) ? -1 : 1);
1480     }
1481
1482 #ifdef MULTIPLE_SYMBOL_SPACES
1483   if (import_export == -1)
1484     import_export = 0;
1485 #endif
1486
1487   /* Allow backends the chance to overrule the decision.  */
1488   if (targetm.cxx.import_export_class)
1489     import_export = targetm.cxx.import_export_class (ctype, import_export);
1490
1491   if (import_export)
1492     {
1493       SET_CLASSTYPE_INTERFACE_KNOWN (ctype);
1494       CLASSTYPE_INTERFACE_ONLY (ctype) = (import_export < 0);
1495     }
1496 }
1497
1498 /* Return true if VAR has already been provided to the back end; in that
1499    case VAR should not be modified further by the front end.  */
1500 static bool
1501 var_finalized_p (tree var)
1502 {
1503   return cgraph_varpool_node (var)->finalized;
1504 }
1505
1506 /* DECL is a VAR_DECL or FUNCTION_DECL which, for whatever reason,
1507    must be emitted in this translation unit.  Mark it as such.  */
1508
1509 void
1510 mark_needed (tree decl)
1511 {
1512   /* It's possible that we no longer need to set
1513      TREE_SYMBOL_REFERENCED here directly, but doing so is
1514      harmless.  */
1515   TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)) = 1;
1516   mark_decl_referenced (decl);
1517 }
1518
1519 /* DECL is either a FUNCTION_DECL or a VAR_DECL.  This function
1520    returns true if a definition of this entity should be provided in
1521    this object file.  Callers use this function to determine whether
1522    or not to let the back end know that a definition of DECL is
1523    available in this translation unit.  */
1524
1525 bool
1526 decl_needed_p (tree decl)
1527 {
1528   my_friendly_assert (TREE_CODE (decl) == VAR_DECL
1529                       || TREE_CODE (decl) == FUNCTION_DECL,
1530                       20040726);
1531   /* This function should only be called at the end of the translation
1532      unit.  We cannot be sure of whether or not something will be
1533      COMDAT until that point.  */
1534   my_friendly_assert (at_eof, 20040726);
1535
1536   /* All entities with external linkage that are not COMDAT should be
1537      emitted; they may be referred to from other object files.  */
1538   if (TREE_PUBLIC (decl) && !DECL_COMDAT (decl))
1539     return true;
1540   /* If this entity was used, let the back-end see it; it will decide
1541      whether or not to emit it into the object file.  */
1542   if (TREE_USED (decl) 
1543       || (DECL_ASSEMBLER_NAME_SET_P (decl)
1544           && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))))
1545       return true;
1546   /* Otherwise, DECL does not need to be emitted -- yet.  A subsequent
1547      reference to DECL might cause it to be emitted later.  */
1548   return false;
1549 }
1550
1551 /* If necessary, write out the vtables for the dynamic class CTYPE.
1552    Returns true if any vtables were emitted.  */
1553
1554 static bool
1555 maybe_emit_vtables (tree ctype)
1556 {
1557   tree vtbl;
1558   tree primary_vtbl;
1559   int needed = 0;
1560
1561   /* If the vtables for this class have already been emitted there is
1562      nothing more to do.  */
1563   primary_vtbl = CLASSTYPE_VTABLES (ctype);
1564   if (var_finalized_p (primary_vtbl))
1565     return false;
1566   /* Ignore dummy vtables made by get_vtable_decl.  */
1567   if (TREE_TYPE (primary_vtbl) == void_type_node)
1568     return false;
1569
1570   /* See if any of the vtables are needed.  */
1571   for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = TREE_CHAIN (vtbl))
1572     {
1573       import_export_decl (vtbl);
1574       if (DECL_NOT_REALLY_EXTERN (vtbl) && decl_needed_p (vtbl))
1575         needed = 1;
1576     }
1577   if (!needed)
1578     {
1579       /* If the references to this class' vtables are optimized away,
1580          still emit the appropriate debugging information.  See
1581          dfs_debug_mark.  */
1582       if (DECL_COMDAT (primary_vtbl) 
1583           && CLASSTYPE_DEBUG_REQUESTED (ctype))
1584         note_debug_info_needed (ctype);
1585       return false;
1586     }
1587
1588   /* The ABI requires that we emit all of the vtables if we emit any
1589      of them.  */
1590   for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = TREE_CHAIN (vtbl))
1591     {
1592       /* Mark entities references from the virtual table as used.  */
1593       mark_vtable_entries (vtbl);
1594
1595       if (TREE_TYPE (DECL_INITIAL (vtbl)) == 0)
1596         {
1597           /* It had better be all done at compile-time.  */
1598           if (store_init_value (vtbl, DECL_INITIAL (vtbl)))
1599             abort ();
1600         }
1601
1602       /* Write it out.  */
1603       DECL_EXTERNAL (vtbl) = 0;
1604       rest_of_decl_compilation (vtbl, NULL, 1, 1);
1605
1606       /* Because we're only doing syntax-checking, we'll never end up
1607          actually marking the variable as written.  */
1608       if (flag_syntax_only)
1609         TREE_ASM_WRITTEN (vtbl) = 1;
1610     }
1611
1612   /* Since we're writing out the vtable here, also write the debug
1613      info.  */
1614   note_debug_info_needed (ctype);
1615
1616   return true;
1617 }
1618
1619 /* DECL is a FUNCTION_DECL or VAR_DECL.  If the object file linkage
1620    for DECL has not already been determined, do so now by setting
1621    DECL_EXTERNAL, DECL_COMDAT and other related flags.  Until this
1622    function is called entities with vague linkage whose definitions
1623    are available must have TREE_PUBLIC set.
1624
1625    If this function decides to place DECL in COMDAT, it will set
1626    appropriate flags -- but will not clear DECL_EXTERNAL.  It is up to
1627    the caller to decide whether or not to clear DECL_EXTERNAL.  Some
1628    callers defer that decision until it is clear that DECL is actually
1629    required.  */
1630
1631 void
1632 import_export_decl (tree decl)
1633 {
1634   int emit_p;
1635   bool comdat_p;
1636   bool import_p;
1637
1638   if (DECL_INTERFACE_KNOWN (decl))
1639     return;
1640
1641   /* We cannot determine what linkage to give to an entity with vague
1642      linkage until the end of the file.  For example, a virtual table
1643      for a class will be defined if and only if the key method is
1644      defined in this translation unit.  As a further example, consider
1645      that when compiling a translation unit that uses PCH file with
1646      "-frepo" it would be incorrect to make decisions about what
1647      entities to emit when building the PCH; those decisions must be
1648      delayed until the repository information has been processed.  */
1649   my_friendly_assert (at_eof, 20040727);
1650   /* Object file linkage for explicit instantiations is handled in
1651      mark_decl_instantiated.  For static variables in functions with
1652      vague linkage, maybe_commonize_var is used.
1653
1654      Therefore, the only declarations that should be provided to this
1655      function are those with external linkage that:
1656
1657      * implicit instantiations of function templates
1658
1659      * inline function
1660
1661      * implicit instantiations of static data members of class
1662        templates
1663
1664      * virtual tables
1665
1666      * typeinfo objects
1667
1668      Furthermore, all entities that reach this point must have a
1669      definition available in this translation unit.
1670
1671      The following assertions check these conditions.  */
1672   my_friendly_assert (TREE_CODE (decl) == FUNCTION_DECL
1673                       || TREE_CODE (decl) == VAR_DECL,
1674                       2004725);
1675   /* Any code that creates entities with TREE_PUBLIC cleared should
1676      also set DECL_INTERFACE_KNOWN.  */
1677   my_friendly_assert (TREE_PUBLIC (decl), 20040725);
1678   if (TREE_CODE (decl) == FUNCTION_DECL)
1679     my_friendly_assert (DECL_IMPLICIT_INSTANTIATION (decl)
1680                         || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
1681                         || DECL_DECLARED_INLINE_P (decl),
1682                         20040725);
1683   else
1684     my_friendly_assert (DECL_IMPLICIT_INSTANTIATION (decl)
1685                         || DECL_VTABLE_OR_VTT_P (decl)
1686                         || DECL_TINFO_P (decl),
1687                         20040725);
1688   /* Check that a definition of DECL is available in this translation
1689      unit.  */
1690   my_friendly_assert (!DECL_REALLY_EXTERN (decl), 20040725);
1691
1692   /* Assume that DECL will not have COMDAT linkage.  */
1693   comdat_p = false;
1694   /* Assume that DECL will not be imported into this translation
1695      unit.  */
1696   import_p = false;
1697
1698   /* See if the repository tells us whether or not to emit DECL in
1699      this translation unit.  */
1700   emit_p = repo_emit_p (decl);
1701   if (emit_p == 0)
1702     import_p = true;
1703   else if (emit_p == 1)
1704     {
1705       /* The repository indicates that this entity should be defined
1706          here.  Make sure the back end honors that request.  */
1707       if (TREE_CODE (decl) == VAR_DECL)
1708         mark_needed (decl);
1709       else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)
1710                || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
1711         {
1712           tree clone;
1713           FOR_EACH_CLONE (clone, decl)
1714             mark_needed (clone);
1715         }
1716       else
1717         mark_needed (decl);
1718       /* Output the definition as an ordinary strong definition.  */
1719       DECL_EXTERNAL (decl) = 0;
1720       DECL_INTERFACE_KNOWN (decl) = 1;
1721       return;
1722     }
1723
1724   if (import_p)
1725     /* We have already decided what to do with this DECL; there is no
1726        need to check anything further.  */
1727     ;
1728   else if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
1729     {
1730       tree type = DECL_CONTEXT (decl);
1731       import_export_class (type);
1732       if (TYPE_FOR_JAVA (type))
1733         import_p = true;
1734       else if (CLASSTYPE_INTERFACE_KNOWN (type)
1735                && CLASSTYPE_INTERFACE_ONLY (type))
1736         import_p = true;
1737       else if (TARGET_WEAK_NOT_IN_ARCHIVE_TOC
1738                && !CLASSTYPE_USE_TEMPLATE (type)
1739                && CLASSTYPE_KEY_METHOD (type)
1740                && !DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (type)))
1741         /* The ABI requires that all virtual tables be emitted with
1742            COMDAT linkage.  However, on systems where COMDAT symbols
1743            don't show up in the table of contents for a static
1744            archive, the linker will report errors about undefined
1745            symbols because it will not see the virtual table
1746            definition.  Therefore, in the case that we know that the
1747            virtual table will be emitted in only one translation
1748            unit, we make the virtual table an ordinary definition
1749            with external linkage.  */
1750         DECL_EXTERNAL (decl) = 0;
1751       else if (CLASSTYPE_INTERFACE_KNOWN (type))
1752         {
1753           /* TYPE is being exported from this translation unit, so DECL
1754              should be defined here.  The ABI requires COMDAT
1755              linkage.  Normally, we only emit COMDAT things when they
1756              are needed; make sure that we realize that this entity is
1757              indeed needed.  */
1758           comdat_p = true;
1759           mark_needed (decl);
1760         }
1761       else if (!flag_implicit_templates
1762                && CLASSTYPE_IMPLICIT_INSTANTIATION (type))
1763         import_p = true;
1764       else
1765         comdat_p = true;
1766     }
1767   else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl))
1768     {
1769       tree type = TREE_TYPE (DECL_NAME (decl));
1770       if (CLASS_TYPE_P (type))
1771         {
1772           import_export_class (type);
1773           if (CLASSTYPE_INTERFACE_KNOWN (type)
1774               && TYPE_POLYMORPHIC_P (type)
1775               && CLASSTYPE_INTERFACE_ONLY (type)
1776               /* If -fno-rtti was specified, then we cannot be sure
1777                  that RTTI information will be emitted with the
1778                  virtual table of the class, so we must emit it
1779                  wherever it is used.  */
1780               && flag_rtti)
1781             import_p = true;
1782           else 
1783             {
1784               comdat_p = true;
1785               if (CLASSTYPE_INTERFACE_KNOWN (type)
1786                   && !CLASSTYPE_INTERFACE_ONLY (type))
1787                 mark_needed (decl);
1788             }
1789         }
1790       else
1791         comdat_p = true;
1792     }
1793   else if (DECL_TEMPLATE_INSTANTIATION (decl)
1794            || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl))
1795     {
1796       /* DECL is an implicit instantiation of a function or static
1797          data member.  */
1798       if (flag_implicit_templates
1799           || (flag_implicit_inline_templates
1800               && TREE_CODE (decl) == FUNCTION_DECL 
1801               && DECL_DECLARED_INLINE_P (decl)))
1802         comdat_p = true;
1803       else
1804         /* If we are not implicitly generating templates, then mark
1805            this entity as undefined in this translation unit.  */
1806         import_p = true;
1807     }
1808   else if (DECL_FUNCTION_MEMBER_P (decl))
1809     {
1810       if (!DECL_DECLARED_INLINE_P (decl))
1811         {
1812           tree ctype = DECL_CONTEXT (decl);
1813           import_export_class (ctype);
1814           if (CLASSTYPE_INTERFACE_KNOWN (ctype))
1815             {
1816               DECL_NOT_REALLY_EXTERN (decl)
1817                 = ! (CLASSTYPE_INTERFACE_ONLY (ctype)
1818                      || (DECL_DECLARED_INLINE_P (decl) 
1819                          && ! flag_implement_inlines
1820                          && !DECL_VINDEX (decl)));
1821
1822               if (!DECL_NOT_REALLY_EXTERN (decl))
1823                 DECL_EXTERNAL (decl) = 1;
1824
1825               /* Always make artificials weak.  */
1826               if (DECL_ARTIFICIAL (decl) && flag_weak)
1827                 comdat_p = true;
1828               else
1829                 maybe_make_one_only (decl);
1830             }
1831         }
1832       else
1833         comdat_p = true;
1834     }
1835   else
1836     comdat_p = true;
1837
1838   if (import_p)
1839     {
1840       /* If we are importing DECL into this translation unit, mark is
1841          an undefined here.  */
1842       DECL_EXTERNAL (decl) = 1;
1843       DECL_NOT_REALLY_EXTERN (decl) = 0;
1844     }
1845   else if (comdat_p)
1846     {
1847       /* If we decided to put DECL in COMDAT, mark it accordingly at
1848          this point.  */
1849       comdat_linkage (decl);
1850     }
1851
1852   DECL_INTERFACE_KNOWN (decl) = 1;
1853 }
1854
1855 /* Return an expression that performs the destruction of DECL, which
1856    must be a VAR_DECL whose type has a non-trivial destructor, or is
1857    an array whose (innermost) elements have a non-trivial destructor.  */
1858
1859 tree
1860 build_cleanup (tree decl)
1861 {
1862   tree temp;
1863   tree type = TREE_TYPE (decl);
1864
1865   /* This function should only be called for declarations that really
1866      require cleanups.  */
1867   my_friendly_assert (!TYPE_HAS_TRIVIAL_DESTRUCTOR (type), 20030106);
1868
1869   /* Treat all objects with destructors as used; the destructor may do
1870      something substantive.  */
1871   mark_used (decl);
1872
1873   if (TREE_CODE (type) == ARRAY_TYPE)
1874     temp = decl;
1875   else
1876     {
1877       cxx_mark_addressable (decl);
1878       temp = build1 (ADDR_EXPR, build_pointer_type (type), decl);
1879     }
1880   temp = build_delete (TREE_TYPE (temp), temp,
1881                        sfk_complete_destructor,
1882                        LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR, 0);
1883   return temp;
1884 }
1885
1886 /* Returns the initialization guard variable for the variable DECL,
1887    which has static storage duration.  */
1888
1889 tree
1890 get_guard (tree decl)
1891 {
1892   tree sname;
1893   tree guard;
1894
1895   sname = mangle_guard_variable (decl);
1896   guard = IDENTIFIER_GLOBAL_VALUE (sname);
1897   if (! guard)
1898     {
1899       tree guard_type;
1900
1901       /* We use a type that is big enough to contain a mutex as well
1902          as an integer counter.  */
1903       guard_type = targetm.cxx.guard_type ();
1904       guard = build_decl (VAR_DECL, sname, guard_type);
1905       
1906       /* The guard should have the same linkage as what it guards.  */
1907       TREE_PUBLIC (guard) = TREE_PUBLIC (decl);
1908       TREE_STATIC (guard) = TREE_STATIC (decl);
1909       DECL_COMMON (guard) = DECL_COMMON (decl);
1910       DECL_ONE_ONLY (guard) = DECL_ONE_ONLY (decl);
1911       if (TREE_PUBLIC (decl))
1912         DECL_WEAK (guard) = DECL_WEAK (decl);
1913       
1914       DECL_ARTIFICIAL (guard) = 1;
1915       TREE_USED (guard) = 1;
1916       pushdecl_top_level_and_finish (guard, NULL_TREE);
1917     }
1918   return guard;
1919 }
1920
1921 /* Return those bits of the GUARD variable that should be set when the
1922    guarded entity is actually initialized.  */
1923
1924 static tree
1925 get_guard_bits (tree guard)
1926 {
1927   if (!targetm.cxx.guard_mask_bit ())
1928     {
1929       /* We only set the first byte of the guard, in order to leave room
1930          for a mutex in the high-order bits.  */
1931       guard = build1 (ADDR_EXPR, 
1932                       build_pointer_type (TREE_TYPE (guard)),
1933                       guard);
1934       guard = build1 (NOP_EXPR, 
1935                       build_pointer_type (char_type_node), 
1936                       guard);
1937       guard = build1 (INDIRECT_REF, char_type_node, guard);
1938     }
1939
1940   return guard;
1941 }
1942
1943 /* Return an expression which determines whether or not the GUARD
1944    variable has already been initialized.  */
1945
1946 tree
1947 get_guard_cond (tree guard)
1948 {
1949   tree guard_value;
1950
1951   /* Check to see if the GUARD is zero.  */
1952   guard = get_guard_bits (guard);
1953
1954   /* Mask off all but the low bit.  */
1955   if (targetm.cxx.guard_mask_bit ())
1956     {
1957       guard_value = integer_one_node;
1958       if (!same_type_p (TREE_TYPE (guard_value), TREE_TYPE (guard)))
1959         guard_value = convert (TREE_TYPE (guard), guard_value);
1960         guard = cp_build_binary_op (BIT_AND_EXPR, guard, guard_value);
1961     }
1962
1963   guard_value = integer_zero_node;
1964   if (!same_type_p (TREE_TYPE (guard_value), TREE_TYPE (guard)))
1965     guard_value = convert (TREE_TYPE (guard), guard_value);
1966   return cp_build_binary_op (EQ_EXPR, guard, guard_value);
1967 }
1968
1969 /* Return an expression which sets the GUARD variable, indicating that
1970    the variable being guarded has been initialized.  */
1971
1972 tree
1973 set_guard (tree guard)
1974 {
1975   tree guard_init;
1976
1977   /* Set the GUARD to one.  */
1978   guard = get_guard_bits (guard);
1979   guard_init = integer_one_node;
1980   if (!same_type_p (TREE_TYPE (guard_init), TREE_TYPE (guard)))
1981     guard_init = convert (TREE_TYPE (guard), guard_init);
1982   return build_modify_expr (guard, NOP_EXPR, guard_init);
1983 }
1984
1985 /* Start the process of running a particular set of global constructors
1986    or destructors.  Subroutine of do_[cd]tors.  */
1987
1988 static tree
1989 start_objects (int method_type, int initp)
1990 {
1991   tree body;
1992   tree fndecl;
1993   char type[10];
1994
1995   /* Make ctor or dtor function.  METHOD_TYPE may be 'I' or 'D'.  */
1996
1997   if (initp != DEFAULT_INIT_PRIORITY)
1998     {
1999       char joiner;
2000
2001 #ifdef JOINER
2002       joiner = JOINER;
2003 #else
2004       joiner = '_';
2005 #endif
2006
2007       sprintf (type, "%c%c%.5u", method_type, joiner, initp);
2008     }
2009   else
2010     sprintf (type, "%c", method_type);
2011
2012   fndecl = build_lang_decl (FUNCTION_DECL, 
2013                             get_file_function_name_long (type),
2014                             build_function_type (void_type_node,
2015                                                  void_list_node));
2016   start_preparsed_function (fndecl, /*attrs=*/NULL_TREE, SF_PRE_PARSED);
2017
2018   /* It can be a static function as long as collect2 does not have
2019      to scan the object file to find its ctor/dtor routine.  */
2020   TREE_PUBLIC (current_function_decl) = ! targetm.have_ctors_dtors;
2021
2022   /* Mark this declaration as used to avoid spurious warnings.  */
2023   TREE_USED (current_function_decl) = 1;
2024
2025   /* Mark this function as a global constructor or destructor.  */
2026   if (method_type == 'I')
2027     DECL_GLOBAL_CTOR_P (current_function_decl) = 1;
2028   else
2029     DECL_GLOBAL_DTOR_P (current_function_decl) = 1;
2030   DECL_LANG_SPECIFIC (current_function_decl)->decl_flags.u2sel = 1;
2031
2032   body = begin_compound_stmt (BCS_FN_BODY);
2033
2034   /* We cannot allow these functions to be elided, even if they do not
2035      have external linkage.  And, there's no point in deferring
2036      compilation of thes functions; they're all going to have to be
2037      out anyhow.  */
2038   DECL_INLINE (current_function_decl) = 0;
2039   DECL_UNINLINABLE (current_function_decl) = 1;
2040
2041   return body;
2042 }
2043
2044 /* Finish the process of running a particular set of global constructors
2045    or destructors.  Subroutine of do_[cd]tors.  */
2046
2047 static void
2048 finish_objects (int method_type, int initp, tree body)
2049 {
2050   tree fn;
2051
2052   /* Finish up.  */
2053   finish_compound_stmt (body);
2054   fn = finish_function (0);
2055   expand_or_defer_fn (fn);
2056
2057   /* When only doing semantic analysis, and no RTL generation, we
2058      can't call functions that directly emit assembly code; there is
2059      no assembly file in which to put the code.  */
2060   if (flag_syntax_only)
2061     return;
2062
2063   if (targetm.have_ctors_dtors)
2064     {
2065       rtx fnsym = XEXP (DECL_RTL (fn), 0);
2066       if (method_type == 'I')
2067         (* targetm.asm_out.constructor) (fnsym, initp);
2068       else
2069         (* targetm.asm_out.destructor) (fnsym, initp);
2070     }
2071 }
2072
2073 /* The names of the parameters to the function created to handle
2074    initializations and destructions for objects with static storage
2075    duration.  */
2076 #define INITIALIZE_P_IDENTIFIER "__initialize_p"
2077 #define PRIORITY_IDENTIFIER "__priority"
2078
2079 /* The name of the function we create to handle initializations and
2080    destructions for objects with static storage duration.  */
2081 #define SSDF_IDENTIFIER "__static_initialization_and_destruction"
2082
2083 /* The declaration for the __INITIALIZE_P argument.  */
2084 static GTY(()) tree initialize_p_decl;
2085
2086 /* The declaration for the __PRIORITY argument.  */
2087 static GTY(()) tree priority_decl;
2088
2089 /* The declaration for the static storage duration function.  */
2090 static GTY(()) tree ssdf_decl;
2091
2092 /* All the static storage duration functions created in this
2093    translation unit.  */
2094 static GTY(()) varray_type ssdf_decls;
2095
2096 /* A map from priority levels to information about that priority
2097    level.  There may be many such levels, so efficient lookup is
2098    important.  */
2099 static splay_tree priority_info_map;
2100
2101 /* Begins the generation of the function that will handle all
2102    initialization and destruction of objects with static storage
2103    duration.  The function generated takes two parameters of type
2104    `int': __INITIALIZE_P and __PRIORITY.  If __INITIALIZE_P is
2105    nonzero, it performs initializations.  Otherwise, it performs
2106    destructions.  It only performs those initializations or
2107    destructions with the indicated __PRIORITY.  The generated function
2108    returns no value.  
2109
2110    It is assumed that this function will only be called once per
2111    translation unit.  */
2112
2113 static tree
2114 start_static_storage_duration_function (unsigned count)
2115 {
2116   tree parm_types;
2117   tree type;
2118   tree body;
2119   char id[sizeof (SSDF_IDENTIFIER) + 1 /* '\0' */ + 32];
2120
2121   /* Create the identifier for this function.  It will be of the form
2122      SSDF_IDENTIFIER_<number>.  */
2123   sprintf (id, "%s_%u", SSDF_IDENTIFIER, count);
2124
2125   /* Create the parameters.  */
2126   parm_types = void_list_node;
2127   parm_types = tree_cons (NULL_TREE, integer_type_node, parm_types);
2128   parm_types = tree_cons (NULL_TREE, integer_type_node, parm_types);
2129   type = build_function_type (void_type_node, parm_types);
2130
2131   /* Create the FUNCTION_DECL itself.  */
2132   ssdf_decl = build_lang_decl (FUNCTION_DECL, 
2133                                get_identifier (id),
2134                                type);
2135   TREE_PUBLIC (ssdf_decl) = 0;
2136   DECL_ARTIFICIAL (ssdf_decl) = 1;
2137
2138   /* Put this function in the list of functions to be called from the
2139      static constructors and destructors.  */
2140   if (!ssdf_decls)
2141     {
2142       VARRAY_TREE_INIT (ssdf_decls, 32, "ssdf_decls");
2143
2144       /* Take this opportunity to initialize the map from priority
2145          numbers to information about that priority level.  */
2146       priority_info_map = splay_tree_new (splay_tree_compare_ints,
2147                                           /*delete_key_fn=*/0,
2148                                           /*delete_value_fn=*/
2149                                           (splay_tree_delete_value_fn) &free);
2150
2151       /* We always need to generate functions for the
2152          DEFAULT_INIT_PRIORITY so enter it now.  That way when we walk
2153          priorities later, we'll be sure to find the
2154          DEFAULT_INIT_PRIORITY.  */
2155       get_priority_info (DEFAULT_INIT_PRIORITY);
2156     }
2157
2158   VARRAY_PUSH_TREE (ssdf_decls, ssdf_decl);
2159
2160   /* Create the argument list.  */
2161   initialize_p_decl = cp_build_parm_decl
2162     (get_identifier (INITIALIZE_P_IDENTIFIER), integer_type_node);
2163   DECL_CONTEXT (initialize_p_decl) = ssdf_decl;
2164   TREE_USED (initialize_p_decl) = 1;
2165   priority_decl = cp_build_parm_decl
2166     (get_identifier (PRIORITY_IDENTIFIER), integer_type_node);
2167   DECL_CONTEXT (priority_decl) = ssdf_decl;
2168   TREE_USED (priority_decl) = 1;
2169
2170   TREE_CHAIN (initialize_p_decl) = priority_decl;
2171   DECL_ARGUMENTS (ssdf_decl) = initialize_p_decl;
2172
2173   /* Put the function in the global scope.  */
2174   pushdecl (ssdf_decl);
2175
2176   /* Start the function itself.  This is equivalent to declaring the
2177      function as:
2178
2179        static void __ssdf (int __initialize_p, init __priority_p);
2180        
2181      It is static because we only need to call this function from the
2182      various constructor and destructor functions for this module.  */
2183   start_preparsed_function (ssdf_decl,
2184                             /*attrs=*/NULL_TREE,
2185                             SF_PRE_PARSED);
2186
2187   /* Set up the scope of the outermost block in the function.  */
2188   body = begin_compound_stmt (BCS_FN_BODY);
2189
2190   /* This function must not be deferred because we are depending on
2191      its compilation to tell us what is TREE_SYMBOL_REFERENCED.  */
2192   DECL_INLINE (ssdf_decl) = 0;
2193   DECL_UNINLINABLE (ssdf_decl) = 1;
2194
2195   return body;
2196 }
2197
2198 /* Finish the generation of the function which performs initialization
2199    and destruction of objects with static storage duration.  After
2200    this point, no more such objects can be created.  */
2201
2202 static void
2203 finish_static_storage_duration_function (tree body)
2204 {
2205   /* Close out the function.  */
2206   finish_compound_stmt (body);
2207   expand_or_defer_fn (finish_function (0));
2208 }
2209
2210 /* Return the information about the indicated PRIORITY level.  If no
2211    code to handle this level has yet been generated, generate the
2212    appropriate prologue.  */
2213
2214 static priority_info
2215 get_priority_info (int priority)
2216 {
2217   priority_info pi;
2218   splay_tree_node n;
2219
2220   n = splay_tree_lookup (priority_info_map, 
2221                          (splay_tree_key) priority);
2222   if (!n)
2223     {
2224       /* Create a new priority information structure, and insert it
2225          into the map.  */
2226       pi = xmalloc (sizeof (struct priority_info_s));
2227       pi->initializations_p = 0;
2228       pi->destructions_p = 0;
2229       splay_tree_insert (priority_info_map,
2230                          (splay_tree_key) priority,
2231                          (splay_tree_value) pi);
2232     }
2233   else
2234     pi = (priority_info) n->value;
2235
2236   return pi;
2237 }
2238
2239 /* Set up to handle the initialization or destruction of DECL.  If
2240    INITP is nonzero, we are initializing the variable.  Otherwise, we
2241    are destroying it.  */
2242
2243 static tree
2244 start_static_initialization_or_destruction (tree decl, int initp)
2245 {
2246   tree guard_if_stmt = NULL_TREE;
2247   int priority;
2248   tree cond;
2249   tree guard;
2250   tree init_cond;
2251   priority_info pi;
2252
2253   /* Figure out the priority for this declaration.  */
2254   priority = DECL_INIT_PRIORITY (decl);
2255   if (!priority)
2256     priority = DEFAULT_INIT_PRIORITY;
2257
2258   /* Remember that we had an initialization or finalization at this
2259      priority.  */
2260   pi = get_priority_info (priority);
2261   if (initp)
2262     pi->initializations_p = 1;
2263   else
2264     pi->destructions_p = 1;
2265
2266   /* Trick the compiler into thinking we are at the file and line
2267      where DECL was declared so that error-messages make sense, and so
2268      that the debugger will show somewhat sensible file and line
2269      information.  */
2270   input_location = DECL_SOURCE_LOCATION (decl);
2271
2272   /* Because of:
2273
2274        [class.access.spec]
2275
2276        Access control for implicit calls to the constructors,
2277        the conversion functions, or the destructor called to
2278        create and destroy a static data member is performed as
2279        if these calls appeared in the scope of the member's
2280        class.  
2281
2282      we pretend we are in a static member function of the class of
2283      which the DECL is a member.  */
2284   if (member_p (decl))
2285     {
2286       DECL_CONTEXT (current_function_decl) = DECL_CONTEXT (decl);
2287       DECL_STATIC_FUNCTION_P (current_function_decl) = 1;
2288     }
2289   
2290   /* Conditionalize this initialization on being in the right priority
2291      and being initializing/finalizing appropriately.  */
2292   guard_if_stmt = begin_if_stmt ();
2293   cond = cp_build_binary_op (EQ_EXPR,
2294                              priority_decl,
2295                              build_int_2 (priority, 0));
2296   init_cond = initp ? integer_one_node : integer_zero_node;
2297   init_cond = cp_build_binary_op (EQ_EXPR,
2298                                   initialize_p_decl,
2299                                   init_cond);
2300   cond = cp_build_binary_op (TRUTH_ANDIF_EXPR, cond, init_cond);
2301
2302   /* Assume we don't need a guard.  */
2303   guard = NULL_TREE;
2304   /* We need a guard if this is an object with external linkage that
2305      might be initialized in more than one place.  (For example, a
2306      static data member of a template, when the data member requires
2307      construction.)  */
2308   if (TREE_PUBLIC (decl) && (DECL_COMMON (decl) 
2309                              || DECL_ONE_ONLY (decl)
2310                              || DECL_WEAK (decl)))
2311     {
2312       tree guard_cond;
2313
2314       guard = get_guard (decl);
2315
2316       /* When using __cxa_atexit, we just check the GUARD as we would
2317          for a local static.  */
2318       if (flag_use_cxa_atexit)
2319         {
2320           /* When using __cxa_atexit, we never try to destroy
2321              anything from a static destructor.  */
2322           my_friendly_assert (initp, 20000629);
2323           guard_cond = get_guard_cond (guard);
2324         }
2325       /* If we don't have __cxa_atexit, then we will be running
2326          destructors from .fini sections, or their equivalents.  So,
2327          we need to know how many times we've tried to initialize this
2328          object.  We do initializations only if the GUARD is zero,
2329          i.e., if we are the first to initialize the variable.  We do
2330          destructions only if the GUARD is one, i.e., if we are the
2331          last to destroy the variable.  */
2332       else if (initp)
2333         guard_cond 
2334           = cp_build_binary_op (EQ_EXPR,
2335                                 build_unary_op (PREINCREMENT_EXPR,
2336                                                 guard,
2337                                                 /*noconvert=*/1),
2338                                 integer_one_node);
2339       else
2340         guard_cond 
2341           = cp_build_binary_op (EQ_EXPR,
2342                                 build_unary_op (PREDECREMENT_EXPR,
2343                                                 guard,
2344                                                 /*noconvert=*/1),
2345                                 integer_zero_node);
2346
2347       cond = cp_build_binary_op (TRUTH_ANDIF_EXPR, cond, guard_cond);
2348     }
2349
2350   finish_if_stmt_cond (cond, guard_if_stmt);
2351
2352   /* If we're using __cxa_atexit, we have not already set the GUARD,
2353      so we must do so now.  */
2354   if (guard && initp && flag_use_cxa_atexit)
2355     finish_expr_stmt (set_guard (guard));
2356
2357   return guard_if_stmt;
2358 }
2359
2360 /* We've just finished generating code to do an initialization or
2361    finalization.  GUARD_IF_STMT is the if-statement we used to guard
2362    the initialization.  */
2363
2364 static void
2365 finish_static_initialization_or_destruction (tree guard_if_stmt)
2366 {
2367   finish_then_clause (guard_if_stmt);
2368   finish_if_stmt (guard_if_stmt);
2369
2370   /* Now that we're done with DECL we don't need to pretend to be a
2371      member of its class any longer.  */
2372   DECL_CONTEXT (current_function_decl) = NULL_TREE;
2373   DECL_STATIC_FUNCTION_P (current_function_decl) = 0;
2374 }
2375
2376 /* Generate code to do the initialization of DECL, a VAR_DECL with
2377    static storage duration.  The initialization is INIT.  */
2378
2379 static void
2380 do_static_initialization (tree decl, tree init)
2381 {
2382   tree guard_if_stmt;
2383
2384   /* Set up for the initialization.  */
2385   guard_if_stmt
2386     = start_static_initialization_or_destruction (decl,
2387                                                   /*initp=*/1);
2388
2389   /* Perform the initialization.  */
2390   if (init)
2391     finish_expr_stmt (init);
2392
2393   /* If we're using __cxa_atexit, register a a function that calls the
2394      destructor for the object.  */
2395   if (flag_use_cxa_atexit)
2396     register_dtor_fn (decl);
2397
2398   /* Finish up.  */
2399   finish_static_initialization_or_destruction (guard_if_stmt);
2400 }
2401
2402 /* Generate code to do the static destruction of DECL.  If DECL may be
2403    initialized more than once in different object files, GUARD is the
2404    guard variable to check.  PRIORITY is the priority for the
2405    destruction.  */
2406
2407 static void
2408 do_static_destruction (tree decl)
2409 {
2410   tree guard_if_stmt;
2411
2412   /* If we're using __cxa_atexit, then destructors are registered
2413      immediately after objects are initialized.  */
2414   my_friendly_assert (!flag_use_cxa_atexit, 20000121);
2415
2416   /* If we don't need a destructor, there's nothing to do.  */
2417   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2418     return;
2419
2420   /* Actually do the destruction.  */
2421   guard_if_stmt = start_static_initialization_or_destruction (decl,
2422                                                               /*initp=*/0);
2423   finish_expr_stmt (build_cleanup (decl));
2424   finish_static_initialization_or_destruction (guard_if_stmt);
2425 }
2426
2427 /* VARS is a list of variables with static storage duration which may
2428    need initialization and/or finalization.  Remove those variables
2429    that don't really need to be initialized or finalized, and return
2430    the resulting list.  The order in which the variables appear in
2431    VARS is in reverse order of the order in which they should actually
2432    be initialized.  The list we return is in the unreversed order;
2433    i.e., the first variable should be initialized first.  */
2434
2435 static tree
2436 prune_vars_needing_no_initialization (tree *vars)
2437 {
2438   tree *var = vars;
2439   tree result = NULL_TREE;
2440
2441   while (*var)
2442     {
2443       tree t = *var;
2444       tree decl = TREE_VALUE (t);
2445       tree init = TREE_PURPOSE (t);
2446
2447       /* Deal gracefully with error.  */
2448       if (decl == error_mark_node)
2449         {
2450           var = &TREE_CHAIN (t);
2451           continue;
2452         }
2453
2454       /* The only things that can be initialized are variables.  */
2455       my_friendly_assert (TREE_CODE (decl) == VAR_DECL, 19990420);
2456
2457       /* If this object is not defined, we don't need to do anything
2458          here.  */
2459       if (DECL_EXTERNAL (decl))
2460         {
2461           var = &TREE_CHAIN (t);
2462           continue;
2463         }
2464
2465       /* Also, if the initializer already contains errors, we can bail
2466          out now.  */
2467       if (init && TREE_CODE (init) == TREE_LIST 
2468           && value_member (error_mark_node, init))
2469         {
2470           var = &TREE_CHAIN (t);
2471           continue;
2472         }
2473
2474       /* This variable is going to need initialization and/or
2475          finalization, so we add it to the list.  */
2476       *var = TREE_CHAIN (t);
2477       TREE_CHAIN (t) = result;
2478       result = t;
2479     }
2480
2481   return result;
2482 }
2483
2484 /* Make sure we have told the back end about all the variables in
2485    VARS.  */
2486
2487 static void
2488 write_out_vars (tree vars)
2489 {
2490   tree v;
2491
2492   for (v = vars; v; v = TREE_CHAIN (v))
2493     {
2494       tree var = TREE_VALUE (v);
2495       if (!var_finalized_p (var))
2496         {
2497           import_export_decl (var);
2498           rest_of_decl_compilation (var, 0, 1, 1);
2499         }
2500     }
2501 }
2502
2503 /* Generate a static constructor (if CONSTRUCTOR_P) or destructor
2504    (otherwise) that will initialize all gobal objects with static
2505    storage duration having the indicated PRIORITY.  */
2506
2507 static void
2508 generate_ctor_or_dtor_function (bool constructor_p, int priority,
2509                                 location_t *locus)
2510 {
2511   char function_key;
2512   tree arguments;
2513   tree fndecl;
2514   tree body;
2515   size_t i;
2516
2517   input_location = *locus;
2518 #ifdef USE_MAPPED_LOCATION
2519   /* ??? */
2520 #else
2521   locus->line++;
2522 #endif
2523   
2524   /* We use `I' to indicate initialization and `D' to indicate
2525      destruction.  */
2526   function_key = constructor_p ? 'I' : 'D';
2527
2528   /* We emit the function lazily, to avoid generating empty
2529      global constructors and destructors.  */
2530   body = NULL_TREE;
2531
2532   /* Call the static storage duration function with appropriate
2533      arguments.  */
2534   if (ssdf_decls)
2535     for (i = 0; i < ssdf_decls->elements_used; ++i) 
2536       {
2537         fndecl = VARRAY_TREE (ssdf_decls, i);
2538
2539         /* Calls to pure or const functions will expand to nothing.  */
2540         if (! (flags_from_decl_or_type (fndecl) & (ECF_CONST | ECF_PURE)))
2541           {
2542             if (! body)
2543               body = start_objects (function_key, priority);
2544
2545             arguments = tree_cons (NULL_TREE, build_int_2 (priority, 0), 
2546                                    NULL_TREE);
2547             arguments = tree_cons (NULL_TREE, build_int_2 (constructor_p, 0),
2548                                    arguments);
2549             finish_expr_stmt (build_function_call (fndecl, arguments));
2550           }
2551       }
2552
2553   /* If we're generating code for the DEFAULT_INIT_PRIORITY, throw in
2554      calls to any functions marked with attributes indicating that
2555      they should be called at initialization- or destruction-time.  */
2556   if (priority == DEFAULT_INIT_PRIORITY)
2557     {
2558       tree fns;
2559
2560       for (fns = constructor_p ? static_ctors : static_dtors; 
2561            fns;
2562            fns = TREE_CHAIN (fns))
2563         {
2564           fndecl = TREE_VALUE (fns);
2565
2566           /* Calls to pure/const functions will expand to nothing.  */
2567           if (! (flags_from_decl_or_type (fndecl) & (ECF_CONST | ECF_PURE)))
2568             {
2569               if (! body)
2570                 body = start_objects (function_key, priority);
2571               finish_expr_stmt (build_function_call (fndecl, NULL_TREE));
2572             }
2573         }
2574     }
2575
2576   /* Close out the function.  */
2577   if (body)
2578     finish_objects (function_key, priority, body);
2579 }
2580
2581 /* Generate constructor and destructor functions for the priority
2582    indicated by N.  */
2583
2584 static int
2585 generate_ctor_and_dtor_functions_for_priority (splay_tree_node n, void * data)
2586 {
2587   location_t *locus = data;
2588   int priority = (int) n->key;
2589   priority_info pi = (priority_info) n->value;
2590
2591   /* Generate the functions themselves, but only if they are really
2592      needed.  */
2593   if (pi->initializations_p
2594       || (priority == DEFAULT_INIT_PRIORITY && static_ctors))
2595     generate_ctor_or_dtor_function (/*constructor_p=*/true, priority, locus);
2596   if (pi->destructions_p
2597       || (priority == DEFAULT_INIT_PRIORITY && static_dtors))
2598     generate_ctor_or_dtor_function (/*constructor_p=*/false, priority, locus);
2599
2600   /* Keep iterating.  */
2601   return 0;
2602 }
2603
2604 /* Called via LANGHOOK_CALLGRAPH_ANALYZE_EXPR.  It is supposed to mark
2605    decls referenced from frontend specific constructs; it will be called
2606    only for language-specific tree nodes.
2607
2608    Here we must deal with member pointers.  */
2609
2610 tree
2611 cxx_callgraph_analyze_expr (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
2612                             tree from ATTRIBUTE_UNUSED)
2613 {
2614   tree t = *tp;
2615
2616   switch (TREE_CODE (t))
2617     {
2618     case PTRMEM_CST:
2619       if (TYPE_PTRMEMFUNC_P (TREE_TYPE (t)))
2620         cgraph_mark_needed_node (cgraph_node (PTRMEM_CST_MEMBER (t)));
2621       break;
2622     case BASELINK:
2623       if (TREE_CODE (BASELINK_FUNCTIONS (t)) == FUNCTION_DECL)
2624         cgraph_mark_needed_node (cgraph_node (BASELINK_FUNCTIONS (t)));
2625       break;
2626     case VAR_DECL:
2627       if (DECL_VTABLE_OR_VTT_P (t))
2628         {
2629           /* The ABI requires that all virtual tables be emitted
2630              whenever one of them is.  */
2631           tree vtbl;
2632           for (vtbl = CLASSTYPE_VTABLES (DECL_CONTEXT (t));
2633                vtbl;
2634                vtbl = TREE_CHAIN (vtbl))
2635             mark_decl_referenced (vtbl);
2636         }
2637       else if (DECL_CONTEXT (t) 
2638                && TREE_CODE (DECL_CONTEXT (t)) == FUNCTION_DECL)
2639         /* If we need a static variable in a function, then we
2640            need the containing function.  */
2641         mark_decl_referenced (DECL_CONTEXT (t));
2642       break;
2643     default:
2644       break;
2645     }
2646
2647   return NULL;
2648 }
2649
2650 /* This routine is called from the last rule in yyparse ().
2651    Its job is to create all the code needed to initialize and
2652    destroy the global aggregates.  We do the destruction
2653    first, since that way we only need to reverse the decls once.  */
2654
2655 void
2656 finish_file (void)
2657 {
2658   tree vars;
2659   bool reconsider;
2660   size_t i;
2661   location_t locus;
2662   unsigned ssdf_count = 0;
2663
2664   locus = input_location;
2665   at_eof = 1;
2666
2667   /* Bad parse errors.  Just forget about it.  */
2668   if (! global_bindings_p () || current_class_type || decl_namespace_list)
2669     return;
2670
2671   if (pch_file)
2672     c_common_write_pch ();
2673
2674 #ifdef USE_MAPPED_LOCATION
2675   /* FIXME - huh? */
2676 #else
2677   /* Otherwise, GDB can get confused, because in only knows
2678      about source for LINENO-1 lines.  */
2679   input_line -= 1;
2680 #endif
2681
2682   interface_unknown = 1;
2683   interface_only = 0;
2684
2685   /* We now have to write out all the stuff we put off writing out.
2686      These include:
2687
2688        o Template specializations that we have not yet instantiated,
2689          but which are needed.
2690        o Initialization and destruction for non-local objects with
2691          static storage duration.  (Local objects with static storage
2692          duration are initialized when their scope is first entered,
2693          and are cleaned up via atexit.)
2694        o Virtual function tables.  
2695
2696      All of these may cause others to be needed.  For example,
2697      instantiating one function may cause another to be needed, and
2698      generating the initializer for an object may cause templates to be
2699      instantiated, etc., etc.  */
2700
2701   timevar_push (TV_VARCONST);
2702
2703   emit_support_tinfos ();
2704
2705   do 
2706     {
2707       tree t;
2708       size_t n_old, n_new;
2709
2710       reconsider = false;
2711
2712       /* If there are templates that we've put off instantiating, do
2713          them now.  */
2714       instantiate_pending_templates ();
2715       ggc_collect ();
2716
2717       /* Write out virtual tables as required.  Note that writing out
2718          the virtual table for a template class may cause the
2719          instantiation of members of that class.  If we write out
2720          vtables then we remove the class from our list so we don't
2721          have to look at it again.  */
2722  
2723       while (keyed_classes != NULL_TREE
2724              && maybe_emit_vtables (TREE_VALUE (keyed_classes)))
2725         {
2726           reconsider = true;
2727           keyed_classes = TREE_CHAIN (keyed_classes);
2728         }
2729  
2730       t = keyed_classes;
2731       if (t != NULL_TREE)
2732         {
2733           tree next = TREE_CHAIN (t);
2734  
2735           while (next)
2736             {
2737               if (maybe_emit_vtables (TREE_VALUE (next)))
2738                 {
2739                   reconsider = true;
2740                   TREE_CHAIN (t) = TREE_CHAIN (next);
2741                 }
2742               else
2743                 t = next;
2744  
2745               next = TREE_CHAIN (t);
2746             }
2747         }
2748        
2749       /* Write out needed type info variables.  We have to be careful
2750          looping through unemitted decls, because emit_tinfo_decl may
2751          cause other variables to be needed.  We stick new elements
2752          (and old elements that we may need to reconsider) at the end
2753          of the array, then shift them back to the beginning once we're
2754          done.  */
2755   
2756       n_old = VARRAY_ACTIVE_SIZE (unemitted_tinfo_decls);
2757       for (i = 0; i < n_old; ++i)
2758         {
2759           tree tinfo_decl = VARRAY_TREE (unemitted_tinfo_decls, i);
2760           if (emit_tinfo_decl (tinfo_decl))
2761             reconsider = true;
2762           else
2763             VARRAY_PUSH_TREE (unemitted_tinfo_decls, tinfo_decl);
2764         }
2765   
2766       /* The only elements we want to keep are the new ones.  Copy
2767          them to the beginning of the array, then get rid of the
2768          leftovers.  */
2769       n_new = VARRAY_ACTIVE_SIZE (unemitted_tinfo_decls) - n_old;
2770       if (n_new)
2771         memmove (&VARRAY_TREE (unemitted_tinfo_decls, 0),
2772                  &VARRAY_TREE (unemitted_tinfo_decls, n_old),
2773                  n_new * sizeof (tree));
2774       memset (&VARRAY_TREE (unemitted_tinfo_decls, n_new),
2775               0, n_old * sizeof (tree));
2776       VARRAY_ACTIVE_SIZE (unemitted_tinfo_decls) = n_new;
2777
2778       /* The list of objects with static storage duration is built up
2779          in reverse order.  We clear STATIC_AGGREGATES so that any new
2780          aggregates added during the initialization of these will be
2781          initialized in the correct order when we next come around the
2782          loop.  */
2783       vars = prune_vars_needing_no_initialization (&static_aggregates);
2784
2785       if (vars)
2786         {
2787           tree v;
2788
2789           /* We need to start a new initialization function each time
2790              through the loop.  That's because we need to know which
2791              vtables have been referenced, and TREE_SYMBOL_REFERENCED
2792              isn't computed until a function is finished, and written
2793              out.  That's a deficiency in the back-end.  When this is
2794              fixed, these initialization functions could all become
2795              inline, with resulting performance improvements.  */
2796           tree ssdf_body;
2797
2798           /* Set the line and file, so that it is obviously not from
2799              the source file.  */
2800           input_location = locus;
2801           ssdf_body = start_static_storage_duration_function (ssdf_count);
2802
2803           /* Make sure the back end knows about all the variables.  */
2804           write_out_vars (vars);
2805
2806           /* First generate code to do all the initializations.  */
2807           for (v = vars; v; v = TREE_CHAIN (v))
2808             do_static_initialization (TREE_VALUE (v),
2809                                       TREE_PURPOSE (v));
2810
2811           /* Then, generate code to do all the destructions.  Do these
2812              in reverse order so that the most recently constructed
2813              variable is the first destroyed.  If we're using
2814              __cxa_atexit, then we don't need to do this; functions
2815              were registered at initialization time to destroy the
2816              local statics.  */
2817           if (!flag_use_cxa_atexit)
2818             {
2819               vars = nreverse (vars);
2820               for (v = vars; v; v = TREE_CHAIN (v))
2821                 do_static_destruction (TREE_VALUE (v));
2822             }
2823           else
2824             vars = NULL_TREE;
2825
2826           /* Finish up the static storage duration function for this
2827              round.  */
2828           input_location = locus;
2829           finish_static_storage_duration_function (ssdf_body);
2830
2831           /* All those initializations and finalizations might cause
2832              us to need more inline functions, more template
2833              instantiations, etc.  */
2834           reconsider = true;
2835           ssdf_count++;
2836 #ifdef USE_MAPPED_LOCATION
2837           /* ??? */
2838 #else
2839           locus.line++;
2840 #endif
2841         }
2842       
2843       /* Go through the set of inline functions whose bodies have not
2844          been emitted yet.  If out-of-line copies of these functions
2845          are required, emit them.  */
2846       for (i = 0; i < deferred_fns_used; ++i)
2847         {
2848           tree decl = VARRAY_TREE (deferred_fns, i);
2849
2850           /* Does it need synthesizing?  */
2851           if (DECL_ARTIFICIAL (decl) && ! DECL_INITIAL (decl)
2852               && (! DECL_REALLY_EXTERN (decl) || DECL_INLINE (decl)))
2853             {
2854               /* Even though we're already at the top-level, we push
2855                  there again.  That way, when we pop back a few lines
2856                  hence, all of our state is restored.  Otherwise,
2857                  finish_function doesn't clean things up, and we end
2858                  up with CURRENT_FUNCTION_DECL set.  */
2859               push_to_top_level ();
2860               synthesize_method (decl);
2861               pop_from_top_level ();
2862               reconsider = true;
2863             }
2864
2865           if (!DECL_SAVED_TREE (decl))
2866             continue;
2867
2868           import_export_decl (decl);
2869
2870           /* We lie to the back-end, pretending that some functions
2871              are not defined when they really are.  This keeps these
2872              functions from being put out unnecessarily.  But, we must
2873              stop lying when the functions are referenced, or if they
2874              are not comdat since they need to be put out now.  This
2875              is done in a separate for cycle, because if some deferred
2876              function is contained in another deferred function later
2877              in deferred_fns varray, rest_of_compilation would skip
2878              this function and we really cannot expand the same
2879              function twice.  */
2880           if (DECL_NOT_REALLY_EXTERN (decl)
2881               && DECL_INITIAL (decl)
2882               && decl_needed_p (decl))
2883             DECL_EXTERNAL (decl) = 0;
2884
2885           /* If we're going to need to write this function out, and
2886              there's already a body for it, create RTL for it now.
2887              (There might be no body if this is a method we haven't
2888              gotten around to synthesizing yet.)  */
2889           if (!DECL_EXTERNAL (decl)
2890               && decl_needed_p (decl)
2891               && !TREE_ASM_WRITTEN (decl)
2892               && !cgraph_node (decl)->local.finalized)
2893             {
2894               /* We will output the function; no longer consider it in this
2895                  loop.  */
2896               DECL_DEFER_OUTPUT (decl) = 0;
2897               /* Generate RTL for this function now that we know we
2898                  need it.  */
2899               expand_or_defer_fn (decl);
2900               /* If we're compiling -fsyntax-only pretend that this
2901                  function has been written out so that we don't try to
2902                  expand it again.  */
2903               if (flag_syntax_only)
2904                 TREE_ASM_WRITTEN (decl) = 1;
2905               reconsider = true;
2906             }
2907         }
2908
2909       if (walk_namespaces (wrapup_globals_for_namespace, /*data=*/0))
2910         reconsider = true;
2911
2912       /* Static data members are just like namespace-scope globals.  */
2913       for (i = 0; i < pending_statics_used; ++i) 
2914         {
2915           tree decl = VARRAY_TREE (pending_statics, i);
2916           if (var_finalized_p (decl) || DECL_REALLY_EXTERN (decl))
2917             continue;
2918           import_export_decl (decl);
2919           /* If this static data member is needed, provide it to the
2920              back end.  */
2921           if (DECL_NOT_REALLY_EXTERN (decl) && decl_needed_p (decl))
2922             DECL_EXTERNAL (decl) = 0;
2923         }
2924       if (pending_statics
2925           && wrapup_global_declarations (&VARRAY_TREE (pending_statics, 0),
2926                                          pending_statics_used))
2927         reconsider = true;
2928
2929       /* Ask the back end to emit functions and variables that are
2930          enqued.  These emissions may result in marking more entities
2931          as needed.  */
2932       if (cgraph_assemble_pending_functions ())
2933         reconsider = true;
2934       if (cgraph_varpool_assemble_pending_decls ())
2935         reconsider = true;
2936     } 
2937   while (reconsider);
2938
2939   /* All used inline functions must have a definition at this point.  */
2940   for (i = 0; i < deferred_fns_used; ++i)
2941     {
2942       tree decl = VARRAY_TREE (deferred_fns, i);
2943
2944       if (/* Check online inline functions that were actually used.  */
2945           TREE_USED (decl) && DECL_DECLARED_INLINE_P (decl)
2946           /* But not defined.  */
2947           && DECL_REALLY_EXTERN (decl)
2948           /* If we decided to emit this function in another
2949              translation unit, the fact that the definition was
2950              missing here likely indicates only that the repository
2951              decided to place the function elsewhere.  With -Winline,
2952              we will still warn if we could not inline the
2953              function.  */
2954           && !flag_use_repository
2955           /* An explicit instantiation can be used to specify
2956              that the body is in another unit. It will have
2957              already verified there was a definition.  */
2958           && !DECL_EXPLICIT_INSTANTIATION (decl))
2959         {
2960           cp_warning_at ("inline function `%D' used but never defined", decl);
2961           /* This symbol is effectively an "extern" declaration now.
2962              This is not strictly necessary, but removes a duplicate
2963              warning.  */
2964           TREE_PUBLIC (decl) = 1;
2965         }
2966     }
2967   
2968   /* We give C linkage to static constructors and destructors.  */
2969   push_lang_context (lang_name_c);
2970
2971   /* Generate initialization and destruction functions for all
2972      priorities for which they are required.  */
2973   if (priority_info_map)
2974     splay_tree_foreach (priority_info_map, 
2975                         generate_ctor_and_dtor_functions_for_priority,
2976                         /*data=*/&locus);
2977   else
2978     {
2979       
2980       if (static_ctors)
2981         generate_ctor_or_dtor_function (/*constructor_p=*/true,
2982                                         DEFAULT_INIT_PRIORITY, &locus);
2983       if (static_dtors)
2984         generate_ctor_or_dtor_function (/*constructor_p=*/false,
2985                                         DEFAULT_INIT_PRIORITY, &locus);
2986     }
2987
2988   /* We're done with the splay-tree now.  */
2989   if (priority_info_map)
2990     splay_tree_delete (priority_info_map);
2991
2992   /* We're done with static constructors, so we can go back to "C++"
2993      linkage now.  */
2994   pop_lang_context ();
2995
2996   cgraph_finalize_compilation_unit ();
2997   cgraph_optimize ();
2998
2999   /* Emit mudflap static registration function.  This must be done
3000      after all the user functions have been expanded.  */
3001   if (flag_mudflap)
3002     mudflap_finish_file ();
3003
3004   /* Now, issue warnings about static, but not defined, functions,
3005      etc., and emit debugging information.  */
3006   walk_namespaces (wrapup_globals_for_namespace, /*data=*/&reconsider);
3007   if (pending_statics)
3008     check_global_declarations (&VARRAY_TREE (pending_statics, 0),
3009                                pending_statics_used);
3010
3011   finish_repo ();
3012
3013   /* The entire file is now complete.  If requested, dump everything
3014      to a file.  */
3015   {
3016     int flags;
3017     FILE *stream = dump_begin (TDI_tu, &flags);
3018
3019     if (stream)
3020       {
3021         dump_node (global_namespace, flags & ~TDF_SLIM, stream);
3022         dump_end (TDI_tu, stream);
3023       }
3024   }
3025   
3026   timevar_pop (TV_VARCONST);
3027
3028   if (flag_detailed_statistics)
3029     {
3030       dump_tree_statistics ();
3031       dump_time_statistics ();
3032     }
3033   input_location = locus;
3034
3035 #ifdef ENABLE_CHECKING
3036   validate_conversion_obstack ();
3037 #endif /* ENABLE_CHECKING */
3038 }
3039
3040 /* FN is an OFFSET_REF, DOTSTAR_EXPR or MEMBER_REF indicating the
3041    function to call in parse-tree form; it has not yet been
3042    semantically analyzed.  ARGS are the arguments to the function.
3043    They have already been semantically analyzed.  */
3044
3045 tree
3046 build_offset_ref_call_from_tree (tree fn, tree args)
3047 {
3048   tree orig_fn;
3049   tree orig_args;
3050   tree expr;
3051   tree object;
3052
3053   orig_fn = fn;
3054   orig_args = args;
3055   object = TREE_OPERAND (fn, 0);
3056
3057   if (processing_template_decl)
3058     {
3059       my_friendly_assert (TREE_CODE (fn) == DOTSTAR_EXPR
3060                           || TREE_CODE (fn) == MEMBER_REF,
3061                           20030708);
3062       if (type_dependent_expression_p (fn)
3063           || any_type_dependent_arguments_p (args))
3064         return build_min_nt (CALL_EXPR, fn, args, NULL_TREE);
3065
3066       /* Transform the arguments and add the implicit "this"
3067          parameter.  That must be done before the FN is transformed
3068          because we depend on the form of FN.  */
3069       args = build_non_dependent_args (args);
3070       if (TREE_CODE (fn) == DOTSTAR_EXPR)
3071         object = build_unary_op (ADDR_EXPR, object, 0);
3072       object = build_non_dependent_expr (object);
3073       args = tree_cons (NULL_TREE, object, args);
3074       /* Now that the arguments are done, transform FN.  */
3075       fn = build_non_dependent_expr (fn);
3076     }
3077
3078   /* A qualified name corresponding to a bound pointer-to-member is
3079      represented as an OFFSET_REF:
3080
3081         struct B { void g(); };
3082         void (B::*p)();
3083         void B::g() { (this->*p)(); }  */
3084   if (TREE_CODE (fn) == OFFSET_REF)
3085     {
3086       tree object_addr = build_unary_op (ADDR_EXPR, object, 0);
3087       fn = TREE_OPERAND (fn, 1);
3088       fn = get_member_function_from_ptrfunc (&object_addr, fn);
3089       args = tree_cons (NULL_TREE, object_addr, args);
3090     }
3091
3092   expr = build_function_call (fn, args);
3093   if (processing_template_decl && expr != error_mark_node)
3094     return build_min_non_dep (CALL_EXPR, expr, orig_fn, orig_args, NULL_TREE);
3095   return expr;
3096 }
3097   
3098
3099 void
3100 check_default_args (tree x)
3101 {
3102   tree arg = TYPE_ARG_TYPES (TREE_TYPE (x));
3103   bool saw_def = false;
3104   int i = 0 - (TREE_CODE (TREE_TYPE (x)) == METHOD_TYPE);
3105   for (; arg && arg != void_list_node; arg = TREE_CHAIN (arg), ++i)
3106     {
3107       if (TREE_PURPOSE (arg))
3108         saw_def = true;
3109       else if (saw_def)
3110         {
3111           cp_error_at ("default argument missing for parameter %P of `%+#D'",
3112                        i, x);
3113           break;
3114         }
3115     }
3116 }
3117
3118 void
3119 mark_used (tree decl)
3120 {
3121   TREE_USED (decl) = 1;
3122   if (processing_template_decl || skip_evaluation)
3123     return;
3124
3125   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl)
3126       && !TREE_ASM_WRITTEN (decl))
3127     /* Remember it, so we can check it was defined.  */
3128     {
3129       if (DECL_DEFERRED_FN (decl))
3130         return;
3131       note_vague_linkage_fn (decl);
3132     }
3133   
3134   assemble_external (decl);
3135
3136   /* Is it a synthesized method that needs to be synthesized?  */
3137   if (TREE_CODE (decl) == FUNCTION_DECL
3138       && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl)
3139       && DECL_ARTIFICIAL (decl) 
3140       && !DECL_THUNK_P (decl)
3141       && ! DECL_INITIAL (decl)
3142       /* Kludge: don't synthesize for default args.  */
3143       && current_function_decl)
3144     {
3145       synthesize_method (decl);
3146       /* If we've already synthesized the method we don't need to
3147          instantiate it, so we can return right away.  */
3148       return;
3149     }
3150
3151   /* If this is a function or variable that is an instance of some
3152      template, we now know that we will need to actually do the
3153      instantiation. We check that DECL is not an explicit
3154      instantiation because that is not checked in instantiate_decl.  */
3155   if ((DECL_NON_THUNK_FUNCTION_P (decl) || TREE_CODE (decl) == VAR_DECL)
3156       && DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)
3157       && (!DECL_EXPLICIT_INSTANTIATION (decl)
3158           || (TREE_CODE (decl) == FUNCTION_DECL 
3159               && DECL_INLINE (DECL_TEMPLATE_RESULT 
3160                               (template_for_substitution (decl))))))
3161     /* We put off instantiating functions in order to improve compile
3162        times.  Maintaining a stack of active functions is expensive,
3163        and the inliner knows to instantiate any functions it might
3164        need.  */
3165     instantiate_decl (decl, /*defer_ok=*/true, /*undefined_ok=*/0);
3166 }
3167
3168 #include "gt-cp-decl2.h"