OSDN Git Service

* call.c (validate_conversion_obstack): Replace
[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   gcc_assert (type);
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   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
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       gcc_assert (!template_parms 
616                   || comp_template_parms (template_parms, 
617                                           DECL_TEMPLATE_PARMS (function)));
618       template_parms = DECL_TEMPLATE_PARMS (function);
619     }
620
621   /* OK, is this a definition of a member template?  */
622   is_template = (template_parms != NULL_TREE);
623
624   ix = lookup_fnfields_1 (complete_type (ctype),
625                           DECL_CONSTRUCTOR_P (function) ? ctor_identifier :
626                           DECL_DESTRUCTOR_P (function) ? dtor_identifier :
627                           DECL_NAME (function));
628
629   if (ix >= 0)
630     {
631       VEC(tree) *methods = CLASSTYPE_METHOD_VEC (ctype);
632       tree fndecls, fndecl = 0;
633       bool is_conv_op;
634       bool pop_p;
635       const char *format = NULL;
636       
637       pop_p = push_scope (ctype);
638       for (fndecls = VEC_index (tree, methods, ix);
639            fndecls; fndecls = OVL_NEXT (fndecls))
640         {
641           tree p1, p2;
642           
643           fndecl = OVL_CURRENT (fndecls);
644           p1 = TYPE_ARG_TYPES (TREE_TYPE (function));
645           p2 = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
646
647           /* We cannot simply call decls_match because this doesn't
648              work for static member functions that are pretending to
649              be methods, and because the name may have been changed by
650              asm("new_name").  */ 
651               
652            /* Get rid of the this parameter on functions that become
653               static.  */
654           if (DECL_STATIC_FUNCTION_P (fndecl)
655               && TREE_CODE (TREE_TYPE (function)) == METHOD_TYPE)
656             p1 = TREE_CHAIN (p1);
657
658           /* A member template definition only matches a member template
659              declaration.  */
660           if (is_template != (TREE_CODE (fndecl) == TEMPLATE_DECL))
661             continue;
662               
663           if (same_type_p (TREE_TYPE (TREE_TYPE (function)),
664                            TREE_TYPE (TREE_TYPE (fndecl)))
665               && compparms (p1, p2)
666               && (!is_template
667                   || comp_template_parms (template_parms, 
668                                           DECL_TEMPLATE_PARMS (fndecl)))
669               && (DECL_TEMPLATE_SPECIALIZATION (function)
670                   == DECL_TEMPLATE_SPECIALIZATION (fndecl))
671               && (!DECL_TEMPLATE_SPECIALIZATION (function)
672                   || (DECL_TI_TEMPLATE (function) 
673                       == DECL_TI_TEMPLATE (fndecl))))
674             break;
675         }
676       if (pop_p)
677         pop_scope (ctype);
678       if (fndecls)
679         return OVL_CURRENT (fndecls);
680       error ("prototype for `%#D' does not match any in class `%T'",
681              function, ctype);
682       is_conv_op = DECL_CONV_FN_P (fndecl);
683
684       if (is_conv_op)
685         ix = CLASSTYPE_FIRST_CONVERSION_SLOT;
686       fndecls = VEC_index (tree, methods, ix);
687       while (fndecls)
688         {
689           fndecl = OVL_CURRENT (fndecls);
690           fndecls = OVL_NEXT (fndecls);
691
692           if (!fndecls && is_conv_op)
693             {
694               if (VEC_length (tree, methods) > (size_t) ++ix)
695                 {
696                   fndecls = VEC_index (tree, methods, ix);
697                   if (!DECL_CONV_FN_P (OVL_CURRENT (fndecls)))
698                     {
699                       fndecls = NULL_TREE;
700                       is_conv_op = false;
701                     }
702                 }
703               else
704                 is_conv_op = false;
705             }
706           if (format)
707             format = "                %#D";
708           else if (fndecls)
709             format = "candidates are: %#D";
710           else
711             format = "candidate is: %#D";
712           cp_error_at (format, fndecl);
713         }
714     }
715   else if (!COMPLETE_TYPE_P (ctype))
716     cxx_incomplete_type_error (function, ctype);
717   else
718     error ("no `%#D' member function declared in class `%T'",
719            function, ctype);
720
721   /* If we did not find the method in the class, add it to avoid
722      spurious errors (unless the CTYPE is not yet defined, in which
723      case we'll only confuse ourselves when the function is declared
724      properly within the class.  */
725   if (COMPLETE_TYPE_P (ctype))
726     add_method (ctype, function);
727   return NULL_TREE;
728 }
729
730 /* DECL is a function with vague linkage.  Remember it so that at the
731    end of the translation unit we can decide whether or not to emit
732    it.  */
733
734 void
735 note_vague_linkage_fn (tree decl)
736 {
737   if (!DECL_DEFERRED_FN (decl))
738     {
739       DECL_DEFERRED_FN (decl) = 1;
740       DECL_DEFER_OUTPUT (decl) = 1;
741       if (!deferred_fns)
742         VARRAY_TREE_INIT (deferred_fns, 32, "deferred_fns");
743       VARRAY_PUSH_TREE (deferred_fns, decl);
744     }
745 }
746
747 /* Like note_vague_linkage_fn but for variables.  */
748
749 static void
750 note_vague_linkage_var (tree var)
751 {
752   if (!pending_statics)
753     VARRAY_TREE_INIT (pending_statics, 32, "pending_statics");
754   VARRAY_PUSH_TREE (pending_statics, var);
755 }
756
757 /* We have just processed the DECL, which is a static data member.
758    Its initializer, if present, is INIT.  The ASMSPEC_TREE, if
759    present, is the assembly-language name for the data member.
760    FLAGS is as for cp_finish_decl.  */
761
762 void
763 finish_static_data_member_decl (tree decl, tree init, tree asmspec_tree,
764                                 int flags)
765 {
766   gcc_assert (TREE_PUBLIC (decl));
767
768   DECL_CONTEXT (decl) = current_class_type;
769
770   /* We cannot call pushdecl here, because that would fill in the
771      TREE_CHAIN of our decl.  Instead, we modify cp_finish_decl to do
772      the right thing, namely, to put this decl out straight away.  */
773   /* current_class_type can be NULL_TREE in case of error.  */
774   if (!asmspec_tree && current_class_type)
775     DECL_INITIAL (decl) = error_mark_node;
776
777   if (! processing_template_decl)
778     note_vague_linkage_var (decl);
779
780   if (LOCAL_CLASS_P (current_class_type))
781     pedwarn ("local class `%#T' shall not have static data member `%#D'",
782              current_class_type, decl);
783
784   /* Static consts need not be initialized in the class definition.  */
785   if (init != NULL_TREE && TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
786     {
787       static int explained = 0;
788           
789       error ("initializer invalid for static member with constructor");
790       if (!explained)
791         {
792           error ("(an out of class initialization is required)");
793           explained = 1;
794         }
795       init = NULL_TREE;
796     }
797   /* Force the compiler to know when an uninitialized static const
798      member is being used.  */
799   if (CP_TYPE_CONST_P (TREE_TYPE (decl)) && init == 0)
800     TREE_USED (decl) = 1;
801   DECL_INITIAL (decl) = init;
802   DECL_IN_AGGR_P (decl) = 1;
803
804   cp_finish_decl (decl, init, asmspec_tree, flags);
805 }
806
807 /* Process the specs, declarator (NULL if omitted) and width (NULL if omitted)
808    of a structure component, returning a _DECL node.
809    QUALS is a list of type qualifiers for this decl (such as for declaring
810    const member functions).
811
812    This is done during the parsing of the struct declaration.
813    The _DECL nodes are chained together and the lot of them
814    are ultimately passed to `build_struct' to make the RECORD_TYPE node.
815
816    If class A defines that certain functions in class B are friends, then
817    the way I have set things up, it is B who is interested in permission
818    granted by A.  However, it is in A's context that these declarations
819    are parsed.  By returning a void_type_node, class A does not attempt
820    to incorporate the declarations of the friends within its structure.
821
822    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
823    CHANGES TO CODE IN `start_method'.  */
824
825 tree
826 grokfield (const cp_declarator *declarator, 
827            cp_decl_specifier_seq *declspecs, 
828            tree init, tree asmspec_tree,
829            tree attrlist)
830 {
831   tree value;
832   const char *asmspec = 0;
833   int flags = LOOKUP_ONLYCONVERTING;
834
835   if (!declspecs->any_specifiers_p
836       && declarator->kind == cdk_id
837       && TREE_CODE (declarator->u.id.name) == SCOPE_REF
838       && (TREE_CODE (TREE_OPERAND (declarator->u.id.name, 1)) 
839           == IDENTIFIER_NODE))
840     /* Access declaration */
841     return do_class_using_decl (declarator->u.id.name);
842
843   if (init
844       && TREE_CODE (init) == TREE_LIST
845       && TREE_VALUE (init) == error_mark_node
846       && TREE_CHAIN (init) == NULL_TREE)
847     init = NULL_TREE;
848
849   value = grokdeclarator (declarator, declspecs, FIELD, init != 0, &attrlist);
850   if (! value || error_operand_p (value))
851     /* friend or constructor went bad.  */
852     return error_mark_node;
853
854   if (TREE_CODE (value) == TYPE_DECL && init)
855     {
856       error ("typedef `%D' is initialized (use __typeof__ instead)", value);
857       init = NULL_TREE;
858     }
859
860   /* Pass friendly classes back.  */
861   if (value == void_type_node)
862     return value;
863
864   /* Pass friend decls back.  */
865   if ((TREE_CODE (value) == FUNCTION_DECL
866        || TREE_CODE (value) == TEMPLATE_DECL)
867       && DECL_CONTEXT (value) != current_class_type)
868     return value;
869
870   if (DECL_NAME (value) != NULL_TREE
871       && IDENTIFIER_POINTER (DECL_NAME (value))[0] == '_'
872       && ! strcmp (IDENTIFIER_POINTER (DECL_NAME (value)), "_vptr"))
873     error ("member `%D' conflicts with virtual function table field name",
874               value);
875
876   /* Stash away type declarations.  */
877   if (TREE_CODE (value) == TYPE_DECL)
878     {
879       DECL_NONLOCAL (value) = 1;
880       DECL_CONTEXT (value) = current_class_type;
881
882       if (processing_template_decl)
883         value = push_template_decl (value);
884
885       return value;
886     }
887
888   if (DECL_IN_AGGR_P (value))
889     {
890       error ("`%D' is already defined in `%T'", value,
891                 DECL_CONTEXT (value));
892       return void_type_node;
893     }
894
895   if (asmspec_tree)
896     asmspec = TREE_STRING_POINTER (asmspec_tree);
897
898   if (init)
899     {
900       if (TREE_CODE (value) == FUNCTION_DECL)
901         {
902           grok_function_init (value, init);
903           init = NULL_TREE;
904         }
905       else if (pedantic && TREE_CODE (value) != VAR_DECL)
906         /* Already complained in grokdeclarator.  */
907         init = NULL_TREE;
908       else
909         {
910           /* We allow initializers to become parameters to base
911              initializers.  */
912           if (TREE_CODE (init) == TREE_LIST)
913             {
914               if (TREE_CHAIN (init) == NULL_TREE)
915                 init = TREE_VALUE (init);
916               else
917                 init = digest_init (TREE_TYPE (value), init, (tree *)0);
918             }
919
920           if (!processing_template_decl)
921             {
922               if (TREE_CODE (init) == CONST_DECL)
923                 init = DECL_INITIAL (init);
924               else if (TREE_READONLY_DECL_P (init))
925                 init = decl_constant_value (init);
926               else if (TREE_CODE (init) == CONSTRUCTOR)
927                 init = digest_init (TREE_TYPE (value), init, (tree *)0);
928               if (init != error_mark_node && ! TREE_CONSTANT (init))
929                 {
930                   /* We can allow references to things that are effectively
931                      static, since references are initialized with the
932                      address.  */
933                   if (TREE_CODE (TREE_TYPE (value)) != REFERENCE_TYPE
934                       || (TREE_STATIC (init) == 0
935                           && (!DECL_P (init) || DECL_EXTERNAL (init) == 0)))
936                     {
937                       error ("field initializer is not constant");
938                       init = error_mark_node;
939                     }
940                 }
941             }
942         }
943     }
944
945   if (processing_template_decl
946       && (TREE_CODE (value) == VAR_DECL || TREE_CODE (value) == FUNCTION_DECL))
947     {
948       value = push_template_decl (value);
949       if (error_operand_p (value))
950         return error_mark_node;
951     }
952
953   if (attrlist)
954     cplus_decl_attributes (&value, attrlist, 0);
955
956   if (TREE_CODE (value) == VAR_DECL)
957     {
958       finish_static_data_member_decl (value, init, asmspec_tree, 
959                                       flags);
960       return value;
961     }
962   if (TREE_CODE (value) == FIELD_DECL)
963     {
964       if (asmspec)
965         error ("`asm' specifiers are not permitted on non-static data members");
966       if (DECL_INITIAL (value) == error_mark_node)
967         init = error_mark_node;
968       cp_finish_decl (value, init, NULL_TREE, flags);
969       DECL_INITIAL (value) = init;
970       DECL_IN_AGGR_P (value) = 1;
971       return value;
972     }
973   if (TREE_CODE (value) == FUNCTION_DECL)
974     {
975       if (asmspec)
976         set_user_assembler_name (value, asmspec);
977       if (!DECL_FRIEND_P (value))
978         grok_special_member_properties (value);
979       
980       cp_finish_decl (value, init, asmspec_tree, flags);
981
982       /* Pass friends back this way.  */
983       if (DECL_FRIEND_P (value))
984         return void_type_node;
985
986       DECL_IN_AGGR_P (value) = 1;
987       return value;
988     }
989   abort ();
990   /* NOTREACHED */
991   return NULL_TREE;
992 }
993
994 /* Like `grokfield', but for bitfields.
995    WIDTH is non-NULL for bit fields only, and is an INTEGER_CST node.  */
996
997 tree
998 grokbitfield (const cp_declarator *declarator, 
999               cp_decl_specifier_seq *declspecs, tree width)
1000 {
1001   tree value = grokdeclarator (declarator, declspecs, BITFIELD, 0, NULL);
1002
1003   if (! value) return NULL_TREE; /* friends went bad.  */
1004
1005   /* Pass friendly classes back.  */
1006   if (TREE_CODE (value) == VOID_TYPE)
1007     return void_type_node;
1008
1009   if (TREE_CODE (value) == TYPE_DECL)
1010     {
1011       error ("cannot declare `%D' to be a bit-field type", value);
1012       return NULL_TREE;
1013     }
1014
1015   /* Usually, finish_struct_1 catches bitfields with invalid types.
1016      But, in the case of bitfields with function type, we confuse
1017      ourselves into thinking they are member functions, so we must
1018      check here.  */
1019   if (TREE_CODE (value) == FUNCTION_DECL)
1020     {
1021       error ("cannot declare bit-field `%D' with function type",
1022              DECL_NAME (value));
1023       return NULL_TREE;
1024     }
1025
1026   if (DECL_IN_AGGR_P (value))
1027     {
1028       error ("`%D' is already defined in the class %T", value,
1029                   DECL_CONTEXT (value));
1030       return void_type_node;
1031     }
1032
1033   if (TREE_STATIC (value))
1034     {
1035       error ("static member `%D' cannot be a bit-field", value);
1036       return NULL_TREE;
1037     }
1038   cp_finish_decl (value, NULL_TREE, NULL_TREE, 0);
1039
1040   if (width != error_mark_node)
1041     {
1042       constant_expression_warning (width);
1043       DECL_INITIAL (value) = width;
1044       SET_DECL_C_BIT_FIELD (value);
1045     }
1046
1047   DECL_IN_AGGR_P (value) = 1;
1048   return value;
1049 }
1050
1051 /* When a function is declared with an initializer,
1052    do the right thing.  Currently, there are two possibilities:
1053
1054    class B
1055    {
1056     public:
1057      // initialization possibility #1.
1058      virtual void f () = 0;
1059      int g ();
1060    };
1061    
1062    class D1 : B
1063    {
1064     public:
1065      int d1;
1066      // error, no f ();
1067    };
1068    
1069    class D2 : B
1070    {
1071     public:
1072      int d2;
1073      void f ();
1074    };
1075    
1076    class D3 : B
1077    {
1078     public:
1079      int d3;
1080      // initialization possibility #2
1081      void f () = B::f;
1082    };
1083
1084 */
1085
1086 static void
1087 grok_function_init (tree decl, tree init)
1088 {
1089   /* An initializer for a function tells how this function should
1090      be inherited.  */
1091   tree type = TREE_TYPE (decl);
1092
1093   if (TREE_CODE (type) == FUNCTION_TYPE)
1094     error ("initializer specified for non-member function `%D'", decl);
1095   else if (integer_zerop (init))
1096     DECL_PURE_VIRTUAL_P (decl) = 1;
1097   else
1098     error ("invalid initializer for virtual method `%D'", decl);
1099 }
1100 \f
1101 void
1102 cplus_decl_attributes (tree *decl, tree attributes, int flags)
1103 {
1104   if (*decl == NULL_TREE || *decl == void_type_node)
1105     return;
1106
1107   if (TREE_CODE (*decl) == TEMPLATE_DECL)
1108     decl = &DECL_TEMPLATE_RESULT (*decl);
1109
1110   decl_attributes (decl, attributes, flags);
1111
1112   if (TREE_CODE (*decl) == TYPE_DECL)
1113     SET_IDENTIFIER_TYPE_VALUE (DECL_NAME (*decl), TREE_TYPE (*decl));
1114 }
1115 \f
1116 /* Walks through the namespace- or function-scope anonymous union OBJECT,
1117    building appropriate ALIAS_DECLs.  Returns one of the fields for use in
1118    the mangled name.  */
1119
1120 static tree
1121 build_anon_union_vars (tree object)
1122 {
1123   tree type = TREE_TYPE (object);
1124   tree main_decl = NULL_TREE;
1125   tree field;
1126
1127   /* Rather than write the code to handle the non-union case,
1128      just give an error.  */
1129   if (TREE_CODE (type) != UNION_TYPE)
1130     error ("anonymous struct not inside named type");
1131
1132   for (field = TYPE_FIELDS (type); 
1133        field != NULL_TREE; 
1134        field = TREE_CHAIN (field))
1135     {
1136       tree decl;
1137       tree ref;
1138
1139       if (DECL_ARTIFICIAL (field))
1140         continue;
1141       if (TREE_CODE (field) != FIELD_DECL)
1142         {
1143           cp_pedwarn_at ("\
1144 `%#D' invalid; an anonymous union can only have non-static data members",
1145                          field);
1146           continue;
1147         }
1148
1149       if (TREE_PRIVATE (field))
1150         cp_pedwarn_at ("private member `%#D' in anonymous union", field);
1151       else if (TREE_PROTECTED (field))
1152         cp_pedwarn_at ("protected member `%#D' in anonymous union", field);
1153
1154       if (processing_template_decl)
1155         ref = build_min_nt (COMPONENT_REF, object,
1156                             DECL_NAME (field), NULL_TREE);
1157       else
1158         ref = build_class_member_access_expr (object, field, NULL_TREE,
1159                                               false);
1160
1161       if (DECL_NAME (field))
1162         {
1163           decl = build_decl (ALIAS_DECL, DECL_NAME (field), TREE_TYPE (field));
1164           DECL_INITIAL (decl) = ref;        
1165           TREE_PUBLIC (decl) = 0;
1166           TREE_STATIC (decl) = 0;
1167           DECL_EXTERNAL (decl) = 1;
1168           decl = pushdecl (decl);
1169         }
1170       else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
1171         decl = build_anon_union_vars (ref);
1172       else
1173         decl = 0;
1174
1175       if (main_decl == NULL_TREE)
1176         main_decl = decl;
1177     }
1178
1179   return main_decl;
1180 }
1181
1182 /* Finish off the processing of a UNION_TYPE structure.  If the union is an
1183    anonymous union, then all members must be laid out together.  PUBLIC_P
1184    is nonzero if this union is not declared static.  */
1185
1186 void
1187 finish_anon_union (tree anon_union_decl)
1188 {
1189   tree type = TREE_TYPE (anon_union_decl);
1190   tree main_decl;
1191   bool public_p = TREE_PUBLIC (anon_union_decl);
1192
1193   /* The VAR_DECL's context is the same as the TYPE's context.  */
1194   DECL_CONTEXT (anon_union_decl) = DECL_CONTEXT (TYPE_NAME (type));
1195   
1196   if (TYPE_FIELDS (type) == NULL_TREE)
1197     return;
1198
1199   if (public_p)
1200     {
1201       error ("namespace-scope anonymous aggregates must be static");
1202       return;
1203     }
1204
1205   main_decl = build_anon_union_vars (anon_union_decl);
1206   if (main_decl == NULL_TREE)
1207     {
1208       warning ("anonymous union with no members");
1209       return;
1210     }
1211
1212   if (!processing_template_decl)
1213     {
1214       /* Use main_decl to set the mangled name.  */
1215       DECL_NAME (anon_union_decl) = DECL_NAME (main_decl);
1216       mangle_decl (anon_union_decl);
1217       DECL_NAME (anon_union_decl) = NULL_TREE;
1218     }
1219
1220   pushdecl (anon_union_decl);
1221   if (building_stmt_tree ()
1222       && at_function_scope_p ())
1223     add_decl_expr (anon_union_decl);
1224   else if (!processing_template_decl)
1225     rest_of_decl_compilation (anon_union_decl,
1226                               toplevel_bindings_p (), at_eof);
1227 }
1228 \f
1229 /* Auxiliary functions to make type signatures for
1230    `operator new' and `operator delete' correspond to
1231    what compiler will be expecting.  */
1232
1233 tree
1234 coerce_new_type (tree type)
1235 {
1236   int e = 0;
1237   tree args = TYPE_ARG_TYPES (type);
1238
1239   gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
1240   
1241   if (!same_type_p (TREE_TYPE (type), ptr_type_node))
1242     e = 1, error ("`operator new' must return type `%T'", ptr_type_node);
1243
1244   if (!args || args == void_list_node
1245       || !same_type_p (TREE_VALUE (args), size_type_node))
1246     {
1247       e = 2;
1248       if (args && args != void_list_node)
1249         args = TREE_CHAIN (args);
1250       pedwarn ("`operator new' takes type `size_t' (`%T') as first parameter", size_type_node);
1251     }
1252   switch (e)
1253   {
1254     case 2:
1255       args = tree_cons (NULL_TREE, size_type_node, args);
1256       /* Fall through.  */
1257     case 1:
1258       type = build_exception_variant
1259               (build_function_type (ptr_type_node, args),
1260                TYPE_RAISES_EXCEPTIONS (type));
1261       /* Fall through.  */
1262     default:;
1263   }
1264   return type;
1265 }
1266
1267 tree
1268 coerce_delete_type (tree type)
1269 {
1270   int e = 0;
1271   tree args = TYPE_ARG_TYPES (type);
1272   
1273   gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
1274
1275   if (!same_type_p (TREE_TYPE (type), void_type_node))
1276     e = 1, error ("`operator delete' must return type `%T'", void_type_node);
1277
1278   if (!args || args == void_list_node
1279       || !same_type_p (TREE_VALUE (args), ptr_type_node))
1280     {
1281       e = 2;
1282       if (args && args != void_list_node)
1283         args = TREE_CHAIN (args);
1284       error ("`operator delete' takes type `%T' as first parameter", ptr_type_node);
1285     }
1286   switch (e)
1287   {
1288     case 2:
1289       args = tree_cons (NULL_TREE, ptr_type_node, args);
1290       /* Fall through.  */
1291     case 1:
1292       type = build_exception_variant
1293               (build_function_type (void_type_node, args),
1294                TYPE_RAISES_EXCEPTIONS (type));
1295       /* Fall through.  */
1296     default:;
1297   }
1298
1299   return type;
1300 }
1301 \f
1302 static void
1303 mark_vtable_entries (tree decl)
1304 {
1305   tree entries = CONSTRUCTOR_ELTS (DECL_INITIAL (decl));
1306
1307   for (; entries; entries = TREE_CHAIN (entries))
1308     {
1309       tree fnaddr = TREE_VALUE (entries);
1310       tree fn;
1311
1312       STRIP_NOPS (fnaddr);
1313
1314       if (TREE_CODE (fnaddr) != ADDR_EXPR
1315           && TREE_CODE (fnaddr) != FDESC_EXPR)
1316         /* This entry is an offset: a virtual base class offset, a
1317            virtual call offset, an RTTI offset, etc.  */
1318         continue;
1319
1320       fn = TREE_OPERAND (fnaddr, 0);
1321       TREE_ADDRESSABLE (fn) = 1;
1322       /* When we don't have vcall offsets, we output thunks whenever
1323          we output the vtables that contain them.  With vcall offsets,
1324          we know all the thunks we'll need when we emit a virtual
1325          function, so we emit the thunks there instead.  */
1326       if (DECL_THUNK_P (fn)) 
1327         use_thunk (fn, /*emit_p=*/0);
1328       mark_used (fn);
1329     }
1330 }
1331
1332 /* Set DECL up to have the closest approximation of "initialized common"
1333    linkage available.  */
1334
1335 void
1336 comdat_linkage (tree decl)
1337 {
1338   if (flag_weak)
1339     make_decl_one_only (decl);
1340   else if (TREE_CODE (decl) == FUNCTION_DECL 
1341            || (TREE_CODE (decl) == VAR_DECL && DECL_ARTIFICIAL (decl)))
1342     /* We can just emit function and compiler-generated variables
1343        statically; having multiple copies is (for the most part) only
1344        a waste of space.  
1345
1346        There are two correctness issues, however: the address of a
1347        template instantiation with external linkage should be the
1348        same, independent of what translation unit asks for the
1349        address, and this will not hold when we emit multiple copies of
1350        the function.  However, there's little else we can do.  
1351
1352        Also, by default, the typeinfo implementation assumes that
1353        there will be only one copy of the string used as the name for
1354        each type.  Therefore, if weak symbols are unavailable, the
1355        run-time library should perform a more conservative check; it
1356        should perform a string comparison, rather than an address
1357        comparison.  */
1358     TREE_PUBLIC (decl) = 0;
1359   else
1360     {
1361       /* Static data member template instantiations, however, cannot
1362          have multiple copies.  */
1363       if (DECL_INITIAL (decl) == 0
1364           || DECL_INITIAL (decl) == error_mark_node)
1365         DECL_COMMON (decl) = 1;
1366       else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
1367         {
1368           DECL_COMMON (decl) = 1;
1369           DECL_INITIAL (decl) = error_mark_node;
1370         }
1371       else if (!DECL_EXPLICIT_INSTANTIATION (decl))
1372         {
1373           /* We can't do anything useful; leave vars for explicit
1374              instantiation.  */
1375           DECL_EXTERNAL (decl) = 1;
1376           DECL_NOT_REALLY_EXTERN (decl) = 0;
1377         }
1378     }
1379
1380   if (DECL_LANG_SPECIFIC (decl))
1381     DECL_COMDAT (decl) = 1;
1382 }
1383
1384 /* For win32 we also want to put explicit instantiations in
1385    linkonce sections, so that they will be merged with implicit
1386    instantiations; otherwise we get duplicate symbol errors.  
1387    For Darwin we do not want explicit instantiations to be 
1388    linkonce.  */
1389
1390 void
1391 maybe_make_one_only (tree decl)
1392 {
1393   /* We used to say that this was not necessary on targets that support weak
1394      symbols, because the implicit instantiations will defer to the explicit
1395      one.  However, that's not actually the case in SVR4; a strong definition
1396      after a weak one is an error.  Also, not making explicit
1397      instantiations one_only means that we can end up with two copies of
1398      some template instantiations.  */
1399   if (! flag_weak)
1400     return;
1401
1402   /* We can't set DECL_COMDAT on functions, or finish_file will think
1403      we can get away with not emitting them if they aren't used.  We need
1404      to for variables so that cp_finish_decl will update their linkage,
1405      because their DECL_INITIAL may not have been set properly yet.  */
1406
1407   if (!TARGET_WEAK_NOT_IN_ARCHIVE_TOC
1408       || (! DECL_EXPLICIT_INSTANTIATION (decl)
1409           && ! DECL_TEMPLATE_SPECIALIZATION (decl)))
1410     {
1411       make_decl_one_only (decl);
1412
1413       if (TREE_CODE (decl) == VAR_DECL)
1414         {
1415           DECL_COMDAT (decl) = 1;
1416           /* Mark it needed so we don't forget to emit it.  */
1417           mark_decl_referenced (decl);
1418         }
1419     }
1420 }
1421
1422 /* Determine whether or not we want to specifically import or export CTYPE,
1423    using various heuristics.  */
1424
1425 static void
1426 import_export_class (tree ctype)
1427 {
1428   /* -1 for imported, 1 for exported.  */
1429   int import_export = 0;
1430
1431   /* It only makes sense to call this function at EOF.  The reason is
1432      that this function looks at whether or not the first non-inline
1433      non-abstract virtual member function has been defined in this
1434      translation unit.  But, we can't possibly know that until we've
1435      seen the entire translation unit.  */
1436   gcc_assert (at_eof);
1437
1438   if (CLASSTYPE_INTERFACE_KNOWN (ctype))
1439     return;
1440
1441   /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma interface,
1442      we will have CLASSTYPE_INTERFACE_ONLY set but not
1443      CLASSTYPE_INTERFACE_KNOWN.  In that case, we don't want to use this
1444      heuristic because someone will supply a #pragma implementation
1445      elsewhere, and deducing it here would produce a conflict.  */
1446   if (CLASSTYPE_INTERFACE_ONLY (ctype))
1447     return;
1448
1449   if (lookup_attribute ("dllimport", TYPE_ATTRIBUTES (ctype)))
1450     import_export = -1;
1451   else if (lookup_attribute ("dllexport", TYPE_ATTRIBUTES (ctype)))
1452     import_export = 1;
1453   else if (CLASSTYPE_IMPLICIT_INSTANTIATION (ctype)
1454            && !flag_implicit_templates)
1455     /* For a template class, without -fimplicit-templates, check the
1456        repository.  If the virtual table is assigned to this
1457        translation unit, then export the class; otherwise, import
1458        it.  */
1459       import_export = repo_export_class_p (ctype) ? 1 : -1;
1460   else if (TYPE_POLYMORPHIC_P (ctype))
1461     {
1462       /* The ABI specifies that the virtual table and associated
1463          information are emitted with the key method, if any.  */
1464       tree method = CLASSTYPE_KEY_METHOD (ctype);
1465       /* If weak symbol support is not available, then we must be
1466          careful not to emit the vtable when the key function is
1467          inline.  An inline function can be defined in multiple
1468          translation units.  If we were to emit the vtable in each
1469          translation unit containing a definition, we would get
1470          multiple definition errors at link-time.  */
1471       if (method && (flag_weak || ! DECL_DECLARED_INLINE_P (method)))
1472         import_export = (DECL_REALLY_EXTERN (method) ? -1 : 1);
1473     }
1474
1475 #ifdef MULTIPLE_SYMBOL_SPACES
1476   if (import_export == -1)
1477     import_export = 0;
1478 #endif
1479
1480   /* Allow backends the chance to overrule the decision.  */
1481   if (targetm.cxx.import_export_class)
1482     import_export = targetm.cxx.import_export_class (ctype, import_export);
1483
1484   if (import_export)
1485     {
1486       SET_CLASSTYPE_INTERFACE_KNOWN (ctype);
1487       CLASSTYPE_INTERFACE_ONLY (ctype) = (import_export < 0);
1488     }
1489 }
1490
1491 /* Return true if VAR has already been provided to the back end; in that
1492    case VAR should not be modified further by the front end.  */
1493 static bool
1494 var_finalized_p (tree var)
1495 {
1496   return cgraph_varpool_node (var)->finalized;
1497 }
1498
1499 /* DECL is a VAR_DECL or FUNCTION_DECL which, for whatever reason,
1500    must be emitted in this translation unit.  Mark it as such.  */
1501
1502 void
1503 mark_needed (tree decl)
1504 {
1505   /* It's possible that we no longer need to set
1506      TREE_SYMBOL_REFERENCED here directly, but doing so is
1507      harmless.  */
1508   TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)) = 1;
1509   mark_decl_referenced (decl);
1510 }
1511
1512 /* DECL is either a FUNCTION_DECL or a VAR_DECL.  This function
1513    returns true if a definition of this entity should be provided in
1514    this object file.  Callers use this function to determine whether
1515    or not to let the back end know that a definition of DECL is
1516    available in this translation unit.  */
1517
1518 bool
1519 decl_needed_p (tree decl)
1520 {
1521   gcc_assert (TREE_CODE (decl) == VAR_DECL
1522               || TREE_CODE (decl) == FUNCTION_DECL);
1523   /* This function should only be called at the end of the translation
1524      unit.  We cannot be sure of whether or not something will be
1525      COMDAT until that point.  */
1526   gcc_assert (at_eof);
1527
1528   /* All entities with external linkage that are not COMDAT should be
1529      emitted; they may be referred to from other object files.  */
1530   if (TREE_PUBLIC (decl) && !DECL_COMDAT (decl))
1531     return true;
1532   /* If this entity was used, let the back-end see it; it will decide
1533      whether or not to emit it into the object file.  */
1534   if (TREE_USED (decl) 
1535       || (DECL_ASSEMBLER_NAME_SET_P (decl)
1536           && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))))
1537       return true;
1538   /* Otherwise, DECL does not need to be emitted -- yet.  A subsequent
1539      reference to DECL might cause it to be emitted later.  */
1540   return false;
1541 }
1542
1543 /* If necessary, write out the vtables for the dynamic class CTYPE.
1544    Returns true if any vtables were emitted.  */
1545
1546 static bool
1547 maybe_emit_vtables (tree ctype)
1548 {
1549   tree vtbl;
1550   tree primary_vtbl;
1551   int needed = 0;
1552
1553   /* If the vtables for this class have already been emitted there is
1554      nothing more to do.  */
1555   primary_vtbl = CLASSTYPE_VTABLES (ctype);
1556   if (var_finalized_p (primary_vtbl))
1557     return false;
1558   /* Ignore dummy vtables made by get_vtable_decl.  */
1559   if (TREE_TYPE (primary_vtbl) == void_type_node)
1560     return false;
1561
1562   /* See if any of the vtables are needed.  */
1563   for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = TREE_CHAIN (vtbl))
1564     {
1565       import_export_decl (vtbl);
1566       if (DECL_NOT_REALLY_EXTERN (vtbl) && decl_needed_p (vtbl))
1567         needed = 1;
1568     }
1569   if (!needed)
1570     {
1571       /* If the references to this class' vtables are optimized away,
1572          still emit the appropriate debugging information.  See
1573          dfs_debug_mark.  */
1574       if (DECL_COMDAT (primary_vtbl) 
1575           && CLASSTYPE_DEBUG_REQUESTED (ctype))
1576         note_debug_info_needed (ctype);
1577       return false;
1578     }
1579
1580   /* The ABI requires that we emit all of the vtables if we emit any
1581      of them.  */
1582   for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = TREE_CHAIN (vtbl))
1583     {
1584       /* Mark entities references from the virtual table as used.  */
1585       mark_vtable_entries (vtbl);
1586
1587       if (TREE_TYPE (DECL_INITIAL (vtbl)) == 0)
1588         {
1589           /* It had better be all done at compile-time.  */
1590           if (store_init_value (vtbl, DECL_INITIAL (vtbl)))
1591             abort ();
1592         }
1593
1594       /* Write it out.  */
1595       DECL_EXTERNAL (vtbl) = 0;
1596       rest_of_decl_compilation (vtbl, 1, 1);
1597
1598       /* Because we're only doing syntax-checking, we'll never end up
1599          actually marking the variable as written.  */
1600       if (flag_syntax_only)
1601         TREE_ASM_WRITTEN (vtbl) = 1;
1602     }
1603
1604   /* Since we're writing out the vtable here, also write the debug
1605      info.  */
1606   note_debug_info_needed (ctype);
1607
1608   return true;
1609 }
1610
1611 /* Like c_determine_visibility, but with additional C++-specific
1612    behavior.  */
1613
1614 void
1615 determine_visibility (tree decl)
1616 {
1617   tree class_type;
1618
1619   /* Cloned constructors and destructors get the same visibility as
1620      the underlying function.  That should be set up in
1621      maybe_clone_body.  */
1622   gcc_assert (!DECL_CLONED_FUNCTION_P (decl));
1623
1624   /* Give the common code a chance to make a determination.  */
1625   if (c_determine_visibility (decl))
1626     return;
1627
1628   /* If DECL is a member of a class, visibility specifiers on the
1629      class can influence the visibility of the DECL.  */
1630   if (DECL_CLASS_SCOPE_P (decl))
1631     class_type = DECL_CONTEXT (decl);
1632   else if (TREE_CODE (decl) == VAR_DECL
1633            && DECL_TINFO_P (decl)
1634            && CLASS_TYPE_P (TREE_TYPE (DECL_NAME (decl))))
1635     class_type = TREE_TYPE (DECL_NAME (decl));
1636   else
1637     {
1638       /* Virtual tables have DECL_CONTEXT set to their associated class,
1639          so they are automatically handled above.  */
1640       gcc_assert (TREE_CODE (decl) != VAR_DECL
1641                   || !DECL_VTABLE_OR_VTT_P (decl));
1642       /* Entities not associated with any class just get the
1643          visibility specified by their attributes.  */
1644       return;
1645     }
1646
1647   /* By default, static data members and function members receive
1648      the visibility of their containing class.  */
1649   if (class_type)
1650     {
1651       if (TARGET_DLLIMPORT_DECL_ATTRIBUTES
1652           && lookup_attribute ("dllexport", TYPE_ATTRIBUTES (class_type)))
1653         {
1654           DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
1655           DECL_VISIBILITY_SPECIFIED (decl) = 1;
1656           return;
1657         }
1658
1659       if (TREE_CODE (decl) == FUNCTION_DECL
1660           && DECL_DECLARED_INLINE_P (decl)
1661           && visibility_options.inlines_hidden)
1662         {
1663           DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
1664           DECL_VISIBILITY_SPECIFIED (decl) = 1;
1665         }
1666       else
1667         {
1668           DECL_VISIBILITY (decl) = CLASSTYPE_VISIBILITY (class_type);
1669           DECL_VISIBILITY_SPECIFIED (decl)
1670             = CLASSTYPE_VISIBILITY_SPECIFIED (class_type);
1671         }
1672     }
1673 }
1674
1675 /* DECL is a FUNCTION_DECL or VAR_DECL.  If the object file linkage
1676    for DECL has not already been determined, do so now by setting
1677    DECL_EXTERNAL, DECL_COMDAT and other related flags.  Until this
1678    function is called entities with vague linkage whose definitions
1679    are available must have TREE_PUBLIC set.
1680
1681    If this function decides to place DECL in COMDAT, it will set
1682    appropriate flags -- but will not clear DECL_EXTERNAL.  It is up to
1683    the caller to decide whether or not to clear DECL_EXTERNAL.  Some
1684    callers defer that decision until it is clear that DECL is actually
1685    required.  */
1686
1687 void
1688 import_export_decl (tree decl)
1689 {
1690   int emit_p;
1691   bool comdat_p;
1692   bool import_p;
1693
1694   if (DECL_INTERFACE_KNOWN (decl))
1695     return;
1696
1697   /* We cannot determine what linkage to give to an entity with vague
1698      linkage until the end of the file.  For example, a virtual table
1699      for a class will be defined if and only if the key method is
1700      defined in this translation unit.  As a further example, consider
1701      that when compiling a translation unit that uses PCH file with
1702      "-frepo" it would be incorrect to make decisions about what
1703      entities to emit when building the PCH; those decisions must be
1704      delayed until the repository information has been processed.  */
1705   gcc_assert (at_eof);
1706   /* Object file linkage for explicit instantiations is handled in
1707      mark_decl_instantiated.  For static variables in functions with
1708      vague linkage, maybe_commonize_var is used.
1709
1710      Therefore, the only declarations that should be provided to this
1711      function are those with external linkage that:
1712
1713      * implicit instantiations of function templates
1714
1715      * inline function
1716
1717      * implicit instantiations of static data members of class
1718        templates
1719
1720      * virtual tables
1721
1722      * typeinfo objects
1723
1724      Furthermore, all entities that reach this point must have a
1725      definition available in this translation unit.
1726
1727      The following assertions check these conditions.  */
1728   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1729               || TREE_CODE (decl) == VAR_DECL);
1730   /* Any code that creates entities with TREE_PUBLIC cleared should
1731      also set DECL_INTERFACE_KNOWN.  */
1732   gcc_assert (TREE_PUBLIC (decl));
1733   if (TREE_CODE (decl) == FUNCTION_DECL)
1734     gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
1735                 || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
1736                 || DECL_DECLARED_INLINE_P (decl));
1737   else
1738     gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
1739                 || DECL_VTABLE_OR_VTT_P (decl)
1740                 || DECL_TINFO_P (decl));
1741   /* Check that a definition of DECL is available in this translation
1742      unit.  */
1743   gcc_assert (!DECL_REALLY_EXTERN (decl));
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   gcc_assert (!TYPE_HAS_TRIVIAL_DESTRUCTOR (type));
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_cst (NULL_TREE, priority));
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           gcc_assert (initp);
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   gcc_assert (!flag_use_cxa_atexit);
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       gcc_assert (TREE_CODE (decl) == VAR_DECL);
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, 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,
2599                                    build_int_cst (NULL_TREE, priority), 
2600                                    NULL_TREE);
2601             arguments = tree_cons (NULL_TREE,
2602                                    build_int_cst (NULL_TREE, constructor_p),
2603                                    arguments);
2604             finish_expr_stmt (build_function_call (fndecl, arguments));
2605           }
2606       }
2607
2608   /* If we're generating code for the DEFAULT_INIT_PRIORITY, throw in
2609      calls to any functions marked with attributes indicating that
2610      they should be called at initialization- or destruction-time.  */
2611   if (priority == DEFAULT_INIT_PRIORITY)
2612     {
2613       tree fns;
2614
2615       for (fns = constructor_p ? static_ctors : static_dtors; 
2616            fns;
2617            fns = TREE_CHAIN (fns))
2618         {
2619           fndecl = TREE_VALUE (fns);
2620
2621           /* Calls to pure/const functions will expand to nothing.  */
2622           if (! (flags_from_decl_or_type (fndecl) & (ECF_CONST | ECF_PURE)))
2623             {
2624               if (! body)
2625                 body = start_objects (function_key, priority);
2626               finish_expr_stmt (build_function_call (fndecl, NULL_TREE));
2627             }
2628         }
2629     }
2630
2631   /* Close out the function.  */
2632   if (body)
2633     finish_objects (function_key, priority, body);
2634 }
2635
2636 /* Generate constructor and destructor functions for the priority
2637    indicated by N.  */
2638
2639 static int
2640 generate_ctor_and_dtor_functions_for_priority (splay_tree_node n, void * data)
2641 {
2642   location_t *locus = data;
2643   int priority = (int) n->key;
2644   priority_info pi = (priority_info) n->value;
2645
2646   /* Generate the functions themselves, but only if they are really
2647      needed.  */
2648   if (pi->initializations_p
2649       || (priority == DEFAULT_INIT_PRIORITY && static_ctors))
2650     generate_ctor_or_dtor_function (/*constructor_p=*/true, priority, locus);
2651   if (pi->destructions_p
2652       || (priority == DEFAULT_INIT_PRIORITY && static_dtors))
2653     generate_ctor_or_dtor_function (/*constructor_p=*/false, priority, locus);
2654
2655   /* Keep iterating.  */
2656   return 0;
2657 }
2658
2659 /* Called via LANGHOOK_CALLGRAPH_ANALYZE_EXPR.  It is supposed to mark
2660    decls referenced from frontend specific constructs; it will be called
2661    only for language-specific tree nodes.
2662
2663    Here we must deal with member pointers.  */
2664
2665 tree
2666 cxx_callgraph_analyze_expr (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
2667                             tree from ATTRIBUTE_UNUSED)
2668 {
2669   tree t = *tp;
2670
2671   switch (TREE_CODE (t))
2672     {
2673     case PTRMEM_CST:
2674       if (TYPE_PTRMEMFUNC_P (TREE_TYPE (t)))
2675         cgraph_mark_needed_node (cgraph_node (PTRMEM_CST_MEMBER (t)));
2676       break;
2677     case BASELINK:
2678       if (TREE_CODE (BASELINK_FUNCTIONS (t)) == FUNCTION_DECL)
2679         cgraph_mark_needed_node (cgraph_node (BASELINK_FUNCTIONS (t)));
2680       break;
2681     case VAR_DECL:
2682       if (DECL_VTABLE_OR_VTT_P (t))
2683         {
2684           /* The ABI requires that all virtual tables be emitted
2685              whenever one of them is.  */
2686           tree vtbl;
2687           for (vtbl = CLASSTYPE_VTABLES (DECL_CONTEXT (t));
2688                vtbl;
2689                vtbl = TREE_CHAIN (vtbl))
2690             mark_decl_referenced (vtbl);
2691         }
2692       else if (DECL_CONTEXT (t) 
2693                && TREE_CODE (DECL_CONTEXT (t)) == FUNCTION_DECL)
2694         /* If we need a static variable in a function, then we
2695            need the containing function.  */
2696         mark_decl_referenced (DECL_CONTEXT (t));
2697       break;
2698     default:
2699       break;
2700     }
2701
2702   return NULL;
2703 }
2704
2705 /* This routine is called from the last rule in yyparse ().
2706    Its job is to create all the code needed to initialize and
2707    destroy the global aggregates.  We do the destruction
2708    first, since that way we only need to reverse the decls once.  */
2709
2710 void
2711 finish_file (void)
2712 {
2713   tree vars;
2714   bool reconsider;
2715   size_t i;
2716   location_t locus;
2717   unsigned ssdf_count = 0;
2718   int retries = 0;
2719
2720   locus = input_location;
2721   at_eof = 1;
2722
2723   /* Bad parse errors.  Just forget about it.  */
2724   if (! global_bindings_p () || current_class_type || decl_namespace_list)
2725     return;
2726
2727   if (pch_file)
2728     c_common_write_pch ();
2729
2730 #ifdef USE_MAPPED_LOCATION
2731   /* FIXME - huh? */
2732 #else
2733   /* Otherwise, GDB can get confused, because in only knows
2734      about source for LINENO-1 lines.  */
2735   input_line -= 1;
2736 #endif
2737
2738   interface_unknown = 1;
2739   interface_only = 0;
2740
2741   /* We now have to write out all the stuff we put off writing out.
2742      These include:
2743
2744        o Template specializations that we have not yet instantiated,
2745          but which are needed.
2746        o Initialization and destruction for non-local objects with
2747          static storage duration.  (Local objects with static storage
2748          duration are initialized when their scope is first entered,
2749          and are cleaned up via atexit.)
2750        o Virtual function tables.  
2751
2752      All of these may cause others to be needed.  For example,
2753      instantiating one function may cause another to be needed, and
2754      generating the initializer for an object may cause templates to be
2755      instantiated, etc., etc.  */
2756
2757   timevar_push (TV_VARCONST);
2758
2759   emit_support_tinfos ();
2760
2761   do 
2762     {
2763       tree t;
2764       size_t n_old, n_new;
2765
2766       reconsider = false;
2767
2768       /* If there are templates that we've put off instantiating, do
2769          them now.  */
2770       instantiate_pending_templates (retries);
2771       ggc_collect ();
2772
2773       /* Write out virtual tables as required.  Note that writing out
2774          the virtual table for a template class may cause the
2775          instantiation of members of that class.  If we write out
2776          vtables then we remove the class from our list so we don't
2777          have to look at it again.  */
2778
2779       while (keyed_classes != NULL_TREE
2780              && maybe_emit_vtables (TREE_VALUE (keyed_classes)))
2781         {
2782           reconsider = true;
2783           keyed_classes = TREE_CHAIN (keyed_classes);
2784         }
2785  
2786       t = keyed_classes;
2787       if (t != NULL_TREE)
2788         {
2789           tree next = TREE_CHAIN (t);
2790  
2791           while (next)
2792             {
2793               if (maybe_emit_vtables (TREE_VALUE (next)))
2794                 {
2795                   reconsider = true;
2796                   TREE_CHAIN (t) = TREE_CHAIN (next);
2797                 }
2798               else
2799                 t = next;
2800  
2801               next = TREE_CHAIN (t);
2802             }
2803         }
2804
2805       /* Write out needed type info variables.  We have to be careful
2806          looping through unemitted decls, because emit_tinfo_decl may
2807          cause other variables to be needed.  We stick new elements
2808          (and old elements that we may need to reconsider) at the end
2809          of the array, then shift them back to the beginning once we're
2810          done.  */
2811
2812       n_old = VARRAY_ACTIVE_SIZE (unemitted_tinfo_decls);
2813       for (i = 0; i < n_old; ++i)
2814         {
2815           tree tinfo_decl = VARRAY_TREE (unemitted_tinfo_decls, i);
2816           if (emit_tinfo_decl (tinfo_decl))
2817             reconsider = true;
2818           else
2819             VARRAY_PUSH_TREE (unemitted_tinfo_decls, tinfo_decl);
2820         }
2821   
2822       /* The only elements we want to keep are the new ones.  Copy
2823          them to the beginning of the array, then get rid of the
2824          leftovers.  */
2825       n_new = VARRAY_ACTIVE_SIZE (unemitted_tinfo_decls) - n_old;
2826       if (n_new)
2827         memmove (&VARRAY_TREE (unemitted_tinfo_decls, 0),
2828                  &VARRAY_TREE (unemitted_tinfo_decls, n_old),
2829                  n_new * sizeof (tree));
2830       memset (&VARRAY_TREE (unemitted_tinfo_decls, n_new),
2831               0, n_old * sizeof (tree));
2832       VARRAY_ACTIVE_SIZE (unemitted_tinfo_decls) = n_new;
2833
2834       /* The list of objects with static storage duration is built up
2835          in reverse order.  We clear STATIC_AGGREGATES so that any new
2836          aggregates added during the initialization of these will be
2837          initialized in the correct order when we next come around the
2838          loop.  */
2839       vars = prune_vars_needing_no_initialization (&static_aggregates);
2840
2841       if (vars)
2842         {
2843           tree v;
2844
2845           /* We need to start a new initialization function each time
2846              through the loop.  That's because we need to know which
2847              vtables have been referenced, and TREE_SYMBOL_REFERENCED
2848              isn't computed until a function is finished, and written
2849              out.  That's a deficiency in the back-end.  When this is
2850              fixed, these initialization functions could all become
2851              inline, with resulting performance improvements.  */
2852           tree ssdf_body;
2853
2854           /* Set the line and file, so that it is obviously not from
2855              the source file.  */
2856           input_location = locus;
2857           ssdf_body = start_static_storage_duration_function (ssdf_count);
2858
2859           /* Make sure the back end knows about all the variables.  */
2860           write_out_vars (vars);
2861
2862           /* First generate code to do all the initializations.  */
2863           for (v = vars; v; v = TREE_CHAIN (v))
2864             do_static_initialization (TREE_VALUE (v),
2865                                       TREE_PURPOSE (v));
2866
2867           /* Then, generate code to do all the destructions.  Do these
2868              in reverse order so that the most recently constructed
2869              variable is the first destroyed.  If we're using
2870              __cxa_atexit, then we don't need to do this; functions
2871              were registered at initialization time to destroy the
2872              local statics.  */
2873           if (!flag_use_cxa_atexit)
2874             {
2875               vars = nreverse (vars);
2876               for (v = vars; v; v = TREE_CHAIN (v))
2877                 do_static_destruction (TREE_VALUE (v));
2878             }
2879           else
2880             vars = NULL_TREE;
2881
2882           /* Finish up the static storage duration function for this
2883              round.  */
2884           input_location = locus;
2885           finish_static_storage_duration_function (ssdf_body);
2886
2887           /* All those initializations and finalizations might cause
2888              us to need more inline functions, more template
2889              instantiations, etc.  */
2890           reconsider = true;
2891           ssdf_count++;
2892 #ifdef USE_MAPPED_LOCATION
2893           /* ??? */
2894 #else
2895           locus.line++;
2896 #endif
2897         }
2898       
2899       /* Go through the set of inline functions whose bodies have not
2900          been emitted yet.  If out-of-line copies of these functions
2901          are required, emit them.  */
2902       for (i = 0; i < deferred_fns_used; ++i)
2903         {
2904           tree decl = VARRAY_TREE (deferred_fns, i);
2905
2906           /* Does it need synthesizing?  */
2907           if (DECL_ARTIFICIAL (decl) && ! DECL_INITIAL (decl)
2908               && (! DECL_REALLY_EXTERN (decl) || DECL_INLINE (decl)))
2909             {
2910               /* Even though we're already at the top-level, we push
2911                  there again.  That way, when we pop back a few lines
2912                  hence, all of our state is restored.  Otherwise,
2913                  finish_function doesn't clean things up, and we end
2914                  up with CURRENT_FUNCTION_DECL set.  */
2915               push_to_top_level ();
2916               synthesize_method (decl);
2917               pop_from_top_level ();
2918               reconsider = true;
2919             }
2920
2921           if (!DECL_SAVED_TREE (decl))
2922             continue;
2923
2924           import_export_decl (decl);
2925
2926           /* We lie to the back-end, pretending that some functions
2927              are not defined when they really are.  This keeps these
2928              functions from being put out unnecessarily.  But, we must
2929              stop lying when the functions are referenced, or if they
2930              are not comdat since they need to be put out now.  This
2931              is done in a separate for cycle, because if some deferred
2932              function is contained in another deferred function later
2933              in deferred_fns varray, rest_of_compilation would skip
2934              this function and we really cannot expand the same
2935              function twice.  */
2936           if (DECL_NOT_REALLY_EXTERN (decl)
2937               && DECL_INITIAL (decl)
2938               && decl_needed_p (decl))
2939             DECL_EXTERNAL (decl) = 0;
2940
2941           /* If we're going to need to write this function out, and
2942              there's already a body for it, create RTL for it now.
2943              (There might be no body if this is a method we haven't
2944              gotten around to synthesizing yet.)  */
2945           if (!DECL_EXTERNAL (decl)
2946               && decl_needed_p (decl)
2947               && !TREE_ASM_WRITTEN (decl)
2948               && !cgraph_node (decl)->local.finalized)
2949             {
2950               /* We will output the function; no longer consider it in this
2951                  loop.  */
2952               DECL_DEFER_OUTPUT (decl) = 0;
2953               /* Generate RTL for this function now that we know we
2954                  need it.  */
2955               expand_or_defer_fn (decl);
2956               /* If we're compiling -fsyntax-only pretend that this
2957                  function has been written out so that we don't try to
2958                  expand it again.  */
2959               if (flag_syntax_only)
2960                 TREE_ASM_WRITTEN (decl) = 1;
2961               reconsider = true;
2962             }
2963         }
2964
2965       if (walk_namespaces (wrapup_globals_for_namespace, /*data=*/0))
2966         reconsider = true;
2967
2968       /* Static data members are just like namespace-scope globals.  */
2969       for (i = 0; i < pending_statics_used; ++i) 
2970         {
2971           tree decl = VARRAY_TREE (pending_statics, i);
2972           if (var_finalized_p (decl) || DECL_REALLY_EXTERN (decl))
2973             continue;
2974           import_export_decl (decl);
2975           /* If this static data member is needed, provide it to the
2976              back end.  */
2977           if (DECL_NOT_REALLY_EXTERN (decl) && decl_needed_p (decl))
2978             DECL_EXTERNAL (decl) = 0;
2979         }
2980       if (pending_statics
2981           && wrapup_global_declarations (&VARRAY_TREE (pending_statics, 0),
2982                                          pending_statics_used))
2983         reconsider = true;
2984
2985       /* Ask the back end to emit functions and variables that are
2986          enqued.  These emissions may result in marking more entities
2987          as needed.  */
2988       if (cgraph_assemble_pending_functions ())
2989         reconsider = true;
2990       if (cgraph_varpool_assemble_pending_decls ())
2991         reconsider = true;
2992
2993       retries++;
2994     } 
2995   while (reconsider);
2996
2997   /* All used inline functions must have a definition at this point.  */
2998   for (i = 0; i < deferred_fns_used; ++i)
2999     {
3000       tree decl = VARRAY_TREE (deferred_fns, i);
3001
3002       if (/* Check online inline functions that were actually used.  */
3003           TREE_USED (decl) && DECL_DECLARED_INLINE_P (decl)
3004           /* But not defined.  */
3005           && DECL_REALLY_EXTERN (decl)
3006           /* If we decided to emit this function in another
3007              translation unit, the fact that the definition was
3008              missing here likely indicates only that the repository
3009              decided to place the function elsewhere.  With -Winline,
3010              we will still warn if we could not inline the
3011              function.  */
3012           && !flag_use_repository
3013           /* An explicit instantiation can be used to specify
3014              that the body is in another unit. It will have
3015              already verified there was a definition.  */
3016           && !DECL_EXPLICIT_INSTANTIATION (decl))
3017         {
3018           cp_warning_at ("inline function `%D' used but never defined", decl);
3019           /* This symbol is effectively an "extern" declaration now.
3020              This is not strictly necessary, but removes a duplicate
3021              warning.  */
3022           TREE_PUBLIC (decl) = 1;
3023         }
3024     }
3025   
3026   /* We give C linkage to static constructors and destructors.  */
3027   push_lang_context (lang_name_c);
3028
3029   /* Generate initialization and destruction functions for all
3030      priorities for which they are required.  */
3031   if (priority_info_map)
3032     splay_tree_foreach (priority_info_map, 
3033                         generate_ctor_and_dtor_functions_for_priority,
3034                         /*data=*/&locus);
3035   else
3036     {
3037       
3038       if (static_ctors)
3039         generate_ctor_or_dtor_function (/*constructor_p=*/true,
3040                                         DEFAULT_INIT_PRIORITY, &locus);
3041       if (static_dtors)
3042         generate_ctor_or_dtor_function (/*constructor_p=*/false,
3043                                         DEFAULT_INIT_PRIORITY, &locus);
3044     }
3045
3046   /* We're done with the splay-tree now.  */
3047   if (priority_info_map)
3048     splay_tree_delete (priority_info_map);
3049
3050   /* We're done with static constructors, so we can go back to "C++"
3051      linkage now.  */
3052   pop_lang_context ();
3053
3054   cgraph_finalize_compilation_unit ();
3055   cgraph_optimize ();
3056
3057   /* Emit mudflap static registration function.  This must be done
3058      after all the user functions have been expanded.  */
3059   if (flag_mudflap)
3060     mudflap_finish_file ();
3061
3062   /* Now, issue warnings about static, but not defined, functions,
3063      etc., and emit debugging information.  */
3064   walk_namespaces (wrapup_globals_for_namespace, /*data=*/&reconsider);
3065   if (pending_statics)
3066     check_global_declarations (&VARRAY_TREE (pending_statics, 0),
3067                                pending_statics_used);
3068
3069   finish_repo ();
3070
3071   /* The entire file is now complete.  If requested, dump everything
3072      to a file.  */
3073   {
3074     int flags;
3075     FILE *stream = dump_begin (TDI_tu, &flags);
3076
3077     if (stream)
3078       {
3079         dump_node (global_namespace, flags & ~TDF_SLIM, stream);
3080         dump_end (TDI_tu, stream);
3081       }
3082   }
3083   
3084   timevar_pop (TV_VARCONST);
3085
3086   if (flag_detailed_statistics)
3087     {
3088       dump_tree_statistics ();
3089       dump_time_statistics ();
3090     }
3091   input_location = locus;
3092
3093 #ifdef ENABLE_CHECKING
3094   validate_conversion_obstack ();
3095 #endif /* ENABLE_CHECKING */
3096 }
3097
3098 /* FN is an OFFSET_REF, DOTSTAR_EXPR or MEMBER_REF indicating the
3099    function to call in parse-tree form; it has not yet been
3100    semantically analyzed.  ARGS are the arguments to the function.
3101    They have already been semantically analyzed.  */
3102
3103 tree
3104 build_offset_ref_call_from_tree (tree fn, tree args)
3105 {
3106   tree orig_fn;
3107   tree orig_args;
3108   tree expr;
3109   tree object;
3110
3111   orig_fn = fn;
3112   orig_args = args;
3113   object = TREE_OPERAND (fn, 0);
3114
3115   if (processing_template_decl)
3116     {
3117       gcc_assert (TREE_CODE (fn) == DOTSTAR_EXPR
3118                   || TREE_CODE (fn) == MEMBER_REF);
3119       if (type_dependent_expression_p (fn)
3120           || any_type_dependent_arguments_p (args))
3121         return build_min_nt (CALL_EXPR, fn, args, NULL_TREE);
3122
3123       /* Transform the arguments and add the implicit "this"
3124          parameter.  That must be done before the FN is transformed
3125          because we depend on the form of FN.  */
3126       args = build_non_dependent_args (args);
3127       if (TREE_CODE (fn) == DOTSTAR_EXPR)
3128         object = build_unary_op (ADDR_EXPR, object, 0);
3129       object = build_non_dependent_expr (object);
3130       args = tree_cons (NULL_TREE, object, args);
3131       /* Now that the arguments are done, transform FN.  */
3132       fn = build_non_dependent_expr (fn);
3133     }
3134
3135   /* A qualified name corresponding to a bound pointer-to-member is
3136      represented as an OFFSET_REF:
3137
3138         struct B { void g(); };
3139         void (B::*p)();
3140         void B::g() { (this->*p)(); }  */
3141   if (TREE_CODE (fn) == OFFSET_REF)
3142     {
3143       tree object_addr = build_unary_op (ADDR_EXPR, object, 0);
3144       fn = TREE_OPERAND (fn, 1);
3145       fn = get_member_function_from_ptrfunc (&object_addr, fn);
3146       args = tree_cons (NULL_TREE, object_addr, args);
3147     }
3148
3149   expr = build_function_call (fn, args);
3150   if (processing_template_decl && expr != error_mark_node)
3151     return build_min_non_dep (CALL_EXPR, expr, orig_fn, orig_args, NULL_TREE);
3152   return expr;
3153 }
3154   
3155
3156 void
3157 check_default_args (tree x)
3158 {
3159   tree arg = TYPE_ARG_TYPES (TREE_TYPE (x));
3160   bool saw_def = false;
3161   int i = 0 - (TREE_CODE (TREE_TYPE (x)) == METHOD_TYPE);
3162   for (; arg && arg != void_list_node; arg = TREE_CHAIN (arg), ++i)
3163     {
3164       if (TREE_PURPOSE (arg))
3165         saw_def = true;
3166       else if (saw_def)
3167         {
3168           cp_error_at ("default argument missing for parameter %P of `%+#D'",
3169                        i, x);
3170           break;
3171         }
3172     }
3173 }
3174
3175 void
3176 mark_used (tree decl)
3177 {
3178   TREE_USED (decl) = 1;
3179   if (processing_template_decl || skip_evaluation)
3180     return;
3181
3182   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl)
3183       && !TREE_ASM_WRITTEN (decl))
3184     /* Remember it, so we can check it was defined.  */
3185     {
3186       if (DECL_DEFERRED_FN (decl))
3187         return;
3188       note_vague_linkage_fn (decl);
3189     }
3190   
3191   assemble_external (decl);
3192
3193   /* Is it a synthesized method that needs to be synthesized?  */
3194   if (TREE_CODE (decl) == FUNCTION_DECL
3195       && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl)
3196       && DECL_ARTIFICIAL (decl) 
3197       && !DECL_THUNK_P (decl)
3198       && ! DECL_INITIAL (decl)
3199       /* Kludge: don't synthesize for default args.  */
3200       && current_function_decl)
3201     {
3202       synthesize_method (decl);
3203       /* If we've already synthesized the method we don't need to
3204          instantiate it, so we can return right away.  */
3205       return;
3206     }
3207
3208   /* If this is a function or variable that is an instance of some
3209      template, we now know that we will need to actually do the
3210      instantiation. We check that DECL is not an explicit
3211      instantiation because that is not checked in instantiate_decl.  */
3212   if ((DECL_NON_THUNK_FUNCTION_P (decl) || TREE_CODE (decl) == VAR_DECL)
3213       && DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)
3214       && (!DECL_EXPLICIT_INSTANTIATION (decl)
3215           || (TREE_CODE (decl) == FUNCTION_DECL 
3216               && DECL_INLINE (DECL_TEMPLATE_RESULT 
3217                               (template_for_substitution (decl))))))
3218     /* We put off instantiating functions in order to improve compile
3219        times.  Maintaining a stack of active functions is expensive,
3220        and the inliner knows to instantiate any functions it might
3221        need.  */
3222     instantiate_decl (decl, /*defer_ok=*/true, /*undefined_ok=*/0);
3223 }
3224
3225 #include "gt-cp-decl2.h"