OSDN Git Service

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