OSDN Git Service

* class.c (build_vtable): Do not set DECL_VISIBILITY here.
[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 /* Determine the ELF symbol visibility for DECL.  */
1620
1621 void
1622 determine_visibility (tree decl)
1623 {
1624   tree class_type;
1625
1626   /* Cloned constructors and destructors get the same visibility as
1627      the underlying function.  That should be set up in
1628      maybe_clone_body.  */
1629   if (DECL_CLONED_FUNCTION_P (decl))
1630     return;
1631
1632   if (DECL_CLASS_SCOPE_P (decl))
1633     class_type = DECL_CONTEXT (decl);
1634   else if (TREE_CODE (decl) == VAR_DECL
1635            && DECL_TINFO_P (decl)
1636            && CLASS_TYPE_P (TREE_TYPE (DECL_NAME (decl))))
1637     class_type = TREE_TYPE (DECL_NAME (decl));
1638   else
1639     {
1640       /* Virtual tables have DECL_CONTEXT set to their associated class,
1641          so they are automatically handled above.  */
1642       my_friendly_assert (!(TREE_CODE (decl) == VAR_DECL
1643                             && DECL_VTABLE_OR_VTT_P (decl)), 20040803);
1644       /* Entities not associated with any class just get the
1645          visibility specified by their attributes.  */
1646       return;
1647     }
1648
1649   /* By default, static data members and function members receive
1650      the visibility of their containing class.  */
1651   if (class_type
1652       && (TREE_CODE (decl) == VAR_DECL 
1653           || TREE_CODE (decl) == FUNCTION_DECL)
1654       && !lookup_attribute ("visibility", DECL_ATTRIBUTES (decl)))
1655     {
1656       if (TREE_CODE (decl) == FUNCTION_DECL
1657           && DECL_DECLARED_INLINE_P (decl)
1658           && visibility_options.inlines_hidden)
1659         {
1660           DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
1661           DECL_VISIBILITY_SPECIFIED (decl) = 1;
1662         }
1663       else
1664         {
1665           DECL_VISIBILITY (decl) = CLASSTYPE_VISIBILITY (class_type);
1666           DECL_VISIBILITY_SPECIFIED (decl)
1667             = CLASSTYPE_VISIBILITY_SPECIFIED (class_type);
1668         }
1669     }
1670 }
1671
1672 /* DECL is a FUNCTION_DECL or VAR_DECL.  If the object file linkage
1673    for DECL has not already been determined, do so now by setting
1674    DECL_EXTERNAL, DECL_COMDAT and other related flags.  Until this
1675    function is called entities with vague linkage whose definitions
1676    are available must have TREE_PUBLIC set.
1677
1678    If this function decides to place DECL in COMDAT, it will set
1679    appropriate flags -- but will not clear DECL_EXTERNAL.  It is up to
1680    the caller to decide whether or not to clear DECL_EXTERNAL.  Some
1681    callers defer that decision until it is clear that DECL is actually
1682    required.  */
1683
1684 void
1685 import_export_decl (tree decl)
1686 {
1687   int emit_p;
1688   bool comdat_p;
1689   bool import_p;
1690
1691   if (DECL_INTERFACE_KNOWN (decl))
1692     return;
1693
1694   /* We cannot determine what linkage to give to an entity with vague
1695      linkage until the end of the file.  For example, a virtual table
1696      for a class will be defined if and only if the key method is
1697      defined in this translation unit.  As a further example, consider
1698      that when compiling a translation unit that uses PCH file with
1699      "-frepo" it would be incorrect to make decisions about what
1700      entities to emit when building the PCH; those decisions must be
1701      delayed until the repository information has been processed.  */
1702   my_friendly_assert (at_eof, 20040727);
1703   /* Object file linkage for explicit instantiations is handled in
1704      mark_decl_instantiated.  For static variables in functions with
1705      vague linkage, maybe_commonize_var is used.
1706
1707      Therefore, the only declarations that should be provided to this
1708      function are those with external linkage that:
1709
1710      * implicit instantiations of function templates
1711
1712      * inline function
1713
1714      * implicit instantiations of static data members of class
1715        templates
1716
1717      * virtual tables
1718
1719      * typeinfo objects
1720
1721      Furthermore, all entities that reach this point must have a
1722      definition available in this translation unit.
1723
1724      The following assertions check these conditions.  */
1725   my_friendly_assert (TREE_CODE (decl) == FUNCTION_DECL
1726                       || TREE_CODE (decl) == VAR_DECL,
1727                       2004725);
1728   /* Any code that creates entities with TREE_PUBLIC cleared should
1729      also set DECL_INTERFACE_KNOWN.  */
1730   my_friendly_assert (TREE_PUBLIC (decl), 20040725);
1731   if (TREE_CODE (decl) == FUNCTION_DECL)
1732     my_friendly_assert (DECL_IMPLICIT_INSTANTIATION (decl)
1733                         || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
1734                         || DECL_DECLARED_INLINE_P (decl),
1735                         20040725);
1736   else
1737     my_friendly_assert (DECL_IMPLICIT_INSTANTIATION (decl)
1738                         || DECL_VTABLE_OR_VTT_P (decl)
1739                         || DECL_TINFO_P (decl),
1740                         20040725);
1741   /* Check that a definition of DECL is available in this translation
1742      unit.  */
1743   my_friendly_assert (!DECL_REALLY_EXTERN (decl), 20040725);
1744
1745   /* Assume that DECL will not have COMDAT linkage.  */
1746   comdat_p = false;
1747   /* Assume that DECL will not be imported into this translation
1748      unit.  */
1749   import_p = false;
1750
1751   /* See if the repository tells us whether or not to emit DECL in
1752      this translation unit.  */
1753   emit_p = repo_emit_p (decl);
1754   if (emit_p == 0)
1755     import_p = true;
1756   else if (emit_p == 1)
1757     {
1758       /* The repository indicates that this entity should be defined
1759          here.  Make sure the back end honors that request.  */
1760       if (TREE_CODE (decl) == VAR_DECL)
1761         mark_needed (decl);
1762       else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)
1763                || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
1764         {
1765           tree clone;
1766           FOR_EACH_CLONE (clone, decl)
1767             mark_needed (clone);
1768         }
1769       else
1770         mark_needed (decl);
1771       /* Output the definition as an ordinary strong definition.  */
1772       DECL_EXTERNAL (decl) = 0;
1773       DECL_INTERFACE_KNOWN (decl) = 1;
1774       return;
1775     }
1776
1777   if (import_p)
1778     /* We have already decided what to do with this DECL; there is no
1779        need to check anything further.  */
1780     ;
1781   else if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
1782     {
1783       tree type = DECL_CONTEXT (decl);
1784       import_export_class (type);
1785       if (TYPE_FOR_JAVA (type))
1786         import_p = true;
1787       else if (CLASSTYPE_INTERFACE_KNOWN (type)
1788                && CLASSTYPE_INTERFACE_ONLY (type))
1789         import_p = true;
1790       else if (TARGET_WEAK_NOT_IN_ARCHIVE_TOC
1791                && !CLASSTYPE_USE_TEMPLATE (type)
1792                && CLASSTYPE_KEY_METHOD (type)
1793                && !DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (type)))
1794         /* The ABI requires that all virtual tables be emitted with
1795            COMDAT linkage.  However, on systems where COMDAT symbols
1796            don't show up in the table of contents for a static
1797            archive, the linker will report errors about undefined
1798            symbols because it will not see the virtual table
1799            definition.  Therefore, in the case that we know that the
1800            virtual table will be emitted in only one translation
1801            unit, we make the virtual table an ordinary definition
1802            with external linkage.  */
1803         DECL_EXTERNAL (decl) = 0;
1804       else if (CLASSTYPE_INTERFACE_KNOWN (type))
1805         {
1806           /* TYPE is being exported from this translation unit, so DECL
1807              should be defined here.  The ABI requires COMDAT
1808              linkage.  Normally, we only emit COMDAT things when they
1809              are needed; make sure that we realize that this entity is
1810              indeed needed.  */
1811           comdat_p = true;
1812           mark_needed (decl);
1813         }
1814       else if (!flag_implicit_templates
1815                && CLASSTYPE_IMPLICIT_INSTANTIATION (type))
1816         import_p = true;
1817       else
1818         comdat_p = true;
1819     }
1820   else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl))
1821     {
1822       tree type = TREE_TYPE (DECL_NAME (decl));
1823       if (CLASS_TYPE_P (type))
1824         {
1825           import_export_class (type);
1826           if (CLASSTYPE_INTERFACE_KNOWN (type)
1827               && TYPE_POLYMORPHIC_P (type)
1828               && CLASSTYPE_INTERFACE_ONLY (type)
1829               /* If -fno-rtti was specified, then we cannot be sure
1830                  that RTTI information will be emitted with the
1831                  virtual table of the class, so we must emit it
1832                  wherever it is used.  */
1833               && flag_rtti)
1834             import_p = true;
1835           else 
1836             {
1837               comdat_p = true;
1838               if (CLASSTYPE_INTERFACE_KNOWN (type)
1839                   && !CLASSTYPE_INTERFACE_ONLY (type))
1840                 mark_needed (decl);
1841             }
1842         }
1843       else
1844         comdat_p = true;
1845     }
1846   else if (DECL_TEMPLATE_INSTANTIATION (decl)
1847            || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl))
1848     {
1849       /* DECL is an implicit instantiation of a function or static
1850          data member.  */
1851       if (flag_implicit_templates
1852           || (flag_implicit_inline_templates
1853               && TREE_CODE (decl) == FUNCTION_DECL 
1854               && DECL_DECLARED_INLINE_P (decl)))
1855         comdat_p = true;
1856       else
1857         /* If we are not implicitly generating templates, then mark
1858            this entity as undefined in this translation unit.  */
1859         import_p = true;
1860     }
1861   else if (DECL_FUNCTION_MEMBER_P (decl))
1862     {
1863       if (!DECL_DECLARED_INLINE_P (decl))
1864         {
1865           tree ctype = DECL_CONTEXT (decl);
1866           import_export_class (ctype);
1867           if (CLASSTYPE_INTERFACE_KNOWN (ctype))
1868             {
1869               DECL_NOT_REALLY_EXTERN (decl)
1870                 = ! (CLASSTYPE_INTERFACE_ONLY (ctype)
1871                      || (DECL_DECLARED_INLINE_P (decl) 
1872                          && ! flag_implement_inlines
1873                          && !DECL_VINDEX (decl)));
1874
1875               if (!DECL_NOT_REALLY_EXTERN (decl))
1876                 DECL_EXTERNAL (decl) = 1;
1877
1878               /* Always make artificials weak.  */
1879               if (DECL_ARTIFICIAL (decl) && flag_weak)
1880                 comdat_p = true;
1881               else
1882                 maybe_make_one_only (decl);
1883             }
1884         }
1885       else
1886         comdat_p = true;
1887     }
1888   else
1889     comdat_p = true;
1890
1891   if (import_p)
1892     {
1893       /* If we are importing DECL into this translation unit, mark is
1894          an undefined here.  */
1895       DECL_EXTERNAL (decl) = 1;
1896       DECL_NOT_REALLY_EXTERN (decl) = 0;
1897     }
1898   else if (comdat_p)
1899     {
1900       /* If we decided to put DECL in COMDAT, mark it accordingly at
1901          this point.  */
1902       comdat_linkage (decl);
1903     }
1904
1905   DECL_INTERFACE_KNOWN (decl) = 1;
1906 }
1907
1908 /* Return an expression that performs the destruction of DECL, which
1909    must be a VAR_DECL whose type has a non-trivial destructor, or is
1910    an array whose (innermost) elements have a non-trivial destructor.  */
1911
1912 tree
1913 build_cleanup (tree decl)
1914 {
1915   tree temp;
1916   tree type = TREE_TYPE (decl);
1917
1918   /* This function should only be called for declarations that really
1919      require cleanups.  */
1920   my_friendly_assert (!TYPE_HAS_TRIVIAL_DESTRUCTOR (type), 20030106);
1921
1922   /* Treat all objects with destructors as used; the destructor may do
1923      something substantive.  */
1924   mark_used (decl);
1925
1926   if (TREE_CODE (type) == ARRAY_TYPE)
1927     temp = decl;
1928   else
1929     {
1930       cxx_mark_addressable (decl);
1931       temp = build1 (ADDR_EXPR, build_pointer_type (type), decl);
1932     }
1933   temp = build_delete (TREE_TYPE (temp), temp,
1934                        sfk_complete_destructor,
1935                        LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR, 0);
1936   return temp;
1937 }
1938
1939 /* Returns the initialization guard variable for the variable DECL,
1940    which has static storage duration.  */
1941
1942 tree
1943 get_guard (tree decl)
1944 {
1945   tree sname;
1946   tree guard;
1947
1948   sname = mangle_guard_variable (decl);
1949   guard = IDENTIFIER_GLOBAL_VALUE (sname);
1950   if (! guard)
1951     {
1952       tree guard_type;
1953
1954       /* We use a type that is big enough to contain a mutex as well
1955          as an integer counter.  */
1956       guard_type = targetm.cxx.guard_type ();
1957       guard = build_decl (VAR_DECL, sname, guard_type);
1958       
1959       /* The guard should have the same linkage as what it guards.  */
1960       TREE_PUBLIC (guard) = TREE_PUBLIC (decl);
1961       TREE_STATIC (guard) = TREE_STATIC (decl);
1962       DECL_COMMON (guard) = DECL_COMMON (decl);
1963       DECL_ONE_ONLY (guard) = DECL_ONE_ONLY (decl);
1964       if (TREE_PUBLIC (decl))
1965         DECL_WEAK (guard) = DECL_WEAK (decl);
1966       
1967       DECL_ARTIFICIAL (guard) = 1;
1968       TREE_USED (guard) = 1;
1969       pushdecl_top_level_and_finish (guard, NULL_TREE);
1970     }
1971   return guard;
1972 }
1973
1974 /* Return those bits of the GUARD variable that should be set when the
1975    guarded entity is actually initialized.  */
1976
1977 static tree
1978 get_guard_bits (tree guard)
1979 {
1980   if (!targetm.cxx.guard_mask_bit ())
1981     {
1982       /* We only set the first byte of the guard, in order to leave room
1983          for a mutex in the high-order bits.  */
1984       guard = build1 (ADDR_EXPR, 
1985                       build_pointer_type (TREE_TYPE (guard)),
1986                       guard);
1987       guard = build1 (NOP_EXPR, 
1988                       build_pointer_type (char_type_node), 
1989                       guard);
1990       guard = build1 (INDIRECT_REF, char_type_node, guard);
1991     }
1992
1993   return guard;
1994 }
1995
1996 /* Return an expression which determines whether or not the GUARD
1997    variable has already been initialized.  */
1998
1999 tree
2000 get_guard_cond (tree guard)
2001 {
2002   tree guard_value;
2003
2004   /* Check to see if the GUARD is zero.  */
2005   guard = get_guard_bits (guard);
2006
2007   /* Mask off all but the low bit.  */
2008   if (targetm.cxx.guard_mask_bit ())
2009     {
2010       guard_value = integer_one_node;
2011       if (!same_type_p (TREE_TYPE (guard_value), TREE_TYPE (guard)))
2012         guard_value = convert (TREE_TYPE (guard), guard_value);
2013         guard = cp_build_binary_op (BIT_AND_EXPR, guard, guard_value);
2014     }
2015
2016   guard_value = integer_zero_node;
2017   if (!same_type_p (TREE_TYPE (guard_value), TREE_TYPE (guard)))
2018     guard_value = convert (TREE_TYPE (guard), guard_value);
2019   return cp_build_binary_op (EQ_EXPR, guard, guard_value);
2020 }
2021
2022 /* Return an expression which sets the GUARD variable, indicating that
2023    the variable being guarded has been initialized.  */
2024
2025 tree
2026 set_guard (tree guard)
2027 {
2028   tree guard_init;
2029
2030   /* Set the GUARD to one.  */
2031   guard = get_guard_bits (guard);
2032   guard_init = integer_one_node;
2033   if (!same_type_p (TREE_TYPE (guard_init), TREE_TYPE (guard)))
2034     guard_init = convert (TREE_TYPE (guard), guard_init);
2035   return build_modify_expr (guard, NOP_EXPR, guard_init);
2036 }
2037
2038 /* Start the process of running a particular set of global constructors
2039    or destructors.  Subroutine of do_[cd]tors.  */
2040
2041 static tree
2042 start_objects (int method_type, int initp)
2043 {
2044   tree body;
2045   tree fndecl;
2046   char type[10];
2047
2048   /* Make ctor or dtor function.  METHOD_TYPE may be 'I' or 'D'.  */
2049
2050   if (initp != DEFAULT_INIT_PRIORITY)
2051     {
2052       char joiner;
2053
2054 #ifdef JOINER
2055       joiner = JOINER;
2056 #else
2057       joiner = '_';
2058 #endif
2059
2060       sprintf (type, "%c%c%.5u", method_type, joiner, initp);
2061     }
2062   else
2063     sprintf (type, "%c", method_type);
2064
2065   fndecl = build_lang_decl (FUNCTION_DECL, 
2066                             get_file_function_name_long (type),
2067                             build_function_type (void_type_node,
2068                                                  void_list_node));
2069   start_preparsed_function (fndecl, /*attrs=*/NULL_TREE, SF_PRE_PARSED);
2070
2071   /* It can be a static function as long as collect2 does not have
2072      to scan the object file to find its ctor/dtor routine.  */
2073   TREE_PUBLIC (current_function_decl) = ! targetm.have_ctors_dtors;
2074
2075   /* Mark this declaration as used to avoid spurious warnings.  */
2076   TREE_USED (current_function_decl) = 1;
2077
2078   /* Mark this function as a global constructor or destructor.  */
2079   if (method_type == 'I')
2080     DECL_GLOBAL_CTOR_P (current_function_decl) = 1;
2081   else
2082     DECL_GLOBAL_DTOR_P (current_function_decl) = 1;
2083   DECL_LANG_SPECIFIC (current_function_decl)->decl_flags.u2sel = 1;
2084
2085   body = begin_compound_stmt (BCS_FN_BODY);
2086
2087   /* We cannot allow these functions to be elided, even if they do not
2088      have external linkage.  And, there's no point in deferring
2089      compilation of thes functions; they're all going to have to be
2090      out anyhow.  */
2091   DECL_INLINE (current_function_decl) = 0;
2092   DECL_UNINLINABLE (current_function_decl) = 1;
2093
2094   return body;
2095 }
2096
2097 /* Finish the process of running a particular set of global constructors
2098    or destructors.  Subroutine of do_[cd]tors.  */
2099
2100 static void
2101 finish_objects (int method_type, int initp, tree body)
2102 {
2103   tree fn;
2104
2105   /* Finish up.  */
2106   finish_compound_stmt (body);
2107   fn = finish_function (0);
2108   expand_or_defer_fn (fn);
2109
2110   /* When only doing semantic analysis, and no RTL generation, we
2111      can't call functions that directly emit assembly code; there is
2112      no assembly file in which to put the code.  */
2113   if (flag_syntax_only)
2114     return;
2115
2116   if (targetm.have_ctors_dtors)
2117     {
2118       rtx fnsym = XEXP (DECL_RTL (fn), 0);
2119       if (method_type == 'I')
2120         (* targetm.asm_out.constructor) (fnsym, initp);
2121       else
2122         (* targetm.asm_out.destructor) (fnsym, initp);
2123     }
2124 }
2125
2126 /* The names of the parameters to the function created to handle
2127    initializations and destructions for objects with static storage
2128    duration.  */
2129 #define INITIALIZE_P_IDENTIFIER "__initialize_p"
2130 #define PRIORITY_IDENTIFIER "__priority"
2131
2132 /* The name of the function we create to handle initializations and
2133    destructions for objects with static storage duration.  */
2134 #define SSDF_IDENTIFIER "__static_initialization_and_destruction"
2135
2136 /* The declaration for the __INITIALIZE_P argument.  */
2137 static GTY(()) tree initialize_p_decl;
2138
2139 /* The declaration for the __PRIORITY argument.  */
2140 static GTY(()) tree priority_decl;
2141
2142 /* The declaration for the static storage duration function.  */
2143 static GTY(()) tree ssdf_decl;
2144
2145 /* All the static storage duration functions created in this
2146    translation unit.  */
2147 static GTY(()) varray_type ssdf_decls;
2148
2149 /* A map from priority levels to information about that priority
2150    level.  There may be many such levels, so efficient lookup is
2151    important.  */
2152 static splay_tree priority_info_map;
2153
2154 /* Begins the generation of the function that will handle all
2155    initialization and destruction of objects with static storage
2156    duration.  The function generated takes two parameters of type
2157    `int': __INITIALIZE_P and __PRIORITY.  If __INITIALIZE_P is
2158    nonzero, it performs initializations.  Otherwise, it performs
2159    destructions.  It only performs those initializations or
2160    destructions with the indicated __PRIORITY.  The generated function
2161    returns no value.  
2162
2163    It is assumed that this function will only be called once per
2164    translation unit.  */
2165
2166 static tree
2167 start_static_storage_duration_function (unsigned count)
2168 {
2169   tree parm_types;
2170   tree type;
2171   tree body;
2172   char id[sizeof (SSDF_IDENTIFIER) + 1 /* '\0' */ + 32];
2173
2174   /* Create the identifier for this function.  It will be of the form
2175      SSDF_IDENTIFIER_<number>.  */
2176   sprintf (id, "%s_%u", SSDF_IDENTIFIER, count);
2177
2178   /* Create the parameters.  */
2179   parm_types = void_list_node;
2180   parm_types = tree_cons (NULL_TREE, integer_type_node, parm_types);
2181   parm_types = tree_cons (NULL_TREE, integer_type_node, parm_types);
2182   type = build_function_type (void_type_node, parm_types);
2183
2184   /* Create the FUNCTION_DECL itself.  */
2185   ssdf_decl = build_lang_decl (FUNCTION_DECL, 
2186                                get_identifier (id),
2187                                type);
2188   TREE_PUBLIC (ssdf_decl) = 0;
2189   DECL_ARTIFICIAL (ssdf_decl) = 1;
2190
2191   /* Put this function in the list of functions to be called from the
2192      static constructors and destructors.  */
2193   if (!ssdf_decls)
2194     {
2195       VARRAY_TREE_INIT (ssdf_decls, 32, "ssdf_decls");
2196
2197       /* Take this opportunity to initialize the map from priority
2198          numbers to information about that priority level.  */
2199       priority_info_map = splay_tree_new (splay_tree_compare_ints,
2200                                           /*delete_key_fn=*/0,
2201                                           /*delete_value_fn=*/
2202                                           (splay_tree_delete_value_fn) &free);
2203
2204       /* We always need to generate functions for the
2205          DEFAULT_INIT_PRIORITY so enter it now.  That way when we walk
2206          priorities later, we'll be sure to find the
2207          DEFAULT_INIT_PRIORITY.  */
2208       get_priority_info (DEFAULT_INIT_PRIORITY);
2209     }
2210
2211   VARRAY_PUSH_TREE (ssdf_decls, ssdf_decl);
2212
2213   /* Create the argument list.  */
2214   initialize_p_decl = cp_build_parm_decl
2215     (get_identifier (INITIALIZE_P_IDENTIFIER), integer_type_node);
2216   DECL_CONTEXT (initialize_p_decl) = ssdf_decl;
2217   TREE_USED (initialize_p_decl) = 1;
2218   priority_decl = cp_build_parm_decl
2219     (get_identifier (PRIORITY_IDENTIFIER), integer_type_node);
2220   DECL_CONTEXT (priority_decl) = ssdf_decl;
2221   TREE_USED (priority_decl) = 1;
2222
2223   TREE_CHAIN (initialize_p_decl) = priority_decl;
2224   DECL_ARGUMENTS (ssdf_decl) = initialize_p_decl;
2225
2226   /* Put the function in the global scope.  */
2227   pushdecl (ssdf_decl);
2228
2229   /* Start the function itself.  This is equivalent to declaring the
2230      function as:
2231
2232        static void __ssdf (int __initialize_p, init __priority_p);
2233        
2234      It is static because we only need to call this function from the
2235      various constructor and destructor functions for this module.  */
2236   start_preparsed_function (ssdf_decl,
2237                             /*attrs=*/NULL_TREE,
2238                             SF_PRE_PARSED);
2239
2240   /* Set up the scope of the outermost block in the function.  */
2241   body = begin_compound_stmt (BCS_FN_BODY);
2242
2243   /* This function must not be deferred because we are depending on
2244      its compilation to tell us what is TREE_SYMBOL_REFERENCED.  */
2245   DECL_INLINE (ssdf_decl) = 0;
2246   DECL_UNINLINABLE (ssdf_decl) = 1;
2247
2248   return body;
2249 }
2250
2251 /* Finish the generation of the function which performs initialization
2252    and destruction of objects with static storage duration.  After
2253    this point, no more such objects can be created.  */
2254
2255 static void
2256 finish_static_storage_duration_function (tree body)
2257 {
2258   /* Close out the function.  */
2259   finish_compound_stmt (body);
2260   expand_or_defer_fn (finish_function (0));
2261 }
2262
2263 /* Return the information about the indicated PRIORITY level.  If no
2264    code to handle this level has yet been generated, generate the
2265    appropriate prologue.  */
2266
2267 static priority_info
2268 get_priority_info (int priority)
2269 {
2270   priority_info pi;
2271   splay_tree_node n;
2272
2273   n = splay_tree_lookup (priority_info_map, 
2274                          (splay_tree_key) priority);
2275   if (!n)
2276     {
2277       /* Create a new priority information structure, and insert it
2278          into the map.  */
2279       pi = xmalloc (sizeof (struct priority_info_s));
2280       pi->initializations_p = 0;
2281       pi->destructions_p = 0;
2282       splay_tree_insert (priority_info_map,
2283                          (splay_tree_key) priority,
2284                          (splay_tree_value) pi);
2285     }
2286   else
2287     pi = (priority_info) n->value;
2288
2289   return pi;
2290 }
2291
2292 /* Set up to handle the initialization or destruction of DECL.  If
2293    INITP is nonzero, we are initializing the variable.  Otherwise, we
2294    are destroying it.  */
2295
2296 static tree
2297 start_static_initialization_or_destruction (tree decl, int initp)
2298 {
2299   tree guard_if_stmt = NULL_TREE;
2300   int priority;
2301   tree cond;
2302   tree guard;
2303   tree init_cond;
2304   priority_info pi;
2305
2306   /* Figure out the priority for this declaration.  */
2307   priority = DECL_INIT_PRIORITY (decl);
2308   if (!priority)
2309     priority = DEFAULT_INIT_PRIORITY;
2310
2311   /* Remember that we had an initialization or finalization at this
2312      priority.  */
2313   pi = get_priority_info (priority);
2314   if (initp)
2315     pi->initializations_p = 1;
2316   else
2317     pi->destructions_p = 1;
2318
2319   /* Trick the compiler into thinking we are at the file and line
2320      where DECL was declared so that error-messages make sense, and so
2321      that the debugger will show somewhat sensible file and line
2322      information.  */
2323   input_location = DECL_SOURCE_LOCATION (decl);
2324
2325   /* Because of:
2326
2327        [class.access.spec]
2328
2329        Access control for implicit calls to the constructors,
2330        the conversion functions, or the destructor called to
2331        create and destroy a static data member is performed as
2332        if these calls appeared in the scope of the member's
2333        class.  
2334
2335      we pretend we are in a static member function of the class of
2336      which the DECL is a member.  */
2337   if (member_p (decl))
2338     {
2339       DECL_CONTEXT (current_function_decl) = DECL_CONTEXT (decl);
2340       DECL_STATIC_FUNCTION_P (current_function_decl) = 1;
2341     }
2342   
2343   /* Conditionalize this initialization on being in the right priority
2344      and being initializing/finalizing appropriately.  */
2345   guard_if_stmt = begin_if_stmt ();
2346   cond = cp_build_binary_op (EQ_EXPR,
2347                              priority_decl,
2348                              build_int_2 (priority, 0));
2349   init_cond = initp ? integer_one_node : integer_zero_node;
2350   init_cond = cp_build_binary_op (EQ_EXPR,
2351                                   initialize_p_decl,
2352                                   init_cond);
2353   cond = cp_build_binary_op (TRUTH_ANDIF_EXPR, cond, init_cond);
2354
2355   /* Assume we don't need a guard.  */
2356   guard = NULL_TREE;
2357   /* We need a guard if this is an object with external linkage that
2358      might be initialized in more than one place.  (For example, a
2359      static data member of a template, when the data member requires
2360      construction.)  */
2361   if (TREE_PUBLIC (decl) && (DECL_COMMON (decl) 
2362                              || DECL_ONE_ONLY (decl)
2363                              || DECL_WEAK (decl)))
2364     {
2365       tree guard_cond;
2366
2367       guard = get_guard (decl);
2368
2369       /* When using __cxa_atexit, we just check the GUARD as we would
2370          for a local static.  */
2371       if (flag_use_cxa_atexit)
2372         {
2373           /* When using __cxa_atexit, we never try to destroy
2374              anything from a static destructor.  */
2375           my_friendly_assert (initp, 20000629);
2376           guard_cond = get_guard_cond (guard);
2377         }
2378       /* If we don't have __cxa_atexit, then we will be running
2379          destructors from .fini sections, or their equivalents.  So,
2380          we need to know how many times we've tried to initialize this
2381          object.  We do initializations only if the GUARD is zero,
2382          i.e., if we are the first to initialize the variable.  We do
2383          destructions only if the GUARD is one, i.e., if we are the
2384          last to destroy the variable.  */
2385       else if (initp)
2386         guard_cond 
2387           = cp_build_binary_op (EQ_EXPR,
2388                                 build_unary_op (PREINCREMENT_EXPR,
2389                                                 guard,
2390                                                 /*noconvert=*/1),
2391                                 integer_one_node);
2392       else
2393         guard_cond 
2394           = cp_build_binary_op (EQ_EXPR,
2395                                 build_unary_op (PREDECREMENT_EXPR,
2396                                                 guard,
2397                                                 /*noconvert=*/1),
2398                                 integer_zero_node);
2399
2400       cond = cp_build_binary_op (TRUTH_ANDIF_EXPR, cond, guard_cond);
2401     }
2402
2403   finish_if_stmt_cond (cond, guard_if_stmt);
2404
2405   /* If we're using __cxa_atexit, we have not already set the GUARD,
2406      so we must do so now.  */
2407   if (guard && initp && flag_use_cxa_atexit)
2408     finish_expr_stmt (set_guard (guard));
2409
2410   return guard_if_stmt;
2411 }
2412
2413 /* We've just finished generating code to do an initialization or
2414    finalization.  GUARD_IF_STMT is the if-statement we used to guard
2415    the initialization.  */
2416
2417 static void
2418 finish_static_initialization_or_destruction (tree guard_if_stmt)
2419 {
2420   finish_then_clause (guard_if_stmt);
2421   finish_if_stmt (guard_if_stmt);
2422
2423   /* Now that we're done with DECL we don't need to pretend to be a
2424      member of its class any longer.  */
2425   DECL_CONTEXT (current_function_decl) = NULL_TREE;
2426   DECL_STATIC_FUNCTION_P (current_function_decl) = 0;
2427 }
2428
2429 /* Generate code to do the initialization of DECL, a VAR_DECL with
2430    static storage duration.  The initialization is INIT.  */
2431
2432 static void
2433 do_static_initialization (tree decl, tree init)
2434 {
2435   tree guard_if_stmt;
2436
2437   /* Set up for the initialization.  */
2438   guard_if_stmt
2439     = start_static_initialization_or_destruction (decl,
2440                                                   /*initp=*/1);
2441
2442   /* Perform the initialization.  */
2443   if (init)
2444     finish_expr_stmt (init);
2445
2446   /* If we're using __cxa_atexit, register a a function that calls the
2447      destructor for the object.  */
2448   if (flag_use_cxa_atexit)
2449     register_dtor_fn (decl);
2450
2451   /* Finish up.  */
2452   finish_static_initialization_or_destruction (guard_if_stmt);
2453 }
2454
2455 /* Generate code to do the static destruction of DECL.  If DECL may be
2456    initialized more than once in different object files, GUARD is the
2457    guard variable to check.  PRIORITY is the priority for the
2458    destruction.  */
2459
2460 static void
2461 do_static_destruction (tree decl)
2462 {
2463   tree guard_if_stmt;
2464
2465   /* If we're using __cxa_atexit, then destructors are registered
2466      immediately after objects are initialized.  */
2467   my_friendly_assert (!flag_use_cxa_atexit, 20000121);
2468
2469   /* If we don't need a destructor, there's nothing to do.  */
2470   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2471     return;
2472
2473   /* Actually do the destruction.  */
2474   guard_if_stmt = start_static_initialization_or_destruction (decl,
2475                                                               /*initp=*/0);
2476   finish_expr_stmt (build_cleanup (decl));
2477   finish_static_initialization_or_destruction (guard_if_stmt);
2478 }
2479
2480 /* VARS is a list of variables with static storage duration which may
2481    need initialization and/or finalization.  Remove those variables
2482    that don't really need to be initialized or finalized, and return
2483    the resulting list.  The order in which the variables appear in
2484    VARS is in reverse order of the order in which they should actually
2485    be initialized.  The list we return is in the unreversed order;
2486    i.e., the first variable should be initialized first.  */
2487
2488 static tree
2489 prune_vars_needing_no_initialization (tree *vars)
2490 {
2491   tree *var = vars;
2492   tree result = NULL_TREE;
2493
2494   while (*var)
2495     {
2496       tree t = *var;
2497       tree decl = TREE_VALUE (t);
2498       tree init = TREE_PURPOSE (t);
2499
2500       /* Deal gracefully with error.  */
2501       if (decl == error_mark_node)
2502         {
2503           var = &TREE_CHAIN (t);
2504           continue;
2505         }
2506
2507       /* The only things that can be initialized are variables.  */
2508       my_friendly_assert (TREE_CODE (decl) == VAR_DECL, 19990420);
2509
2510       /* If this object is not defined, we don't need to do anything
2511          here.  */
2512       if (DECL_EXTERNAL (decl))
2513         {
2514           var = &TREE_CHAIN (t);
2515           continue;
2516         }
2517
2518       /* Also, if the initializer already contains errors, we can bail
2519          out now.  */
2520       if (init && TREE_CODE (init) == TREE_LIST 
2521           && value_member (error_mark_node, init))
2522         {
2523           var = &TREE_CHAIN (t);
2524           continue;
2525         }
2526
2527       /* This variable is going to need initialization and/or
2528          finalization, so we add it to the list.  */
2529       *var = TREE_CHAIN (t);
2530       TREE_CHAIN (t) = result;
2531       result = t;
2532     }
2533
2534   return result;
2535 }
2536
2537 /* Make sure we have told the back end about all the variables in
2538    VARS.  */
2539
2540 static void
2541 write_out_vars (tree vars)
2542 {
2543   tree v;
2544
2545   for (v = vars; v; v = TREE_CHAIN (v))
2546     {
2547       tree var = TREE_VALUE (v);
2548       if (!var_finalized_p (var))
2549         {
2550           import_export_decl (var);
2551           rest_of_decl_compilation (var, 0, 1, 1);
2552         }
2553     }
2554 }
2555
2556 /* Generate a static constructor (if CONSTRUCTOR_P) or destructor
2557    (otherwise) that will initialize all gobal objects with static
2558    storage duration having the indicated PRIORITY.  */
2559
2560 static void
2561 generate_ctor_or_dtor_function (bool constructor_p, int priority,
2562                                 location_t *locus)
2563 {
2564   char function_key;
2565   tree arguments;
2566   tree fndecl;
2567   tree body;
2568   size_t i;
2569
2570   input_location = *locus;
2571 #ifdef USE_MAPPED_LOCATION
2572   /* ??? */
2573 #else
2574   locus->line++;
2575 #endif
2576   
2577   /* We use `I' to indicate initialization and `D' to indicate
2578      destruction.  */
2579   function_key = constructor_p ? 'I' : 'D';
2580
2581   /* We emit the function lazily, to avoid generating empty
2582      global constructors and destructors.  */
2583   body = NULL_TREE;
2584
2585   /* Call the static storage duration function with appropriate
2586      arguments.  */
2587   if (ssdf_decls)
2588     for (i = 0; i < ssdf_decls->elements_used; ++i) 
2589       {
2590         fndecl = VARRAY_TREE (ssdf_decls, i);
2591
2592         /* Calls to pure or const functions will expand to nothing.  */
2593         if (! (flags_from_decl_or_type (fndecl) & (ECF_CONST | ECF_PURE)))
2594           {
2595             if (! body)
2596               body = start_objects (function_key, priority);
2597
2598             arguments = tree_cons (NULL_TREE, build_int_2 (priority, 0), 
2599                                    NULL_TREE);
2600             arguments = tree_cons (NULL_TREE, build_int_2 (constructor_p, 0),
2601                                    arguments);
2602             finish_expr_stmt (build_function_call (fndecl, arguments));
2603           }
2604       }
2605
2606   /* If we're generating code for the DEFAULT_INIT_PRIORITY, throw in
2607      calls to any functions marked with attributes indicating that
2608      they should be called at initialization- or destruction-time.  */
2609   if (priority == DEFAULT_INIT_PRIORITY)
2610     {
2611       tree fns;
2612
2613       for (fns = constructor_p ? static_ctors : static_dtors; 
2614            fns;
2615            fns = TREE_CHAIN (fns))
2616         {
2617           fndecl = TREE_VALUE (fns);
2618
2619           /* Calls to pure/const functions will expand to nothing.  */
2620           if (! (flags_from_decl_or_type (fndecl) & (ECF_CONST | ECF_PURE)))
2621             {
2622               if (! body)
2623                 body = start_objects (function_key, priority);
2624               finish_expr_stmt (build_function_call (fndecl, NULL_TREE));
2625             }
2626         }
2627     }
2628
2629   /* Close out the function.  */
2630   if (body)
2631     finish_objects (function_key, priority, body);
2632 }
2633
2634 /* Generate constructor and destructor functions for the priority
2635    indicated by N.  */
2636
2637 static int
2638 generate_ctor_and_dtor_functions_for_priority (splay_tree_node n, void * data)
2639 {
2640   location_t *locus = data;
2641   int priority = (int) n->key;
2642   priority_info pi = (priority_info) n->value;
2643
2644   /* Generate the functions themselves, but only if they are really
2645      needed.  */
2646   if (pi->initializations_p
2647       || (priority == DEFAULT_INIT_PRIORITY && static_ctors))
2648     generate_ctor_or_dtor_function (/*constructor_p=*/true, priority, locus);
2649   if (pi->destructions_p
2650       || (priority == DEFAULT_INIT_PRIORITY && static_dtors))
2651     generate_ctor_or_dtor_function (/*constructor_p=*/false, priority, locus);
2652
2653   /* Keep iterating.  */
2654   return 0;
2655 }
2656
2657 /* Called via LANGHOOK_CALLGRAPH_ANALYZE_EXPR.  It is supposed to mark
2658    decls referenced from frontend specific constructs; it will be called
2659    only for language-specific tree nodes.
2660
2661    Here we must deal with member pointers.  */
2662
2663 tree
2664 cxx_callgraph_analyze_expr (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
2665                             tree from ATTRIBUTE_UNUSED)
2666 {
2667   tree t = *tp;
2668
2669   switch (TREE_CODE (t))
2670     {
2671     case PTRMEM_CST:
2672       if (TYPE_PTRMEMFUNC_P (TREE_TYPE (t)))
2673         cgraph_mark_needed_node (cgraph_node (PTRMEM_CST_MEMBER (t)));
2674       break;
2675     case BASELINK:
2676       if (TREE_CODE (BASELINK_FUNCTIONS (t)) == FUNCTION_DECL)
2677         cgraph_mark_needed_node (cgraph_node (BASELINK_FUNCTIONS (t)));
2678       break;
2679     case VAR_DECL:
2680       if (DECL_VTABLE_OR_VTT_P (t))
2681         {
2682           /* The ABI requires that all virtual tables be emitted
2683              whenever one of them is.  */
2684           tree vtbl;
2685           for (vtbl = CLASSTYPE_VTABLES (DECL_CONTEXT (t));
2686                vtbl;
2687                vtbl = TREE_CHAIN (vtbl))
2688             mark_decl_referenced (vtbl);
2689         }
2690       else if (DECL_CONTEXT (t) 
2691                && TREE_CODE (DECL_CONTEXT (t)) == FUNCTION_DECL)
2692         /* If we need a static variable in a function, then we
2693            need the containing function.  */
2694         mark_decl_referenced (DECL_CONTEXT (t));
2695       break;
2696     default:
2697       break;
2698     }
2699
2700   return NULL;
2701 }
2702
2703 /* This routine is called from the last rule in yyparse ().
2704    Its job is to create all the code needed to initialize and
2705    destroy the global aggregates.  We do the destruction
2706    first, since that way we only need to reverse the decls once.  */
2707
2708 void
2709 finish_file (void)
2710 {
2711   tree vars;
2712   bool reconsider;
2713   size_t i;
2714   location_t locus;
2715   unsigned ssdf_count = 0;
2716
2717   locus = input_location;
2718   at_eof = 1;
2719
2720   /* Bad parse errors.  Just forget about it.  */
2721   if (! global_bindings_p () || current_class_type || decl_namespace_list)
2722     return;
2723
2724   if (pch_file)
2725     c_common_write_pch ();
2726
2727 #ifdef USE_MAPPED_LOCATION
2728   /* FIXME - huh? */
2729 #else
2730   /* Otherwise, GDB can get confused, because in only knows
2731      about source for LINENO-1 lines.  */
2732   input_line -= 1;
2733 #endif
2734
2735   interface_unknown = 1;
2736   interface_only = 0;
2737
2738   /* We now have to write out all the stuff we put off writing out.
2739      These include:
2740
2741        o Template specializations that we have not yet instantiated,
2742          but which are needed.
2743        o Initialization and destruction for non-local objects with
2744          static storage duration.  (Local objects with static storage
2745          duration are initialized when their scope is first entered,
2746          and are cleaned up via atexit.)
2747        o Virtual function tables.  
2748
2749      All of these may cause others to be needed.  For example,
2750      instantiating one function may cause another to be needed, and
2751      generating the initializer for an object may cause templates to be
2752      instantiated, etc., etc.  */
2753
2754   timevar_push (TV_VARCONST);
2755
2756   emit_support_tinfos ();
2757
2758   do 
2759     {
2760       tree t;
2761       size_t n_old, n_new;
2762
2763       reconsider = false;
2764
2765       /* If there are templates that we've put off instantiating, do
2766          them now.  */
2767       instantiate_pending_templates ();
2768       ggc_collect ();
2769
2770       /* Write out virtual tables as required.  Note that writing out
2771          the virtual table for a template class may cause the
2772          instantiation of members of that class.  If we write out
2773          vtables then we remove the class from our list so we don't
2774          have to look at it again.  */
2775  
2776       while (keyed_classes != NULL_TREE
2777              && maybe_emit_vtables (TREE_VALUE (keyed_classes)))
2778         {
2779           reconsider = true;
2780           keyed_classes = TREE_CHAIN (keyed_classes);
2781         }
2782  
2783       t = keyed_classes;
2784       if (t != NULL_TREE)
2785         {
2786           tree next = TREE_CHAIN (t);
2787  
2788           while (next)
2789             {
2790               if (maybe_emit_vtables (TREE_VALUE (next)))
2791                 {
2792                   reconsider = true;
2793                   TREE_CHAIN (t) = TREE_CHAIN (next);
2794                 }
2795               else
2796                 t = next;
2797  
2798               next = TREE_CHAIN (t);
2799             }
2800         }
2801        
2802       /* Write out needed type info variables.  We have to be careful
2803          looping through unemitted decls, because emit_tinfo_decl may
2804          cause other variables to be needed.  We stick new elements
2805          (and old elements that we may need to reconsider) at the end
2806          of the array, then shift them back to the beginning once we're
2807          done.  */
2808   
2809       n_old = VARRAY_ACTIVE_SIZE (unemitted_tinfo_decls);
2810       for (i = 0; i < n_old; ++i)
2811         {
2812           tree tinfo_decl = VARRAY_TREE (unemitted_tinfo_decls, i);
2813           if (emit_tinfo_decl (tinfo_decl))
2814             reconsider = true;
2815           else
2816             VARRAY_PUSH_TREE (unemitted_tinfo_decls, tinfo_decl);
2817         }
2818   
2819       /* The only elements we want to keep are the new ones.  Copy
2820          them to the beginning of the array, then get rid of the
2821          leftovers.  */
2822       n_new = VARRAY_ACTIVE_SIZE (unemitted_tinfo_decls) - n_old;
2823       if (n_new)
2824         memmove (&VARRAY_TREE (unemitted_tinfo_decls, 0),
2825                  &VARRAY_TREE (unemitted_tinfo_decls, n_old),
2826                  n_new * sizeof (tree));
2827       memset (&VARRAY_TREE (unemitted_tinfo_decls, n_new),
2828               0, n_old * sizeof (tree));
2829       VARRAY_ACTIVE_SIZE (unemitted_tinfo_decls) = n_new;
2830
2831       /* The list of objects with static storage duration is built up
2832          in reverse order.  We clear STATIC_AGGREGATES so that any new
2833          aggregates added during the initialization of these will be
2834          initialized in the correct order when we next come around the
2835          loop.  */
2836       vars = prune_vars_needing_no_initialization (&static_aggregates);
2837
2838       if (vars)
2839         {
2840           tree v;
2841
2842           /* We need to start a new initialization function each time
2843              through the loop.  That's because we need to know which
2844              vtables have been referenced, and TREE_SYMBOL_REFERENCED
2845              isn't computed until a function is finished, and written
2846              out.  That's a deficiency in the back-end.  When this is
2847              fixed, these initialization functions could all become
2848              inline, with resulting performance improvements.  */
2849           tree ssdf_body;
2850
2851           /* Set the line and file, so that it is obviously not from
2852              the source file.  */
2853           input_location = locus;
2854           ssdf_body = start_static_storage_duration_function (ssdf_count);
2855
2856           /* Make sure the back end knows about all the variables.  */
2857           write_out_vars (vars);
2858
2859           /* First generate code to do all the initializations.  */
2860           for (v = vars; v; v = TREE_CHAIN (v))
2861             do_static_initialization (TREE_VALUE (v),
2862                                       TREE_PURPOSE (v));
2863
2864           /* Then, generate code to do all the destructions.  Do these
2865              in reverse order so that the most recently constructed
2866              variable is the first destroyed.  If we're using
2867              __cxa_atexit, then we don't need to do this; functions
2868              were registered at initialization time to destroy the
2869              local statics.  */
2870           if (!flag_use_cxa_atexit)
2871             {
2872               vars = nreverse (vars);
2873               for (v = vars; v; v = TREE_CHAIN (v))
2874                 do_static_destruction (TREE_VALUE (v));
2875             }
2876           else
2877             vars = NULL_TREE;
2878
2879           /* Finish up the static storage duration function for this
2880              round.  */
2881           input_location = locus;
2882           finish_static_storage_duration_function (ssdf_body);
2883
2884           /* All those initializations and finalizations might cause
2885              us to need more inline functions, more template
2886              instantiations, etc.  */
2887           reconsider = true;
2888           ssdf_count++;
2889 #ifdef USE_MAPPED_LOCATION
2890           /* ??? */
2891 #else
2892           locus.line++;
2893 #endif
2894         }
2895       
2896       /* Go through the set of inline functions whose bodies have not
2897          been emitted yet.  If out-of-line copies of these functions
2898          are required, emit them.  */
2899       for (i = 0; i < deferred_fns_used; ++i)
2900         {
2901           tree decl = VARRAY_TREE (deferred_fns, i);
2902
2903           /* Does it need synthesizing?  */
2904           if (DECL_ARTIFICIAL (decl) && ! DECL_INITIAL (decl)
2905               && (! DECL_REALLY_EXTERN (decl) || DECL_INLINE (decl)))
2906             {
2907               /* Even though we're already at the top-level, we push
2908                  there again.  That way, when we pop back a few lines
2909                  hence, all of our state is restored.  Otherwise,
2910                  finish_function doesn't clean things up, and we end
2911                  up with CURRENT_FUNCTION_DECL set.  */
2912               push_to_top_level ();
2913               synthesize_method (decl);
2914               pop_from_top_level ();
2915               reconsider = true;
2916             }
2917
2918           if (!DECL_SAVED_TREE (decl))
2919             continue;
2920
2921           import_export_decl (decl);
2922
2923           /* We lie to the back-end, pretending that some functions
2924              are not defined when they really are.  This keeps these
2925              functions from being put out unnecessarily.  But, we must
2926              stop lying when the functions are referenced, or if they
2927              are not comdat since they need to be put out now.  This
2928              is done in a separate for cycle, because if some deferred
2929              function is contained in another deferred function later
2930              in deferred_fns varray, rest_of_compilation would skip
2931              this function and we really cannot expand the same
2932              function twice.  */
2933           if (DECL_NOT_REALLY_EXTERN (decl)
2934               && DECL_INITIAL (decl)
2935               && decl_needed_p (decl))
2936             DECL_EXTERNAL (decl) = 0;
2937
2938           /* If we're going to need to write this function out, and
2939              there's already a body for it, create RTL for it now.
2940              (There might be no body if this is a method we haven't
2941              gotten around to synthesizing yet.)  */
2942           if (!DECL_EXTERNAL (decl)
2943               && decl_needed_p (decl)
2944               && !TREE_ASM_WRITTEN (decl)
2945               && !cgraph_node (decl)->local.finalized)
2946             {
2947               /* We will output the function; no longer consider it in this
2948                  loop.  */
2949               DECL_DEFER_OUTPUT (decl) = 0;
2950               /* Generate RTL for this function now that we know we
2951                  need it.  */
2952               expand_or_defer_fn (decl);
2953               /* If we're compiling -fsyntax-only pretend that this
2954                  function has been written out so that we don't try to
2955                  expand it again.  */
2956               if (flag_syntax_only)
2957                 TREE_ASM_WRITTEN (decl) = 1;
2958               reconsider = true;
2959             }
2960         }
2961
2962       if (walk_namespaces (wrapup_globals_for_namespace, /*data=*/0))
2963         reconsider = true;
2964
2965       /* Static data members are just like namespace-scope globals.  */
2966       for (i = 0; i < pending_statics_used; ++i) 
2967         {
2968           tree decl = VARRAY_TREE (pending_statics, i);
2969           if (var_finalized_p (decl) || DECL_REALLY_EXTERN (decl))
2970             continue;
2971           import_export_decl (decl);
2972           /* If this static data member is needed, provide it to the
2973              back end.  */
2974           if (DECL_NOT_REALLY_EXTERN (decl) && decl_needed_p (decl))
2975             DECL_EXTERNAL (decl) = 0;
2976         }
2977       if (pending_statics
2978           && wrapup_global_declarations (&VARRAY_TREE (pending_statics, 0),
2979                                          pending_statics_used))
2980         reconsider = true;
2981
2982       /* Ask the back end to emit functions and variables that are
2983          enqued.  These emissions may result in marking more entities
2984          as needed.  */
2985       if (cgraph_assemble_pending_functions ())
2986         reconsider = true;
2987       if (cgraph_varpool_assemble_pending_decls ())
2988         reconsider = true;
2989     } 
2990   while (reconsider);
2991
2992   /* All used inline functions must have a definition at this point.  */
2993   for (i = 0; i < deferred_fns_used; ++i)
2994     {
2995       tree decl = VARRAY_TREE (deferred_fns, i);
2996
2997       if (/* Check online inline functions that were actually used.  */
2998           TREE_USED (decl) && DECL_DECLARED_INLINE_P (decl)
2999           /* But not defined.  */
3000           && DECL_REALLY_EXTERN (decl)
3001           /* If we decided to emit this function in another
3002              translation unit, the fact that the definition was
3003              missing here likely indicates only that the repository
3004              decided to place the function elsewhere.  With -Winline,
3005              we will still warn if we could not inline the
3006              function.  */
3007           && !flag_use_repository
3008           /* An explicit instantiation can be used to specify
3009              that the body is in another unit. It will have
3010              already verified there was a definition.  */
3011           && !DECL_EXPLICIT_INSTANTIATION (decl))
3012         {
3013           cp_warning_at ("inline function `%D' used but never defined", decl);
3014           /* This symbol is effectively an "extern" declaration now.
3015              This is not strictly necessary, but removes a duplicate
3016              warning.  */
3017           TREE_PUBLIC (decl) = 1;
3018         }
3019     }
3020   
3021   /* We give C linkage to static constructors and destructors.  */
3022   push_lang_context (lang_name_c);
3023
3024   /* Generate initialization and destruction functions for all
3025      priorities for which they are required.  */
3026   if (priority_info_map)
3027     splay_tree_foreach (priority_info_map, 
3028                         generate_ctor_and_dtor_functions_for_priority,
3029                         /*data=*/&locus);
3030   else
3031     {
3032       
3033       if (static_ctors)
3034         generate_ctor_or_dtor_function (/*constructor_p=*/true,
3035                                         DEFAULT_INIT_PRIORITY, &locus);
3036       if (static_dtors)
3037         generate_ctor_or_dtor_function (/*constructor_p=*/false,
3038                                         DEFAULT_INIT_PRIORITY, &locus);
3039     }
3040
3041   /* We're done with the splay-tree now.  */
3042   if (priority_info_map)
3043     splay_tree_delete (priority_info_map);
3044
3045   /* We're done with static constructors, so we can go back to "C++"
3046      linkage now.  */
3047   pop_lang_context ();
3048
3049   cgraph_finalize_compilation_unit ();
3050   cgraph_optimize ();
3051
3052   /* Emit mudflap static registration function.  This must be done
3053      after all the user functions have been expanded.  */
3054   if (flag_mudflap)
3055     mudflap_finish_file ();
3056
3057   /* Now, issue warnings about static, but not defined, functions,
3058      etc., and emit debugging information.  */
3059   walk_namespaces (wrapup_globals_for_namespace, /*data=*/&reconsider);
3060   if (pending_statics)
3061     check_global_declarations (&VARRAY_TREE (pending_statics, 0),
3062                                pending_statics_used);
3063
3064   finish_repo ();
3065
3066   /* The entire file is now complete.  If requested, dump everything
3067      to a file.  */
3068   {
3069     int flags;
3070     FILE *stream = dump_begin (TDI_tu, &flags);
3071
3072     if (stream)
3073       {
3074         dump_node (global_namespace, flags & ~TDF_SLIM, stream);
3075         dump_end (TDI_tu, stream);
3076       }
3077   }
3078   
3079   timevar_pop (TV_VARCONST);
3080
3081   if (flag_detailed_statistics)
3082     {
3083       dump_tree_statistics ();
3084       dump_time_statistics ();
3085     }
3086   input_location = locus;
3087
3088 #ifdef ENABLE_CHECKING
3089   validate_conversion_obstack ();
3090 #endif /* ENABLE_CHECKING */
3091 }
3092
3093 /* FN is an OFFSET_REF, DOTSTAR_EXPR or MEMBER_REF indicating the
3094    function to call in parse-tree form; it has not yet been
3095    semantically analyzed.  ARGS are the arguments to the function.
3096    They have already been semantically analyzed.  */
3097
3098 tree
3099 build_offset_ref_call_from_tree (tree fn, tree args)
3100 {
3101   tree orig_fn;
3102   tree orig_args;
3103   tree expr;
3104   tree object;
3105
3106   orig_fn = fn;
3107   orig_args = args;
3108   object = TREE_OPERAND (fn, 0);
3109
3110   if (processing_template_decl)
3111     {
3112       my_friendly_assert (TREE_CODE (fn) == DOTSTAR_EXPR
3113                           || TREE_CODE (fn) == MEMBER_REF,
3114                           20030708);
3115       if (type_dependent_expression_p (fn)
3116           || any_type_dependent_arguments_p (args))
3117         return build_min_nt (CALL_EXPR, fn, args, NULL_TREE);
3118
3119       /* Transform the arguments and add the implicit "this"
3120          parameter.  That must be done before the FN is transformed
3121          because we depend on the form of FN.  */
3122       args = build_non_dependent_args (args);
3123       if (TREE_CODE (fn) == DOTSTAR_EXPR)
3124         object = build_unary_op (ADDR_EXPR, object, 0);
3125       object = build_non_dependent_expr (object);
3126       args = tree_cons (NULL_TREE, object, args);
3127       /* Now that the arguments are done, transform FN.  */
3128       fn = build_non_dependent_expr (fn);
3129     }
3130
3131   /* A qualified name corresponding to a bound pointer-to-member is
3132      represented as an OFFSET_REF:
3133
3134         struct B { void g(); };
3135         void (B::*p)();
3136         void B::g() { (this->*p)(); }  */
3137   if (TREE_CODE (fn) == OFFSET_REF)
3138     {
3139       tree object_addr = build_unary_op (ADDR_EXPR, object, 0);
3140       fn = TREE_OPERAND (fn, 1);
3141       fn = get_member_function_from_ptrfunc (&object_addr, fn);
3142       args = tree_cons (NULL_TREE, object_addr, args);
3143     }
3144
3145   expr = build_function_call (fn, args);
3146   if (processing_template_decl && expr != error_mark_node)
3147     return build_min_non_dep (CALL_EXPR, expr, orig_fn, orig_args, NULL_TREE);
3148   return expr;
3149 }
3150   
3151
3152 void
3153 check_default_args (tree x)
3154 {
3155   tree arg = TYPE_ARG_TYPES (TREE_TYPE (x));
3156   bool saw_def = false;
3157   int i = 0 - (TREE_CODE (TREE_TYPE (x)) == METHOD_TYPE);
3158   for (; arg && arg != void_list_node; arg = TREE_CHAIN (arg), ++i)
3159     {
3160       if (TREE_PURPOSE (arg))
3161         saw_def = true;
3162       else if (saw_def)
3163         {
3164           cp_error_at ("default argument missing for parameter %P of `%+#D'",
3165                        i, x);
3166           break;
3167         }
3168     }
3169 }
3170
3171 void
3172 mark_used (tree decl)
3173 {
3174   TREE_USED (decl) = 1;
3175   if (processing_template_decl || skip_evaluation)
3176     return;
3177
3178   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl)
3179       && !TREE_ASM_WRITTEN (decl))
3180     /* Remember it, so we can check it was defined.  */
3181     {
3182       if (DECL_DEFERRED_FN (decl))
3183         return;
3184       note_vague_linkage_fn (decl);
3185     }
3186   
3187   assemble_external (decl);
3188
3189   /* Is it a synthesized method that needs to be synthesized?  */
3190   if (TREE_CODE (decl) == FUNCTION_DECL
3191       && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl)
3192       && DECL_ARTIFICIAL (decl) 
3193       && !DECL_THUNK_P (decl)
3194       && ! DECL_INITIAL (decl)
3195       /* Kludge: don't synthesize for default args.  */
3196       && current_function_decl)
3197     {
3198       synthesize_method (decl);
3199       /* If we've already synthesized the method we don't need to
3200          instantiate it, so we can return right away.  */
3201       return;
3202     }
3203
3204   /* If this is a function or variable that is an instance of some
3205      template, we now know that we will need to actually do the
3206      instantiation. We check that DECL is not an explicit
3207      instantiation because that is not checked in instantiate_decl.  */
3208   if ((DECL_NON_THUNK_FUNCTION_P (decl) || TREE_CODE (decl) == VAR_DECL)
3209       && DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)
3210       && (!DECL_EXPLICIT_INSTANTIATION (decl)
3211           || (TREE_CODE (decl) == FUNCTION_DECL 
3212               && DECL_INLINE (DECL_TEMPLATE_RESULT 
3213                               (template_for_substitution (decl))))))
3214     /* We put off instantiating functions in order to improve compile
3215        times.  Maintaining a stack of active functions is expensive,
3216        and the inliner knows to instantiate any functions it might
3217        need.  */
3218     instantiate_decl (decl, /*defer_ok=*/true, /*undefined_ok=*/0);
3219 }
3220
3221 #include "gt-cp-decl2.h"