OSDN Git Service

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