OSDN Git Service

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