OSDN Git Service

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