xref: /dragonfly/contrib/gcc-4.7/gcc/cp/decl2.c (revision dc71b7ab)
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, 2007, 2008, 2009, 2010,
4    2011 Free Software Foundation, Inc.
5    Hacked by Michael Tiemann (tiemann@cygnus.com)
6 
7 This file is part of GCC.
8 
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
13 
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18 
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3.  If not see
21 <http://www.gnu.org/licenses/>.  */
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 "flags.h"
37 #include "cp-tree.h"
38 #include "decl.h"
39 #include "output.h"
40 #include "toplev.h"
41 #include "timevar.h"
42 #include "cpplib.h"
43 #include "target.h"
44 #include "c-family/c-common.h"
45 #include "c-family/c-objc.h"
46 #include "cgraph.h"
47 #include "tree-inline.h"
48 #include "c-family/c-pragma.h"
49 #include "tree-dump.h"
50 #include "intl.h"
51 #include "gimple.h"
52 #include "pointer-set.h"
53 #include "splay-tree.h"
54 #include "langhooks.h"
55 #include "c-family/c-ada-spec.h"
56 
57 extern cpp_reader *parse_in;
58 
59 /* This structure contains information about the initializations
60    and/or destructions required for a particular priority level.  */
61 typedef struct priority_info_s {
62   /* Nonzero if there have been any initializations at this priority
63      throughout the translation unit.  */
64   int initializations_p;
65   /* Nonzero if there have been any destructions at this priority
66      throughout the translation unit.  */
67   int destructions_p;
68 } *priority_info;
69 
70 static void mark_vtable_entries (tree);
71 static bool maybe_emit_vtables (tree);
72 static bool acceptable_java_type (tree);
73 static tree start_objects (int, int);
74 static void finish_objects (int, int, tree);
75 static tree start_static_storage_duration_function (unsigned);
76 static void finish_static_storage_duration_function (tree);
77 static priority_info get_priority_info (int);
78 static void do_static_initialization_or_destruction (tree, bool);
79 static void one_static_initialization_or_destruction (tree, tree, bool);
80 static void generate_ctor_or_dtor_function (bool, int, location_t *);
81 static int generate_ctor_and_dtor_functions_for_priority (splay_tree_node,
82 							  void *);
83 static tree prune_vars_needing_no_initialization (tree *);
84 static void write_out_vars (tree);
85 static void import_export_class (tree);
86 static tree get_guard_bits (tree);
87 static void determine_visibility_from_class (tree, tree);
88 static bool determine_hidden_inline (tree);
89 static bool decl_defined_p (tree);
90 
91 /* A list of static class variables.  This is needed, because a
92    static class variable can be declared inside the class without
93    an initializer, and then initialized, statically, outside the class.  */
94 static GTY(()) VEC(tree,gc) *pending_statics;
95 
96 /* A list of functions which were declared inline, but which we
97    may need to emit outline anyway.  */
98 static GTY(()) VEC(tree,gc) *deferred_fns;
99 
100 /* A list of decls that use types with no linkage, which we need to make
101    sure are defined.  */
102 static GTY(()) VEC(tree,gc) *no_linkage_decls;
103 
104 /* Nonzero if we're done parsing and into end-of-file activities.  */
105 
106 int at_eof;
107 
108 
109 
110 /* Return a member function type (a METHOD_TYPE), given FNTYPE (a
111    FUNCTION_TYPE), CTYPE (class type), and QUALS (the cv-qualifiers
112    that apply to the function).  */
113 
114 tree
115 build_memfn_type (tree fntype, tree ctype, cp_cv_quals quals)
116 {
117   tree raises;
118   tree attrs;
119   int type_quals;
120 
121   if (fntype == error_mark_node || ctype == error_mark_node)
122     return error_mark_node;
123 
124   gcc_assert (TREE_CODE (fntype) == FUNCTION_TYPE
125 	      || TREE_CODE (fntype) == METHOD_TYPE);
126 
127   type_quals = quals & ~TYPE_QUAL_RESTRICT;
128   ctype = cp_build_qualified_type (ctype, type_quals);
129   raises = TYPE_RAISES_EXCEPTIONS (fntype);
130   attrs = TYPE_ATTRIBUTES (fntype);
131   fntype = build_method_type_directly (ctype, TREE_TYPE (fntype),
132 				       (TREE_CODE (fntype) == METHOD_TYPE
133 					? TREE_CHAIN (TYPE_ARG_TYPES (fntype))
134 					: TYPE_ARG_TYPES (fntype)));
135   if (raises)
136     fntype = build_exception_variant (fntype, raises);
137   if (attrs)
138     fntype = cp_build_type_attribute_variant (fntype, attrs);
139 
140   return fntype;
141 }
142 
143 /* Return a variant of FNTYPE, a FUNCTION_TYPE or METHOD_TYPE, with its
144    return type changed to NEW_RET.  */
145 
146 tree
147 change_return_type (tree new_ret, tree fntype)
148 {
149   tree newtype;
150   tree args = TYPE_ARG_TYPES (fntype);
151   tree raises = TYPE_RAISES_EXCEPTIONS (fntype);
152   tree attrs = TYPE_ATTRIBUTES (fntype);
153 
154   if (same_type_p (new_ret, TREE_TYPE (fntype)))
155     return fntype;
156 
157   if (TREE_CODE (fntype) == FUNCTION_TYPE)
158     {
159       newtype = build_function_type (new_ret, args);
160       newtype = apply_memfn_quals (newtype, type_memfn_quals (fntype));
161     }
162   else
163     newtype = build_method_type_directly
164       (class_of_this_parm (fntype), new_ret, TREE_CHAIN (args));
165   if (raises)
166     newtype = build_exception_variant (newtype, raises);
167   if (attrs)
168     newtype = cp_build_type_attribute_variant (newtype, attrs);
169 
170   return newtype;
171 }
172 
173 /* Build a PARM_DECL with NAME and TYPE, and set DECL_ARG_TYPE
174    appropriately.  */
175 
176 tree
177 cp_build_parm_decl (tree name, tree type)
178 {
179   tree parm = build_decl (input_location,
180 			  PARM_DECL, name, type);
181   /* DECL_ARG_TYPE is only used by the back end and the back end never
182      sees templates.  */
183   if (!processing_template_decl)
184     DECL_ARG_TYPE (parm) = type_passed_as (type);
185 
186   /* If the type is a pack expansion, then we have a function
187      parameter pack. */
188   if (type && TREE_CODE (type) == TYPE_PACK_EXPANSION)
189     FUNCTION_PARAMETER_PACK_P (parm) = 1;
190 
191   return parm;
192 }
193 
194 /* Returns a PARM_DECL for a parameter of the indicated TYPE, with the
195    indicated NAME.  */
196 
197 tree
198 build_artificial_parm (tree name, tree type)
199 {
200   tree parm = cp_build_parm_decl (name, type);
201   DECL_ARTIFICIAL (parm) = 1;
202   /* All our artificial parms are implicitly `const'; they cannot be
203      assigned to.  */
204   TREE_READONLY (parm) = 1;
205   return parm;
206 }
207 
208 /* Constructors for types with virtual baseclasses need an "in-charge" flag
209    saying whether this constructor is responsible for initialization of
210    virtual baseclasses or not.  All destructors also need this "in-charge"
211    flag, which additionally determines whether or not the destructor should
212    free the memory for the object.
213 
214    This function adds the "in-charge" flag to member function FN if
215    appropriate.  It is called from grokclassfn and tsubst.
216    FN must be either a constructor or destructor.
217 
218    The in-charge flag follows the 'this' parameter, and is followed by the
219    VTT parm (if any), then the user-written parms.  */
220 
221 void
222 maybe_retrofit_in_chrg (tree fn)
223 {
224   tree basetype, arg_types, parms, parm, fntype;
225 
226   /* If we've already add the in-charge parameter don't do it again.  */
227   if (DECL_HAS_IN_CHARGE_PARM_P (fn))
228     return;
229 
230   /* When processing templates we can't know, in general, whether or
231      not we're going to have virtual baseclasses.  */
232   if (processing_template_decl)
233     return;
234 
235   /* We don't need an in-charge parameter for constructors that don't
236      have virtual bases.  */
237   if (DECL_CONSTRUCTOR_P (fn)
238       && !CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fn)))
239     return;
240 
241   arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
242   basetype = TREE_TYPE (TREE_VALUE (arg_types));
243   arg_types = TREE_CHAIN (arg_types);
244 
245   parms = DECL_CHAIN (DECL_ARGUMENTS (fn));
246 
247   /* If this is a subobject constructor or destructor, our caller will
248      pass us a pointer to our VTT.  */
249   if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fn)))
250     {
251       parm = build_artificial_parm (vtt_parm_identifier, vtt_parm_type);
252 
253       /* First add it to DECL_ARGUMENTS between 'this' and the real args...  */
254       DECL_CHAIN (parm) = parms;
255       parms = parm;
256 
257       /* ...and then to TYPE_ARG_TYPES.  */
258       arg_types = hash_tree_chain (vtt_parm_type, arg_types);
259 
260       DECL_HAS_VTT_PARM_P (fn) = 1;
261     }
262 
263   /* Then add the in-charge parm (before the VTT parm).  */
264   parm = build_artificial_parm (in_charge_identifier, integer_type_node);
265   DECL_CHAIN (parm) = parms;
266   parms = parm;
267   arg_types = hash_tree_chain (integer_type_node, arg_types);
268 
269   /* Insert our new parameter(s) into the list.  */
270   DECL_CHAIN (DECL_ARGUMENTS (fn)) = parms;
271 
272   /* And rebuild the function type.  */
273   fntype = build_method_type_directly (basetype, TREE_TYPE (TREE_TYPE (fn)),
274 				       arg_types);
275   if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn)))
276     fntype = build_exception_variant (fntype,
277 				      TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn)));
278   if (TYPE_ATTRIBUTES (TREE_TYPE (fn)))
279     fntype = (cp_build_type_attribute_variant
280 	      (fntype, TYPE_ATTRIBUTES (TREE_TYPE (fn))));
281   TREE_TYPE (fn) = fntype;
282 
283   /* Now we've got the in-charge parameter.  */
284   DECL_HAS_IN_CHARGE_PARM_P (fn) = 1;
285 }
286 
287 /* Classes overload their constituent function names automatically.
288    When a function name is declared in a record structure,
289    its name is changed to it overloaded name.  Since names for
290    constructors and destructors can conflict, we place a leading
291    '$' for destructors.
292 
293    CNAME is the name of the class we are grokking for.
294 
295    FUNCTION is a FUNCTION_DECL.  It was created by `grokdeclarator'.
296 
297    FLAGS contains bits saying what's special about today's
298    arguments.  DTOR_FLAG == DESTRUCTOR.
299 
300    If FUNCTION is a destructor, then we must add the `auto-delete' field
301    as a second parameter.  There is some hair associated with the fact
302    that we must "declare" this variable in the manner consistent with the
303    way the rest of the arguments were declared.
304 
305    QUALS are the qualifiers for the this pointer.  */
306 
307 void
308 grokclassfn (tree ctype, tree function, enum overload_flags flags)
309 {
310   tree fn_name = DECL_NAME (function);
311 
312   /* Even within an `extern "C"' block, members get C++ linkage.  See
313      [dcl.link] for details.  */
314   SET_DECL_LANGUAGE (function, lang_cplusplus);
315 
316   if (fn_name == NULL_TREE)
317     {
318       error ("name missing for member function");
319       fn_name = get_identifier ("<anonymous>");
320       DECL_NAME (function) = fn_name;
321     }
322 
323   DECL_CONTEXT (function) = ctype;
324 
325   if (flags == DTOR_FLAG)
326     DECL_DESTRUCTOR_P (function) = 1;
327 
328   if (flags == DTOR_FLAG || DECL_CONSTRUCTOR_P (function))
329     maybe_retrofit_in_chrg (function);
330 }
331 
332 /* Create an ARRAY_REF, checking for the user doing things backwards
333    along the way.  */
334 
335 tree
336 grok_array_decl (tree array_expr, tree index_exp)
337 {
338   tree type;
339   tree expr;
340   tree orig_array_expr = array_expr;
341   tree orig_index_exp = index_exp;
342 
343   if (error_operand_p (array_expr) || error_operand_p (index_exp))
344     return error_mark_node;
345 
346   if (processing_template_decl)
347     {
348       if (type_dependent_expression_p (array_expr)
349 	  || type_dependent_expression_p (index_exp))
350 	return build_min_nt (ARRAY_REF, array_expr, index_exp,
351 			     NULL_TREE, NULL_TREE);
352       array_expr = build_non_dependent_expr (array_expr);
353       index_exp = build_non_dependent_expr (index_exp);
354     }
355 
356   type = TREE_TYPE (array_expr);
357   gcc_assert (type);
358   type = non_reference (type);
359 
360   /* If they have an `operator[]', use that.  */
361   if (MAYBE_CLASS_TYPE_P (type) || MAYBE_CLASS_TYPE_P (TREE_TYPE (index_exp)))
362     expr = build_new_op (ARRAY_REF, LOOKUP_NORMAL,
363 			 array_expr, index_exp, NULL_TREE,
364 			 /*overload=*/NULL, tf_warning_or_error);
365   else
366     {
367       tree p1, p2, i1, i2;
368 
369       /* Otherwise, create an ARRAY_REF for a pointer or array type.
370 	 It is a little-known fact that, if `a' is an array and `i' is
371 	 an int, you can write `i[a]', which means the same thing as
372 	 `a[i]'.  */
373       if (TREE_CODE (type) == ARRAY_TYPE)
374 	p1 = array_expr;
375       else
376 	p1 = build_expr_type_conversion (WANT_POINTER, array_expr, false);
377 
378       if (TREE_CODE (TREE_TYPE (index_exp)) == ARRAY_TYPE)
379 	p2 = index_exp;
380       else
381 	p2 = build_expr_type_conversion (WANT_POINTER, index_exp, false);
382 
383       i1 = build_expr_type_conversion (WANT_INT | WANT_ENUM, array_expr,
384 				       false);
385       i2 = build_expr_type_conversion (WANT_INT | WANT_ENUM, index_exp,
386 				       false);
387 
388       if ((p1 && i2) && (i1 && p2))
389 	error ("ambiguous conversion for array subscript");
390 
391       if (p1 && i2)
392 	array_expr = p1, index_exp = i2;
393       else if (i1 && p2)
394 	array_expr = p2, index_exp = i1;
395       else
396 	{
397 	  error ("invalid types %<%T[%T]%> for array subscript",
398 		 type, TREE_TYPE (index_exp));
399 	  return error_mark_node;
400 	}
401 
402       if (array_expr == error_mark_node || index_exp == error_mark_node)
403 	error ("ambiguous conversion for array subscript");
404 
405       expr = build_array_ref (input_location, array_expr, index_exp);
406     }
407   if (processing_template_decl && expr != error_mark_node)
408     return build_min_non_dep (ARRAY_REF, expr, orig_array_expr, orig_index_exp,
409 			      NULL_TREE, NULL_TREE);
410   return expr;
411 }
412 
413 /* Given the cast expression EXP, checking out its validity.   Either return
414    an error_mark_node if there was an unavoidable error, return a cast to
415    void for trying to delete a pointer w/ the value 0, or return the
416    call to delete.  If DOING_VEC is true, we handle things differently
417    for doing an array delete.
418    Implements ARM $5.3.4.  This is called from the parser.  */
419 
420 tree
421 delete_sanity (tree exp, tree size, bool doing_vec, int use_global_delete,
422 	       tsubst_flags_t complain)
423 {
424   tree t, type;
425 
426   if (exp == error_mark_node)
427     return exp;
428 
429   if (processing_template_decl)
430     {
431       t = build_min (DELETE_EXPR, void_type_node, exp, size);
432       DELETE_EXPR_USE_GLOBAL (t) = use_global_delete;
433       DELETE_EXPR_USE_VEC (t) = doing_vec;
434       TREE_SIDE_EFFECTS (t) = 1;
435       return t;
436     }
437 
438   /* An array can't have been allocated by new, so complain.  */
439   if (TREE_CODE (exp) == VAR_DECL
440       && TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE)
441     warning (0, "deleting array %q#D", exp);
442 
443   t = build_expr_type_conversion (WANT_POINTER, exp, true);
444 
445   if (t == NULL_TREE || t == error_mark_node)
446     {
447       error ("type %q#T argument given to %<delete%>, expected pointer",
448 	     TREE_TYPE (exp));
449       return error_mark_node;
450     }
451 
452   type = TREE_TYPE (t);
453 
454   /* As of Valley Forge, you can delete a pointer to const.  */
455 
456   /* You can't delete functions.  */
457   if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
458     {
459       error ("cannot delete a function.  Only pointer-to-objects are "
460 	     "valid arguments to %<delete%>");
461       return error_mark_node;
462     }
463 
464   /* Deleting ptr to void is undefined behavior [expr.delete/3].  */
465   if (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE)
466     {
467       warning (0, "deleting %qT is undefined", type);
468       doing_vec = 0;
469     }
470 
471   /* Deleting a pointer with the value zero is valid and has no effect.  */
472   if (integer_zerop (t))
473     return build1 (NOP_EXPR, void_type_node, t);
474 
475   if (doing_vec)
476     return build_vec_delete (t, /*maxindex=*/NULL_TREE,
477 			     sfk_deleting_destructor,
478 			     use_global_delete, complain);
479   else
480     return build_delete (type, t, sfk_deleting_destructor,
481 			 LOOKUP_NORMAL, use_global_delete,
482 			 complain);
483 }
484 
485 /* Report an error if the indicated template declaration is not the
486    sort of thing that should be a member template.  */
487 
488 void
489 check_member_template (tree tmpl)
490 {
491   tree decl;
492 
493   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
494   decl = DECL_TEMPLATE_RESULT (tmpl);
495 
496   if (TREE_CODE (decl) == FUNCTION_DECL
497       || DECL_ALIAS_TEMPLATE_P (tmpl)
498       || (TREE_CODE (decl) == TYPE_DECL
499 	  && MAYBE_CLASS_TYPE_P (TREE_TYPE (decl))))
500     {
501       /* The parser rejects template declarations in local classes.  */
502       gcc_assert (!current_function_decl);
503       /* The parser rejects any use of virtual in a function template.  */
504       gcc_assert (!(TREE_CODE (decl) == FUNCTION_DECL
505 		    && DECL_VIRTUAL_P (decl)));
506 
507       /* The debug-information generating code doesn't know what to do
508 	 with member templates.  */
509       DECL_IGNORED_P (tmpl) = 1;
510     }
511   else
512     error ("template declaration of %q#D", decl);
513 }
514 
515 /* Return true iff TYPE is a valid Java parameter or return type.  */
516 
517 static bool
518 acceptable_java_type (tree type)
519 {
520   if (type == error_mark_node)
521     return false;
522 
523   if (TREE_CODE (type) == VOID_TYPE || TYPE_FOR_JAVA (type))
524     return true;
525   if (TREE_CODE (type) == POINTER_TYPE || TREE_CODE (type) == REFERENCE_TYPE)
526     {
527       type = TREE_TYPE (type);
528       if (TREE_CODE (type) == RECORD_TYPE)
529 	{
530 	  tree args;  int i;
531 	  if (! TYPE_FOR_JAVA (type))
532 	    return false;
533 	  if (! CLASSTYPE_TEMPLATE_INFO (type))
534 	    return true;
535 	  args = CLASSTYPE_TI_ARGS (type);
536 	  i = TREE_VEC_LENGTH (args);
537 	  while (--i >= 0)
538 	    {
539 	      type = TREE_VEC_ELT (args, i);
540 	      if (TREE_CODE (type) == POINTER_TYPE)
541 		type = TREE_TYPE (type);
542 	      if (! TYPE_FOR_JAVA (type))
543 		return false;
544 	    }
545 	  return true;
546 	}
547     }
548   return false;
549 }
550 
551 /* For a METHOD in a Java class CTYPE, return true if
552    the parameter and return types are valid Java types.
553    Otherwise, print appropriate error messages, and return false.  */
554 
555 bool
556 check_java_method (tree method)
557 {
558   bool jerr = false;
559   tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (method));
560   tree ret_type = TREE_TYPE (TREE_TYPE (method));
561 
562   if (!acceptable_java_type (ret_type))
563     {
564       error ("Java method %qD has non-Java return type %qT",
565 	     method, ret_type);
566       jerr = true;
567     }
568 
569   arg_types = TREE_CHAIN (arg_types);
570   if (DECL_HAS_IN_CHARGE_PARM_P (method))
571     arg_types = TREE_CHAIN (arg_types);
572   if (DECL_HAS_VTT_PARM_P (method))
573     arg_types = TREE_CHAIN (arg_types);
574 
575   for (; arg_types != NULL_TREE; arg_types = TREE_CHAIN (arg_types))
576     {
577       tree type = TREE_VALUE (arg_types);
578       if (!acceptable_java_type (type))
579 	{
580           if (type != error_mark_node)
581 	    error ("Java method %qD has non-Java parameter type %qT",
582 		   method, type);
583 	  jerr = true;
584 	}
585     }
586   return !jerr;
587 }
588 
589 /* Sanity check: report error if this function FUNCTION is not
590    really a member of the class (CTYPE) it is supposed to belong to.
591    TEMPLATE_PARMS is used to specify the template parameters of a member
592    template passed as FUNCTION_DECL. If the member template is passed as a
593    TEMPLATE_DECL, it can be NULL since the parameters can be extracted
594    from the declaration. If the function is not a function template, it
595    must be NULL.
596    It returns the original declaration for the function, NULL_TREE if
597    no declaration was found, error_mark_node if an error was emitted.  */
598 
599 tree
600 check_classfn (tree ctype, tree function, tree template_parms)
601 {
602   int ix;
603   bool is_template;
604   tree pushed_scope;
605 
606   if (DECL_USE_TEMPLATE (function)
607       && !(TREE_CODE (function) == TEMPLATE_DECL
608 	   && DECL_TEMPLATE_SPECIALIZATION (function))
609       && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (function)))
610     /* Since this is a specialization of a member template,
611        we're not going to find the declaration in the class.
612        For example, in:
613 
614 	 struct S { template <typename T> void f(T); };
615 	 template <> void S::f(int);
616 
617        we're not going to find `S::f(int)', but there's no
618        reason we should, either.  We let our callers know we didn't
619        find the method, but we don't complain.  */
620     return NULL_TREE;
621 
622   /* Basic sanity check: for a template function, the template parameters
623      either were not passed, or they are the same of DECL_TEMPLATE_PARMS.  */
624   if (TREE_CODE (function) == TEMPLATE_DECL)
625     {
626       if (template_parms
627 	  && !comp_template_parms (template_parms,
628 				   DECL_TEMPLATE_PARMS (function)))
629 	{
630 	  error ("template parameter lists provided don%'t match the "
631 		 "template parameters of %qD", function);
632 	  return error_mark_node;
633 	}
634       template_parms = DECL_TEMPLATE_PARMS (function);
635     }
636 
637   /* OK, is this a definition of a member template?  */
638   is_template = (template_parms != NULL_TREE);
639 
640   /* We must enter the scope here, because conversion operators are
641      named by target type, and type equivalence relies on typenames
642      resolving within the scope of CTYPE.  */
643   pushed_scope = push_scope (ctype);
644   ix = class_method_index_for_fn (complete_type (ctype), function);
645   if (ix >= 0)
646     {
647       VEC(tree,gc) *methods = CLASSTYPE_METHOD_VEC (ctype);
648       tree fndecls, fndecl = 0;
649       bool is_conv_op;
650       const char *format = NULL;
651 
652       for (fndecls = VEC_index (tree, methods, ix);
653 	   fndecls; fndecls = OVL_NEXT (fndecls))
654 	{
655 	  tree p1, p2;
656 
657 	  fndecl = OVL_CURRENT (fndecls);
658 	  p1 = TYPE_ARG_TYPES (TREE_TYPE (function));
659 	  p2 = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
660 
661 	  /* We cannot simply call decls_match because this doesn't
662 	     work for static member functions that are pretending to
663 	     be methods, and because the name may have been changed by
664 	     asm("new_name").  */
665 
666 	   /* Get rid of the this parameter on functions that become
667 	      static.  */
668 	  if (DECL_STATIC_FUNCTION_P (fndecl)
669 	      && TREE_CODE (TREE_TYPE (function)) == METHOD_TYPE)
670 	    p1 = TREE_CHAIN (p1);
671 
672 	  /* A member template definition only matches a member template
673 	     declaration.  */
674 	  if (is_template != (TREE_CODE (fndecl) == TEMPLATE_DECL))
675 	    continue;
676 
677 	  if (same_type_p (TREE_TYPE (TREE_TYPE (function)),
678 			   TREE_TYPE (TREE_TYPE (fndecl)))
679 	      && compparms (p1, p2)
680 	      && (!is_template
681 		  || comp_template_parms (template_parms,
682 					  DECL_TEMPLATE_PARMS (fndecl)))
683 	      && (DECL_TEMPLATE_SPECIALIZATION (function)
684 		  == DECL_TEMPLATE_SPECIALIZATION (fndecl))
685 	      && (!DECL_TEMPLATE_SPECIALIZATION (function)
686 		  || (DECL_TI_TEMPLATE (function)
687 		      == DECL_TI_TEMPLATE (fndecl))))
688 	    break;
689 	}
690       if (fndecls)
691 	{
692 	  if (pushed_scope)
693 	    pop_scope (pushed_scope);
694 	  return OVL_CURRENT (fndecls);
695 	}
696 
697       error_at (DECL_SOURCE_LOCATION (function),
698 		"prototype for %q#D does not match any in class %qT",
699 		function, ctype);
700       is_conv_op = DECL_CONV_FN_P (fndecl);
701 
702       if (is_conv_op)
703 	ix = CLASSTYPE_FIRST_CONVERSION_SLOT;
704       fndecls = VEC_index (tree, methods, ix);
705       while (fndecls)
706 	{
707 	  fndecl = OVL_CURRENT (fndecls);
708 	  fndecls = OVL_NEXT (fndecls);
709 
710 	  if (!fndecls && is_conv_op)
711 	    {
712 	      if (VEC_length (tree, methods) > (size_t) ++ix)
713 		{
714 		  fndecls = VEC_index (tree, methods, ix);
715 		  if (!DECL_CONV_FN_P (OVL_CURRENT (fndecls)))
716 		    {
717 		      fndecls = NULL_TREE;
718 		      is_conv_op = false;
719 		    }
720 		}
721 	      else
722 		is_conv_op = false;
723 	    }
724 	  if (format)
725 	    format = "                %+#D";
726 	  else if (fndecls)
727 	    format = N_("candidates are: %+#D");
728 	  else
729 	    format = N_("candidate is: %+#D");
730 	  error (format, fndecl);
731 	}
732     }
733   else if (!COMPLETE_TYPE_P (ctype))
734     cxx_incomplete_type_error (function, ctype);
735   else
736     error ("no %q#D member function declared in class %qT",
737 	   function, ctype);
738 
739   if (pushed_scope)
740     pop_scope (pushed_scope);
741   return error_mark_node;
742 }
743 
744 /* DECL is a function with vague linkage.  Remember it so that at the
745    end of the translation unit we can decide whether or not to emit
746    it.  */
747 
748 void
749 note_vague_linkage_fn (tree decl)
750 {
751   DECL_DEFER_OUTPUT (decl) = 1;
752   VEC_safe_push (tree, gc, deferred_fns, decl);
753 }
754 
755 /* We have just processed the DECL, which is a static data member.
756    The other parameters are as for cp_finish_decl.  */
757 
758 void
759 finish_static_data_member_decl (tree decl,
760 				tree init, bool init_const_expr_p,
761 				tree asmspec_tree,
762 				int flags)
763 {
764   DECL_CONTEXT (decl) = current_class_type;
765 
766   /* We cannot call pushdecl here, because that would fill in the
767      TREE_CHAIN of our decl.  Instead, we modify cp_finish_decl to do
768      the right thing, namely, to put this decl out straight away.  */
769 
770   if (! processing_template_decl)
771     VEC_safe_push (tree, gc, pending_statics, decl);
772 
773   if (LOCAL_CLASS_P (current_class_type))
774     permerror (input_location, "local class %q#T shall not have static data member %q#D",
775 	       current_class_type, decl);
776 
777   DECL_IN_AGGR_P (decl) = 1;
778 
779   if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
780       && TYPE_DOMAIN (TREE_TYPE (decl)) == NULL_TREE)
781     SET_VAR_HAD_UNKNOWN_BOUND (decl);
782 
783   cp_finish_decl (decl, init, init_const_expr_p, asmspec_tree, flags);
784 }
785 
786 /* DECLARATOR and DECLSPECS correspond to a class member.  The other
787    parameters are as for cp_finish_decl.  Return the DECL for the
788    class member declared.  */
789 
790 tree
791 grokfield (const cp_declarator *declarator,
792 	   cp_decl_specifier_seq *declspecs,
793 	   tree init, bool init_const_expr_p,
794 	   tree asmspec_tree,
795 	   tree attrlist)
796 {
797   tree value;
798   const char *asmspec = 0;
799   int flags;
800   tree name;
801 
802   if (init
803       && TREE_CODE (init) == TREE_LIST
804       && TREE_VALUE (init) == error_mark_node
805       && TREE_CHAIN (init) == NULL_TREE)
806     init = NULL_TREE;
807 
808   value = grokdeclarator (declarator, declspecs, FIELD, init != 0, &attrlist);
809   if (! value || error_operand_p (value))
810     /* friend or constructor went bad.  */
811     return error_mark_node;
812 
813   if (TREE_CODE (value) == TYPE_DECL && init)
814     {
815       error ("typedef %qD is initialized (use decltype instead)", value);
816       init = NULL_TREE;
817     }
818 
819   /* Pass friendly classes back.  */
820   if (value == void_type_node)
821     return value;
822 
823   /* Pass friend decls back.  */
824   if ((TREE_CODE (value) == FUNCTION_DECL
825        || TREE_CODE (value) == TEMPLATE_DECL)
826       && DECL_CONTEXT (value) != current_class_type)
827     return value;
828 
829   name = DECL_NAME (value);
830 
831   if (name != NULL_TREE)
832     {
833       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
834 	{
835 	  error ("explicit template argument list not allowed");
836 	  return error_mark_node;
837 	}
838 
839       if (IDENTIFIER_POINTER (name)[0] == '_'
840 	  && ! strcmp (IDENTIFIER_POINTER (name), "_vptr"))
841 	error ("member %qD conflicts with virtual function table field name",
842 	       value);
843     }
844 
845   /* Stash away type declarations.  */
846   if (TREE_CODE (value) == TYPE_DECL)
847     {
848       DECL_NONLOCAL (value) = 1;
849       DECL_CONTEXT (value) = current_class_type;
850 
851       if (attrlist)
852 	{
853 	  int attrflags = 0;
854 
855 	  /* If this is a typedef that names the class for linkage purposes
856 	     (7.1.3p8), apply any attributes directly to the type.  */
857 	  if (TAGGED_TYPE_P (TREE_TYPE (value))
858 	      && value == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (value))))
859 	    attrflags = ATTR_FLAG_TYPE_IN_PLACE;
860 
861 	  cplus_decl_attributes (&value, attrlist, attrflags);
862 	}
863 
864       if (declspecs->specs[(int)ds_typedef]
865           && TREE_TYPE (value) != error_mark_node
866           && TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (value))) != value)
867 	set_underlying_type (value);
868 
869       /* It's important that push_template_decl below follows
870 	 set_underlying_type above so that the created template
871 	 carries the properly set type of VALUE.  */
872       if (processing_template_decl)
873 	value = push_template_decl (value);
874 
875       record_locally_defined_typedef (value);
876       return value;
877     }
878 
879   if (DECL_IN_AGGR_P (value))
880     {
881       error ("%qD is already defined in %qT", value, DECL_CONTEXT (value));
882       return void_type_node;
883     }
884 
885   if (asmspec_tree && asmspec_tree != error_mark_node)
886     asmspec = TREE_STRING_POINTER (asmspec_tree);
887 
888   if (init)
889     {
890       if (TREE_CODE (value) == FUNCTION_DECL)
891 	{
892 	  /* Initializers for functions are rejected early in the parser.
893 	     If we get here, it must be a pure specifier for a method.  */
894 	  if (init == ridpointers[(int)RID_DELETE])
895 	    {
896 	      DECL_DELETED_FN (value) = 1;
897 	      DECL_DECLARED_INLINE_P (value) = 1;
898 	      DECL_INITIAL (value) = error_mark_node;
899 	    }
900 	  else if (init == ridpointers[(int)RID_DEFAULT])
901 	    {
902 	      if (defaultable_fn_check (value))
903 		{
904 		  DECL_DEFAULTED_FN (value) = 1;
905 		  DECL_INITIALIZED_IN_CLASS_P (value) = 1;
906 		  DECL_DECLARED_INLINE_P (value) = 1;
907 		}
908 	    }
909 	  else if (TREE_CODE (init) == DEFAULT_ARG)
910 	    error ("invalid initializer for member function %qD", value);
911 	  else if (TREE_CODE (TREE_TYPE (value)) == METHOD_TYPE)
912 	    {
913 	      if (integer_zerop (init))
914 		DECL_PURE_VIRTUAL_P (value) = 1;
915 	      else if (error_operand_p (init))
916 		; /* An error has already been reported.  */
917 	      else
918 		error ("invalid initializer for member function %qD",
919 		       value);
920 	    }
921 	  else
922 	    {
923 	      gcc_assert (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE);
924 	      error ("initializer specified for static member function %qD",
925 		     value);
926 	    }
927 	}
928       else if (TREE_CODE (value) == FIELD_DECL)
929 	/* C++11 NSDMI, keep going.  */;
930       else if (TREE_CODE (value) != VAR_DECL)
931 	gcc_unreachable ();
932       else if (!processing_template_decl)
933 	{
934 	  if (TREE_CODE (init) == CONSTRUCTOR)
935 	    init = digest_init (TREE_TYPE (value), init, tf_warning_or_error);
936 	  init = maybe_constant_init (init);
937 
938 	  if (init != error_mark_node && !TREE_CONSTANT (init))
939 	    {
940 	      /* We can allow references to things that are effectively
941 		 static, since references are initialized with the
942 		 address.  */
943 	      if (TREE_CODE (TREE_TYPE (value)) != REFERENCE_TYPE
944 		  || (TREE_STATIC (init) == 0
945 		      && (!DECL_P (init) || DECL_EXTERNAL (init) == 0)))
946 		{
947 		  error ("field initializer is not constant");
948 		  init = error_mark_node;
949 		}
950 	    }
951 	}
952     }
953 
954   if (processing_template_decl
955       && (TREE_CODE (value) == VAR_DECL || TREE_CODE (value) == FUNCTION_DECL))
956     {
957       value = push_template_decl (value);
958       if (error_operand_p (value))
959 	return error_mark_node;
960     }
961 
962   if (attrlist)
963     cplus_decl_attributes (&value, attrlist, 0);
964 
965   if (init && BRACE_ENCLOSED_INITIALIZER_P (init)
966       && CONSTRUCTOR_IS_DIRECT_INIT (init))
967     flags = LOOKUP_NORMAL;
968   else
969     flags = LOOKUP_IMPLICIT;
970 
971   switch (TREE_CODE (value))
972     {
973     case VAR_DECL:
974       finish_static_data_member_decl (value, init, init_const_expr_p,
975 				      asmspec_tree, flags);
976       return value;
977 
978     case FIELD_DECL:
979       if (asmspec)
980 	error ("%<asm%> specifiers are not permitted on non-static data members");
981       if (DECL_INITIAL (value) == error_mark_node)
982 	init = error_mark_node;
983       cp_finish_decl (value, init, /*init_const_expr_p=*/false,
984 		      NULL_TREE, flags);
985       DECL_IN_AGGR_P (value) = 1;
986       return value;
987 
988     case  FUNCTION_DECL:
989       if (asmspec)
990 	set_user_assembler_name (value, asmspec);
991 
992       cp_finish_decl (value,
993 		      /*init=*/NULL_TREE,
994 		      /*init_const_expr_p=*/false,
995 		      asmspec_tree, flags);
996 
997       /* Pass friends back this way.  */
998       if (DECL_FRIEND_P (value))
999 	return void_type_node;
1000 
1001       DECL_IN_AGGR_P (value) = 1;
1002       return value;
1003 
1004     default:
1005       gcc_unreachable ();
1006     }
1007   return NULL_TREE;
1008 }
1009 
1010 /* Like `grokfield', but for bitfields.
1011    WIDTH is non-NULL for bit fields only, and is an INTEGER_CST node.  */
1012 
1013 tree
1014 grokbitfield (const cp_declarator *declarator,
1015 	      cp_decl_specifier_seq *declspecs, tree width,
1016 	      tree attrlist)
1017 {
1018   tree value = grokdeclarator (declarator, declspecs, BITFIELD, 0, &attrlist);
1019 
1020   if (value == error_mark_node)
1021     return NULL_TREE; /* friends went bad.  */
1022 
1023   /* Pass friendly classes back.  */
1024   if (TREE_CODE (value) == VOID_TYPE)
1025     return void_type_node;
1026 
1027   if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))
1028       && (POINTER_TYPE_P (value)
1029           || !dependent_type_p (TREE_TYPE (value))))
1030     {
1031       error ("bit-field %qD with non-integral type", value);
1032       return error_mark_node;
1033     }
1034 
1035   if (TREE_CODE (value) == TYPE_DECL)
1036     {
1037       error ("cannot declare %qD to be a bit-field type", value);
1038       return NULL_TREE;
1039     }
1040 
1041   /* Usually, finish_struct_1 catches bitfields with invalid types.
1042      But, in the case of bitfields with function type, we confuse
1043      ourselves into thinking they are member functions, so we must
1044      check here.  */
1045   if (TREE_CODE (value) == FUNCTION_DECL)
1046     {
1047       error ("cannot declare bit-field %qD with function type",
1048 	     DECL_NAME (value));
1049       return NULL_TREE;
1050     }
1051 
1052   if (DECL_IN_AGGR_P (value))
1053     {
1054       error ("%qD is already defined in the class %qT", value,
1055 	     DECL_CONTEXT (value));
1056       return void_type_node;
1057     }
1058 
1059   if (TREE_STATIC (value))
1060     {
1061       error ("static member %qD cannot be a bit-field", value);
1062       return NULL_TREE;
1063     }
1064   cp_finish_decl (value, NULL_TREE, false, NULL_TREE, 0);
1065 
1066   if (width != error_mark_node)
1067     {
1068       /* The width must be an integer type.  */
1069       if (!type_dependent_expression_p (width)
1070 	  && !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (width)))
1071 	error ("width of bit-field %qD has non-integral type %qT", value,
1072 	       TREE_TYPE (width));
1073       DECL_INITIAL (value) = width;
1074       SET_DECL_C_BIT_FIELD (value);
1075     }
1076 
1077   DECL_IN_AGGR_P (value) = 1;
1078 
1079   if (attrlist)
1080     cplus_decl_attributes (&value, attrlist, /*flags=*/0);
1081 
1082   return value;
1083 }
1084 
1085 
1086 /* Returns true iff ATTR is an attribute which needs to be applied at
1087    instantiation time rather than template definition time.  */
1088 
1089 static bool
1090 is_late_template_attribute (tree attr, tree decl)
1091 {
1092   tree name = TREE_PURPOSE (attr);
1093   tree args = TREE_VALUE (attr);
1094   const struct attribute_spec *spec = lookup_attribute_spec (name);
1095   tree arg;
1096 
1097   if (!spec)
1098     /* Unknown attribute.  */
1099     return false;
1100 
1101   /* Attribute weak handling wants to write out assembly right away.  */
1102   if (is_attribute_p ("weak", name))
1103     return true;
1104 
1105   /* If any of the arguments are dependent expressions, we can't evaluate
1106      the attribute until instantiation time.  */
1107   for (arg = args; arg; arg = TREE_CHAIN (arg))
1108     {
1109       tree t = TREE_VALUE (arg);
1110 
1111       /* If the first attribute argument is an identifier, only consider
1112 	 second and following arguments.  Attributes like mode, format,
1113 	 cleanup and several target specific attributes aren't late
1114 	 just because they have an IDENTIFIER_NODE as first argument.  */
1115       if (arg == args && TREE_CODE (t) == IDENTIFIER_NODE)
1116 	continue;
1117 
1118       if (value_dependent_expression_p (t)
1119 	  || type_dependent_expression_p (t))
1120 	return true;
1121     }
1122 
1123   if (TREE_CODE (decl) == TYPE_DECL
1124       || TYPE_P (decl)
1125       || spec->type_required)
1126     {
1127       tree type = TYPE_P (decl) ? decl : TREE_TYPE (decl);
1128 
1129       /* We can't apply any attributes to a completely unknown type until
1130 	 instantiation time.  */
1131       enum tree_code code = TREE_CODE (type);
1132       if (code == TEMPLATE_TYPE_PARM
1133 	  || code == BOUND_TEMPLATE_TEMPLATE_PARM
1134 	  || code == TYPENAME_TYPE)
1135 	return true;
1136       /* Also defer most attributes on dependent types.  This is not
1137 	 necessary in all cases, but is the better default.  */
1138       else if (dependent_type_p (type)
1139 	       /* But attribute visibility specifically works on
1140 		  templates.  */
1141 	       && !is_attribute_p ("visibility", name))
1142 	return true;
1143       else
1144 	return false;
1145     }
1146   else
1147     return false;
1148 }
1149 
1150 /* ATTR_P is a list of attributes.  Remove any attributes which need to be
1151    applied at instantiation time and return them.  If IS_DEPENDENT is true,
1152    the declaration itself is dependent, so all attributes should be applied
1153    at instantiation time.  */
1154 
1155 static tree
1156 splice_template_attributes (tree *attr_p, tree decl)
1157 {
1158   tree *p = attr_p;
1159   tree late_attrs = NULL_TREE;
1160   tree *q = &late_attrs;
1161 
1162   if (!p)
1163     return NULL_TREE;
1164 
1165   for (; *p; )
1166     {
1167       if (is_late_template_attribute (*p, decl))
1168 	{
1169 	  ATTR_IS_DEPENDENT (*p) = 1;
1170 	  *q = *p;
1171 	  *p = TREE_CHAIN (*p);
1172 	  q = &TREE_CHAIN (*q);
1173 	  *q = NULL_TREE;
1174 	}
1175       else
1176 	p = &TREE_CHAIN (*p);
1177     }
1178 
1179   return late_attrs;
1180 }
1181 
1182 /* Remove any late attributes from the list in ATTR_P and attach them to
1183    DECL_P.  */
1184 
1185 static void
1186 save_template_attributes (tree *attr_p, tree *decl_p)
1187 {
1188   tree late_attrs = splice_template_attributes (attr_p, *decl_p);
1189   tree *q;
1190   tree old_attrs = NULL_TREE;
1191 
1192   if (!late_attrs)
1193     return;
1194 
1195   if (DECL_P (*decl_p))
1196     q = &DECL_ATTRIBUTES (*decl_p);
1197   else
1198     q = &TYPE_ATTRIBUTES (*decl_p);
1199 
1200   old_attrs = *q;
1201 
1202   /* Merge the late attributes at the beginning with the attribute
1203      list.  */
1204   late_attrs = merge_attributes (late_attrs, *q);
1205   *q = late_attrs;
1206 
1207   if (!DECL_P (*decl_p) && *decl_p == TYPE_MAIN_VARIANT (*decl_p))
1208     {
1209       /* We've added new attributes directly to the main variant, so
1210 	 now we need to update all of the other variants to include
1211 	 these new attributes.  */
1212       tree variant;
1213       for (variant = TYPE_NEXT_VARIANT (*decl_p); variant;
1214 	   variant = TYPE_NEXT_VARIANT (variant))
1215 	{
1216 	  gcc_assert (TYPE_ATTRIBUTES (variant) == old_attrs);
1217 	  TYPE_ATTRIBUTES (variant) = TYPE_ATTRIBUTES (*decl_p);
1218 	}
1219     }
1220 }
1221 
1222 /* Like reconstruct_complex_type, but handle also template trees.  */
1223 
1224 tree
1225 cp_reconstruct_complex_type (tree type, tree bottom)
1226 {
1227   tree inner, outer;
1228 
1229   if (TREE_CODE (type) == POINTER_TYPE)
1230     {
1231       inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1232       outer = build_pointer_type_for_mode (inner, TYPE_MODE (type),
1233 					   TYPE_REF_CAN_ALIAS_ALL (type));
1234     }
1235   else if (TREE_CODE (type) == REFERENCE_TYPE)
1236     {
1237       inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1238       outer = build_reference_type_for_mode (inner, TYPE_MODE (type),
1239 					     TYPE_REF_CAN_ALIAS_ALL (type));
1240     }
1241   else if (TREE_CODE (type) == ARRAY_TYPE)
1242     {
1243       inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1244       outer = build_cplus_array_type (inner, TYPE_DOMAIN (type));
1245       /* Don't call cp_build_qualified_type on ARRAY_TYPEs, the
1246 	 element type qualification will be handled by the recursive
1247 	 cp_reconstruct_complex_type call and cp_build_qualified_type
1248 	 for ARRAY_TYPEs changes the element type.  */
1249       return outer;
1250     }
1251   else if (TREE_CODE (type) == FUNCTION_TYPE)
1252     {
1253       inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1254       outer = build_function_type (inner, TYPE_ARG_TYPES (type));
1255       outer = apply_memfn_quals (outer, type_memfn_quals (type));
1256     }
1257   else if (TREE_CODE (type) == METHOD_TYPE)
1258     {
1259       inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1260       /* The build_method_type_directly() routine prepends 'this' to argument list,
1261 	 so we must compensate by getting rid of it.  */
1262       outer
1263 	= build_method_type_directly
1264 	    (class_of_this_parm (type), inner,
1265 	     TREE_CHAIN (TYPE_ARG_TYPES (type)));
1266     }
1267   else if (TREE_CODE (type) == OFFSET_TYPE)
1268     {
1269       inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1270       outer = build_offset_type (TYPE_OFFSET_BASETYPE (type), inner);
1271     }
1272   else
1273     return bottom;
1274 
1275   if (TYPE_ATTRIBUTES (type))
1276     outer = cp_build_type_attribute_variant (outer, TYPE_ATTRIBUTES (type));
1277   return cp_build_qualified_type (outer, cp_type_quals (type));
1278 }
1279 
1280 /* Replaces any constexpr expression that may be into the attributes
1281    arguments with their reduced value.  */
1282 
1283 static void
1284 cp_check_const_attributes (tree attributes)
1285 {
1286   tree attr;
1287   for (attr = attributes; attr; attr = TREE_CHAIN (attr))
1288     {
1289       tree arg;
1290       for (arg = TREE_VALUE (attr); arg; arg = TREE_CHAIN (arg))
1291 	{
1292 	  tree expr = TREE_VALUE (arg);
1293 	  if (EXPR_P (expr))
1294 	    TREE_VALUE (arg) = maybe_constant_value (expr);
1295 	}
1296     }
1297 }
1298 
1299 /* Like decl_attributes, but handle C++ complexity.  */
1300 
1301 void
1302 cplus_decl_attributes (tree *decl, tree attributes, int flags)
1303 {
1304   if (*decl == NULL_TREE || *decl == void_type_node
1305       || *decl == error_mark_node)
1306     return;
1307 
1308   if (processing_template_decl)
1309     {
1310       if (check_for_bare_parameter_packs (attributes))
1311 	return;
1312 
1313       save_template_attributes (&attributes, decl);
1314     }
1315 
1316   cp_check_const_attributes (attributes);
1317 
1318   if (TREE_CODE (*decl) == TEMPLATE_DECL)
1319     decl = &DECL_TEMPLATE_RESULT (*decl);
1320 
1321   decl_attributes (decl, attributes, flags);
1322 
1323   if (TREE_CODE (*decl) == TYPE_DECL)
1324     SET_IDENTIFIER_TYPE_VALUE (DECL_NAME (*decl), TREE_TYPE (*decl));
1325 }
1326 
1327 /* Walks through the namespace- or function-scope anonymous union
1328    OBJECT, with the indicated TYPE, building appropriate VAR_DECLs.
1329    Returns one of the fields for use in the mangled name.  */
1330 
1331 static tree
1332 build_anon_union_vars (tree type, tree object)
1333 {
1334   tree main_decl = NULL_TREE;
1335   tree field;
1336 
1337   /* Rather than write the code to handle the non-union case,
1338      just give an error.  */
1339   if (TREE_CODE (type) != UNION_TYPE)
1340     {
1341       error ("anonymous struct not inside named type");
1342       return error_mark_node;
1343     }
1344 
1345   for (field = TYPE_FIELDS (type);
1346        field != NULL_TREE;
1347        field = DECL_CHAIN (field))
1348     {
1349       tree decl;
1350       tree ref;
1351 
1352       if (DECL_ARTIFICIAL (field))
1353 	continue;
1354       if (TREE_CODE (field) != FIELD_DECL)
1355 	{
1356 	  permerror (input_location, "%q+#D invalid; an anonymous union can only "
1357 		     "have non-static data members", field);
1358 	  continue;
1359 	}
1360 
1361       if (TREE_PRIVATE (field))
1362 	permerror (input_location, "private member %q+#D in anonymous union", field);
1363       else if (TREE_PROTECTED (field))
1364 	permerror (input_location, "protected member %q+#D in anonymous union", field);
1365 
1366       if (processing_template_decl)
1367 	ref = build_min_nt (COMPONENT_REF, object,
1368 			    DECL_NAME (field), NULL_TREE);
1369       else
1370 	ref = build_class_member_access_expr (object, field, NULL_TREE,
1371 					      false, tf_warning_or_error);
1372 
1373       if (DECL_NAME (field))
1374 	{
1375 	  tree base;
1376 
1377 	  decl = build_decl (input_location,
1378 			     VAR_DECL, DECL_NAME (field), TREE_TYPE (field));
1379 	  DECL_ANON_UNION_VAR_P (decl) = 1;
1380 	  DECL_ARTIFICIAL (decl) = 1;
1381 
1382 	  base = get_base_address (object);
1383 	  TREE_PUBLIC (decl) = TREE_PUBLIC (base);
1384 	  TREE_STATIC (decl) = TREE_STATIC (base);
1385 	  DECL_EXTERNAL (decl) = DECL_EXTERNAL (base);
1386 
1387 	  SET_DECL_VALUE_EXPR (decl, ref);
1388 	  DECL_HAS_VALUE_EXPR_P (decl) = 1;
1389 
1390 	  decl = pushdecl (decl);
1391 	}
1392       else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
1393 	decl = build_anon_union_vars (TREE_TYPE (field), ref);
1394       else
1395 	decl = 0;
1396 
1397       if (main_decl == NULL_TREE)
1398 	main_decl = decl;
1399     }
1400 
1401   return main_decl;
1402 }
1403 
1404 /* Finish off the processing of a UNION_TYPE structure.  If the union is an
1405    anonymous union, then all members must be laid out together.  PUBLIC_P
1406    is nonzero if this union is not declared static.  */
1407 
1408 void
1409 finish_anon_union (tree anon_union_decl)
1410 {
1411   tree type;
1412   tree main_decl;
1413   bool public_p;
1414 
1415   if (anon_union_decl == error_mark_node)
1416     return;
1417 
1418   type = TREE_TYPE (anon_union_decl);
1419   public_p = TREE_PUBLIC (anon_union_decl);
1420 
1421   /* The VAR_DECL's context is the same as the TYPE's context.  */
1422   DECL_CONTEXT (anon_union_decl) = DECL_CONTEXT (TYPE_NAME (type));
1423 
1424   if (TYPE_FIELDS (type) == NULL_TREE)
1425     return;
1426 
1427   if (public_p)
1428     {
1429       error ("namespace-scope anonymous aggregates must be static");
1430       return;
1431     }
1432 
1433   main_decl = build_anon_union_vars (type, anon_union_decl);
1434   if (main_decl == error_mark_node)
1435     return;
1436   if (main_decl == NULL_TREE)
1437     {
1438       warning (0, "anonymous union with no members");
1439       return;
1440     }
1441 
1442   if (!processing_template_decl)
1443     {
1444       /* Use main_decl to set the mangled name.  */
1445       DECL_NAME (anon_union_decl) = DECL_NAME (main_decl);
1446       maybe_commonize_var (anon_union_decl);
1447       if (TREE_STATIC (anon_union_decl) || DECL_EXTERNAL (anon_union_decl))
1448 	mangle_decl (anon_union_decl);
1449       DECL_NAME (anon_union_decl) = NULL_TREE;
1450     }
1451 
1452   pushdecl (anon_union_decl);
1453   if (building_stmt_list_p ()
1454       && at_function_scope_p ())
1455     add_decl_expr (anon_union_decl);
1456   else if (!processing_template_decl)
1457     rest_of_decl_compilation (anon_union_decl,
1458 			      toplevel_bindings_p (), at_eof);
1459 }
1460 
1461 /* Auxiliary functions to make type signatures for
1462    `operator new' and `operator delete' correspond to
1463    what compiler will be expecting.  */
1464 
1465 tree
1466 coerce_new_type (tree type)
1467 {
1468   int e = 0;
1469   tree args = TYPE_ARG_TYPES (type);
1470 
1471   gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
1472 
1473   if (!same_type_p (TREE_TYPE (type), ptr_type_node))
1474     {
1475       e = 1;
1476       error ("%<operator new%> must return type %qT", ptr_type_node);
1477     }
1478 
1479   if (args && args != void_list_node)
1480     {
1481       if (TREE_PURPOSE (args))
1482 	{
1483 	  /* [basic.stc.dynamic.allocation]
1484 
1485 	     The first parameter shall not have an associated default
1486 	     argument.  */
1487 	  error ("the first parameter of %<operator new%> cannot "
1488 		 "have a default argument");
1489 	  /* Throw away the default argument.  */
1490 	  TREE_PURPOSE (args) = NULL_TREE;
1491 	}
1492 
1493       if (!same_type_p (TREE_VALUE (args), size_type_node))
1494 	{
1495 	  e = 2;
1496 	  args = TREE_CHAIN (args);
1497 	}
1498     }
1499   else
1500     e = 2;
1501 
1502   if (e == 2)
1503     permerror (input_location, "%<operator new%> takes type %<size_t%> (%qT) "
1504 	       "as first parameter", size_type_node);
1505 
1506   switch (e)
1507   {
1508     case 2:
1509       args = tree_cons (NULL_TREE, size_type_node, args);
1510       /* Fall through.  */
1511     case 1:
1512       type = build_exception_variant
1513 	      (build_function_type (ptr_type_node, args),
1514 	       TYPE_RAISES_EXCEPTIONS (type));
1515       /* Fall through.  */
1516     default:;
1517   }
1518   return type;
1519 }
1520 
1521 tree
1522 coerce_delete_type (tree type)
1523 {
1524   int e = 0;
1525   tree args = TYPE_ARG_TYPES (type);
1526 
1527   gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
1528 
1529   if (!same_type_p (TREE_TYPE (type), void_type_node))
1530     {
1531       e = 1;
1532       error ("%<operator delete%> must return type %qT", void_type_node);
1533     }
1534 
1535   if (!args || args == void_list_node
1536       || !same_type_p (TREE_VALUE (args), ptr_type_node))
1537     {
1538       e = 2;
1539       if (args && args != void_list_node)
1540 	args = TREE_CHAIN (args);
1541       error ("%<operator delete%> takes type %qT as first parameter",
1542 	     ptr_type_node);
1543     }
1544   switch (e)
1545   {
1546     case 2:
1547       args = tree_cons (NULL_TREE, ptr_type_node, args);
1548       /* Fall through.  */
1549     case 1:
1550       type = build_exception_variant
1551 	      (build_function_type (void_type_node, args),
1552 	       TYPE_RAISES_EXCEPTIONS (type));
1553       /* Fall through.  */
1554     default:;
1555   }
1556 
1557   return type;
1558 }
1559 
1560 /* DECL is a VAR_DECL for a vtable: walk through the entries in the vtable
1561    and mark them as needed.  */
1562 
1563 static void
1564 mark_vtable_entries (tree decl)
1565 {
1566   tree fnaddr;
1567   unsigned HOST_WIDE_INT idx;
1568 
1569   FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL (decl)),
1570 			      idx, fnaddr)
1571     {
1572       tree fn;
1573 
1574       STRIP_NOPS (fnaddr);
1575 
1576       if (TREE_CODE (fnaddr) != ADDR_EXPR
1577 	  && TREE_CODE (fnaddr) != FDESC_EXPR)
1578 	/* This entry is an offset: a virtual base class offset, a
1579 	   virtual call offset, an RTTI offset, etc.  */
1580 	continue;
1581 
1582       fn = TREE_OPERAND (fnaddr, 0);
1583       TREE_ADDRESSABLE (fn) = 1;
1584       /* When we don't have vcall offsets, we output thunks whenever
1585 	 we output the vtables that contain them.  With vcall offsets,
1586 	 we know all the thunks we'll need when we emit a virtual
1587 	 function, so we emit the thunks there instead.  */
1588       if (DECL_THUNK_P (fn))
1589 	use_thunk (fn, /*emit_p=*/0);
1590       mark_used (fn);
1591     }
1592 }
1593 
1594 /* Set DECL up to have the closest approximation of "initialized common"
1595    linkage available.  */
1596 
1597 void
1598 comdat_linkage (tree decl)
1599 {
1600   if (flag_weak)
1601     make_decl_one_only (decl, cxx_comdat_group (decl));
1602   else if (TREE_CODE (decl) == FUNCTION_DECL
1603 	   || (TREE_CODE (decl) == VAR_DECL && DECL_ARTIFICIAL (decl)))
1604     /* We can just emit function and compiler-generated variables
1605        statically; having multiple copies is (for the most part) only
1606        a waste of space.
1607 
1608        There are two correctness issues, however: the address of a
1609        template instantiation with external linkage should be the
1610        same, independent of what translation unit asks for the
1611        address, and this will not hold when we emit multiple copies of
1612        the function.  However, there's little else we can do.
1613 
1614        Also, by default, the typeinfo implementation assumes that
1615        there will be only one copy of the string used as the name for
1616        each type.  Therefore, if weak symbols are unavailable, the
1617        run-time library should perform a more conservative check; it
1618        should perform a string comparison, rather than an address
1619        comparison.  */
1620     TREE_PUBLIC (decl) = 0;
1621   else
1622     {
1623       /* Static data member template instantiations, however, cannot
1624 	 have multiple copies.  */
1625       if (DECL_INITIAL (decl) == 0
1626 	  || DECL_INITIAL (decl) == error_mark_node)
1627 	DECL_COMMON (decl) = 1;
1628       else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
1629 	{
1630 	  DECL_COMMON (decl) = 1;
1631 	  DECL_INITIAL (decl) = error_mark_node;
1632 	}
1633       else if (!DECL_EXPLICIT_INSTANTIATION (decl))
1634 	{
1635 	  /* We can't do anything useful; leave vars for explicit
1636 	     instantiation.  */
1637 	  DECL_EXTERNAL (decl) = 1;
1638 	  DECL_NOT_REALLY_EXTERN (decl) = 0;
1639 	}
1640     }
1641 
1642   DECL_COMDAT (decl) = 1;
1643 }
1644 
1645 /* For win32 we also want to put explicit instantiations in
1646    linkonce sections, so that they will be merged with implicit
1647    instantiations; otherwise we get duplicate symbol errors.
1648    For Darwin we do not want explicit instantiations to be
1649    linkonce.  */
1650 
1651 void
1652 maybe_make_one_only (tree decl)
1653 {
1654   /* We used to say that this was not necessary on targets that support weak
1655      symbols, because the implicit instantiations will defer to the explicit
1656      one.  However, that's not actually the case in SVR4; a strong definition
1657      after a weak one is an error.  Also, not making explicit
1658      instantiations one_only means that we can end up with two copies of
1659      some template instantiations.  */
1660   if (! flag_weak)
1661     return;
1662 
1663   /* We can't set DECL_COMDAT on functions, or cp_finish_file will think
1664      we can get away with not emitting them if they aren't used.  We need
1665      to for variables so that cp_finish_decl will update their linkage,
1666      because their DECL_INITIAL may not have been set properly yet.  */
1667 
1668   if (!TARGET_WEAK_NOT_IN_ARCHIVE_TOC
1669       || (! DECL_EXPLICIT_INSTANTIATION (decl)
1670 	  && ! DECL_TEMPLATE_SPECIALIZATION (decl)))
1671     {
1672       make_decl_one_only (decl, cxx_comdat_group (decl));
1673 
1674       if (TREE_CODE (decl) == VAR_DECL)
1675 	{
1676 	  DECL_COMDAT (decl) = 1;
1677 	  /* Mark it needed so we don't forget to emit it.  */
1678 	  mark_decl_referenced (decl);
1679 	}
1680     }
1681 }
1682 
1683 /* Returns true iff DECL, a FUNCTION_DECL or VAR_DECL, has vague linkage.
1684    This predicate will give the right answer during parsing of the
1685    function, which other tests may not.  */
1686 
1687 bool
1688 vague_linkage_p (tree decl)
1689 {
1690   /* Unfortunately, import_export_decl has not always been called
1691      before the function is processed, so we cannot simply check
1692      DECL_COMDAT.  */
1693   return (DECL_COMDAT (decl)
1694 	  || (((TREE_CODE (decl) == FUNCTION_DECL
1695 		&& DECL_DECLARED_INLINE_P (decl))
1696 	       || (DECL_LANG_SPECIFIC (decl)
1697 		   && DECL_TEMPLATE_INSTANTIATION (decl)))
1698 	      && TREE_PUBLIC (decl)));
1699 }
1700 
1701 /* Determine whether or not we want to specifically import or export CTYPE,
1702    using various heuristics.  */
1703 
1704 static void
1705 import_export_class (tree ctype)
1706 {
1707   /* -1 for imported, 1 for exported.  */
1708   int import_export = 0;
1709 
1710   /* It only makes sense to call this function at EOF.  The reason is
1711      that this function looks at whether or not the first non-inline
1712      non-abstract virtual member function has been defined in this
1713      translation unit.  But, we can't possibly know that until we've
1714      seen the entire translation unit.  */
1715   gcc_assert (at_eof);
1716 
1717   if (CLASSTYPE_INTERFACE_KNOWN (ctype))
1718     return;
1719 
1720   /* If MULTIPLE_SYMBOL_SPACES is set and we saw a #pragma interface,
1721      we will have CLASSTYPE_INTERFACE_ONLY set but not
1722      CLASSTYPE_INTERFACE_KNOWN.  In that case, we don't want to use this
1723      heuristic because someone will supply a #pragma implementation
1724      elsewhere, and deducing it here would produce a conflict.  */
1725   if (CLASSTYPE_INTERFACE_ONLY (ctype))
1726     return;
1727 
1728   if (lookup_attribute ("dllimport", TYPE_ATTRIBUTES (ctype)))
1729     import_export = -1;
1730   else if (lookup_attribute ("dllexport", TYPE_ATTRIBUTES (ctype)))
1731     import_export = 1;
1732   else if (CLASSTYPE_IMPLICIT_INSTANTIATION (ctype)
1733 	   && !flag_implicit_templates)
1734     /* For a template class, without -fimplicit-templates, check the
1735        repository.  If the virtual table is assigned to this
1736        translation unit, then export the class; otherwise, import
1737        it.  */
1738       import_export = repo_export_class_p (ctype) ? 1 : -1;
1739   else if (TYPE_POLYMORPHIC_P (ctype))
1740     {
1741       /* The ABI specifies that the virtual table and associated
1742 	 information are emitted with the key method, if any.  */
1743       tree method = CLASSTYPE_KEY_METHOD (ctype);
1744       /* If weak symbol support is not available, then we must be
1745 	 careful not to emit the vtable when the key function is
1746 	 inline.  An inline function can be defined in multiple
1747 	 translation units.  If we were to emit the vtable in each
1748 	 translation unit containing a definition, we would get
1749 	 multiple definition errors at link-time.  */
1750       if (method && (flag_weak || ! DECL_DECLARED_INLINE_P (method)))
1751 	import_export = (DECL_REALLY_EXTERN (method) ? -1 : 1);
1752     }
1753 
1754   /* When MULTIPLE_SYMBOL_SPACES is set, we cannot count on seeing
1755      a definition anywhere else.  */
1756   if (MULTIPLE_SYMBOL_SPACES && import_export == -1)
1757     import_export = 0;
1758 
1759   /* Allow back ends the chance to overrule the decision.  */
1760   if (targetm.cxx.import_export_class)
1761     import_export = targetm.cxx.import_export_class (ctype, import_export);
1762 
1763   if (import_export)
1764     {
1765       SET_CLASSTYPE_INTERFACE_KNOWN (ctype);
1766       CLASSTYPE_INTERFACE_ONLY (ctype) = (import_export < 0);
1767     }
1768 }
1769 
1770 /* Return true if VAR has already been provided to the back end; in that
1771    case VAR should not be modified further by the front end.  */
1772 static bool
1773 var_finalized_p (tree var)
1774 {
1775   return varpool_node (var)->finalized;
1776 }
1777 
1778 /* DECL is a VAR_DECL or FUNCTION_DECL which, for whatever reason,
1779    must be emitted in this translation unit.  Mark it as such.  */
1780 
1781 void
1782 mark_needed (tree decl)
1783 {
1784   /* It's possible that we no longer need to set
1785      TREE_SYMBOL_REFERENCED here directly, but doing so is
1786      harmless.  */
1787   TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)) = 1;
1788   mark_decl_referenced (decl);
1789 }
1790 
1791 /* DECL is either a FUNCTION_DECL or a VAR_DECL.  This function
1792    returns true if a definition of this entity should be provided in
1793    this object file.  Callers use this function to determine whether
1794    or not to let the back end know that a definition of DECL is
1795    available in this translation unit.  */
1796 
1797 bool
1798 decl_needed_p (tree decl)
1799 {
1800   gcc_assert (TREE_CODE (decl) == VAR_DECL
1801 	      || TREE_CODE (decl) == FUNCTION_DECL);
1802   /* This function should only be called at the end of the translation
1803      unit.  We cannot be sure of whether or not something will be
1804      COMDAT until that point.  */
1805   gcc_assert (at_eof);
1806 
1807   /* All entities with external linkage that are not COMDAT should be
1808      emitted; they may be referred to from other object files.  */
1809   if (TREE_PUBLIC (decl) && !DECL_COMDAT (decl))
1810     return true;
1811   /* If this entity was used, let the back end see it; it will decide
1812      whether or not to emit it into the object file.  */
1813   if (TREE_USED (decl)
1814       || (DECL_ASSEMBLER_NAME_SET_P (decl)
1815 	  && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))))
1816       return true;
1817   /* Functions marked "dllexport" must be emitted so that they are
1818      visible to other DLLs.  */
1819   if (flag_keep_inline_dllexport
1820       && lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))
1821     return true;
1822   /* Otherwise, DECL does not need to be emitted -- yet.  A subsequent
1823      reference to DECL might cause it to be emitted later.  */
1824   return false;
1825 }
1826 
1827 /* If necessary, write out the vtables for the dynamic class CTYPE.
1828    Returns true if any vtables were emitted.  */
1829 
1830 static bool
1831 maybe_emit_vtables (tree ctype)
1832 {
1833   tree vtbl;
1834   tree primary_vtbl;
1835   int needed = 0;
1836   struct varpool_node *current = NULL, *last = NULL, *first = NULL;
1837 
1838   /* If the vtables for this class have already been emitted there is
1839      nothing more to do.  */
1840   primary_vtbl = CLASSTYPE_VTABLES (ctype);
1841   if (var_finalized_p (primary_vtbl))
1842     return false;
1843   /* Ignore dummy vtables made by get_vtable_decl.  */
1844   if (TREE_TYPE (primary_vtbl) == void_type_node)
1845     return false;
1846 
1847   /* On some targets, we cannot determine the key method until the end
1848      of the translation unit -- which is when this function is
1849      called.  */
1850   if (!targetm.cxx.key_method_may_be_inline ())
1851     determine_key_method (ctype);
1852 
1853   /* See if any of the vtables are needed.  */
1854   for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = DECL_CHAIN (vtbl))
1855     {
1856       import_export_decl (vtbl);
1857       if (DECL_NOT_REALLY_EXTERN (vtbl) && decl_needed_p (vtbl))
1858 	needed = 1;
1859     }
1860   if (!needed)
1861     {
1862       /* If the references to this class' vtables are optimized away,
1863 	 still emit the appropriate debugging information.  See
1864 	 dfs_debug_mark.  */
1865       if (DECL_COMDAT (primary_vtbl)
1866 	  && CLASSTYPE_DEBUG_REQUESTED (ctype))
1867 	note_debug_info_needed (ctype);
1868       return false;
1869     }
1870 
1871   /* The ABI requires that we emit all of the vtables if we emit any
1872      of them.  */
1873   for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = DECL_CHAIN (vtbl))
1874     {
1875       /* Mark entities references from the virtual table as used.  */
1876       mark_vtable_entries (vtbl);
1877 
1878       if (TREE_TYPE (DECL_INITIAL (vtbl)) == 0)
1879 	{
1880 	  VEC(tree,gc)* cleanups = NULL;
1881 	  tree expr = store_init_value (vtbl, DECL_INITIAL (vtbl), &cleanups,
1882 					LOOKUP_NORMAL);
1883 
1884 	  /* It had better be all done at compile-time.  */
1885 	  gcc_assert (!expr && !cleanups);
1886 	}
1887 
1888       /* Write it out.  */
1889       DECL_EXTERNAL (vtbl) = 0;
1890       rest_of_decl_compilation (vtbl, 1, 1);
1891 
1892       /* Because we're only doing syntax-checking, we'll never end up
1893 	 actually marking the variable as written.  */
1894       if (flag_syntax_only)
1895 	TREE_ASM_WRITTEN (vtbl) = 1;
1896       else if (DECL_COMDAT (vtbl))
1897 	{
1898 	  current = varpool_node (vtbl);
1899 	  if (last)
1900 	    last->same_comdat_group = current;
1901 	  last = current;
1902 	  if (!first)
1903 	    first = current;
1904 	}
1905     }
1906 
1907   if (first != last)
1908     last->same_comdat_group = first;
1909 
1910   /* Since we're writing out the vtable here, also write the debug
1911      info.  */
1912   note_debug_info_needed (ctype);
1913 
1914   return true;
1915 }
1916 
1917 /* A special return value from type_visibility meaning internal
1918    linkage.  */
1919 
1920 enum { VISIBILITY_ANON = VISIBILITY_INTERNAL+1 };
1921 
1922 /* walk_tree helper function for type_visibility.  */
1923 
1924 static tree
1925 min_vis_r (tree *tp, int *walk_subtrees, void *data)
1926 {
1927   int *vis_p = (int *)data;
1928   if (! TYPE_P (*tp))
1929     {
1930       *walk_subtrees = 0;
1931     }
1932   else if (TAGGED_TYPE_P (*tp)
1933 	   && !TREE_PUBLIC (TYPE_MAIN_DECL (*tp)))
1934     {
1935       *vis_p = VISIBILITY_ANON;
1936       return *tp;
1937     }
1938   else if (CLASS_TYPE_P (*tp)
1939 	   && CLASSTYPE_VISIBILITY (*tp) > *vis_p)
1940     *vis_p = CLASSTYPE_VISIBILITY (*tp);
1941   return NULL;
1942 }
1943 
1944 /* Returns the visibility of TYPE, which is the minimum visibility of its
1945    component types.  */
1946 
1947 static int
1948 type_visibility (tree type)
1949 {
1950   int vis = VISIBILITY_DEFAULT;
1951   cp_walk_tree_without_duplicates (&type, min_vis_r, &vis);
1952   return vis;
1953 }
1954 
1955 /* Limit the visibility of DECL to VISIBILITY, if not explicitly
1956    specified (or if VISIBILITY is static).  If TMPL is true, this
1957    constraint is for a template argument, and takes precedence
1958    over explicitly-specified visibility on the template.  */
1959 
1960 static void
1961 constrain_visibility (tree decl, int visibility, bool tmpl)
1962 {
1963   if (visibility == VISIBILITY_ANON)
1964     {
1965       /* extern "C" declarations aren't affected by the anonymous
1966 	 namespace.  */
1967       if (!DECL_EXTERN_C_P (decl))
1968 	{
1969 	  TREE_PUBLIC (decl) = 0;
1970 	  DECL_WEAK (decl) = 0;
1971 	  DECL_COMMON (decl) = 0;
1972 	  DECL_COMDAT_GROUP (decl) = NULL_TREE;
1973 	  DECL_INTERFACE_KNOWN (decl) = 1;
1974 	  if (DECL_LANG_SPECIFIC (decl))
1975 	    DECL_NOT_REALLY_EXTERN (decl) = 1;
1976 	}
1977     }
1978   else if (visibility > DECL_VISIBILITY (decl)
1979 	   && (tmpl || !DECL_VISIBILITY_SPECIFIED (decl)))
1980     {
1981       DECL_VISIBILITY (decl) = (enum symbol_visibility) visibility;
1982       /* This visibility was not specified.  */
1983       DECL_VISIBILITY_SPECIFIED (decl) = false;
1984     }
1985 }
1986 
1987 /* Constrain the visibility of DECL based on the visibility of its template
1988    arguments.  */
1989 
1990 static void
1991 constrain_visibility_for_template (tree decl, tree targs)
1992 {
1993   /* If this is a template instantiation, check the innermost
1994      template args for visibility constraints.  The outer template
1995      args are covered by the class check.  */
1996   tree args = INNERMOST_TEMPLATE_ARGS (targs);
1997   int i;
1998   for (i = TREE_VEC_LENGTH (args); i > 0; --i)
1999     {
2000       int vis = 0;
2001 
2002       tree arg = TREE_VEC_ELT (args, i-1);
2003       if (TYPE_P (arg))
2004 	vis = type_visibility (arg);
2005       else if (TREE_TYPE (arg) && POINTER_TYPE_P (TREE_TYPE (arg)))
2006 	{
2007 	  STRIP_NOPS (arg);
2008 	  if (TREE_CODE (arg) == ADDR_EXPR)
2009 	    arg = TREE_OPERAND (arg, 0);
2010 	  if (TREE_CODE (arg) == VAR_DECL
2011 	      || TREE_CODE (arg) == FUNCTION_DECL)
2012 	    {
2013 	      if (! TREE_PUBLIC (arg))
2014 		vis = VISIBILITY_ANON;
2015 	      else
2016 		vis = DECL_VISIBILITY (arg);
2017 	    }
2018 	}
2019       if (vis)
2020 	constrain_visibility (decl, vis, true);
2021     }
2022 }
2023 
2024 /* Like c_determine_visibility, but with additional C++-specific
2025    behavior.
2026 
2027    Function-scope entities can rely on the function's visibility because
2028    it is set in start_preparsed_function.
2029 
2030    Class-scope entities cannot rely on the class's visibility until the end
2031    of the enclosing class definition.
2032 
2033    Note that because namespaces have multiple independent definitions,
2034    namespace visibility is handled elsewhere using the #pragma visibility
2035    machinery rather than by decorating the namespace declaration.
2036 
2037    The goal is for constraints from the type to give a diagnostic, and
2038    other constraints to be applied silently.  */
2039 
2040 void
2041 determine_visibility (tree decl)
2042 {
2043   tree class_type = NULL_TREE;
2044   bool use_template;
2045   bool orig_visibility_specified;
2046   enum symbol_visibility orig_visibility;
2047 
2048   /* Remember that all decls get VISIBILITY_DEFAULT when built.  */
2049 
2050   /* Only relevant for names with external linkage.  */
2051   if (!TREE_PUBLIC (decl))
2052     return;
2053 
2054   /* Cloned constructors and destructors get the same visibility as
2055      the underlying function.  That should be set up in
2056      maybe_clone_body.  */
2057   gcc_assert (!DECL_CLONED_FUNCTION_P (decl));
2058 
2059   orig_visibility_specified = DECL_VISIBILITY_SPECIFIED (decl);
2060   orig_visibility = DECL_VISIBILITY (decl);
2061 
2062   if (TREE_CODE (decl) == TYPE_DECL)
2063     {
2064       if (CLASS_TYPE_P (TREE_TYPE (decl)))
2065 	use_template = CLASSTYPE_USE_TEMPLATE (TREE_TYPE (decl));
2066       else if (TYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
2067 	use_template = 1;
2068       else
2069 	use_template = 0;
2070     }
2071   else if (DECL_LANG_SPECIFIC (decl))
2072     use_template = DECL_USE_TEMPLATE (decl);
2073   else
2074     use_template = 0;
2075 
2076   /* If DECL is a member of a class, visibility specifiers on the
2077      class can influence the visibility of the DECL.  */
2078   if (DECL_CLASS_SCOPE_P (decl))
2079     class_type = DECL_CONTEXT (decl);
2080   else
2081     {
2082       /* Not a class member.  */
2083 
2084       /* Virtual tables have DECL_CONTEXT set to their associated class,
2085 	 so they are automatically handled above.  */
2086       gcc_assert (TREE_CODE (decl) != VAR_DECL
2087 		  || !DECL_VTABLE_OR_VTT_P (decl));
2088 
2089       if (DECL_FUNCTION_SCOPE_P (decl) && ! DECL_VISIBILITY_SPECIFIED (decl))
2090 	{
2091 	  /* Local statics and classes get the visibility of their
2092 	     containing function by default, except that
2093 	     -fvisibility-inlines-hidden doesn't affect them.  */
2094 	  tree fn = DECL_CONTEXT (decl);
2095 	  if (DECL_VISIBILITY_SPECIFIED (fn))
2096 	    {
2097 	      DECL_VISIBILITY (decl) = DECL_VISIBILITY (fn);
2098 	      DECL_VISIBILITY_SPECIFIED (decl) =
2099 		DECL_VISIBILITY_SPECIFIED (fn);
2100 	    }
2101 	  else
2102 	    {
2103 	      if (DECL_CLASS_SCOPE_P (fn))
2104 		determine_visibility_from_class (decl, DECL_CONTEXT (fn));
2105 	      else if (determine_hidden_inline (fn))
2106 		{
2107 		  DECL_VISIBILITY (decl) = default_visibility;
2108 		  DECL_VISIBILITY_SPECIFIED (decl) =
2109 		    visibility_options.inpragma;
2110 		}
2111 	      else
2112 		{
2113 	          DECL_VISIBILITY (decl) = DECL_VISIBILITY (fn);
2114 	          DECL_VISIBILITY_SPECIFIED (decl) =
2115 		    DECL_VISIBILITY_SPECIFIED (fn);
2116 		}
2117 	    }
2118 
2119 	  /* Local classes in templates have CLASSTYPE_USE_TEMPLATE set,
2120 	     but have no TEMPLATE_INFO, so don't try to check it.  */
2121 	  use_template = 0;
2122 	}
2123       else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl)
2124 	       && flag_visibility_ms_compat)
2125 	{
2126 	  /* Under -fvisibility-ms-compat, types are visible by default,
2127 	     even though their contents aren't.  */
2128 	  tree underlying_type = TREE_TYPE (DECL_NAME (decl));
2129 	  int underlying_vis = type_visibility (underlying_type);
2130 	  if (underlying_vis == VISIBILITY_ANON
2131 	      || (CLASS_TYPE_P (underlying_type)
2132 		  && CLASSTYPE_VISIBILITY_SPECIFIED (underlying_type)))
2133 	    constrain_visibility (decl, underlying_vis, false);
2134 	  else
2135 	    DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
2136 	}
2137       else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl))
2138 	{
2139 	  /* tinfo visibility is based on the type it's for.  */
2140 	  constrain_visibility
2141 	    (decl, type_visibility (TREE_TYPE (DECL_NAME (decl))), false);
2142 
2143 	  /* Give the target a chance to override the visibility associated
2144 	     with DECL.  */
2145 	  if (TREE_PUBLIC (decl)
2146 	      && !DECL_REALLY_EXTERN (decl)
2147 	      && CLASS_TYPE_P (TREE_TYPE (DECL_NAME (decl)))
2148 	      && !CLASSTYPE_VISIBILITY_SPECIFIED (TREE_TYPE (DECL_NAME (decl))))
2149 	    targetm.cxx.determine_class_data_visibility (decl);
2150 	}
2151       else if (use_template)
2152 	/* Template instantiations and specializations get visibility based
2153 	   on their template unless they override it with an attribute.  */;
2154       else if (! DECL_VISIBILITY_SPECIFIED (decl))
2155 	{
2156           if (determine_hidden_inline (decl))
2157 	    DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
2158 	  else
2159             {
2160 	      /* Set default visibility to whatever the user supplied with
2161 	         #pragma GCC visibility or a namespace visibility attribute.  */
2162 	      DECL_VISIBILITY (decl) = default_visibility;
2163 	      DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
2164             }
2165 	}
2166     }
2167 
2168   if (use_template)
2169     {
2170       /* If the specialization doesn't specify visibility, use the
2171 	 visibility from the template.  */
2172       tree tinfo = (TREE_CODE (decl) == TYPE_DECL
2173 		    ? TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
2174 		    : DECL_TEMPLATE_INFO (decl));
2175       tree args = TI_ARGS (tinfo);
2176       tree attribs = (TREE_CODE (decl) == TYPE_DECL
2177 		      ? TYPE_ATTRIBUTES (TREE_TYPE (decl))
2178 		      : DECL_ATTRIBUTES (decl));
2179 
2180       if (args != error_mark_node
2181 	  /* Template argument visibility outweighs #pragma or namespace
2182 	     visibility, but not an explicit attribute.  */
2183 	  && !lookup_attribute ("visibility", attribs))
2184 	{
2185 	  int depth = TMPL_ARGS_DEPTH (args);
2186 	  tree pattern = DECL_TEMPLATE_RESULT (TI_TEMPLATE (tinfo));
2187 
2188 	  if (!DECL_VISIBILITY_SPECIFIED (decl))
2189 	    {
2190 	      if (!DECL_VISIBILITY_SPECIFIED (pattern)
2191 		  && determine_hidden_inline (decl))
2192 		DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
2193 	      else
2194 		{
2195 	          DECL_VISIBILITY (decl) = DECL_VISIBILITY (pattern);
2196 	          DECL_VISIBILITY_SPECIFIED (decl)
2197 		    = DECL_VISIBILITY_SPECIFIED (pattern);
2198 		}
2199 	    }
2200 
2201 	  /* FIXME should TMPL_ARGS_DEPTH really return 1 for null input? */
2202 	  if (args && depth > template_class_depth (class_type))
2203 	    /* Limit visibility based on its template arguments.  */
2204 	    constrain_visibility_for_template (decl, args);
2205 	}
2206     }
2207 
2208   if (class_type)
2209     determine_visibility_from_class (decl, class_type);
2210 
2211   if (decl_anon_ns_mem_p (decl))
2212     /* Names in an anonymous namespace get internal linkage.
2213        This might change once we implement export.  */
2214     constrain_visibility (decl, VISIBILITY_ANON, false);
2215   else if (TREE_CODE (decl) != TYPE_DECL)
2216     {
2217       /* Propagate anonymity from type to decl.  */
2218       int tvis = type_visibility (TREE_TYPE (decl));
2219       if (tvis == VISIBILITY_ANON
2220 	  || ! DECL_VISIBILITY_SPECIFIED (decl))
2221 	constrain_visibility (decl, tvis, false);
2222     }
2223   else if (no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/true))
2224     /* DR 757: A type without linkage shall not be used as the type of a
2225        variable or function with linkage, unless
2226        o the variable or function has extern "C" linkage (7.5 [dcl.link]), or
2227        o the variable or function is not used (3.2 [basic.def.odr]) or is
2228        defined in the same translation unit.
2229 
2230        Since non-extern "C" decls need to be defined in the same
2231        translation unit, we can make the type internal.  */
2232     constrain_visibility (decl, VISIBILITY_ANON, false);
2233 
2234   /* If visibility changed and DECL already has DECL_RTL, ensure
2235      symbol flags are updated.  */
2236   if ((DECL_VISIBILITY (decl) != orig_visibility
2237        || DECL_VISIBILITY_SPECIFIED (decl) != orig_visibility_specified)
2238       && ((TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
2239 	  || TREE_CODE (decl) == FUNCTION_DECL)
2240       && DECL_RTL_SET_P (decl))
2241     make_decl_rtl (decl);
2242 }
2243 
2244 /* By default, static data members and function members receive
2245    the visibility of their containing class.  */
2246 
2247 static void
2248 determine_visibility_from_class (tree decl, tree class_type)
2249 {
2250   if (DECL_VISIBILITY_SPECIFIED (decl))
2251     return;
2252 
2253   if (determine_hidden_inline (decl))
2254     DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
2255   else
2256     {
2257       /* Default to the class visibility.  */
2258       DECL_VISIBILITY (decl) = CLASSTYPE_VISIBILITY (class_type);
2259       DECL_VISIBILITY_SPECIFIED (decl)
2260 	= CLASSTYPE_VISIBILITY_SPECIFIED (class_type);
2261     }
2262 
2263   /* Give the target a chance to override the visibility associated
2264      with DECL.  */
2265   if (TREE_CODE (decl) == VAR_DECL
2266       && (DECL_TINFO_P (decl)
2267 	  || (DECL_VTABLE_OR_VTT_P (decl)
2268 	      /* Construction virtual tables are not exported because
2269 		 they cannot be referred to from other object files;
2270 		 their name is not standardized by the ABI.  */
2271 	      && !DECL_CONSTRUCTION_VTABLE_P (decl)))
2272       && TREE_PUBLIC (decl)
2273       && !DECL_REALLY_EXTERN (decl)
2274       && !CLASSTYPE_VISIBILITY_SPECIFIED (class_type))
2275     targetm.cxx.determine_class_data_visibility (decl);
2276 }
2277 
2278 /* Returns true iff DECL is an inline that should get hidden visibility
2279    because of -fvisibility-inlines-hidden.  */
2280 
2281 static bool
2282 determine_hidden_inline (tree decl)
2283 {
2284   return (visibility_options.inlines_hidden
2285 	  /* Don't do this for inline templates; specializations might not be
2286 	     inline, and we don't want them to inherit the hidden
2287 	     visibility.  We'll set it here for all inline instantiations.  */
2288 	  && !processing_template_decl
2289 	  && TREE_CODE (decl) == FUNCTION_DECL
2290 	  && DECL_DECLARED_INLINE_P (decl)
2291 	  && (! DECL_LANG_SPECIFIC (decl)
2292 	      || ! DECL_EXPLICIT_INSTANTIATION (decl)));
2293 }
2294 
2295 /* Constrain the visibility of a class TYPE based on the visibility of its
2296    field types.  Warn if any fields require lesser visibility.  */
2297 
2298 void
2299 constrain_class_visibility (tree type)
2300 {
2301   tree binfo;
2302   tree t;
2303   int i;
2304 
2305   int vis = type_visibility (type);
2306 
2307   if (vis == VISIBILITY_ANON
2308       || DECL_IN_SYSTEM_HEADER (TYPE_MAIN_DECL (type)))
2309     return;
2310 
2311   /* Don't warn about visibility if the class has explicit visibility.  */
2312   if (CLASSTYPE_VISIBILITY_SPECIFIED (type))
2313     vis = VISIBILITY_INTERNAL;
2314 
2315   for (t = TYPE_FIELDS (type); t; t = DECL_CHAIN (t))
2316     if (TREE_CODE (t) == FIELD_DECL && TREE_TYPE (t) != error_mark_node)
2317       {
2318 	tree ftype = strip_pointer_or_array_types (TREE_TYPE (t));
2319 	int subvis = type_visibility (ftype);
2320 
2321 	if (subvis == VISIBILITY_ANON)
2322 	  {
2323 	    if (!in_main_input_context ())
2324 	      warning (0, "\
2325 %qT has a field %qD whose type uses the anonymous namespace",
2326 		       type, t);
2327 	  }
2328 	else if (MAYBE_CLASS_TYPE_P (ftype)
2329 		 && vis < VISIBILITY_HIDDEN
2330 		 && subvis >= VISIBILITY_HIDDEN)
2331 	  warning (OPT_Wattributes, "\
2332 %qT declared with greater visibility than the type of its field %qD",
2333 		   type, t);
2334       }
2335 
2336   binfo = TYPE_BINFO (type);
2337   for (i = 0; BINFO_BASE_ITERATE (binfo, i, t); ++i)
2338     {
2339       int subvis = type_visibility (TREE_TYPE (t));
2340 
2341       if (subvis == VISIBILITY_ANON)
2342         {
2343 	  if (!in_main_input_context())
2344 	    warning (0, "\
2345 %qT has a base %qT whose type uses the anonymous namespace",
2346 		     type, TREE_TYPE (t));
2347 	}
2348       else if (vis < VISIBILITY_HIDDEN
2349 	       && subvis >= VISIBILITY_HIDDEN)
2350 	warning (OPT_Wattributes, "\
2351 %qT declared with greater visibility than its base %qT",
2352 		 type, TREE_TYPE (t));
2353     }
2354 }
2355 
2356 /* DECL is a FUNCTION_DECL or VAR_DECL.  If the object file linkage
2357    for DECL has not already been determined, do so now by setting
2358    DECL_EXTERNAL, DECL_COMDAT and other related flags.  Until this
2359    function is called entities with vague linkage whose definitions
2360    are available must have TREE_PUBLIC set.
2361 
2362    If this function decides to place DECL in COMDAT, it will set
2363    appropriate flags -- but will not clear DECL_EXTERNAL.  It is up to
2364    the caller to decide whether or not to clear DECL_EXTERNAL.  Some
2365    callers defer that decision until it is clear that DECL is actually
2366    required.  */
2367 
2368 void
2369 import_export_decl (tree decl)
2370 {
2371   int emit_p;
2372   bool comdat_p;
2373   bool import_p;
2374   tree class_type = NULL_TREE;
2375 
2376   if (DECL_INTERFACE_KNOWN (decl))
2377     return;
2378 
2379   /* We cannot determine what linkage to give to an entity with vague
2380      linkage until the end of the file.  For example, a virtual table
2381      for a class will be defined if and only if the key method is
2382      defined in this translation unit.  As a further example, consider
2383      that when compiling a translation unit that uses PCH file with
2384      "-frepo" it would be incorrect to make decisions about what
2385      entities to emit when building the PCH; those decisions must be
2386      delayed until the repository information has been processed.  */
2387   gcc_assert (at_eof);
2388   /* Object file linkage for explicit instantiations is handled in
2389      mark_decl_instantiated.  For static variables in functions with
2390      vague linkage, maybe_commonize_var is used.
2391 
2392      Therefore, the only declarations that should be provided to this
2393      function are those with external linkage that are:
2394 
2395      * implicit instantiations of function templates
2396 
2397      * inline function
2398 
2399      * implicit instantiations of static data members of class
2400        templates
2401 
2402      * virtual tables
2403 
2404      * typeinfo objects
2405 
2406      Furthermore, all entities that reach this point must have a
2407      definition available in this translation unit.
2408 
2409      The following assertions check these conditions.  */
2410   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
2411 	      || TREE_CODE (decl) == VAR_DECL);
2412   /* Any code that creates entities with TREE_PUBLIC cleared should
2413      also set DECL_INTERFACE_KNOWN.  */
2414   gcc_assert (TREE_PUBLIC (decl));
2415   if (TREE_CODE (decl) == FUNCTION_DECL)
2416     gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
2417 		|| DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
2418 		|| DECL_DECLARED_INLINE_P (decl));
2419   else
2420     gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
2421 		|| DECL_VTABLE_OR_VTT_P (decl)
2422 		|| DECL_TINFO_P (decl));
2423   /* Check that a definition of DECL is available in this translation
2424      unit.  */
2425   gcc_assert (!DECL_REALLY_EXTERN (decl));
2426 
2427   /* Assume that DECL will not have COMDAT linkage.  */
2428   comdat_p = false;
2429   /* Assume that DECL will not be imported into this translation
2430      unit.  */
2431   import_p = false;
2432 
2433   /* See if the repository tells us whether or not to emit DECL in
2434      this translation unit.  */
2435   emit_p = repo_emit_p (decl);
2436   if (emit_p == 0)
2437     import_p = true;
2438   else if (emit_p == 1)
2439     {
2440       /* The repository indicates that this entity should be defined
2441 	 here.  Make sure the back end honors that request.  */
2442       if (TREE_CODE (decl) == VAR_DECL)
2443 	mark_needed (decl);
2444       else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)
2445 	       || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
2446 	{
2447 	  tree clone;
2448 	  FOR_EACH_CLONE (clone, decl)
2449 	    mark_needed (clone);
2450 	}
2451       else
2452 	mark_needed (decl);
2453       /* Output the definition as an ordinary strong definition.  */
2454       DECL_EXTERNAL (decl) = 0;
2455       DECL_INTERFACE_KNOWN (decl) = 1;
2456       return;
2457     }
2458 
2459   if (import_p)
2460     /* We have already decided what to do with this DECL; there is no
2461        need to check anything further.  */
2462     ;
2463   else if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
2464     {
2465       class_type = DECL_CONTEXT (decl);
2466       import_export_class (class_type);
2467       if (TYPE_FOR_JAVA (class_type))
2468 	import_p = true;
2469       else if (CLASSTYPE_INTERFACE_KNOWN (class_type)
2470 	       && CLASSTYPE_INTERFACE_ONLY (class_type))
2471 	import_p = true;
2472       else if ((!flag_weak || TARGET_WEAK_NOT_IN_ARCHIVE_TOC)
2473 	       && !CLASSTYPE_USE_TEMPLATE (class_type)
2474 	       && CLASSTYPE_KEY_METHOD (class_type)
2475 	       && !DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (class_type)))
2476 	/* The ABI requires that all virtual tables be emitted with
2477 	   COMDAT linkage.  However, on systems where COMDAT symbols
2478 	   don't show up in the table of contents for a static
2479 	   archive, or on systems without weak symbols (where we
2480 	   approximate COMDAT linkage by using internal linkage), the
2481 	   linker will report errors about undefined symbols because
2482 	   it will not see the virtual table definition.  Therefore,
2483 	   in the case that we know that the virtual table will be
2484 	   emitted in only one translation unit, we make the virtual
2485 	   table an ordinary definition with external linkage.  */
2486 	DECL_EXTERNAL (decl) = 0;
2487       else if (CLASSTYPE_INTERFACE_KNOWN (class_type))
2488 	{
2489 	  /* CLASS_TYPE is being exported from this translation unit,
2490 	     so DECL should be defined here.  */
2491 	  if (!flag_weak && CLASSTYPE_EXPLICIT_INSTANTIATION (class_type))
2492 	    /* If a class is declared in a header with the "extern
2493 	       template" extension, then it will not be instantiated,
2494 	       even in translation units that would normally require
2495 	       it.  Often such classes are explicitly instantiated in
2496 	       one translation unit.  Therefore, the explicit
2497 	       instantiation must be made visible to other translation
2498 	       units.  */
2499 	    DECL_EXTERNAL (decl) = 0;
2500 	  else
2501 	    {
2502 	      /* The generic C++ ABI says that class data is always
2503 		 COMDAT, even if there is a key function.  Some
2504 		 variants (e.g., the ARM EABI) says that class data
2505 		 only has COMDAT linkage if the class data might be
2506 		 emitted in more than one translation unit.  When the
2507 		 key method can be inline and is inline, we still have
2508 		 to arrange for comdat even though
2509 		 class_data_always_comdat is false.  */
2510 	      if (!CLASSTYPE_KEY_METHOD (class_type)
2511 		  || DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (class_type))
2512 		  || targetm.cxx.class_data_always_comdat ())
2513 		{
2514 		  /* The ABI requires COMDAT linkage.  Normally, we
2515 		     only emit COMDAT things when they are needed;
2516 		     make sure that we realize that this entity is
2517 		     indeed needed.  */
2518 		  comdat_p = true;
2519 		  mark_needed (decl);
2520 		}
2521 	    }
2522 	}
2523       else if (!flag_implicit_templates
2524 	       && CLASSTYPE_IMPLICIT_INSTANTIATION (class_type))
2525 	import_p = true;
2526       else
2527 	comdat_p = true;
2528     }
2529   else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl))
2530     {
2531       tree type = TREE_TYPE (DECL_NAME (decl));
2532       if (CLASS_TYPE_P (type))
2533 	{
2534 	  class_type = type;
2535 	  import_export_class (type);
2536 	  if (CLASSTYPE_INTERFACE_KNOWN (type)
2537 	      && TYPE_POLYMORPHIC_P (type)
2538 	      && CLASSTYPE_INTERFACE_ONLY (type)
2539 	      /* If -fno-rtti was specified, then we cannot be sure
2540 		 that RTTI information will be emitted with the
2541 		 virtual table of the class, so we must emit it
2542 		 wherever it is used.  */
2543 	      && flag_rtti)
2544 	    import_p = true;
2545 	  else
2546 	    {
2547 	      if (CLASSTYPE_INTERFACE_KNOWN (type)
2548 		  && !CLASSTYPE_INTERFACE_ONLY (type))
2549 		{
2550 		  comdat_p = (targetm.cxx.class_data_always_comdat ()
2551 			      || (CLASSTYPE_KEY_METHOD (type)
2552 				  && DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (type))));
2553 		  mark_needed (decl);
2554 		  if (!flag_weak)
2555 		    {
2556 		      comdat_p = false;
2557 		      DECL_EXTERNAL (decl) = 0;
2558 		    }
2559 		}
2560 	      else
2561 		comdat_p = true;
2562 	    }
2563 	}
2564       else
2565 	comdat_p = true;
2566     }
2567   else if (DECL_TEMPLATE_INSTANTIATION (decl)
2568 	   || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl))
2569     {
2570       /* DECL is an implicit instantiation of a function or static
2571 	 data member.  */
2572       if ((flag_implicit_templates
2573 	   && !flag_use_repository)
2574 	  || (flag_implicit_inline_templates
2575 	      && TREE_CODE (decl) == FUNCTION_DECL
2576 	      && DECL_DECLARED_INLINE_P (decl)))
2577 	comdat_p = true;
2578       else
2579 	/* If we are not implicitly generating templates, then mark
2580 	   this entity as undefined in this translation unit.  */
2581 	import_p = true;
2582     }
2583   else if (DECL_FUNCTION_MEMBER_P (decl))
2584     {
2585       if (!DECL_DECLARED_INLINE_P (decl))
2586 	{
2587 	  tree ctype = DECL_CONTEXT (decl);
2588 	  import_export_class (ctype);
2589 	  if (CLASSTYPE_INTERFACE_KNOWN (ctype))
2590 	    {
2591 	      DECL_NOT_REALLY_EXTERN (decl)
2592 		= ! (CLASSTYPE_INTERFACE_ONLY (ctype)
2593 		     || (DECL_DECLARED_INLINE_P (decl)
2594 			 && ! flag_implement_inlines
2595 			 && !DECL_VINDEX (decl)));
2596 
2597 	      if (!DECL_NOT_REALLY_EXTERN (decl))
2598 		DECL_EXTERNAL (decl) = 1;
2599 
2600 	      /* Always make artificials weak.  */
2601 	      if (DECL_ARTIFICIAL (decl) && flag_weak)
2602 		comdat_p = true;
2603 	      else
2604 		maybe_make_one_only (decl);
2605 	    }
2606 	}
2607       else
2608 	comdat_p = true;
2609     }
2610   else
2611     comdat_p = true;
2612 
2613   if (import_p)
2614     {
2615       /* If we are importing DECL into this translation unit, mark is
2616 	 an undefined here.  */
2617       DECL_EXTERNAL (decl) = 1;
2618       DECL_NOT_REALLY_EXTERN (decl) = 0;
2619     }
2620   else if (comdat_p)
2621     {
2622       /* If we decided to put DECL in COMDAT, mark it accordingly at
2623 	 this point.  */
2624       comdat_linkage (decl);
2625     }
2626 
2627   DECL_INTERFACE_KNOWN (decl) = 1;
2628 }
2629 
2630 /* Return an expression that performs the destruction of DECL, which
2631    must be a VAR_DECL whose type has a non-trivial destructor, or is
2632    an array whose (innermost) elements have a non-trivial destructor.  */
2633 
2634 tree
2635 build_cleanup (tree decl)
2636 {
2637   tree temp;
2638   tree type = TREE_TYPE (decl);
2639 
2640   /* This function should only be called for declarations that really
2641      require cleanups.  */
2642   gcc_assert (!TYPE_HAS_TRIVIAL_DESTRUCTOR (type));
2643 
2644   /* Treat all objects with destructors as used; the destructor may do
2645      something substantive.  */
2646   mark_used (decl);
2647 
2648   if (TREE_CODE (type) == ARRAY_TYPE)
2649     temp = decl;
2650   else
2651     temp = build_address (decl);
2652   temp = build_delete (TREE_TYPE (temp), temp,
2653 		       sfk_complete_destructor,
2654 		       LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR, 0,
2655 		       tf_warning_or_error);
2656   return temp;
2657 }
2658 
2659 /* Returns the initialization guard variable for the variable DECL,
2660    which has static storage duration.  */
2661 
2662 tree
2663 get_guard (tree decl)
2664 {
2665   tree sname;
2666   tree guard;
2667 
2668   sname = mangle_guard_variable (decl);
2669   guard = IDENTIFIER_GLOBAL_VALUE (sname);
2670   if (! guard)
2671     {
2672       tree guard_type;
2673 
2674       /* We use a type that is big enough to contain a mutex as well
2675 	 as an integer counter.  */
2676       guard_type = targetm.cxx.guard_type ();
2677       guard = build_decl (DECL_SOURCE_LOCATION (decl),
2678 			  VAR_DECL, sname, guard_type);
2679 
2680       /* The guard should have the same linkage as what it guards.  */
2681       TREE_PUBLIC (guard) = TREE_PUBLIC (decl);
2682       TREE_STATIC (guard) = TREE_STATIC (decl);
2683       DECL_COMMON (guard) = DECL_COMMON (decl);
2684       DECL_COMDAT (guard) = DECL_COMDAT (decl);
2685       if (DECL_ONE_ONLY (decl))
2686 	make_decl_one_only (guard, cxx_comdat_group (guard));
2687       if (TREE_PUBLIC (decl))
2688 	DECL_WEAK (guard) = DECL_WEAK (decl);
2689       DECL_VISIBILITY (guard) = DECL_VISIBILITY (decl);
2690       DECL_VISIBILITY_SPECIFIED (guard) = DECL_VISIBILITY_SPECIFIED (decl);
2691 
2692       DECL_ARTIFICIAL (guard) = 1;
2693       DECL_IGNORED_P (guard) = 1;
2694       TREE_USED (guard) = 1;
2695       pushdecl_top_level_and_finish (guard, NULL_TREE);
2696     }
2697   return guard;
2698 }
2699 
2700 /* Return those bits of the GUARD variable that should be set when the
2701    guarded entity is actually initialized.  */
2702 
2703 static tree
2704 get_guard_bits (tree guard)
2705 {
2706   if (!targetm.cxx.guard_mask_bit ())
2707     {
2708       /* We only set the first byte of the guard, in order to leave room
2709 	 for a mutex in the high-order bits.  */
2710       guard = build1 (ADDR_EXPR,
2711 		      build_pointer_type (TREE_TYPE (guard)),
2712 		      guard);
2713       guard = build1 (NOP_EXPR,
2714 		      build_pointer_type (char_type_node),
2715 		      guard);
2716       guard = build1 (INDIRECT_REF, char_type_node, guard);
2717     }
2718 
2719   return guard;
2720 }
2721 
2722 /* Return an expression which determines whether or not the GUARD
2723    variable has already been initialized.  */
2724 
2725 tree
2726 get_guard_cond (tree guard)
2727 {
2728   tree guard_value;
2729 
2730   /* Check to see if the GUARD is zero.  */
2731   guard = get_guard_bits (guard);
2732 
2733   /* Mask off all but the low bit.  */
2734   if (targetm.cxx.guard_mask_bit ())
2735     {
2736       guard_value = integer_one_node;
2737       if (!same_type_p (TREE_TYPE (guard_value), TREE_TYPE (guard)))
2738 	guard_value = convert (TREE_TYPE (guard), guard_value);
2739       guard = cp_build_binary_op (input_location,
2740 				  BIT_AND_EXPR, guard, guard_value,
2741 				  tf_warning_or_error);
2742     }
2743 
2744   guard_value = integer_zero_node;
2745   if (!same_type_p (TREE_TYPE (guard_value), TREE_TYPE (guard)))
2746     guard_value = convert (TREE_TYPE (guard), guard_value);
2747   return cp_build_binary_op (input_location,
2748 			     EQ_EXPR, guard, guard_value,
2749 			     tf_warning_or_error);
2750 }
2751 
2752 /* Return an expression which sets the GUARD variable, indicating that
2753    the variable being guarded has been initialized.  */
2754 
2755 tree
2756 set_guard (tree guard)
2757 {
2758   tree guard_init;
2759 
2760   /* Set the GUARD to one.  */
2761   guard = get_guard_bits (guard);
2762   guard_init = integer_one_node;
2763   if (!same_type_p (TREE_TYPE (guard_init), TREE_TYPE (guard)))
2764     guard_init = convert (TREE_TYPE (guard), guard_init);
2765   return cp_build_modify_expr (guard, NOP_EXPR, guard_init,
2766 			       tf_warning_or_error);
2767 }
2768 
2769 /* Start the process of running a particular set of global constructors
2770    or destructors.  Subroutine of do_[cd]tors.  */
2771 
2772 static tree
2773 start_objects (int method_type, int initp)
2774 {
2775   tree body;
2776   tree fndecl;
2777   char type[14];
2778 
2779   /* Make ctor or dtor function.  METHOD_TYPE may be 'I' or 'D'.  */
2780 
2781   if (initp != DEFAULT_INIT_PRIORITY)
2782     {
2783       char joiner;
2784 
2785 #ifdef JOINER
2786       joiner = JOINER;
2787 #else
2788       joiner = '_';
2789 #endif
2790 
2791       sprintf (type, "sub_%c%c%.5u", method_type, joiner, initp);
2792     }
2793   else
2794     sprintf (type, "sub_%c", method_type);
2795 
2796   fndecl = build_lang_decl (FUNCTION_DECL,
2797 			    get_file_function_name (type),
2798 			    build_function_type_list (void_type_node,
2799 						      NULL_TREE));
2800   start_preparsed_function (fndecl, /*attrs=*/NULL_TREE, SF_PRE_PARSED);
2801 
2802   TREE_PUBLIC (current_function_decl) = 0;
2803 
2804   /* Mark as artificial because it's not explicitly in the user's
2805      source code.  */
2806   DECL_ARTIFICIAL (current_function_decl) = 1;
2807 
2808   /* Mark this declaration as used to avoid spurious warnings.  */
2809   TREE_USED (current_function_decl) = 1;
2810 
2811   /* Mark this function as a global constructor or destructor.  */
2812   if (method_type == 'I')
2813     DECL_GLOBAL_CTOR_P (current_function_decl) = 1;
2814   else
2815     DECL_GLOBAL_DTOR_P (current_function_decl) = 1;
2816 
2817   body = begin_compound_stmt (BCS_FN_BODY);
2818 
2819   return body;
2820 }
2821 
2822 /* Finish the process of running a particular set of global constructors
2823    or destructors.  Subroutine of do_[cd]tors.  */
2824 
2825 static void
2826 finish_objects (int method_type, int initp, tree body)
2827 {
2828   tree fn;
2829 
2830   /* Finish up.  */
2831   finish_compound_stmt (body);
2832   fn = finish_function (0);
2833 
2834   if (method_type == 'I')
2835     {
2836       DECL_STATIC_CONSTRUCTOR (fn) = 1;
2837       decl_init_priority_insert (fn, initp);
2838     }
2839   else
2840     {
2841       DECL_STATIC_DESTRUCTOR (fn) = 1;
2842       decl_fini_priority_insert (fn, initp);
2843     }
2844 
2845   expand_or_defer_fn (fn);
2846 }
2847 
2848 /* The names of the parameters to the function created to handle
2849    initializations and destructions for objects with static storage
2850    duration.  */
2851 #define INITIALIZE_P_IDENTIFIER "__initialize_p"
2852 #define PRIORITY_IDENTIFIER "__priority"
2853 
2854 /* The name of the function we create to handle initializations and
2855    destructions for objects with static storage duration.  */
2856 #define SSDF_IDENTIFIER "__static_initialization_and_destruction"
2857 
2858 /* The declaration for the __INITIALIZE_P argument.  */
2859 static GTY(()) tree initialize_p_decl;
2860 
2861 /* The declaration for the __PRIORITY argument.  */
2862 static GTY(()) tree priority_decl;
2863 
2864 /* The declaration for the static storage duration function.  */
2865 static GTY(()) tree ssdf_decl;
2866 
2867 /* All the static storage duration functions created in this
2868    translation unit.  */
2869 static GTY(()) VEC(tree,gc) *ssdf_decls;
2870 
2871 /* A map from priority levels to information about that priority
2872    level.  There may be many such levels, so efficient lookup is
2873    important.  */
2874 static splay_tree priority_info_map;
2875 
2876 /* Begins the generation of the function that will handle all
2877    initialization and destruction of objects with static storage
2878    duration.  The function generated takes two parameters of type
2879    `int': __INITIALIZE_P and __PRIORITY.  If __INITIALIZE_P is
2880    nonzero, it performs initializations.  Otherwise, it performs
2881    destructions.  It only performs those initializations or
2882    destructions with the indicated __PRIORITY.  The generated function
2883    returns no value.
2884 
2885    It is assumed that this function will only be called once per
2886    translation unit.  */
2887 
2888 static tree
2889 start_static_storage_duration_function (unsigned count)
2890 {
2891   tree type;
2892   tree body;
2893   char id[sizeof (SSDF_IDENTIFIER) + 1 /* '\0' */ + 32];
2894 
2895   /* Create the identifier for this function.  It will be of the form
2896      SSDF_IDENTIFIER_<number>.  */
2897   sprintf (id, "%s_%u", SSDF_IDENTIFIER, count);
2898 
2899   type = build_function_type_list (void_type_node,
2900 				   integer_type_node, integer_type_node,
2901 				   NULL_TREE);
2902 
2903   /* Create the FUNCTION_DECL itself.  */
2904   ssdf_decl = build_lang_decl (FUNCTION_DECL,
2905 			       get_identifier (id),
2906 			       type);
2907   TREE_PUBLIC (ssdf_decl) = 0;
2908   DECL_ARTIFICIAL (ssdf_decl) = 1;
2909 
2910   /* Put this function in the list of functions to be called from the
2911      static constructors and destructors.  */
2912   if (!ssdf_decls)
2913     {
2914       ssdf_decls = VEC_alloc (tree, gc, 32);
2915 
2916       /* Take this opportunity to initialize the map from priority
2917 	 numbers to information about that priority level.  */
2918       priority_info_map = splay_tree_new (splay_tree_compare_ints,
2919 					  /*delete_key_fn=*/0,
2920 					  /*delete_value_fn=*/
2921 					  (splay_tree_delete_value_fn) &free);
2922 
2923       /* We always need to generate functions for the
2924 	 DEFAULT_INIT_PRIORITY so enter it now.  That way when we walk
2925 	 priorities later, we'll be sure to find the
2926 	 DEFAULT_INIT_PRIORITY.  */
2927       get_priority_info (DEFAULT_INIT_PRIORITY);
2928     }
2929 
2930   VEC_safe_push (tree, gc, ssdf_decls, ssdf_decl);
2931 
2932   /* Create the argument list.  */
2933   initialize_p_decl = cp_build_parm_decl
2934     (get_identifier (INITIALIZE_P_IDENTIFIER), integer_type_node);
2935   DECL_CONTEXT (initialize_p_decl) = ssdf_decl;
2936   TREE_USED (initialize_p_decl) = 1;
2937   priority_decl = cp_build_parm_decl
2938     (get_identifier (PRIORITY_IDENTIFIER), integer_type_node);
2939   DECL_CONTEXT (priority_decl) = ssdf_decl;
2940   TREE_USED (priority_decl) = 1;
2941 
2942   DECL_CHAIN (initialize_p_decl) = priority_decl;
2943   DECL_ARGUMENTS (ssdf_decl) = initialize_p_decl;
2944 
2945   /* Put the function in the global scope.  */
2946   pushdecl (ssdf_decl);
2947 
2948   /* Start the function itself.  This is equivalent to declaring the
2949      function as:
2950 
2951        static void __ssdf (int __initialize_p, init __priority_p);
2952 
2953      It is static because we only need to call this function from the
2954      various constructor and destructor functions for this module.  */
2955   start_preparsed_function (ssdf_decl,
2956 			    /*attrs=*/NULL_TREE,
2957 			    SF_PRE_PARSED);
2958 
2959   /* Set up the scope of the outermost block in the function.  */
2960   body = begin_compound_stmt (BCS_FN_BODY);
2961 
2962   return body;
2963 }
2964 
2965 /* Finish the generation of the function which performs initialization
2966    and destruction of objects with static storage duration.  After
2967    this point, no more such objects can be created.  */
2968 
2969 static void
2970 finish_static_storage_duration_function (tree body)
2971 {
2972   /* Close out the function.  */
2973   finish_compound_stmt (body);
2974   expand_or_defer_fn (finish_function (0));
2975 }
2976 
2977 /* Return the information about the indicated PRIORITY level.  If no
2978    code to handle this level has yet been generated, generate the
2979    appropriate prologue.  */
2980 
2981 static priority_info
2982 get_priority_info (int priority)
2983 {
2984   priority_info pi;
2985   splay_tree_node n;
2986 
2987   n = splay_tree_lookup (priority_info_map,
2988 			 (splay_tree_key) priority);
2989   if (!n)
2990     {
2991       /* Create a new priority information structure, and insert it
2992 	 into the map.  */
2993       pi = XNEW (struct priority_info_s);
2994       pi->initializations_p = 0;
2995       pi->destructions_p = 0;
2996       splay_tree_insert (priority_info_map,
2997 			 (splay_tree_key) priority,
2998 			 (splay_tree_value) pi);
2999     }
3000   else
3001     pi = (priority_info) n->value;
3002 
3003   return pi;
3004 }
3005 
3006 /* The effective initialization priority of a DECL.  */
3007 
3008 #define DECL_EFFECTIVE_INIT_PRIORITY(decl)				      \
3009 	((!DECL_HAS_INIT_PRIORITY_P (decl) || DECL_INIT_PRIORITY (decl) == 0) \
3010 	 ? DEFAULT_INIT_PRIORITY : DECL_INIT_PRIORITY (decl))
3011 
3012 /* Whether a DECL needs a guard to protect it against multiple
3013    initialization.  */
3014 
3015 #define NEEDS_GUARD_P(decl) (TREE_PUBLIC (decl) && (DECL_COMMON (decl)      \
3016 						    || DECL_ONE_ONLY (decl) \
3017 						    || DECL_WEAK (decl)))
3018 
3019 /* Called from one_static_initialization_or_destruction(),
3020    via walk_tree.
3021    Walks the initializer list of a global variable and looks for
3022    temporary variables (DECL_NAME() == NULL and DECL_ARTIFICIAL != 0)
3023    and that have their DECL_CONTEXT() == NULL.
3024    For each such temporary variable, set their DECL_CONTEXT() to
3025    the current function. This is necessary because otherwise
3026    some optimizers (enabled by -O2 -fprofile-arcs) might crash
3027    when trying to refer to a temporary variable that does not have
3028    it's DECL_CONTECT() properly set.  */
3029 static tree
3030 fix_temporary_vars_context_r (tree *node,
3031 			      int  *unused ATTRIBUTE_UNUSED,
3032 			      void *unused1 ATTRIBUTE_UNUSED)
3033 {
3034   gcc_assert (current_function_decl);
3035 
3036   if (TREE_CODE (*node) == BIND_EXPR)
3037     {
3038       tree var;
3039 
3040       for (var = BIND_EXPR_VARS (*node); var; var = DECL_CHAIN (var))
3041 	if (TREE_CODE (var) == VAR_DECL
3042 	  && !DECL_NAME (var)
3043 	  && DECL_ARTIFICIAL (var)
3044 	  && !DECL_CONTEXT (var))
3045 	  DECL_CONTEXT (var) = current_function_decl;
3046     }
3047 
3048   return NULL_TREE;
3049 }
3050 
3051 /* Set up to handle the initialization or destruction of DECL.  If
3052    INITP is nonzero, we are initializing the variable.  Otherwise, we
3053    are destroying it.  */
3054 
3055 static void
3056 one_static_initialization_or_destruction (tree decl, tree init, bool initp)
3057 {
3058   tree guard_if_stmt = NULL_TREE;
3059   tree guard;
3060 
3061   /* If we are supposed to destruct and there's a trivial destructor,
3062      nothing has to be done.  */
3063   if (!initp
3064       && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
3065     return;
3066 
3067   /* Trick the compiler into thinking we are at the file and line
3068      where DECL was declared so that error-messages make sense, and so
3069      that the debugger will show somewhat sensible file and line
3070      information.  */
3071   input_location = DECL_SOURCE_LOCATION (decl);
3072 
3073   /* Make sure temporary variables in the initialiser all have
3074      their DECL_CONTEXT() set to a value different from NULL_TREE.
3075      This can happen when global variables initialisers are built.
3076      In that case, the DECL_CONTEXT() of the global variables _AND_ of all
3077      the temporary variables that might have been generated in the
3078      accompagning initialisers is NULL_TREE, meaning the variables have been
3079      declared in the global namespace.
3080      What we want to do here is to fix that and make sure the DECL_CONTEXT()
3081      of the temporaries are set to the current function decl.  */
3082   cp_walk_tree_without_duplicates (&init,
3083 				   fix_temporary_vars_context_r,
3084 				   NULL);
3085 
3086   /* Because of:
3087 
3088        [class.access.spec]
3089 
3090        Access control for implicit calls to the constructors,
3091        the conversion functions, or the destructor called to
3092        create and destroy a static data member is performed as
3093        if these calls appeared in the scope of the member's
3094        class.
3095 
3096      we pretend we are in a static member function of the class of
3097      which the DECL is a member.  */
3098   if (member_p (decl))
3099     {
3100       DECL_CONTEXT (current_function_decl) = DECL_CONTEXT (decl);
3101       DECL_STATIC_FUNCTION_P (current_function_decl) = 1;
3102     }
3103 
3104   /* Assume we don't need a guard.  */
3105   guard = NULL_TREE;
3106   /* We need a guard if this is an object with external linkage that
3107      might be initialized in more than one place.  (For example, a
3108      static data member of a template, when the data member requires
3109      construction.)  */
3110   if (NEEDS_GUARD_P (decl))
3111     {
3112       tree guard_cond;
3113 
3114       guard = get_guard (decl);
3115 
3116       /* When using __cxa_atexit, we just check the GUARD as we would
3117 	 for a local static.  */
3118       if (flag_use_cxa_atexit)
3119 	{
3120 	  /* When using __cxa_atexit, we never try to destroy
3121 	     anything from a static destructor.  */
3122 	  gcc_assert (initp);
3123 	  guard_cond = get_guard_cond (guard);
3124 	}
3125       /* If we don't have __cxa_atexit, then we will be running
3126 	 destructors from .fini sections, or their equivalents.  So,
3127 	 we need to know how many times we've tried to initialize this
3128 	 object.  We do initializations only if the GUARD is zero,
3129 	 i.e., if we are the first to initialize the variable.  We do
3130 	 destructions only if the GUARD is one, i.e., if we are the
3131 	 last to destroy the variable.  */
3132       else if (initp)
3133 	guard_cond
3134 	  = cp_build_binary_op (input_location,
3135 				EQ_EXPR,
3136 				cp_build_unary_op (PREINCREMENT_EXPR,
3137 						   guard,
3138 						   /*noconvert=*/1,
3139 						   tf_warning_or_error),
3140 				integer_one_node,
3141 				tf_warning_or_error);
3142       else
3143 	guard_cond
3144 	  = cp_build_binary_op (input_location,
3145 				EQ_EXPR,
3146 				cp_build_unary_op (PREDECREMENT_EXPR,
3147 						   guard,
3148 						   /*noconvert=*/1,
3149 						   tf_warning_or_error),
3150 				integer_zero_node,
3151 				tf_warning_or_error);
3152 
3153       guard_if_stmt = begin_if_stmt ();
3154       finish_if_stmt_cond (guard_cond, guard_if_stmt);
3155     }
3156 
3157 
3158   /* If we're using __cxa_atexit, we have not already set the GUARD,
3159      so we must do so now.  */
3160   if (guard && initp && flag_use_cxa_atexit)
3161     finish_expr_stmt (set_guard (guard));
3162 
3163   /* Perform the initialization or destruction.  */
3164   if (initp)
3165     {
3166       if (init)
3167 	finish_expr_stmt (init);
3168 
3169       /* If we're using __cxa_atexit, register a function that calls the
3170 	 destructor for the object.  */
3171       if (flag_use_cxa_atexit)
3172 	finish_expr_stmt (register_dtor_fn (decl));
3173     }
3174   else
3175     finish_expr_stmt (build_cleanup (decl));
3176 
3177   /* Finish the guard if-stmt, if necessary.  */
3178   if (guard)
3179     {
3180       finish_then_clause (guard_if_stmt);
3181       finish_if_stmt (guard_if_stmt);
3182     }
3183 
3184   /* Now that we're done with DECL we don't need to pretend to be a
3185      member of its class any longer.  */
3186   DECL_CONTEXT (current_function_decl) = NULL_TREE;
3187   DECL_STATIC_FUNCTION_P (current_function_decl) = 0;
3188 }
3189 
3190 /* Generate code to do the initialization or destruction of the decls in VARS,
3191    a TREE_LIST of VAR_DECL with static storage duration.
3192    Whether initialization or destruction is performed is specified by INITP.  */
3193 
3194 static void
3195 do_static_initialization_or_destruction (tree vars, bool initp)
3196 {
3197   tree node, init_if_stmt, cond;
3198 
3199   /* Build the outer if-stmt to check for initialization or destruction.  */
3200   init_if_stmt = begin_if_stmt ();
3201   cond = initp ? integer_one_node : integer_zero_node;
3202   cond = cp_build_binary_op (input_location,
3203 			     EQ_EXPR,
3204 			     initialize_p_decl,
3205 			     cond,
3206 			     tf_warning_or_error);
3207   finish_if_stmt_cond (cond, init_if_stmt);
3208 
3209   node = vars;
3210   do {
3211     tree decl = TREE_VALUE (node);
3212     tree priority_if_stmt;
3213     int priority;
3214     priority_info pi;
3215 
3216     /* If we don't need a destructor, there's nothing to do.  Avoid
3217        creating a possibly empty if-stmt.  */
3218     if (!initp && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
3219       {
3220 	node = TREE_CHAIN (node);
3221 	continue;
3222       }
3223 
3224     /* Remember that we had an initialization or finalization at this
3225        priority.  */
3226     priority = DECL_EFFECTIVE_INIT_PRIORITY (decl);
3227     pi = get_priority_info (priority);
3228     if (initp)
3229       pi->initializations_p = 1;
3230     else
3231       pi->destructions_p = 1;
3232 
3233     /* Conditionalize this initialization on being in the right priority
3234        and being initializing/finalizing appropriately.  */
3235     priority_if_stmt = begin_if_stmt ();
3236     cond = cp_build_binary_op (input_location,
3237 			       EQ_EXPR,
3238 			       priority_decl,
3239 			       build_int_cst (NULL_TREE, priority),
3240 			       tf_warning_or_error);
3241     finish_if_stmt_cond (cond, priority_if_stmt);
3242 
3243     /* Process initializers with same priority.  */
3244     for (; node
3245 	   && DECL_EFFECTIVE_INIT_PRIORITY (TREE_VALUE (node)) == priority;
3246 	 node = TREE_CHAIN (node))
3247       /* Do one initialization or destruction.  */
3248       one_static_initialization_or_destruction (TREE_VALUE (node),
3249 						TREE_PURPOSE (node), initp);
3250 
3251     /* Finish up the priority if-stmt body.  */
3252     finish_then_clause (priority_if_stmt);
3253     finish_if_stmt (priority_if_stmt);
3254 
3255   } while (node);
3256 
3257   /* Finish up the init/destruct if-stmt body.  */
3258   finish_then_clause (init_if_stmt);
3259   finish_if_stmt (init_if_stmt);
3260 }
3261 
3262 /* VARS is a list of variables with static storage duration which may
3263    need initialization and/or finalization.  Remove those variables
3264    that don't really need to be initialized or finalized, and return
3265    the resulting list.  The order in which the variables appear in
3266    VARS is in reverse order of the order in which they should actually
3267    be initialized.  The list we return is in the unreversed order;
3268    i.e., the first variable should be initialized first.  */
3269 
3270 static tree
3271 prune_vars_needing_no_initialization (tree *vars)
3272 {
3273   tree *var = vars;
3274   tree result = NULL_TREE;
3275 
3276   while (*var)
3277     {
3278       tree t = *var;
3279       tree decl = TREE_VALUE (t);
3280       tree init = TREE_PURPOSE (t);
3281 
3282       /* Deal gracefully with error.  */
3283       if (decl == error_mark_node)
3284 	{
3285 	  var = &TREE_CHAIN (t);
3286 	  continue;
3287 	}
3288 
3289       /* The only things that can be initialized are variables.  */
3290       gcc_assert (TREE_CODE (decl) == VAR_DECL);
3291 
3292       /* If this object is not defined, we don't need to do anything
3293 	 here.  */
3294       if (DECL_EXTERNAL (decl))
3295 	{
3296 	  var = &TREE_CHAIN (t);
3297 	  continue;
3298 	}
3299 
3300       /* Also, if the initializer already contains errors, we can bail
3301 	 out now.  */
3302       if (init && TREE_CODE (init) == TREE_LIST
3303 	  && value_member (error_mark_node, init))
3304 	{
3305 	  var = &TREE_CHAIN (t);
3306 	  continue;
3307 	}
3308 
3309       /* This variable is going to need initialization and/or
3310 	 finalization, so we add it to the list.  */
3311       *var = TREE_CHAIN (t);
3312       TREE_CHAIN (t) = result;
3313       result = t;
3314     }
3315 
3316   return result;
3317 }
3318 
3319 /* Make sure we have told the back end about all the variables in
3320    VARS.  */
3321 
3322 static void
3323 write_out_vars (tree vars)
3324 {
3325   tree v;
3326 
3327   for (v = vars; v; v = TREE_CHAIN (v))
3328     {
3329       tree var = TREE_VALUE (v);
3330       if (!var_finalized_p (var))
3331 	{
3332 	  import_export_decl (var);
3333 	  rest_of_decl_compilation (var, 1, 1);
3334 	}
3335     }
3336 }
3337 
3338 /* Generate a static constructor (if CONSTRUCTOR_P) or destructor
3339    (otherwise) that will initialize all global objects with static
3340    storage duration having the indicated PRIORITY.  */
3341 
3342 static void
3343 generate_ctor_or_dtor_function (bool constructor_p, int priority,
3344 				location_t *locus)
3345 {
3346   char function_key;
3347   tree fndecl;
3348   tree body;
3349   size_t i;
3350 
3351   input_location = *locus;
3352   /* ??? */
3353   /* Was: locus->line++; */
3354 
3355   /* We use `I' to indicate initialization and `D' to indicate
3356      destruction.  */
3357   function_key = constructor_p ? 'I' : 'D';
3358 
3359   /* We emit the function lazily, to avoid generating empty
3360      global constructors and destructors.  */
3361   body = NULL_TREE;
3362 
3363   /* For Objective-C++, we may need to initialize metadata found in this module.
3364      This must be done _before_ any other static initializations.  */
3365   if (c_dialect_objc () && (priority == DEFAULT_INIT_PRIORITY)
3366       && constructor_p && objc_static_init_needed_p ())
3367     {
3368       body = start_objects (function_key, priority);
3369       objc_generate_static_init_call (NULL_TREE);
3370     }
3371 
3372   /* Call the static storage duration function with appropriate
3373      arguments.  */
3374   FOR_EACH_VEC_ELT (tree, ssdf_decls, i, fndecl)
3375     {
3376       /* Calls to pure or const functions will expand to nothing.  */
3377       if (! (flags_from_decl_or_type (fndecl) & (ECF_CONST | ECF_PURE)))
3378 	{
3379 	  tree call;
3380 
3381 	  if (! body)
3382 	    body = start_objects (function_key, priority);
3383 
3384 	  call = cp_build_function_call_nary (fndecl, tf_warning_or_error,
3385 					      build_int_cst (NULL_TREE,
3386 							     constructor_p),
3387 					      build_int_cst (NULL_TREE,
3388 							     priority),
3389 					      NULL_TREE);
3390 	  finish_expr_stmt (call);
3391 	}
3392     }
3393 
3394   /* Close out the function.  */
3395   if (body)
3396     finish_objects (function_key, priority, body);
3397 }
3398 
3399 /* Generate constructor and destructor functions for the priority
3400    indicated by N.  */
3401 
3402 static int
3403 generate_ctor_and_dtor_functions_for_priority (splay_tree_node n, void * data)
3404 {
3405   location_t *locus = (location_t *) data;
3406   int priority = (int) n->key;
3407   priority_info pi = (priority_info) n->value;
3408 
3409   /* Generate the functions themselves, but only if they are really
3410      needed.  */
3411   if (pi->initializations_p)
3412     generate_ctor_or_dtor_function (/*constructor_p=*/true, priority, locus);
3413   if (pi->destructions_p)
3414     generate_ctor_or_dtor_function (/*constructor_p=*/false, priority, locus);
3415 
3416   /* Keep iterating.  */
3417   return 0;
3418 }
3419 
3420 /* Called via LANGHOOK_CALLGRAPH_ANALYZE_EXPR.  It is supposed to mark
3421    decls referenced from front-end specific constructs; it will be called
3422    only for language-specific tree nodes.
3423 
3424    Here we must deal with member pointers.  */
3425 
3426 tree
3427 cxx_callgraph_analyze_expr (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED)
3428 {
3429   tree t = *tp;
3430 
3431   switch (TREE_CODE (t))
3432     {
3433     case PTRMEM_CST:
3434       if (TYPE_PTRMEMFUNC_P (TREE_TYPE (t)))
3435 	cgraph_mark_address_taken_node (
3436 			      cgraph_get_create_node (PTRMEM_CST_MEMBER (t)));
3437       break;
3438     case BASELINK:
3439       if (TREE_CODE (BASELINK_FUNCTIONS (t)) == FUNCTION_DECL)
3440 	cgraph_mark_address_taken_node (
3441 			      cgraph_get_create_node (BASELINK_FUNCTIONS (t)));
3442       break;
3443     case VAR_DECL:
3444       if (DECL_CONTEXT (t)
3445 	  && flag_use_repository
3446 	  && TREE_CODE (DECL_CONTEXT (t)) == FUNCTION_DECL)
3447 	/* If we need a static variable in a function, then we
3448 	   need the containing function.  */
3449 	mark_decl_referenced (DECL_CONTEXT (t));
3450       break;
3451     default:
3452       break;
3453     }
3454 
3455   return NULL;
3456 }
3457 
3458 /* Java requires that we be able to reference a local address for a
3459    method, and not be confused by PLT entries.  If hidden aliases are
3460    supported, collect and return all the functions for which we should
3461    emit a hidden alias.  */
3462 
3463 static struct pointer_set_t *
3464 collect_candidates_for_java_method_aliases (void)
3465 {
3466   struct cgraph_node *node;
3467   struct pointer_set_t *candidates = NULL;
3468 
3469 #ifndef HAVE_GAS_HIDDEN
3470   return candidates;
3471 #endif
3472 
3473   for (node = cgraph_nodes; node ; node = node->next)
3474     {
3475       tree fndecl = node->decl;
3476 
3477       if (DECL_CONTEXT (fndecl)
3478 	  && TYPE_P (DECL_CONTEXT (fndecl))
3479 	  && TYPE_FOR_JAVA (DECL_CONTEXT (fndecl))
3480 	  && TARGET_USE_LOCAL_THUNK_ALIAS_P (fndecl))
3481 	{
3482 	  if (candidates == NULL)
3483 	    candidates = pointer_set_create ();
3484 	  pointer_set_insert (candidates, fndecl);
3485 	}
3486     }
3487 
3488   return candidates;
3489 }
3490 
3491 
3492 /* Java requires that we be able to reference a local address for a
3493    method, and not be confused by PLT entries.  If hidden aliases are
3494    supported, emit one for each java function that we've emitted.
3495    CANDIDATES is the set of FUNCTION_DECLs that were gathered
3496    by collect_candidates_for_java_method_aliases.  */
3497 
3498 static void
3499 build_java_method_aliases (struct pointer_set_t *candidates)
3500 {
3501   struct cgraph_node *node;
3502 
3503 #ifndef HAVE_GAS_HIDDEN
3504   return;
3505 #endif
3506 
3507   for (node = cgraph_nodes; node ; node = node->next)
3508     {
3509       tree fndecl = node->decl;
3510 
3511       if (TREE_ASM_WRITTEN (fndecl)
3512 	  && pointer_set_contains (candidates, fndecl))
3513 	{
3514 	  /* Mangle the name in a predictable way; we need to reference
3515 	     this from a java compiled object file.  */
3516 	  tree oid, nid, alias;
3517 	  const char *oname;
3518 	  char *nname;
3519 
3520 	  oid = DECL_ASSEMBLER_NAME (fndecl);
3521 	  oname = IDENTIFIER_POINTER (oid);
3522 	  gcc_assert (oname[0] == '_' && oname[1] == 'Z');
3523 	  nname = ACONCAT (("_ZGA", oname+2, NULL));
3524 	  nid = get_identifier (nname);
3525 
3526 	  alias = make_alias_for (fndecl, nid);
3527 	  TREE_PUBLIC (alias) = 1;
3528 	  DECL_VISIBILITY (alias) = VISIBILITY_HIDDEN;
3529 
3530 	  assemble_alias (alias, oid);
3531 	}
3532     }
3533 }
3534 
3535 /* Return C++ property of T, based on given operation OP.  */
3536 
3537 static int
3538 cpp_check (tree t, cpp_operation op)
3539 {
3540   switch (op)
3541     {
3542       case IS_ABSTRACT:
3543 	return DECL_PURE_VIRTUAL_P (t);
3544       case IS_CONSTRUCTOR:
3545 	return DECL_CONSTRUCTOR_P (t);
3546       case IS_DESTRUCTOR:
3547 	return DECL_DESTRUCTOR_P (t);
3548       case IS_COPY_CONSTRUCTOR:
3549 	return DECL_COPY_CONSTRUCTOR_P (t);
3550       case IS_TEMPLATE:
3551 	return TREE_CODE (t) == TEMPLATE_DECL;
3552       default:
3553         return 0;
3554     }
3555 }
3556 
3557 /* Collect source file references recursively, starting from NAMESPC.  */
3558 
3559 static void
3560 collect_source_refs (tree namespc)
3561 {
3562   tree t;
3563 
3564   if (!namespc)
3565     return;
3566 
3567   /* Iterate over names in this name space.  */
3568   for (t = NAMESPACE_LEVEL (namespc)->names; t; t = TREE_CHAIN (t))
3569     if (!DECL_IS_BUILTIN (t) )
3570       collect_source_ref (DECL_SOURCE_FILE (t));
3571 
3572   /* Dump siblings, if any */
3573   collect_source_refs (TREE_CHAIN (namespc));
3574 
3575   /* Dump children, if any */
3576   collect_source_refs (NAMESPACE_LEVEL (namespc)->namespaces);
3577 }
3578 
3579 /* Collect decls relevant to SOURCE_FILE from all namespaces recursively,
3580    starting from NAMESPC.  */
3581 
3582 static void
3583 collect_ada_namespace (tree namespc, const char *source_file)
3584 {
3585   if (!namespc)
3586     return;
3587 
3588   /* Collect decls from this namespace */
3589   collect_ada_nodes (NAMESPACE_LEVEL (namespc)->names, source_file);
3590 
3591   /* Collect siblings, if any */
3592   collect_ada_namespace (TREE_CHAIN (namespc), source_file);
3593 
3594   /* Collect children, if any */
3595   collect_ada_namespace (NAMESPACE_LEVEL (namespc)->namespaces, source_file);
3596 }
3597 
3598 /* Returns true iff there is a definition available for variable or
3599    function DECL.  */
3600 
3601 static bool
3602 decl_defined_p (tree decl)
3603 {
3604   if (TREE_CODE (decl) == FUNCTION_DECL)
3605     return (DECL_INITIAL (decl) != NULL_TREE);
3606   else
3607     {
3608       gcc_assert (TREE_CODE (decl) == VAR_DECL);
3609       return !DECL_EXTERNAL (decl);
3610     }
3611 }
3612 
3613 /* Nonzero for a VAR_DECL whose value can be used in a constant expression.
3614 
3615       [expr.const]
3616 
3617       An integral constant-expression can only involve ... const
3618       variables of integral or enumeration types initialized with
3619       constant expressions ...
3620 
3621       C++0x also allows constexpr variables and temporaries initialized
3622       with constant expressions.  We handle the former here, but the latter
3623       are just folded away in cxx_eval_constant_expression.
3624 
3625    The standard does not require that the expression be non-volatile.
3626    G++ implements the proposed correction in DR 457.  */
3627 
3628 bool
3629 decl_constant_var_p (tree decl)
3630 {
3631   if (!decl_maybe_constant_var_p (decl))
3632     return false;
3633 
3634   /* We don't know if a template static data member is initialized with
3635      a constant expression until we instantiate its initializer.  Even
3636      in the case of a constexpr variable, we can't treat it as a
3637      constant until its initializer is complete in case it's used in
3638      its own initializer.  */
3639   mark_used (decl);
3640   return DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl);
3641 }
3642 
3643 /* Returns true if DECL could be a symbolic constant variable, depending on
3644    its initializer.  */
3645 
3646 bool
3647 decl_maybe_constant_var_p (tree decl)
3648 {
3649   tree type = TREE_TYPE (decl);
3650   if (TREE_CODE (decl) != VAR_DECL)
3651     return false;
3652   if (DECL_DECLARED_CONSTEXPR_P (decl))
3653     return true;
3654   return (CP_TYPE_CONST_NON_VOLATILE_P (type)
3655 	  && INTEGRAL_OR_ENUMERATION_TYPE_P (type));
3656 }
3657 
3658 /* Complain that DECL uses a type with no linkage but is never defined.  */
3659 
3660 static void
3661 no_linkage_error (tree decl)
3662 {
3663   tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
3664   if (TYPE_ANONYMOUS_P (t))
3665     {
3666       permerror (0, "%q+#D, declared using anonymous type, "
3667 		 "is used but never defined", decl);
3668       if (is_typedef_decl (TYPE_NAME (t)))
3669 	permerror (0, "%q+#D does not refer to the unqualified type, "
3670 		   "so it is not used for linkage", TYPE_NAME (t));
3671     }
3672   else
3673     permerror (0, "%q+#D, declared using local type %qT, "
3674 	       "is used but never defined", decl, t);
3675 }
3676 
3677 /* Collect declarations from all namespaces relevant to SOURCE_FILE.  */
3678 
3679 static void
3680 collect_all_refs (const char *source_file)
3681 {
3682   collect_ada_namespace (global_namespace, source_file);
3683 }
3684 
3685 /* Clear DECL_EXTERNAL for NODE.  */
3686 
3687 static bool
3688 clear_decl_external (struct cgraph_node *node, void *data ATTRIBUTE_UNUSED)
3689 {
3690   DECL_EXTERNAL (node->decl) = 0;
3691   return false;
3692 }
3693 
3694 /* This routine is called at the end of compilation.
3695    Its job is to create all the code needed to initialize and
3696    destroy the global aggregates.  We do the destruction
3697    first, since that way we only need to reverse the decls once.  */
3698 
3699 void
3700 cp_write_global_declarations (void)
3701 {
3702   tree vars;
3703   bool reconsider;
3704   size_t i;
3705   location_t locus;
3706   unsigned ssdf_count = 0;
3707   int retries = 0;
3708   tree decl;
3709   struct pointer_set_t *candidates;
3710 
3711   locus = input_location;
3712   at_eof = 1;
3713 
3714   /* Bad parse errors.  Just forget about it.  */
3715   if (! global_bindings_p () || current_class_type
3716       || !VEC_empty (tree,decl_namespace_list))
3717     return;
3718 
3719   if (pch_file)
3720     c_common_write_pch ();
3721 
3722   cgraph_process_same_body_aliases ();
3723 
3724   /* Handle -fdump-ada-spec[-slim] */
3725   if (dump_enabled_p (TDI_ada))
3726     {
3727       if (get_dump_file_info (TDI_ada)->flags & TDF_SLIM)
3728 	collect_source_ref (main_input_filename);
3729       else
3730 	collect_source_refs (global_namespace);
3731 
3732       dump_ada_specs (collect_all_refs, cpp_check);
3733     }
3734 
3735   /* FIXME - huh?  was  input_line -= 1;*/
3736 
3737   timevar_start (TV_PHASE_DEFERRED);
3738 
3739   /* We now have to write out all the stuff we put off writing out.
3740      These include:
3741 
3742        o Template specializations that we have not yet instantiated,
3743 	 but which are needed.
3744        o Initialization and destruction for non-local objects with
3745 	 static storage duration.  (Local objects with static storage
3746 	 duration are initialized when their scope is first entered,
3747 	 and are cleaned up via atexit.)
3748        o Virtual function tables.
3749 
3750      All of these may cause others to be needed.  For example,
3751      instantiating one function may cause another to be needed, and
3752      generating the initializer for an object may cause templates to be
3753      instantiated, etc., etc.  */
3754 
3755   emit_support_tinfos ();
3756 
3757   do
3758     {
3759       tree t;
3760       tree decl;
3761 
3762       reconsider = false;
3763 
3764       /* If there are templates that we've put off instantiating, do
3765 	 them now.  */
3766       instantiate_pending_templates (retries);
3767       ggc_collect ();
3768 
3769       /* Write out virtual tables as required.  Note that writing out
3770 	 the virtual table for a template class may cause the
3771 	 instantiation of members of that class.  If we write out
3772 	 vtables then we remove the class from our list so we don't
3773 	 have to look at it again.  */
3774 
3775       while (keyed_classes != NULL_TREE
3776 	     && maybe_emit_vtables (TREE_VALUE (keyed_classes)))
3777 	{
3778 	  reconsider = true;
3779 	  keyed_classes = TREE_CHAIN (keyed_classes);
3780 	}
3781 
3782       t = keyed_classes;
3783       if (t != NULL_TREE)
3784 	{
3785 	  tree next = TREE_CHAIN (t);
3786 
3787 	  while (next)
3788 	    {
3789 	      if (maybe_emit_vtables (TREE_VALUE (next)))
3790 		{
3791 		  reconsider = true;
3792 		  TREE_CHAIN (t) = TREE_CHAIN (next);
3793 		}
3794 	      else
3795 		t = next;
3796 
3797 	      next = TREE_CHAIN (t);
3798 	    }
3799 	}
3800 
3801       /* Write out needed type info variables.  We have to be careful
3802 	 looping through unemitted decls, because emit_tinfo_decl may
3803 	 cause other variables to be needed. New elements will be
3804 	 appended, and we remove from the vector those that actually
3805 	 get emitted.  */
3806       for (i = VEC_length (tree, unemitted_tinfo_decls);
3807 	   VEC_iterate (tree, unemitted_tinfo_decls, --i, t);)
3808 	if (emit_tinfo_decl (t))
3809 	  {
3810 	    reconsider = true;
3811 	    VEC_unordered_remove (tree, unemitted_tinfo_decls, i);
3812 	  }
3813 
3814       /* The list of objects with static storage duration is built up
3815 	 in reverse order.  We clear STATIC_AGGREGATES so that any new
3816 	 aggregates added during the initialization of these will be
3817 	 initialized in the correct order when we next come around the
3818 	 loop.  */
3819       vars = prune_vars_needing_no_initialization (&static_aggregates);
3820 
3821       if (vars)
3822 	{
3823 	  /* We need to start a new initialization function each time
3824 	     through the loop.  That's because we need to know which
3825 	     vtables have been referenced, and TREE_SYMBOL_REFERENCED
3826 	     isn't computed until a function is finished, and written
3827 	     out.  That's a deficiency in the back end.  When this is
3828 	     fixed, these initialization functions could all become
3829 	     inline, with resulting performance improvements.  */
3830 	  tree ssdf_body;
3831 
3832 	  /* Set the line and file, so that it is obviously not from
3833 	     the source file.  */
3834 	  input_location = locus;
3835 	  ssdf_body = start_static_storage_duration_function (ssdf_count);
3836 
3837 	  /* Make sure the back end knows about all the variables.  */
3838 	  write_out_vars (vars);
3839 
3840 	  /* First generate code to do all the initializations.  */
3841 	  if (vars)
3842 	    do_static_initialization_or_destruction (vars, /*initp=*/true);
3843 
3844 	  /* Then, generate code to do all the destructions.  Do these
3845 	     in reverse order so that the most recently constructed
3846 	     variable is the first destroyed.  If we're using
3847 	     __cxa_atexit, then we don't need to do this; functions
3848 	     were registered at initialization time to destroy the
3849 	     local statics.  */
3850 	  if (!flag_use_cxa_atexit && vars)
3851 	    {
3852 	      vars = nreverse (vars);
3853 	      do_static_initialization_or_destruction (vars, /*initp=*/false);
3854 	    }
3855 	  else
3856 	    vars = NULL_TREE;
3857 
3858 	  /* Finish up the static storage duration function for this
3859 	     round.  */
3860 	  input_location = locus;
3861 	  finish_static_storage_duration_function (ssdf_body);
3862 
3863 	  /* All those initializations and finalizations might cause
3864 	     us to need more inline functions, more template
3865 	     instantiations, etc.  */
3866 	  reconsider = true;
3867 	  ssdf_count++;
3868 	  /* ??? was:  locus.line++; */
3869 	}
3870 
3871       /* Go through the set of inline functions whose bodies have not
3872 	 been emitted yet.  If out-of-line copies of these functions
3873 	 are required, emit them.  */
3874       FOR_EACH_VEC_ELT (tree, deferred_fns, i, decl)
3875 	{
3876 	  /* Does it need synthesizing?  */
3877 	  if (DECL_DEFAULTED_FN (decl) && ! DECL_INITIAL (decl)
3878 	      && (! DECL_REALLY_EXTERN (decl) || possibly_inlined_p (decl)))
3879 	    {
3880 	      /* Even though we're already at the top-level, we push
3881 		 there again.  That way, when we pop back a few lines
3882 		 hence, all of our state is restored.  Otherwise,
3883 		 finish_function doesn't clean things up, and we end
3884 		 up with CURRENT_FUNCTION_DECL set.  */
3885 	      push_to_top_level ();
3886 	      /* The decl's location will mark where it was first
3887 		 needed.  Save that so synthesize method can indicate
3888 		 where it was needed from, in case of error  */
3889 	      input_location = DECL_SOURCE_LOCATION (decl);
3890 	      synthesize_method (decl);
3891 	      pop_from_top_level ();
3892 	      reconsider = true;
3893 	    }
3894 
3895 	  if (!DECL_SAVED_TREE (decl))
3896 	    continue;
3897 
3898 	  /* We lie to the back end, pretending that some functions
3899 	     are not defined when they really are.  This keeps these
3900 	     functions from being put out unnecessarily.  But, we must
3901 	     stop lying when the functions are referenced, or if they
3902 	     are not comdat since they need to be put out now.  If
3903 	     DECL_INTERFACE_KNOWN, then we have already set
3904 	     DECL_EXTERNAL appropriately, so there's no need to check
3905 	     again, and we do not want to clear DECL_EXTERNAL if a
3906 	     previous call to import_export_decl set it.
3907 
3908 	     This is done in a separate for cycle, because if some
3909 	     deferred function is contained in another deferred
3910 	     function later in deferred_fns varray,
3911 	     rest_of_compilation would skip this function and we
3912 	     really cannot expand the same function twice.  */
3913 	  import_export_decl (decl);
3914 	  if (DECL_NOT_REALLY_EXTERN (decl)
3915 	      && DECL_INITIAL (decl)
3916 	      && decl_needed_p (decl))
3917 	    {
3918 	      struct cgraph_node *node, *next;
3919 
3920 	      node = cgraph_get_node (decl);
3921 	      if (node->same_body_alias)
3922 		node = cgraph_alias_aliased_node (node);
3923 
3924 	      cgraph_for_node_and_aliases (node, clear_decl_external,
3925 					   NULL, true);
3926 	      /* If we mark !DECL_EXTERNAL one of the symbols in some comdat
3927 		 group, we need to mark all symbols in the same comdat group
3928 		 that way.  */
3929 	      if (node->same_comdat_group)
3930 		for (next = node->same_comdat_group;
3931 		     next != node;
3932 		     next = next->same_comdat_group)
3933 	          cgraph_for_node_and_aliases (next, clear_decl_external,
3934 					       NULL, true);
3935 	    }
3936 
3937 	  /* If we're going to need to write this function out, and
3938 	     there's already a body for it, create RTL for it now.
3939 	     (There might be no body if this is a method we haven't
3940 	     gotten around to synthesizing yet.)  */
3941 	  if (!DECL_EXTERNAL (decl)
3942 	      && decl_needed_p (decl)
3943 	      && !TREE_ASM_WRITTEN (decl)
3944 	      && !cgraph_get_node (decl)->local.finalized)
3945 	    {
3946 	      /* We will output the function; no longer consider it in this
3947 		 loop.  */
3948 	      DECL_DEFER_OUTPUT (decl) = 0;
3949 	      /* Generate RTL for this function now that we know we
3950 		 need it.  */
3951 	      expand_or_defer_fn (decl);
3952 	      /* If we're compiling -fsyntax-only pretend that this
3953 		 function has been written out so that we don't try to
3954 		 expand it again.  */
3955 	      if (flag_syntax_only)
3956 		TREE_ASM_WRITTEN (decl) = 1;
3957 	      reconsider = true;
3958 	    }
3959 	}
3960 
3961       if (walk_namespaces (wrapup_globals_for_namespace, /*data=*/0))
3962 	reconsider = true;
3963 
3964       /* Static data members are just like namespace-scope globals.  */
3965       FOR_EACH_VEC_ELT (tree, pending_statics, i, decl)
3966 	{
3967 	  if (var_finalized_p (decl) || DECL_REALLY_EXTERN (decl)
3968 	      /* Don't write it out if we haven't seen a definition.  */
3969 	      || DECL_IN_AGGR_P (decl))
3970 	    continue;
3971 	  import_export_decl (decl);
3972 	  /* If this static data member is needed, provide it to the
3973 	     back end.  */
3974 	  if (DECL_NOT_REALLY_EXTERN (decl) && decl_needed_p (decl))
3975 	    DECL_EXTERNAL (decl) = 0;
3976 	}
3977       if (VEC_length (tree, pending_statics) != 0
3978 	  && wrapup_global_declarations (VEC_address (tree, pending_statics),
3979 					 VEC_length (tree, pending_statics)))
3980 	reconsider = true;
3981 
3982       retries++;
3983     }
3984   while (reconsider);
3985 
3986   /* All used inline functions must have a definition at this point.  */
3987   FOR_EACH_VEC_ELT (tree, deferred_fns, i, decl)
3988     {
3989       if (/* Check online inline functions that were actually used.  */
3990 	  DECL_ODR_USED (decl) && DECL_DECLARED_INLINE_P (decl)
3991 	  /* If the definition actually was available here, then the
3992 	     fact that the function was not defined merely represents
3993 	     that for some reason (use of a template repository,
3994 	     #pragma interface, etc.) we decided not to emit the
3995 	     definition here.  */
3996 	  && !DECL_INITIAL (decl)
3997 	  /* Don't complain if the template was defined.  */
3998 	  && !(DECL_TEMPLATE_INSTANTIATION (decl)
3999 	       && DECL_INITIAL (DECL_TEMPLATE_RESULT
4000 				(template_for_substitution (decl)))))
4001 	{
4002 	  warning (0, "inline function %q+D used but never defined", decl);
4003 	  /* Avoid a duplicate warning from check_global_declaration_1.  */
4004 	  TREE_NO_WARNING (decl) = 1;
4005 	}
4006     }
4007 
4008   /* So must decls that use a type with no linkage.  */
4009   FOR_EACH_VEC_ELT (tree, no_linkage_decls, i, decl)
4010     if (!decl_defined_p (decl))
4011       no_linkage_error (decl);
4012 
4013   /* Then, do the Objective-C stuff.  This is where all the
4014      Objective-C module stuff gets generated (symtab,
4015      class/protocol/selector lists etc).  This must be done after C++
4016      templates, destructors etc. so that selectors used in C++
4017      templates are properly allocated.  */
4018   if (c_dialect_objc ())
4019     objc_write_global_declarations ();
4020 
4021   /* We give C linkage to static constructors and destructors.  */
4022   push_lang_context (lang_name_c);
4023 
4024   /* Generate initialization and destruction functions for all
4025      priorities for which they are required.  */
4026   if (priority_info_map)
4027     splay_tree_foreach (priority_info_map,
4028 			generate_ctor_and_dtor_functions_for_priority,
4029 			/*data=*/&locus);
4030   else if (c_dialect_objc () && objc_static_init_needed_p ())
4031     /* If this is obj-c++ and we need a static init, call
4032        generate_ctor_or_dtor_function.  */
4033     generate_ctor_or_dtor_function (/*constructor_p=*/true,
4034 				    DEFAULT_INIT_PRIORITY, &locus);
4035 
4036   /* We're done with the splay-tree now.  */
4037   if (priority_info_map)
4038     splay_tree_delete (priority_info_map);
4039 
4040   /* Generate any missing aliases.  */
4041   maybe_apply_pending_pragma_weaks ();
4042 
4043   /* We're done with static constructors, so we can go back to "C++"
4044      linkage now.  */
4045   pop_lang_context ();
4046 
4047   /* Collect candidates for Java hidden aliases.  */
4048   candidates = collect_candidates_for_java_method_aliases ();
4049 
4050   timevar_stop (TV_PHASE_DEFERRED);
4051   timevar_start (TV_PHASE_CGRAPH);
4052 
4053   cgraph_finalize_compilation_unit ();
4054 
4055   timevar_stop (TV_PHASE_CGRAPH);
4056   timevar_start (TV_PHASE_CHECK_DBGINFO);
4057 
4058   /* Now, issue warnings about static, but not defined, functions,
4059      etc., and emit debugging information.  */
4060   walk_namespaces (wrapup_globals_for_namespace, /*data=*/&reconsider);
4061   if (VEC_length (tree, pending_statics) != 0)
4062     {
4063       check_global_declarations (VEC_address (tree, pending_statics),
4064 				 VEC_length (tree, pending_statics));
4065       emit_debug_global_declarations (VEC_address (tree, pending_statics),
4066 				      VEC_length (tree, pending_statics));
4067     }
4068 
4069   perform_deferred_noexcept_checks ();
4070 
4071   /* Generate hidden aliases for Java.  */
4072   if (candidates)
4073     {
4074       build_java_method_aliases (candidates);
4075       pointer_set_destroy (candidates);
4076     }
4077 
4078   finish_repo ();
4079 
4080   /* The entire file is now complete.  If requested, dump everything
4081      to a file.  */
4082   {
4083     int flags;
4084     FILE *stream = dump_begin (TDI_tu, &flags);
4085 
4086     if (stream)
4087       {
4088 	dump_node (global_namespace, flags & ~TDF_SLIM, stream);
4089 	dump_end (TDI_tu, stream);
4090       }
4091   }
4092 
4093   if (flag_detailed_statistics)
4094     {
4095       dump_tree_statistics ();
4096       dump_time_statistics ();
4097     }
4098   input_location = locus;
4099 
4100 #ifdef ENABLE_CHECKING
4101   validate_conversion_obstack ();
4102 #endif /* ENABLE_CHECKING */
4103 
4104   timevar_stop (TV_PHASE_CHECK_DBGINFO);
4105 }
4106 
4107 /* FN is an OFFSET_REF, DOTSTAR_EXPR or MEMBER_REF indicating the
4108    function to call in parse-tree form; it has not yet been
4109    semantically analyzed.  ARGS are the arguments to the function.
4110    They have already been semantically analyzed.  This may change
4111    ARGS.  */
4112 
4113 tree
4114 build_offset_ref_call_from_tree (tree fn, VEC(tree,gc) **args)
4115 {
4116   tree orig_fn;
4117   VEC(tree,gc) *orig_args = NULL;
4118   tree expr;
4119   tree object;
4120 
4121   orig_fn = fn;
4122   object = TREE_OPERAND (fn, 0);
4123 
4124   if (processing_template_decl)
4125     {
4126       gcc_assert (TREE_CODE (fn) == DOTSTAR_EXPR
4127 		  || TREE_CODE (fn) == MEMBER_REF);
4128       if (type_dependent_expression_p (fn)
4129 	  || any_type_dependent_arguments_p (*args))
4130 	return build_nt_call_vec (fn, *args);
4131 
4132       orig_args = make_tree_vector_copy (*args);
4133 
4134       /* Transform the arguments and add the implicit "this"
4135 	 parameter.  That must be done before the FN is transformed
4136 	 because we depend on the form of FN.  */
4137       make_args_non_dependent (*args);
4138       object = build_non_dependent_expr (object);
4139       if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
4140 	{
4141 	  if (TREE_CODE (fn) == DOTSTAR_EXPR)
4142 	    object = cp_build_addr_expr (object, tf_warning_or_error);
4143 	  VEC_safe_insert (tree, gc, *args, 0, object);
4144 	}
4145       /* Now that the arguments are done, transform FN.  */
4146       fn = build_non_dependent_expr (fn);
4147     }
4148 
4149   /* A qualified name corresponding to a bound pointer-to-member is
4150      represented as an OFFSET_REF:
4151 
4152 	struct B { void g(); };
4153 	void (B::*p)();
4154 	void B::g() { (this->*p)(); }  */
4155   if (TREE_CODE (fn) == OFFSET_REF)
4156     {
4157       tree object_addr = cp_build_addr_expr (object, tf_warning_or_error);
4158       fn = TREE_OPERAND (fn, 1);
4159       fn = get_member_function_from_ptrfunc (&object_addr, fn);
4160       VEC_safe_insert (tree, gc, *args, 0, object_addr);
4161     }
4162 
4163   if (CLASS_TYPE_P (TREE_TYPE (fn)))
4164     expr = build_op_call (fn, args, tf_warning_or_error);
4165   else
4166     expr = cp_build_function_call_vec (fn, args, tf_warning_or_error);
4167   if (processing_template_decl && expr != error_mark_node)
4168     expr = build_min_non_dep_call_vec (expr, orig_fn, orig_args);
4169 
4170   if (orig_args != NULL)
4171     release_tree_vector (orig_args);
4172 
4173   return expr;
4174 }
4175 
4176 
4177 void
4178 check_default_args (tree x)
4179 {
4180   tree arg = TYPE_ARG_TYPES (TREE_TYPE (x));
4181   bool saw_def = false;
4182   int i = 0 - (TREE_CODE (TREE_TYPE (x)) == METHOD_TYPE);
4183   for (; arg && arg != void_list_node; arg = TREE_CHAIN (arg), ++i)
4184     {
4185       if (TREE_PURPOSE (arg))
4186 	saw_def = true;
4187       else if (saw_def)
4188 	{
4189 	  error ("default argument missing for parameter %P of %q+#D", i, x);
4190 	  TREE_PURPOSE (arg) = error_mark_node;
4191 	}
4192     }
4193 }
4194 
4195 /* Return true if function DECL can be inlined.  This is used to force
4196    instantiation of methods that might be interesting for inlining.  */
4197 bool
4198 possibly_inlined_p (tree decl)
4199 {
4200   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
4201   if (DECL_UNINLINABLE (decl))
4202     return false;
4203   if (!optimize || pragma_java_exceptions)
4204     return DECL_DECLARED_INLINE_P (decl);
4205   /* When optimizing, we might inline everything when flatten
4206      attribute or heuristics inlining for size or autoinlining
4207      is used.  */
4208   return true;
4209 }
4210 
4211 /* Mark DECL (either a _DECL or a BASELINK) as "used" in the program.
4212    If DECL is a specialization or implicitly declared class member,
4213    generate the actual definition.  Return false if something goes
4214    wrong, true otherwise.  */
4215 
4216 bool
4217 mark_used (tree decl)
4218 {
4219   /* If DECL is a BASELINK for a single function, then treat it just
4220      like the DECL for the function.  Otherwise, if the BASELINK is
4221      for an overloaded function, we don't know which function was
4222      actually used until after overload resolution.  */
4223   if (BASELINK_P (decl))
4224     {
4225       decl = BASELINK_FUNCTIONS (decl);
4226       if (really_overloaded_fn (decl))
4227 	return true;
4228       decl = OVL_CURRENT (decl);
4229     }
4230 
4231   /* Set TREE_USED for the benefit of -Wunused.  */
4232   TREE_USED (decl) = 1;
4233   if (DECL_CLONED_FUNCTION_P (decl))
4234     TREE_USED (DECL_CLONED_FUNCTION (decl)) = 1;
4235 
4236   if (TREE_CODE (decl) == FUNCTION_DECL
4237       && DECL_DELETED_FN (decl))
4238     {
4239       if (DECL_ARTIFICIAL (decl))
4240 	{
4241 	  if (DECL_OVERLOADED_OPERATOR_P (decl) == TYPE_EXPR
4242 	      && LAMBDA_TYPE_P (DECL_CONTEXT (decl)))
4243 	    {
4244 	      /* We mark a lambda conversion op as deleted if we can't
4245 		 generate it properly; see maybe_add_lambda_conv_op.  */
4246 	      sorry ("converting lambda which uses %<...%> to "
4247 		     "function pointer");
4248 	      return false;
4249 	    }
4250 	}
4251       error ("use of deleted function %qD", decl);
4252       if (!maybe_explain_implicit_delete (decl))
4253 	error_at (DECL_SOURCE_LOCATION (decl), "declared here");
4254       return false;
4255     }
4256 
4257   /* We can only check DECL_ODR_USED on variables or functions with
4258      DECL_LANG_SPECIFIC set, and these are also the only decls that we
4259      might need special handling for.  */
4260   if ((TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != FUNCTION_DECL)
4261       || DECL_LANG_SPECIFIC (decl) == NULL
4262       || DECL_THUNK_P (decl))
4263     return true;
4264 
4265   /* We only want to do this processing once.  We don't need to keep trying
4266      to instantiate inline templates, because unit-at-a-time will make sure
4267      we get them compiled before functions that want to inline them.  */
4268   if (DECL_ODR_USED (decl))
4269     return true;
4270 
4271   /* If within finish_function, defer the rest until that function
4272      finishes, otherwise it might recurse.  */
4273   if (defer_mark_used_calls)
4274     {
4275       VEC_safe_push (tree, gc, deferred_mark_used_calls, decl);
4276       return true;
4277     }
4278 
4279   if (TREE_CODE (decl) == FUNCTION_DECL)
4280     maybe_instantiate_noexcept (decl);
4281 
4282   /* Normally, we can wait until instantiation-time to synthesize DECL.
4283      However, if DECL is a static data member initialized with a constant
4284      or a constexpr function, we need it right now because a reference to
4285      such a data member or a call to such function is not value-dependent.  */
4286   if ((decl_maybe_constant_var_p (decl)
4287        || (TREE_CODE (decl) == FUNCTION_DECL
4288 	   && DECL_DECLARED_CONSTEXPR_P (decl)))
4289       && DECL_LANG_SPECIFIC (decl)
4290       && DECL_TEMPLATE_INFO (decl)
4291       && !uses_template_parms (DECL_TI_ARGS (decl)))
4292     {
4293       /* Instantiating a function will result in garbage collection.  We
4294 	 must treat this situation as if we were within the body of a
4295 	 function so as to avoid collecting live data only referenced from
4296 	 the stack (such as overload resolution candidates).  */
4297       ++function_depth;
4298       instantiate_decl (decl, /*defer_ok=*/false,
4299 			/*expl_inst_class_mem_p=*/false);
4300       --function_depth;
4301     }
4302 
4303   /* If we don't need a value, then we don't need to synthesize DECL.  */
4304   if (cp_unevaluated_operand != 0)
4305     return true;
4306 
4307   if (processing_template_decl)
4308     return true;
4309 
4310   /* Check this too in case we're within fold_non_dependent_expr.  */
4311   if (DECL_TEMPLATE_INFO (decl)
4312       && uses_template_parms (DECL_TI_ARGS (decl)))
4313     return true;
4314 
4315   DECL_ODR_USED (decl) = 1;
4316   if (DECL_CLONED_FUNCTION_P (decl))
4317     DECL_ODR_USED (DECL_CLONED_FUNCTION (decl)) = 1;
4318 
4319   /* DR 757: A type without linkage shall not be used as the type of a
4320      variable or function with linkage, unless
4321    o the variable or function has extern "C" linkage (7.5 [dcl.link]), or
4322    o the variable or function is not used (3.2 [basic.def.odr]) or is
4323    defined in the same translation unit.  */
4324   if (cxx_dialect > cxx98
4325       && decl_linkage (decl) != lk_none
4326       && !DECL_EXTERN_C_P (decl)
4327       && !DECL_ARTIFICIAL (decl)
4328       && !decl_defined_p (decl)
4329       && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
4330     {
4331       if (is_local_extern (decl))
4332 	/* There's no way to define a local extern, and adding it to
4333 	   the vector interferes with GC, so give an error now.  */
4334 	no_linkage_error (decl);
4335       else
4336 	VEC_safe_push (tree, gc, no_linkage_decls, decl);
4337     }
4338 
4339   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl)
4340       && !DECL_INITIAL (decl) && !DECL_ARTIFICIAL (decl))
4341     /* Remember it, so we can check it was defined.  */
4342     note_vague_linkage_fn (decl);
4343 
4344   /* Is it a synthesized method that needs to be synthesized?  */
4345   if (TREE_CODE (decl) == FUNCTION_DECL
4346       && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl)
4347       && DECL_DEFAULTED_FN (decl)
4348       /* A function defaulted outside the class is synthesized either by
4349 	 cp_finish_decl or instantiate_decl.  */
4350       && !DECL_DEFAULTED_OUTSIDE_CLASS_P (decl)
4351       && ! DECL_INITIAL (decl))
4352     {
4353       /* Defer virtual destructors so that thunks get the right
4354 	 linkage.  */
4355       if (DECL_VIRTUAL_P (decl) && !at_eof)
4356 	{
4357 	  note_vague_linkage_fn (decl);
4358 	  return true;
4359 	}
4360 
4361       /* Remember the current location for a function we will end up
4362 	 synthesizing.  Then we can inform the user where it was
4363 	 required in the case of error.  */
4364       DECL_SOURCE_LOCATION (decl) = input_location;
4365 
4366       /* Synthesizing an implicitly defined member function will result in
4367 	 garbage collection.  We must treat this situation as if we were
4368 	 within the body of a function so as to avoid collecting live data
4369 	 on the stack (such as overload resolution candidates).
4370 
4371          We could just let cp_write_global_declarations handle synthesizing
4372          this function by adding it to deferred_fns, but doing
4373          it at the use site produces better error messages.  */
4374       ++function_depth;
4375       synthesize_method (decl);
4376       --function_depth;
4377       /* If this is a synthesized method we don't need to
4378 	 do the instantiation test below.  */
4379     }
4380   else if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
4381 	   && DECL_TEMPLATE_INFO (decl)
4382 	   && (!DECL_EXPLICIT_INSTANTIATION (decl)
4383 	       || always_instantiate_p (decl)))
4384     /* If this is a function or variable that is an instance of some
4385        template, we now know that we will need to actually do the
4386        instantiation. We check that DECL is not an explicit
4387        instantiation because that is not checked in instantiate_decl.
4388 
4389        We put off instantiating functions in order to improve compile
4390        times.  Maintaining a stack of active functions is expensive,
4391        and the inliner knows to instantiate any functions it might
4392        need.  Therefore, we always try to defer instantiation.  */
4393     {
4394       ++function_depth;
4395       instantiate_decl (decl, /*defer_ok=*/true,
4396 			/*expl_inst_class_mem_p=*/false);
4397       --function_depth;
4398     }
4399 
4400   return true;
4401 }
4402 
4403 #include "gt-cp-decl2.h"
4404