xref: /dragonfly/contrib/gcc-4.7/gcc/cp/decl2.c (revision 19380330)
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       || attributes == NULL_TREE)
1307     return;
1308 
1309   if (processing_template_decl)
1310     {
1311       if (check_for_bare_parameter_packs (attributes))
1312 	return;
1313 
1314       save_template_attributes (&attributes, decl);
1315       if (attributes == NULL_TREE)
1316 	return;
1317     }
1318 
1319   cp_check_const_attributes (attributes);
1320 
1321   if (TREE_CODE (*decl) == TEMPLATE_DECL)
1322     decl = &DECL_TEMPLATE_RESULT (*decl);
1323 
1324   decl_attributes (decl, attributes, flags);
1325 
1326   if (TREE_CODE (*decl) == TYPE_DECL)
1327     SET_IDENTIFIER_TYPE_VALUE (DECL_NAME (*decl), TREE_TYPE (*decl));
1328 }
1329 
1330 /* Walks through the namespace- or function-scope anonymous union
1331    OBJECT, with the indicated TYPE, building appropriate VAR_DECLs.
1332    Returns one of the fields for use in the mangled name.  */
1333 
1334 static tree
1335 build_anon_union_vars (tree type, tree object)
1336 {
1337   tree main_decl = NULL_TREE;
1338   tree field;
1339 
1340   /* Rather than write the code to handle the non-union case,
1341      just give an error.  */
1342   if (TREE_CODE (type) != UNION_TYPE)
1343     {
1344       error ("anonymous struct not inside named type");
1345       return error_mark_node;
1346     }
1347 
1348   for (field = TYPE_FIELDS (type);
1349        field != NULL_TREE;
1350        field = DECL_CHAIN (field))
1351     {
1352       tree decl;
1353       tree ref;
1354 
1355       if (DECL_ARTIFICIAL (field))
1356 	continue;
1357       if (TREE_CODE (field) != FIELD_DECL)
1358 	{
1359 	  permerror (input_location, "%q+#D invalid; an anonymous union can only "
1360 		     "have non-static data members", field);
1361 	  continue;
1362 	}
1363 
1364       if (TREE_PRIVATE (field))
1365 	permerror (input_location, "private member %q+#D in anonymous union", field);
1366       else if (TREE_PROTECTED (field))
1367 	permerror (input_location, "protected member %q+#D in anonymous union", field);
1368 
1369       if (processing_template_decl)
1370 	ref = build_min_nt (COMPONENT_REF, object,
1371 			    DECL_NAME (field), NULL_TREE);
1372       else
1373 	ref = build_class_member_access_expr (object, field, NULL_TREE,
1374 					      false, tf_warning_or_error);
1375 
1376       if (DECL_NAME (field))
1377 	{
1378 	  tree base;
1379 
1380 	  decl = build_decl (input_location,
1381 			     VAR_DECL, DECL_NAME (field), TREE_TYPE (field));
1382 	  DECL_ANON_UNION_VAR_P (decl) = 1;
1383 	  DECL_ARTIFICIAL (decl) = 1;
1384 
1385 	  base = get_base_address (object);
1386 	  TREE_PUBLIC (decl) = TREE_PUBLIC (base);
1387 	  TREE_STATIC (decl) = TREE_STATIC (base);
1388 	  DECL_EXTERNAL (decl) = DECL_EXTERNAL (base);
1389 
1390 	  SET_DECL_VALUE_EXPR (decl, ref);
1391 	  DECL_HAS_VALUE_EXPR_P (decl) = 1;
1392 
1393 	  decl = pushdecl (decl);
1394 	}
1395       else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
1396 	decl = build_anon_union_vars (TREE_TYPE (field), ref);
1397       else
1398 	decl = 0;
1399 
1400       if (main_decl == NULL_TREE)
1401 	main_decl = decl;
1402     }
1403 
1404   return main_decl;
1405 }
1406 
1407 /* Finish off the processing of a UNION_TYPE structure.  If the union is an
1408    anonymous union, then all members must be laid out together.  PUBLIC_P
1409    is nonzero if this union is not declared static.  */
1410 
1411 void
1412 finish_anon_union (tree anon_union_decl)
1413 {
1414   tree type;
1415   tree main_decl;
1416   bool public_p;
1417 
1418   if (anon_union_decl == error_mark_node)
1419     return;
1420 
1421   type = TREE_TYPE (anon_union_decl);
1422   public_p = TREE_PUBLIC (anon_union_decl);
1423 
1424   /* The VAR_DECL's context is the same as the TYPE's context.  */
1425   DECL_CONTEXT (anon_union_decl) = DECL_CONTEXT (TYPE_NAME (type));
1426 
1427   if (TYPE_FIELDS (type) == NULL_TREE)
1428     return;
1429 
1430   if (public_p)
1431     {
1432       error ("namespace-scope anonymous aggregates must be static");
1433       return;
1434     }
1435 
1436   main_decl = build_anon_union_vars (type, anon_union_decl);
1437   if (main_decl == error_mark_node)
1438     return;
1439   if (main_decl == NULL_TREE)
1440     {
1441       warning (0, "anonymous union with no members");
1442       return;
1443     }
1444 
1445   if (!processing_template_decl)
1446     {
1447       /* Use main_decl to set the mangled name.  */
1448       DECL_NAME (anon_union_decl) = DECL_NAME (main_decl);
1449       maybe_commonize_var (anon_union_decl);
1450       if (TREE_STATIC (anon_union_decl) || DECL_EXTERNAL (anon_union_decl))
1451 	mangle_decl (anon_union_decl);
1452       DECL_NAME (anon_union_decl) = NULL_TREE;
1453     }
1454 
1455   pushdecl (anon_union_decl);
1456   if (building_stmt_list_p ()
1457       && at_function_scope_p ())
1458     add_decl_expr (anon_union_decl);
1459   else if (!processing_template_decl)
1460     rest_of_decl_compilation (anon_union_decl,
1461 			      toplevel_bindings_p (), at_eof);
1462 }
1463 
1464 /* Auxiliary functions to make type signatures for
1465    `operator new' and `operator delete' correspond to
1466    what compiler will be expecting.  */
1467 
1468 tree
1469 coerce_new_type (tree type)
1470 {
1471   int e = 0;
1472   tree args = TYPE_ARG_TYPES (type);
1473 
1474   gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
1475 
1476   if (!same_type_p (TREE_TYPE (type), ptr_type_node))
1477     {
1478       e = 1;
1479       error ("%<operator new%> must return type %qT", ptr_type_node);
1480     }
1481 
1482   if (args && args != void_list_node)
1483     {
1484       if (TREE_PURPOSE (args))
1485 	{
1486 	  /* [basic.stc.dynamic.allocation]
1487 
1488 	     The first parameter shall not have an associated default
1489 	     argument.  */
1490 	  error ("the first parameter of %<operator new%> cannot "
1491 		 "have a default argument");
1492 	  /* Throw away the default argument.  */
1493 	  TREE_PURPOSE (args) = NULL_TREE;
1494 	}
1495 
1496       if (!same_type_p (TREE_VALUE (args), size_type_node))
1497 	{
1498 	  e = 2;
1499 	  args = TREE_CHAIN (args);
1500 	}
1501     }
1502   else
1503     e = 2;
1504 
1505   if (e == 2)
1506     permerror (input_location, "%<operator new%> takes type %<size_t%> (%qT) "
1507 	       "as first parameter", size_type_node);
1508 
1509   switch (e)
1510   {
1511     case 2:
1512       args = tree_cons (NULL_TREE, size_type_node, args);
1513       /* Fall through.  */
1514     case 1:
1515       type = build_exception_variant
1516 	      (build_function_type (ptr_type_node, args),
1517 	       TYPE_RAISES_EXCEPTIONS (type));
1518       /* Fall through.  */
1519     default:;
1520   }
1521   return type;
1522 }
1523 
1524 tree
1525 coerce_delete_type (tree type)
1526 {
1527   int e = 0;
1528   tree args = TYPE_ARG_TYPES (type);
1529 
1530   gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
1531 
1532   if (!same_type_p (TREE_TYPE (type), void_type_node))
1533     {
1534       e = 1;
1535       error ("%<operator delete%> must return type %qT", void_type_node);
1536     }
1537 
1538   if (!args || args == void_list_node
1539       || !same_type_p (TREE_VALUE (args), ptr_type_node))
1540     {
1541       e = 2;
1542       if (args && args != void_list_node)
1543 	args = TREE_CHAIN (args);
1544       error ("%<operator delete%> takes type %qT as first parameter",
1545 	     ptr_type_node);
1546     }
1547   switch (e)
1548   {
1549     case 2:
1550       args = tree_cons (NULL_TREE, ptr_type_node, args);
1551       /* Fall through.  */
1552     case 1:
1553       type = build_exception_variant
1554 	      (build_function_type (void_type_node, args),
1555 	       TYPE_RAISES_EXCEPTIONS (type));
1556       /* Fall through.  */
1557     default:;
1558   }
1559 
1560   return type;
1561 }
1562 
1563 /* DECL is a VAR_DECL for a vtable: walk through the entries in the vtable
1564    and mark them as needed.  */
1565 
1566 static void
1567 mark_vtable_entries (tree decl)
1568 {
1569   tree fnaddr;
1570   unsigned HOST_WIDE_INT idx;
1571 
1572   FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL (decl)),
1573 			      idx, fnaddr)
1574     {
1575       tree fn;
1576 
1577       STRIP_NOPS (fnaddr);
1578 
1579       if (TREE_CODE (fnaddr) != ADDR_EXPR
1580 	  && TREE_CODE (fnaddr) != FDESC_EXPR)
1581 	/* This entry is an offset: a virtual base class offset, a
1582 	   virtual call offset, an RTTI offset, etc.  */
1583 	continue;
1584 
1585       fn = TREE_OPERAND (fnaddr, 0);
1586       TREE_ADDRESSABLE (fn) = 1;
1587       /* When we don't have vcall offsets, we output thunks whenever
1588 	 we output the vtables that contain them.  With vcall offsets,
1589 	 we know all the thunks we'll need when we emit a virtual
1590 	 function, so we emit the thunks there instead.  */
1591       if (DECL_THUNK_P (fn))
1592 	use_thunk (fn, /*emit_p=*/0);
1593       mark_used (fn);
1594     }
1595 }
1596 
1597 /* Set DECL up to have the closest approximation of "initialized common"
1598    linkage available.  */
1599 
1600 void
1601 comdat_linkage (tree decl)
1602 {
1603   if (flag_weak)
1604     make_decl_one_only (decl, cxx_comdat_group (decl));
1605   else if (TREE_CODE (decl) == FUNCTION_DECL
1606 	   || (TREE_CODE (decl) == VAR_DECL && DECL_ARTIFICIAL (decl)))
1607     /* We can just emit function and compiler-generated variables
1608        statically; having multiple copies is (for the most part) only
1609        a waste of space.
1610 
1611        There are two correctness issues, however: the address of a
1612        template instantiation with external linkage should be the
1613        same, independent of what translation unit asks for the
1614        address, and this will not hold when we emit multiple copies of
1615        the function.  However, there's little else we can do.
1616 
1617        Also, by default, the typeinfo implementation assumes that
1618        there will be only one copy of the string used as the name for
1619        each type.  Therefore, if weak symbols are unavailable, the
1620        run-time library should perform a more conservative check; it
1621        should perform a string comparison, rather than an address
1622        comparison.  */
1623     TREE_PUBLIC (decl) = 0;
1624   else
1625     {
1626       /* Static data member template instantiations, however, cannot
1627 	 have multiple copies.  */
1628       if (DECL_INITIAL (decl) == 0
1629 	  || DECL_INITIAL (decl) == error_mark_node)
1630 	DECL_COMMON (decl) = 1;
1631       else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
1632 	{
1633 	  DECL_COMMON (decl) = 1;
1634 	  DECL_INITIAL (decl) = error_mark_node;
1635 	}
1636       else if (!DECL_EXPLICIT_INSTANTIATION (decl))
1637 	{
1638 	  /* We can't do anything useful; leave vars for explicit
1639 	     instantiation.  */
1640 	  DECL_EXTERNAL (decl) = 1;
1641 	  DECL_NOT_REALLY_EXTERN (decl) = 0;
1642 	}
1643     }
1644 
1645   DECL_COMDAT (decl) = 1;
1646 }
1647 
1648 /* For win32 we also want to put explicit instantiations in
1649    linkonce sections, so that they will be merged with implicit
1650    instantiations; otherwise we get duplicate symbol errors.
1651    For Darwin we do not want explicit instantiations to be
1652    linkonce.  */
1653 
1654 void
1655 maybe_make_one_only (tree decl)
1656 {
1657   /* We used to say that this was not necessary on targets that support weak
1658      symbols, because the implicit instantiations will defer to the explicit
1659      one.  However, that's not actually the case in SVR4; a strong definition
1660      after a weak one is an error.  Also, not making explicit
1661      instantiations one_only means that we can end up with two copies of
1662      some template instantiations.  */
1663   if (! flag_weak)
1664     return;
1665 
1666   /* We can't set DECL_COMDAT on functions, or cp_finish_file will think
1667      we can get away with not emitting them if they aren't used.  We need
1668      to for variables so that cp_finish_decl will update their linkage,
1669      because their DECL_INITIAL may not have been set properly yet.  */
1670 
1671   if (!TARGET_WEAK_NOT_IN_ARCHIVE_TOC
1672       || (! DECL_EXPLICIT_INSTANTIATION (decl)
1673 	  && ! DECL_TEMPLATE_SPECIALIZATION (decl)))
1674     {
1675       make_decl_one_only (decl, cxx_comdat_group (decl));
1676 
1677       if (TREE_CODE (decl) == VAR_DECL)
1678 	{
1679 	  DECL_COMDAT (decl) = 1;
1680 	  /* Mark it needed so we don't forget to emit it.  */
1681 	  mark_decl_referenced (decl);
1682 	}
1683     }
1684 }
1685 
1686 /* Returns true iff DECL, a FUNCTION_DECL or VAR_DECL, has vague linkage.
1687    This predicate will give the right answer during parsing of the
1688    function, which other tests may not.  */
1689 
1690 bool
1691 vague_linkage_p (tree decl)
1692 {
1693   /* Unfortunately, import_export_decl has not always been called
1694      before the function is processed, so we cannot simply check
1695      DECL_COMDAT.  */
1696   return (DECL_COMDAT (decl)
1697 	  || (((TREE_CODE (decl) == FUNCTION_DECL
1698 		&& DECL_DECLARED_INLINE_P (decl))
1699 	       || (DECL_LANG_SPECIFIC (decl)
1700 		   && DECL_TEMPLATE_INSTANTIATION (decl)))
1701 	      && TREE_PUBLIC (decl)));
1702 }
1703 
1704 /* Determine whether or not we want to specifically import or export CTYPE,
1705    using various heuristics.  */
1706 
1707 static void
1708 import_export_class (tree ctype)
1709 {
1710   /* -1 for imported, 1 for exported.  */
1711   int import_export = 0;
1712 
1713   /* It only makes sense to call this function at EOF.  The reason is
1714      that this function looks at whether or not the first non-inline
1715      non-abstract virtual member function has been defined in this
1716      translation unit.  But, we can't possibly know that until we've
1717      seen the entire translation unit.  */
1718   gcc_assert (at_eof);
1719 
1720   if (CLASSTYPE_INTERFACE_KNOWN (ctype))
1721     return;
1722 
1723   /* If MULTIPLE_SYMBOL_SPACES is set and we saw a #pragma interface,
1724      we will have CLASSTYPE_INTERFACE_ONLY set but not
1725      CLASSTYPE_INTERFACE_KNOWN.  In that case, we don't want to use this
1726      heuristic because someone will supply a #pragma implementation
1727      elsewhere, and deducing it here would produce a conflict.  */
1728   if (CLASSTYPE_INTERFACE_ONLY (ctype))
1729     return;
1730 
1731   if (lookup_attribute ("dllimport", TYPE_ATTRIBUTES (ctype)))
1732     import_export = -1;
1733   else if (lookup_attribute ("dllexport", TYPE_ATTRIBUTES (ctype)))
1734     import_export = 1;
1735   else if (CLASSTYPE_IMPLICIT_INSTANTIATION (ctype)
1736 	   && !flag_implicit_templates)
1737     /* For a template class, without -fimplicit-templates, check the
1738        repository.  If the virtual table is assigned to this
1739        translation unit, then export the class; otherwise, import
1740        it.  */
1741       import_export = repo_export_class_p (ctype) ? 1 : -1;
1742   else if (TYPE_POLYMORPHIC_P (ctype))
1743     {
1744       /* The ABI specifies that the virtual table and associated
1745 	 information are emitted with the key method, if any.  */
1746       tree method = CLASSTYPE_KEY_METHOD (ctype);
1747       /* If weak symbol support is not available, then we must be
1748 	 careful not to emit the vtable when the key function is
1749 	 inline.  An inline function can be defined in multiple
1750 	 translation units.  If we were to emit the vtable in each
1751 	 translation unit containing a definition, we would get
1752 	 multiple definition errors at link-time.  */
1753       if (method && (flag_weak || ! DECL_DECLARED_INLINE_P (method)))
1754 	import_export = (DECL_REALLY_EXTERN (method) ? -1 : 1);
1755     }
1756 
1757   /* When MULTIPLE_SYMBOL_SPACES is set, we cannot count on seeing
1758      a definition anywhere else.  */
1759   if (MULTIPLE_SYMBOL_SPACES && import_export == -1)
1760     import_export = 0;
1761 
1762   /* Allow back ends the chance to overrule the decision.  */
1763   if (targetm.cxx.import_export_class)
1764     import_export = targetm.cxx.import_export_class (ctype, import_export);
1765 
1766   if (import_export)
1767     {
1768       SET_CLASSTYPE_INTERFACE_KNOWN (ctype);
1769       CLASSTYPE_INTERFACE_ONLY (ctype) = (import_export < 0);
1770     }
1771 }
1772 
1773 /* Return true if VAR has already been provided to the back end; in that
1774    case VAR should not be modified further by the front end.  */
1775 static bool
1776 var_finalized_p (tree var)
1777 {
1778   return varpool_node (var)->finalized;
1779 }
1780 
1781 /* DECL is a VAR_DECL or FUNCTION_DECL which, for whatever reason,
1782    must be emitted in this translation unit.  Mark it as such.  */
1783 
1784 void
1785 mark_needed (tree decl)
1786 {
1787   /* It's possible that we no longer need to set
1788      TREE_SYMBOL_REFERENCED here directly, but doing so is
1789      harmless.  */
1790   TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)) = 1;
1791   mark_decl_referenced (decl);
1792 }
1793 
1794 /* DECL is either a FUNCTION_DECL or a VAR_DECL.  This function
1795    returns true if a definition of this entity should be provided in
1796    this object file.  Callers use this function to determine whether
1797    or not to let the back end know that a definition of DECL is
1798    available in this translation unit.  */
1799 
1800 bool
1801 decl_needed_p (tree decl)
1802 {
1803   gcc_assert (TREE_CODE (decl) == VAR_DECL
1804 	      || TREE_CODE (decl) == FUNCTION_DECL);
1805   /* This function should only be called at the end of the translation
1806      unit.  We cannot be sure of whether or not something will be
1807      COMDAT until that point.  */
1808   gcc_assert (at_eof);
1809 
1810   /* All entities with external linkage that are not COMDAT should be
1811      emitted; they may be referred to from other object files.  */
1812   if (TREE_PUBLIC (decl) && !DECL_COMDAT (decl))
1813     return true;
1814   /* If this entity was used, let the back end see it; it will decide
1815      whether or not to emit it into the object file.  */
1816   if (TREE_USED (decl)
1817       || (DECL_ASSEMBLER_NAME_SET_P (decl)
1818 	  && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))))
1819       return true;
1820   /* Functions marked "dllexport" must be emitted so that they are
1821      visible to other DLLs.  */
1822   if (flag_keep_inline_dllexport
1823       && lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))
1824     return true;
1825   /* Otherwise, DECL does not need to be emitted -- yet.  A subsequent
1826      reference to DECL might cause it to be emitted later.  */
1827   return false;
1828 }
1829 
1830 /* If necessary, write out the vtables for the dynamic class CTYPE.
1831    Returns true if any vtables were emitted.  */
1832 
1833 static bool
1834 maybe_emit_vtables (tree ctype)
1835 {
1836   tree vtbl;
1837   tree primary_vtbl;
1838   int needed = 0;
1839   struct varpool_node *current = NULL, *last = NULL, *first = NULL;
1840 
1841   /* If the vtables for this class have already been emitted there is
1842      nothing more to do.  */
1843   primary_vtbl = CLASSTYPE_VTABLES (ctype);
1844   if (var_finalized_p (primary_vtbl))
1845     return false;
1846   /* Ignore dummy vtables made by get_vtable_decl.  */
1847   if (TREE_TYPE (primary_vtbl) == void_type_node)
1848     return false;
1849 
1850   /* On some targets, we cannot determine the key method until the end
1851      of the translation unit -- which is when this function is
1852      called.  */
1853   if (!targetm.cxx.key_method_may_be_inline ())
1854     determine_key_method (ctype);
1855 
1856   /* See if any of the vtables are needed.  */
1857   for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = DECL_CHAIN (vtbl))
1858     {
1859       import_export_decl (vtbl);
1860       if (DECL_NOT_REALLY_EXTERN (vtbl) && decl_needed_p (vtbl))
1861 	needed = 1;
1862     }
1863   if (!needed)
1864     {
1865       /* If the references to this class' vtables are optimized away,
1866 	 still emit the appropriate debugging information.  See
1867 	 dfs_debug_mark.  */
1868       if (DECL_COMDAT (primary_vtbl)
1869 	  && CLASSTYPE_DEBUG_REQUESTED (ctype))
1870 	note_debug_info_needed (ctype);
1871       return false;
1872     }
1873 
1874   /* The ABI requires that we emit all of the vtables if we emit any
1875      of them.  */
1876   for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = DECL_CHAIN (vtbl))
1877     {
1878       /* Mark entities references from the virtual table as used.  */
1879       mark_vtable_entries (vtbl);
1880 
1881       if (TREE_TYPE (DECL_INITIAL (vtbl)) == 0)
1882 	{
1883 	  VEC(tree,gc)* cleanups = NULL;
1884 	  tree expr = store_init_value (vtbl, DECL_INITIAL (vtbl), &cleanups,
1885 					LOOKUP_NORMAL);
1886 
1887 	  /* It had better be all done at compile-time.  */
1888 	  gcc_assert (!expr && !cleanups);
1889 	}
1890 
1891       /* Write it out.  */
1892       DECL_EXTERNAL (vtbl) = 0;
1893       rest_of_decl_compilation (vtbl, 1, 1);
1894 
1895       /* Because we're only doing syntax-checking, we'll never end up
1896 	 actually marking the variable as written.  */
1897       if (flag_syntax_only)
1898 	TREE_ASM_WRITTEN (vtbl) = 1;
1899       else if (DECL_COMDAT (vtbl))
1900 	{
1901 	  current = varpool_node (vtbl);
1902 	  if (last)
1903 	    last->same_comdat_group = current;
1904 	  last = current;
1905 	  if (!first)
1906 	    first = current;
1907 	}
1908     }
1909 
1910   if (first != last)
1911     last->same_comdat_group = first;
1912 
1913   /* Since we're writing out the vtable here, also write the debug
1914      info.  */
1915   note_debug_info_needed (ctype);
1916 
1917   return true;
1918 }
1919 
1920 /* A special return value from type_visibility meaning internal
1921    linkage.  */
1922 
1923 enum { VISIBILITY_ANON = VISIBILITY_INTERNAL+1 };
1924 
1925 /* walk_tree helper function for type_visibility.  */
1926 
1927 static tree
1928 min_vis_r (tree *tp, int *walk_subtrees, void *data)
1929 {
1930   int *vis_p = (int *)data;
1931   if (! TYPE_P (*tp))
1932     {
1933       *walk_subtrees = 0;
1934     }
1935   else if (CLASS_TYPE_P (*tp))
1936     {
1937       if (!TREE_PUBLIC (TYPE_MAIN_DECL (*tp)))
1938 	{
1939 	  *vis_p = VISIBILITY_ANON;
1940 	  return *tp;
1941 	}
1942       else if (CLASSTYPE_VISIBILITY (*tp) > *vis_p)
1943 	*vis_p = CLASSTYPE_VISIBILITY (*tp);
1944     }
1945   return NULL;
1946 }
1947 
1948 /* Returns the visibility of TYPE, which is the minimum visibility of its
1949    component types.  */
1950 
1951 static int
1952 type_visibility (tree type)
1953 {
1954   int vis = VISIBILITY_DEFAULT;
1955   cp_walk_tree_without_duplicates (&type, min_vis_r, &vis);
1956   return vis;
1957 }
1958 
1959 /* Limit the visibility of DECL to VISIBILITY, if not explicitly
1960    specified (or if VISIBILITY is static).  If TMPL is true, this
1961    constraint is for a template argument, and takes precedence
1962    over explicitly-specified visibility on the template.  */
1963 
1964 static void
1965 constrain_visibility (tree decl, int visibility, bool tmpl)
1966 {
1967   if (visibility == VISIBILITY_ANON)
1968     {
1969       /* extern "C" declarations aren't affected by the anonymous
1970 	 namespace.  */
1971       if (!DECL_EXTERN_C_P (decl))
1972 	{
1973 	  TREE_PUBLIC (decl) = 0;
1974 	  DECL_WEAK (decl) = 0;
1975 	  DECL_COMMON (decl) = 0;
1976 	  DECL_COMDAT_GROUP (decl) = NULL_TREE;
1977 	  DECL_INTERFACE_KNOWN (decl) = 1;
1978 	  if (DECL_LANG_SPECIFIC (decl))
1979 	    DECL_NOT_REALLY_EXTERN (decl) = 1;
1980 	}
1981     }
1982   else if (visibility > DECL_VISIBILITY (decl)
1983 	   && (tmpl || !DECL_VISIBILITY_SPECIFIED (decl)))
1984     {
1985       DECL_VISIBILITY (decl) = (enum symbol_visibility) visibility;
1986       /* This visibility was not specified.  */
1987       DECL_VISIBILITY_SPECIFIED (decl) = false;
1988     }
1989 }
1990 
1991 /* Constrain the visibility of DECL based on the visibility of its template
1992    arguments.  */
1993 
1994 static void
1995 constrain_visibility_for_template (tree decl, tree targs)
1996 {
1997   /* If this is a template instantiation, check the innermost
1998      template args for visibility constraints.  The outer template
1999      args are covered by the class check.  */
2000   tree args = INNERMOST_TEMPLATE_ARGS (targs);
2001   int i;
2002   for (i = TREE_VEC_LENGTH (args); i > 0; --i)
2003     {
2004       int vis = 0;
2005 
2006       tree arg = TREE_VEC_ELT (args, i-1);
2007       if (TYPE_P (arg))
2008 	vis = type_visibility (arg);
2009       else if (TREE_TYPE (arg) && POINTER_TYPE_P (TREE_TYPE (arg)))
2010 	{
2011 	  STRIP_NOPS (arg);
2012 	  if (TREE_CODE (arg) == ADDR_EXPR)
2013 	    arg = TREE_OPERAND (arg, 0);
2014 	  if (TREE_CODE (arg) == VAR_DECL
2015 	      || TREE_CODE (arg) == FUNCTION_DECL)
2016 	    {
2017 	      if (! TREE_PUBLIC (arg))
2018 		vis = VISIBILITY_ANON;
2019 	      else
2020 		vis = DECL_VISIBILITY (arg);
2021 	    }
2022 	}
2023       if (vis)
2024 	constrain_visibility (decl, vis, true);
2025     }
2026 }
2027 
2028 /* Like c_determine_visibility, but with additional C++-specific
2029    behavior.
2030 
2031    Function-scope entities can rely on the function's visibility because
2032    it is set in start_preparsed_function.
2033 
2034    Class-scope entities cannot rely on the class's visibility until the end
2035    of the enclosing class definition.
2036 
2037    Note that because namespaces have multiple independent definitions,
2038    namespace visibility is handled elsewhere using the #pragma visibility
2039    machinery rather than by decorating the namespace declaration.
2040 
2041    The goal is for constraints from the type to give a diagnostic, and
2042    other constraints to be applied silently.  */
2043 
2044 void
2045 determine_visibility (tree decl)
2046 {
2047   tree class_type = NULL_TREE;
2048   bool use_template;
2049   bool orig_visibility_specified;
2050   enum symbol_visibility orig_visibility;
2051 
2052   /* Remember that all decls get VISIBILITY_DEFAULT when built.  */
2053 
2054   /* Only relevant for names with external linkage.  */
2055   if (!TREE_PUBLIC (decl))
2056     return;
2057 
2058   /* Cloned constructors and destructors get the same visibility as
2059      the underlying function.  That should be set up in
2060      maybe_clone_body.  */
2061   gcc_assert (!DECL_CLONED_FUNCTION_P (decl));
2062 
2063   orig_visibility_specified = DECL_VISIBILITY_SPECIFIED (decl);
2064   orig_visibility = DECL_VISIBILITY (decl);
2065 
2066   if (TREE_CODE (decl) == TYPE_DECL)
2067     {
2068       if (CLASS_TYPE_P (TREE_TYPE (decl)))
2069 	use_template = CLASSTYPE_USE_TEMPLATE (TREE_TYPE (decl));
2070       else if (TYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
2071 	use_template = 1;
2072       else
2073 	use_template = 0;
2074     }
2075   else if (DECL_LANG_SPECIFIC (decl))
2076     use_template = DECL_USE_TEMPLATE (decl);
2077   else
2078     use_template = 0;
2079 
2080   /* If DECL is a member of a class, visibility specifiers on the
2081      class can influence the visibility of the DECL.  */
2082   if (DECL_CLASS_SCOPE_P (decl))
2083     class_type = DECL_CONTEXT (decl);
2084   else
2085     {
2086       /* Not a class member.  */
2087 
2088       /* Virtual tables have DECL_CONTEXT set to their associated class,
2089 	 so they are automatically handled above.  */
2090       gcc_assert (TREE_CODE (decl) != VAR_DECL
2091 		  || !DECL_VTABLE_OR_VTT_P (decl));
2092 
2093       if (DECL_FUNCTION_SCOPE_P (decl) && ! DECL_VISIBILITY_SPECIFIED (decl))
2094 	{
2095 	  /* Local statics and classes get the visibility of their
2096 	     containing function by default, except that
2097 	     -fvisibility-inlines-hidden doesn't affect them.  */
2098 	  tree fn = DECL_CONTEXT (decl);
2099 	  if (DECL_VISIBILITY_SPECIFIED (fn))
2100 	    {
2101 	      DECL_VISIBILITY (decl) = DECL_VISIBILITY (fn);
2102 	      DECL_VISIBILITY_SPECIFIED (decl) =
2103 		DECL_VISIBILITY_SPECIFIED (fn);
2104 	    }
2105 	  else
2106 	    {
2107 	      if (DECL_CLASS_SCOPE_P (fn))
2108 		determine_visibility_from_class (decl, DECL_CONTEXT (fn));
2109 	      else if (determine_hidden_inline (fn))
2110 		{
2111 		  DECL_VISIBILITY (decl) = default_visibility;
2112 		  DECL_VISIBILITY_SPECIFIED (decl) =
2113 		    visibility_options.inpragma;
2114 		}
2115 	      else
2116 		{
2117 	          DECL_VISIBILITY (decl) = DECL_VISIBILITY (fn);
2118 	          DECL_VISIBILITY_SPECIFIED (decl) =
2119 		    DECL_VISIBILITY_SPECIFIED (fn);
2120 		}
2121 	    }
2122 
2123 	  /* Local classes in templates have CLASSTYPE_USE_TEMPLATE set,
2124 	     but have no TEMPLATE_INFO, so don't try to check it.  */
2125 	  use_template = 0;
2126 	}
2127       else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl)
2128 	       && flag_visibility_ms_compat)
2129 	{
2130 	  /* Under -fvisibility-ms-compat, types are visible by default,
2131 	     even though their contents aren't.  */
2132 	  tree underlying_type = TREE_TYPE (DECL_NAME (decl));
2133 	  int underlying_vis = type_visibility (underlying_type);
2134 	  if (underlying_vis == VISIBILITY_ANON
2135 	      || (CLASS_TYPE_P (underlying_type)
2136 		  && CLASSTYPE_VISIBILITY_SPECIFIED (underlying_type)))
2137 	    constrain_visibility (decl, underlying_vis, false);
2138 	  else
2139 	    DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
2140 	}
2141       else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl))
2142 	{
2143 	  /* tinfo visibility is based on the type it's for.  */
2144 	  constrain_visibility
2145 	    (decl, type_visibility (TREE_TYPE (DECL_NAME (decl))), false);
2146 
2147 	  /* Give the target a chance to override the visibility associated
2148 	     with DECL.  */
2149 	  if (TREE_PUBLIC (decl)
2150 	      && !DECL_REALLY_EXTERN (decl)
2151 	      && CLASS_TYPE_P (TREE_TYPE (DECL_NAME (decl)))
2152 	      && !CLASSTYPE_VISIBILITY_SPECIFIED (TREE_TYPE (DECL_NAME (decl))))
2153 	    targetm.cxx.determine_class_data_visibility (decl);
2154 	}
2155       else if (use_template)
2156 	/* Template instantiations and specializations get visibility based
2157 	   on their template unless they override it with an attribute.  */;
2158       else if (! DECL_VISIBILITY_SPECIFIED (decl))
2159 	{
2160           if (determine_hidden_inline (decl))
2161 	    DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
2162 	  else
2163             {
2164 	      /* Set default visibility to whatever the user supplied with
2165 	         #pragma GCC visibility or a namespace visibility attribute.  */
2166 	      DECL_VISIBILITY (decl) = default_visibility;
2167 	      DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
2168             }
2169 	}
2170     }
2171 
2172   if (use_template)
2173     {
2174       /* If the specialization doesn't specify visibility, use the
2175 	 visibility from the template.  */
2176       tree tinfo = (TREE_CODE (decl) == TYPE_DECL
2177 		    ? TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
2178 		    : DECL_TEMPLATE_INFO (decl));
2179       tree args = TI_ARGS (tinfo);
2180       tree attribs = (TREE_CODE (decl) == TYPE_DECL
2181 		      ? TYPE_ATTRIBUTES (TREE_TYPE (decl))
2182 		      : DECL_ATTRIBUTES (decl));
2183 
2184       if (args != error_mark_node
2185 	  /* Template argument visibility outweighs #pragma or namespace
2186 	     visibility, but not an explicit attribute.  */
2187 	  && !lookup_attribute ("visibility", attribs))
2188 	{
2189 	  int depth = TMPL_ARGS_DEPTH (args);
2190 	  tree pattern = DECL_TEMPLATE_RESULT (TI_TEMPLATE (tinfo));
2191 
2192 	  if (!DECL_VISIBILITY_SPECIFIED (decl))
2193 	    {
2194 	      if (!DECL_VISIBILITY_SPECIFIED (pattern)
2195 		  && determine_hidden_inline (decl))
2196 		DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
2197 	      else
2198 		{
2199 	          DECL_VISIBILITY (decl) = DECL_VISIBILITY (pattern);
2200 	          DECL_VISIBILITY_SPECIFIED (decl)
2201 		    = DECL_VISIBILITY_SPECIFIED (pattern);
2202 		}
2203 	    }
2204 
2205 	  /* FIXME should TMPL_ARGS_DEPTH really return 1 for null input? */
2206 	  if (args && depth > template_class_depth (class_type))
2207 	    /* Limit visibility based on its template arguments.  */
2208 	    constrain_visibility_for_template (decl, args);
2209 	}
2210     }
2211 
2212   if (class_type)
2213     determine_visibility_from_class (decl, class_type);
2214 
2215   if (decl_anon_ns_mem_p (decl))
2216     /* Names in an anonymous namespace get internal linkage.
2217        This might change once we implement export.  */
2218     constrain_visibility (decl, VISIBILITY_ANON, false);
2219   else if (TREE_CODE (decl) != TYPE_DECL)
2220     {
2221       /* Propagate anonymity from type to decl.  */
2222       int tvis = type_visibility (TREE_TYPE (decl));
2223       if (tvis == VISIBILITY_ANON
2224 	  || ! DECL_VISIBILITY_SPECIFIED (decl))
2225 	constrain_visibility (decl, tvis, false);
2226     }
2227   else if (no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/true))
2228     /* DR 757: A type without linkage shall not be used as the type of a
2229        variable or function with linkage, unless
2230        o the variable or function has extern "C" linkage (7.5 [dcl.link]), or
2231        o the variable or function is not used (3.2 [basic.def.odr]) or is
2232        defined in the same translation unit.
2233 
2234        Since non-extern "C" decls need to be defined in the same
2235        translation unit, we can make the type internal.  */
2236     constrain_visibility (decl, VISIBILITY_ANON, false);
2237 
2238   /* If visibility changed and DECL already has DECL_RTL, ensure
2239      symbol flags are updated.  */
2240   if ((DECL_VISIBILITY (decl) != orig_visibility
2241        || DECL_VISIBILITY_SPECIFIED (decl) != orig_visibility_specified)
2242       && ((TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
2243 	  || TREE_CODE (decl) == FUNCTION_DECL)
2244       && DECL_RTL_SET_P (decl))
2245     make_decl_rtl (decl);
2246 }
2247 
2248 /* By default, static data members and function members receive
2249    the visibility of their containing class.  */
2250 
2251 static void
2252 determine_visibility_from_class (tree decl, tree class_type)
2253 {
2254   if (DECL_VISIBILITY_SPECIFIED (decl))
2255     return;
2256 
2257   if (determine_hidden_inline (decl))
2258     DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
2259   else
2260     {
2261       /* Default to the class visibility.  */
2262       DECL_VISIBILITY (decl) = CLASSTYPE_VISIBILITY (class_type);
2263       DECL_VISIBILITY_SPECIFIED (decl)
2264 	= CLASSTYPE_VISIBILITY_SPECIFIED (class_type);
2265     }
2266 
2267   /* Give the target a chance to override the visibility associated
2268      with DECL.  */
2269   if (TREE_CODE (decl) == VAR_DECL
2270       && (DECL_TINFO_P (decl)
2271 	  || (DECL_VTABLE_OR_VTT_P (decl)
2272 	      /* Construction virtual tables are not exported because
2273 		 they cannot be referred to from other object files;
2274 		 their name is not standardized by the ABI.  */
2275 	      && !DECL_CONSTRUCTION_VTABLE_P (decl)))
2276       && TREE_PUBLIC (decl)
2277       && !DECL_REALLY_EXTERN (decl)
2278       && !CLASSTYPE_VISIBILITY_SPECIFIED (class_type))
2279     targetm.cxx.determine_class_data_visibility (decl);
2280 }
2281 
2282 /* Returns true iff DECL is an inline that should get hidden visibility
2283    because of -fvisibility-inlines-hidden.  */
2284 
2285 static bool
2286 determine_hidden_inline (tree decl)
2287 {
2288   return (visibility_options.inlines_hidden
2289 	  /* Don't do this for inline templates; specializations might not be
2290 	     inline, and we don't want them to inherit the hidden
2291 	     visibility.  We'll set it here for all inline instantiations.  */
2292 	  && !processing_template_decl
2293 	  && TREE_CODE (decl) == FUNCTION_DECL
2294 	  && DECL_DECLARED_INLINE_P (decl)
2295 	  && (! DECL_LANG_SPECIFIC (decl)
2296 	      || ! DECL_EXPLICIT_INSTANTIATION (decl)));
2297 }
2298 
2299 /* Constrain the visibility of a class TYPE based on the visibility of its
2300    field types.  Warn if any fields require lesser visibility.  */
2301 
2302 void
2303 constrain_class_visibility (tree type)
2304 {
2305   tree binfo;
2306   tree t;
2307   int i;
2308 
2309   int vis = type_visibility (type);
2310 
2311   if (vis == VISIBILITY_ANON
2312       || DECL_IN_SYSTEM_HEADER (TYPE_MAIN_DECL (type)))
2313     return;
2314 
2315   /* Don't warn about visibility if the class has explicit visibility.  */
2316   if (CLASSTYPE_VISIBILITY_SPECIFIED (type))
2317     vis = VISIBILITY_INTERNAL;
2318 
2319   for (t = TYPE_FIELDS (type); t; t = DECL_CHAIN (t))
2320     if (TREE_CODE (t) == FIELD_DECL && TREE_TYPE (t) != error_mark_node)
2321       {
2322 	tree ftype = strip_pointer_or_array_types (TREE_TYPE (t));
2323 	int subvis = type_visibility (ftype);
2324 
2325 	if (subvis == VISIBILITY_ANON)
2326 	  {
2327 	    if (!in_main_input_context ())
2328 	      warning (0, "\
2329 %qT has a field %qD whose type uses the anonymous namespace",
2330 		       type, t);
2331 	  }
2332 	else if (MAYBE_CLASS_TYPE_P (ftype)
2333 		 && vis < VISIBILITY_HIDDEN
2334 		 && subvis >= VISIBILITY_HIDDEN)
2335 	  warning (OPT_Wattributes, "\
2336 %qT declared with greater visibility than the type of its field %qD",
2337 		   type, t);
2338       }
2339 
2340   binfo = TYPE_BINFO (type);
2341   for (i = 0; BINFO_BASE_ITERATE (binfo, i, t); ++i)
2342     {
2343       int subvis = type_visibility (TREE_TYPE (t));
2344 
2345       if (subvis == VISIBILITY_ANON)
2346         {
2347 	  if (!in_main_input_context())
2348 	    warning (0, "\
2349 %qT has a base %qT whose type uses the anonymous namespace",
2350 		     type, TREE_TYPE (t));
2351 	}
2352       else if (vis < VISIBILITY_HIDDEN
2353 	       && subvis >= VISIBILITY_HIDDEN)
2354 	warning (OPT_Wattributes, "\
2355 %qT declared with greater visibility than its base %qT",
2356 		 type, TREE_TYPE (t));
2357     }
2358 }
2359 
2360 /* DECL is a FUNCTION_DECL or VAR_DECL.  If the object file linkage
2361    for DECL has not already been determined, do so now by setting
2362    DECL_EXTERNAL, DECL_COMDAT and other related flags.  Until this
2363    function is called entities with vague linkage whose definitions
2364    are available must have TREE_PUBLIC set.
2365 
2366    If this function decides to place DECL in COMDAT, it will set
2367    appropriate flags -- but will not clear DECL_EXTERNAL.  It is up to
2368    the caller to decide whether or not to clear DECL_EXTERNAL.  Some
2369    callers defer that decision until it is clear that DECL is actually
2370    required.  */
2371 
2372 void
2373 import_export_decl (tree decl)
2374 {
2375   int emit_p;
2376   bool comdat_p;
2377   bool import_p;
2378   tree class_type = NULL_TREE;
2379 
2380   if (DECL_INTERFACE_KNOWN (decl))
2381     return;
2382 
2383   /* We cannot determine what linkage to give to an entity with vague
2384      linkage until the end of the file.  For example, a virtual table
2385      for a class will be defined if and only if the key method is
2386      defined in this translation unit.  As a further example, consider
2387      that when compiling a translation unit that uses PCH file with
2388      "-frepo" it would be incorrect to make decisions about what
2389      entities to emit when building the PCH; those decisions must be
2390      delayed until the repository information has been processed.  */
2391   gcc_assert (at_eof);
2392   /* Object file linkage for explicit instantiations is handled in
2393      mark_decl_instantiated.  For static variables in functions with
2394      vague linkage, maybe_commonize_var is used.
2395 
2396      Therefore, the only declarations that should be provided to this
2397      function are those with external linkage that are:
2398 
2399      * implicit instantiations of function templates
2400 
2401      * inline function
2402 
2403      * implicit instantiations of static data members of class
2404        templates
2405 
2406      * virtual tables
2407 
2408      * typeinfo objects
2409 
2410      Furthermore, all entities that reach this point must have a
2411      definition available in this translation unit.
2412 
2413      The following assertions check these conditions.  */
2414   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
2415 	      || TREE_CODE (decl) == VAR_DECL);
2416   /* Any code that creates entities with TREE_PUBLIC cleared should
2417      also set DECL_INTERFACE_KNOWN.  */
2418   gcc_assert (TREE_PUBLIC (decl));
2419   if (TREE_CODE (decl) == FUNCTION_DECL)
2420     gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
2421 		|| DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
2422 		|| DECL_DECLARED_INLINE_P (decl));
2423   else
2424     gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
2425 		|| DECL_VTABLE_OR_VTT_P (decl)
2426 		|| DECL_TINFO_P (decl));
2427   /* Check that a definition of DECL is available in this translation
2428      unit.  */
2429   gcc_assert (!DECL_REALLY_EXTERN (decl));
2430 
2431   /* Assume that DECL will not have COMDAT linkage.  */
2432   comdat_p = false;
2433   /* Assume that DECL will not be imported into this translation
2434      unit.  */
2435   import_p = false;
2436 
2437   /* See if the repository tells us whether or not to emit DECL in
2438      this translation unit.  */
2439   emit_p = repo_emit_p (decl);
2440   if (emit_p == 0)
2441     import_p = true;
2442   else if (emit_p == 1)
2443     {
2444       /* The repository indicates that this entity should be defined
2445 	 here.  Make sure the back end honors that request.  */
2446       if (TREE_CODE (decl) == VAR_DECL)
2447 	mark_needed (decl);
2448       else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)
2449 	       || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
2450 	{
2451 	  tree clone;
2452 	  FOR_EACH_CLONE (clone, decl)
2453 	    mark_needed (clone);
2454 	}
2455       else
2456 	mark_needed (decl);
2457       /* Output the definition as an ordinary strong definition.  */
2458       DECL_EXTERNAL (decl) = 0;
2459       DECL_INTERFACE_KNOWN (decl) = 1;
2460       return;
2461     }
2462 
2463   if (import_p)
2464     /* We have already decided what to do with this DECL; there is no
2465        need to check anything further.  */
2466     ;
2467   else if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
2468     {
2469       class_type = DECL_CONTEXT (decl);
2470       import_export_class (class_type);
2471       if (TYPE_FOR_JAVA (class_type))
2472 	import_p = true;
2473       else if (CLASSTYPE_INTERFACE_KNOWN (class_type)
2474 	       && CLASSTYPE_INTERFACE_ONLY (class_type))
2475 	import_p = true;
2476       else if ((!flag_weak || TARGET_WEAK_NOT_IN_ARCHIVE_TOC)
2477 	       && !CLASSTYPE_USE_TEMPLATE (class_type)
2478 	       && CLASSTYPE_KEY_METHOD (class_type)
2479 	       && !DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (class_type)))
2480 	/* The ABI requires that all virtual tables be emitted with
2481 	   COMDAT linkage.  However, on systems where COMDAT symbols
2482 	   don't show up in the table of contents for a static
2483 	   archive, or on systems without weak symbols (where we
2484 	   approximate COMDAT linkage by using internal linkage), the
2485 	   linker will report errors about undefined symbols because
2486 	   it will not see the virtual table definition.  Therefore,
2487 	   in the case that we know that the virtual table will be
2488 	   emitted in only one translation unit, we make the virtual
2489 	   table an ordinary definition with external linkage.  */
2490 	DECL_EXTERNAL (decl) = 0;
2491       else if (CLASSTYPE_INTERFACE_KNOWN (class_type))
2492 	{
2493 	  /* CLASS_TYPE is being exported from this translation unit,
2494 	     so DECL should be defined here.  */
2495 	  if (!flag_weak && CLASSTYPE_EXPLICIT_INSTANTIATION (class_type))
2496 	    /* If a class is declared in a header with the "extern
2497 	       template" extension, then it will not be instantiated,
2498 	       even in translation units that would normally require
2499 	       it.  Often such classes are explicitly instantiated in
2500 	       one translation unit.  Therefore, the explicit
2501 	       instantiation must be made visible to other translation
2502 	       units.  */
2503 	    DECL_EXTERNAL (decl) = 0;
2504 	  else
2505 	    {
2506 	      /* The generic C++ ABI says that class data is always
2507 		 COMDAT, even if there is a key function.  Some
2508 		 variants (e.g., the ARM EABI) says that class data
2509 		 only has COMDAT linkage if the class data might be
2510 		 emitted in more than one translation unit.  When the
2511 		 key method can be inline and is inline, we still have
2512 		 to arrange for comdat even though
2513 		 class_data_always_comdat is false.  */
2514 	      if (!CLASSTYPE_KEY_METHOD (class_type)
2515 		  || DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (class_type))
2516 		  || targetm.cxx.class_data_always_comdat ())
2517 		{
2518 		  /* The ABI requires COMDAT linkage.  Normally, we
2519 		     only emit COMDAT things when they are needed;
2520 		     make sure that we realize that this entity is
2521 		     indeed needed.  */
2522 		  comdat_p = true;
2523 		  mark_needed (decl);
2524 		}
2525 	    }
2526 	}
2527       else if (!flag_implicit_templates
2528 	       && CLASSTYPE_IMPLICIT_INSTANTIATION (class_type))
2529 	import_p = true;
2530       else
2531 	comdat_p = true;
2532     }
2533   else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl))
2534     {
2535       tree type = TREE_TYPE (DECL_NAME (decl));
2536       if (CLASS_TYPE_P (type))
2537 	{
2538 	  class_type = type;
2539 	  import_export_class (type);
2540 	  if (CLASSTYPE_INTERFACE_KNOWN (type)
2541 	      && TYPE_POLYMORPHIC_P (type)
2542 	      && CLASSTYPE_INTERFACE_ONLY (type)
2543 	      /* If -fno-rtti was specified, then we cannot be sure
2544 		 that RTTI information will be emitted with the
2545 		 virtual table of the class, so we must emit it
2546 		 wherever it is used.  */
2547 	      && flag_rtti)
2548 	    import_p = true;
2549 	  else
2550 	    {
2551 	      if (CLASSTYPE_INTERFACE_KNOWN (type)
2552 		  && !CLASSTYPE_INTERFACE_ONLY (type))
2553 		{
2554 		  comdat_p = (targetm.cxx.class_data_always_comdat ()
2555 			      || (CLASSTYPE_KEY_METHOD (type)
2556 				  && DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (type))));
2557 		  mark_needed (decl);
2558 		  if (!flag_weak)
2559 		    {
2560 		      comdat_p = false;
2561 		      DECL_EXTERNAL (decl) = 0;
2562 		    }
2563 		}
2564 	      else
2565 		comdat_p = true;
2566 	    }
2567 	}
2568       else
2569 	comdat_p = true;
2570     }
2571   else if (DECL_TEMPLATE_INSTANTIATION (decl)
2572 	   || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl))
2573     {
2574       /* DECL is an implicit instantiation of a function or static
2575 	 data member.  */
2576       if ((flag_implicit_templates
2577 	   && !flag_use_repository)
2578 	  || (flag_implicit_inline_templates
2579 	      && TREE_CODE (decl) == FUNCTION_DECL
2580 	      && DECL_DECLARED_INLINE_P (decl)))
2581 	comdat_p = true;
2582       else
2583 	/* If we are not implicitly generating templates, then mark
2584 	   this entity as undefined in this translation unit.  */
2585 	import_p = true;
2586     }
2587   else if (DECL_FUNCTION_MEMBER_P (decl))
2588     {
2589       if (!DECL_DECLARED_INLINE_P (decl))
2590 	{
2591 	  tree ctype = DECL_CONTEXT (decl);
2592 	  import_export_class (ctype);
2593 	  if (CLASSTYPE_INTERFACE_KNOWN (ctype))
2594 	    {
2595 	      DECL_NOT_REALLY_EXTERN (decl)
2596 		= ! (CLASSTYPE_INTERFACE_ONLY (ctype)
2597 		     || (DECL_DECLARED_INLINE_P (decl)
2598 			 && ! flag_implement_inlines
2599 			 && !DECL_VINDEX (decl)));
2600 
2601 	      if (!DECL_NOT_REALLY_EXTERN (decl))
2602 		DECL_EXTERNAL (decl) = 1;
2603 
2604 	      /* Always make artificials weak.  */
2605 	      if (DECL_ARTIFICIAL (decl) && flag_weak)
2606 		comdat_p = true;
2607 	      else
2608 		maybe_make_one_only (decl);
2609 	    }
2610 	}
2611       else
2612 	comdat_p = true;
2613     }
2614   else
2615     comdat_p = true;
2616 
2617   if (import_p)
2618     {
2619       /* If we are importing DECL into this translation unit, mark is
2620 	 an undefined here.  */
2621       DECL_EXTERNAL (decl) = 1;
2622       DECL_NOT_REALLY_EXTERN (decl) = 0;
2623     }
2624   else if (comdat_p)
2625     {
2626       /* If we decided to put DECL in COMDAT, mark it accordingly at
2627 	 this point.  */
2628       comdat_linkage (decl);
2629     }
2630 
2631   DECL_INTERFACE_KNOWN (decl) = 1;
2632 }
2633 
2634 /* Return an expression that performs the destruction of DECL, which
2635    must be a VAR_DECL whose type has a non-trivial destructor, or is
2636    an array whose (innermost) elements have a non-trivial destructor.  */
2637 
2638 tree
2639 build_cleanup (tree decl)
2640 {
2641   tree temp;
2642   tree type = TREE_TYPE (decl);
2643 
2644   /* This function should only be called for declarations that really
2645      require cleanups.  */
2646   gcc_assert (!TYPE_HAS_TRIVIAL_DESTRUCTOR (type));
2647 
2648   /* Treat all objects with destructors as used; the destructor may do
2649      something substantive.  */
2650   mark_used (decl);
2651 
2652   if (TREE_CODE (type) == ARRAY_TYPE)
2653     temp = decl;
2654   else
2655     temp = build_address (decl);
2656   temp = build_delete (TREE_TYPE (temp), temp,
2657 		       sfk_complete_destructor,
2658 		       LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR, 0,
2659 		       tf_warning_or_error);
2660   return temp;
2661 }
2662 
2663 /* Returns the initialization guard variable for the variable DECL,
2664    which has static storage duration.  */
2665 
2666 tree
2667 get_guard (tree decl)
2668 {
2669   tree sname;
2670   tree guard;
2671 
2672   sname = mangle_guard_variable (decl);
2673   guard = IDENTIFIER_GLOBAL_VALUE (sname);
2674   if (! guard)
2675     {
2676       tree guard_type;
2677 
2678       /* We use a type that is big enough to contain a mutex as well
2679 	 as an integer counter.  */
2680       guard_type = targetm.cxx.guard_type ();
2681       guard = build_decl (DECL_SOURCE_LOCATION (decl),
2682 			  VAR_DECL, sname, guard_type);
2683 
2684       /* The guard should have the same linkage as what it guards.  */
2685       TREE_PUBLIC (guard) = TREE_PUBLIC (decl);
2686       TREE_STATIC (guard) = TREE_STATIC (decl);
2687       DECL_COMMON (guard) = DECL_COMMON (decl);
2688       DECL_COMDAT (guard) = DECL_COMDAT (decl);
2689       if (DECL_ONE_ONLY (decl))
2690 	make_decl_one_only (guard, cxx_comdat_group (guard));
2691       if (TREE_PUBLIC (decl))
2692 	DECL_WEAK (guard) = DECL_WEAK (decl);
2693       DECL_VISIBILITY (guard) = DECL_VISIBILITY (decl);
2694       DECL_VISIBILITY_SPECIFIED (guard) = DECL_VISIBILITY_SPECIFIED (decl);
2695 
2696       DECL_ARTIFICIAL (guard) = 1;
2697       DECL_IGNORED_P (guard) = 1;
2698       TREE_USED (guard) = 1;
2699       pushdecl_top_level_and_finish (guard, NULL_TREE);
2700     }
2701   return guard;
2702 }
2703 
2704 /* Return those bits of the GUARD variable that should be set when the
2705    guarded entity is actually initialized.  */
2706 
2707 static tree
2708 get_guard_bits (tree guard)
2709 {
2710   if (!targetm.cxx.guard_mask_bit ())
2711     {
2712       /* We only set the first byte of the guard, in order to leave room
2713 	 for a mutex in the high-order bits.  */
2714       guard = build1 (ADDR_EXPR,
2715 		      build_pointer_type (TREE_TYPE (guard)),
2716 		      guard);
2717       guard = build1 (NOP_EXPR,
2718 		      build_pointer_type (char_type_node),
2719 		      guard);
2720       guard = build1 (INDIRECT_REF, char_type_node, guard);
2721     }
2722 
2723   return guard;
2724 }
2725 
2726 /* Return an expression which determines whether or not the GUARD
2727    variable has already been initialized.  */
2728 
2729 tree
2730 get_guard_cond (tree guard)
2731 {
2732   tree guard_value;
2733 
2734   /* Check to see if the GUARD is zero.  */
2735   guard = get_guard_bits (guard);
2736 
2737   /* Mask off all but the low bit.  */
2738   if (targetm.cxx.guard_mask_bit ())
2739     {
2740       guard_value = integer_one_node;
2741       if (!same_type_p (TREE_TYPE (guard_value), TREE_TYPE (guard)))
2742 	guard_value = convert (TREE_TYPE (guard), guard_value);
2743       guard = cp_build_binary_op (input_location,
2744 				  BIT_AND_EXPR, guard, guard_value,
2745 				  tf_warning_or_error);
2746     }
2747 
2748   guard_value = integer_zero_node;
2749   if (!same_type_p (TREE_TYPE (guard_value), TREE_TYPE (guard)))
2750     guard_value = convert (TREE_TYPE (guard), guard_value);
2751   return cp_build_binary_op (input_location,
2752 			     EQ_EXPR, guard, guard_value,
2753 			     tf_warning_or_error);
2754 }
2755 
2756 /* Return an expression which sets the GUARD variable, indicating that
2757    the variable being guarded has been initialized.  */
2758 
2759 tree
2760 set_guard (tree guard)
2761 {
2762   tree guard_init;
2763 
2764   /* Set the GUARD to one.  */
2765   guard = get_guard_bits (guard);
2766   guard_init = integer_one_node;
2767   if (!same_type_p (TREE_TYPE (guard_init), TREE_TYPE (guard)))
2768     guard_init = convert (TREE_TYPE (guard), guard_init);
2769   return cp_build_modify_expr (guard, NOP_EXPR, guard_init,
2770 			       tf_warning_or_error);
2771 }
2772 
2773 /* Start the process of running a particular set of global constructors
2774    or destructors.  Subroutine of do_[cd]tors.  */
2775 
2776 static tree
2777 start_objects (int method_type, int initp)
2778 {
2779   tree body;
2780   tree fndecl;
2781   char type[14];
2782 
2783   /* Make ctor or dtor function.  METHOD_TYPE may be 'I' or 'D'.  */
2784 
2785   if (initp != DEFAULT_INIT_PRIORITY)
2786     {
2787       char joiner;
2788 
2789 #ifdef JOINER
2790       joiner = JOINER;
2791 #else
2792       joiner = '_';
2793 #endif
2794 
2795       sprintf (type, "sub_%c%c%.5u", method_type, joiner, initp);
2796     }
2797   else
2798     sprintf (type, "sub_%c", method_type);
2799 
2800   fndecl = build_lang_decl (FUNCTION_DECL,
2801 			    get_file_function_name (type),
2802 			    build_function_type_list (void_type_node,
2803 						      NULL_TREE));
2804   start_preparsed_function (fndecl, /*attrs=*/NULL_TREE, SF_PRE_PARSED);
2805 
2806   TREE_PUBLIC (current_function_decl) = 0;
2807 
2808   /* Mark as artificial because it's not explicitly in the user's
2809      source code.  */
2810   DECL_ARTIFICIAL (current_function_decl) = 1;
2811 
2812   /* Mark this declaration as used to avoid spurious warnings.  */
2813   TREE_USED (current_function_decl) = 1;
2814 
2815   /* Mark this function as a global constructor or destructor.  */
2816   if (method_type == 'I')
2817     DECL_GLOBAL_CTOR_P (current_function_decl) = 1;
2818   else
2819     DECL_GLOBAL_DTOR_P (current_function_decl) = 1;
2820 
2821   body = begin_compound_stmt (BCS_FN_BODY);
2822 
2823   return body;
2824 }
2825 
2826 /* Finish the process of running a particular set of global constructors
2827    or destructors.  Subroutine of do_[cd]tors.  */
2828 
2829 static void
2830 finish_objects (int method_type, int initp, tree body)
2831 {
2832   tree fn;
2833 
2834   /* Finish up.  */
2835   finish_compound_stmt (body);
2836   fn = finish_function (0);
2837 
2838   if (method_type == 'I')
2839     {
2840       DECL_STATIC_CONSTRUCTOR (fn) = 1;
2841       decl_init_priority_insert (fn, initp);
2842     }
2843   else
2844     {
2845       DECL_STATIC_DESTRUCTOR (fn) = 1;
2846       decl_fini_priority_insert (fn, initp);
2847     }
2848 
2849   expand_or_defer_fn (fn);
2850 }
2851 
2852 /* The names of the parameters to the function created to handle
2853    initializations and destructions for objects with static storage
2854    duration.  */
2855 #define INITIALIZE_P_IDENTIFIER "__initialize_p"
2856 #define PRIORITY_IDENTIFIER "__priority"
2857 
2858 /* The name of the function we create to handle initializations and
2859    destructions for objects with static storage duration.  */
2860 #define SSDF_IDENTIFIER "__static_initialization_and_destruction"
2861 
2862 /* The declaration for the __INITIALIZE_P argument.  */
2863 static GTY(()) tree initialize_p_decl;
2864 
2865 /* The declaration for the __PRIORITY argument.  */
2866 static GTY(()) tree priority_decl;
2867 
2868 /* The declaration for the static storage duration function.  */
2869 static GTY(()) tree ssdf_decl;
2870 
2871 /* All the static storage duration functions created in this
2872    translation unit.  */
2873 static GTY(()) VEC(tree,gc) *ssdf_decls;
2874 
2875 /* A map from priority levels to information about that priority
2876    level.  There may be many such levels, so efficient lookup is
2877    important.  */
2878 static splay_tree priority_info_map;
2879 
2880 /* Begins the generation of the function that will handle all
2881    initialization and destruction of objects with static storage
2882    duration.  The function generated takes two parameters of type
2883    `int': __INITIALIZE_P and __PRIORITY.  If __INITIALIZE_P is
2884    nonzero, it performs initializations.  Otherwise, it performs
2885    destructions.  It only performs those initializations or
2886    destructions with the indicated __PRIORITY.  The generated function
2887    returns no value.
2888 
2889    It is assumed that this function will only be called once per
2890    translation unit.  */
2891 
2892 static tree
2893 start_static_storage_duration_function (unsigned count)
2894 {
2895   tree type;
2896   tree body;
2897   char id[sizeof (SSDF_IDENTIFIER) + 1 /* '\0' */ + 32];
2898 
2899   /* Create the identifier for this function.  It will be of the form
2900      SSDF_IDENTIFIER_<number>.  */
2901   sprintf (id, "%s_%u", SSDF_IDENTIFIER, count);
2902 
2903   type = build_function_type_list (void_type_node,
2904 				   integer_type_node, integer_type_node,
2905 				   NULL_TREE);
2906 
2907   /* Create the FUNCTION_DECL itself.  */
2908   ssdf_decl = build_lang_decl (FUNCTION_DECL,
2909 			       get_identifier (id),
2910 			       type);
2911   TREE_PUBLIC (ssdf_decl) = 0;
2912   DECL_ARTIFICIAL (ssdf_decl) = 1;
2913 
2914   /* Put this function in the list of functions to be called from the
2915      static constructors and destructors.  */
2916   if (!ssdf_decls)
2917     {
2918       ssdf_decls = VEC_alloc (tree, gc, 32);
2919 
2920       /* Take this opportunity to initialize the map from priority
2921 	 numbers to information about that priority level.  */
2922       priority_info_map = splay_tree_new (splay_tree_compare_ints,
2923 					  /*delete_key_fn=*/0,
2924 					  /*delete_value_fn=*/
2925 					  (splay_tree_delete_value_fn) &free);
2926 
2927       /* We always need to generate functions for the
2928 	 DEFAULT_INIT_PRIORITY so enter it now.  That way when we walk
2929 	 priorities later, we'll be sure to find the
2930 	 DEFAULT_INIT_PRIORITY.  */
2931       get_priority_info (DEFAULT_INIT_PRIORITY);
2932     }
2933 
2934   VEC_safe_push (tree, gc, ssdf_decls, ssdf_decl);
2935 
2936   /* Create the argument list.  */
2937   initialize_p_decl = cp_build_parm_decl
2938     (get_identifier (INITIALIZE_P_IDENTIFIER), integer_type_node);
2939   DECL_CONTEXT (initialize_p_decl) = ssdf_decl;
2940   TREE_USED (initialize_p_decl) = 1;
2941   priority_decl = cp_build_parm_decl
2942     (get_identifier (PRIORITY_IDENTIFIER), integer_type_node);
2943   DECL_CONTEXT (priority_decl) = ssdf_decl;
2944   TREE_USED (priority_decl) = 1;
2945 
2946   DECL_CHAIN (initialize_p_decl) = priority_decl;
2947   DECL_ARGUMENTS (ssdf_decl) = initialize_p_decl;
2948 
2949   /* Put the function in the global scope.  */
2950   pushdecl (ssdf_decl);
2951 
2952   /* Start the function itself.  This is equivalent to declaring the
2953      function as:
2954 
2955        static void __ssdf (int __initialize_p, init __priority_p);
2956 
2957      It is static because we only need to call this function from the
2958      various constructor and destructor functions for this module.  */
2959   start_preparsed_function (ssdf_decl,
2960 			    /*attrs=*/NULL_TREE,
2961 			    SF_PRE_PARSED);
2962 
2963   /* Set up the scope of the outermost block in the function.  */
2964   body = begin_compound_stmt (BCS_FN_BODY);
2965 
2966   return body;
2967 }
2968 
2969 /* Finish the generation of the function which performs initialization
2970    and destruction of objects with static storage duration.  After
2971    this point, no more such objects can be created.  */
2972 
2973 static void
2974 finish_static_storage_duration_function (tree body)
2975 {
2976   /* Close out the function.  */
2977   finish_compound_stmt (body);
2978   expand_or_defer_fn (finish_function (0));
2979 }
2980 
2981 /* Return the information about the indicated PRIORITY level.  If no
2982    code to handle this level has yet been generated, generate the
2983    appropriate prologue.  */
2984 
2985 static priority_info
2986 get_priority_info (int priority)
2987 {
2988   priority_info pi;
2989   splay_tree_node n;
2990 
2991   n = splay_tree_lookup (priority_info_map,
2992 			 (splay_tree_key) priority);
2993   if (!n)
2994     {
2995       /* Create a new priority information structure, and insert it
2996 	 into the map.  */
2997       pi = XNEW (struct priority_info_s);
2998       pi->initializations_p = 0;
2999       pi->destructions_p = 0;
3000       splay_tree_insert (priority_info_map,
3001 			 (splay_tree_key) priority,
3002 			 (splay_tree_value) pi);
3003     }
3004   else
3005     pi = (priority_info) n->value;
3006 
3007   return pi;
3008 }
3009 
3010 /* The effective initialization priority of a DECL.  */
3011 
3012 #define DECL_EFFECTIVE_INIT_PRIORITY(decl)				      \
3013 	((!DECL_HAS_INIT_PRIORITY_P (decl) || DECL_INIT_PRIORITY (decl) == 0) \
3014 	 ? DEFAULT_INIT_PRIORITY : DECL_INIT_PRIORITY (decl))
3015 
3016 /* Whether a DECL needs a guard to protect it against multiple
3017    initialization.  */
3018 
3019 #define NEEDS_GUARD_P(decl) (TREE_PUBLIC (decl) && (DECL_COMMON (decl)      \
3020 						    || DECL_ONE_ONLY (decl) \
3021 						    || DECL_WEAK (decl)))
3022 
3023 /* Called from one_static_initialization_or_destruction(),
3024    via walk_tree.
3025    Walks the initializer list of a global variable and looks for
3026    temporary variables (DECL_NAME() == NULL and DECL_ARTIFICIAL != 0)
3027    and that have their DECL_CONTEXT() == NULL.
3028    For each such temporary variable, set their DECL_CONTEXT() to
3029    the current function. This is necessary because otherwise
3030    some optimizers (enabled by -O2 -fprofile-arcs) might crash
3031    when trying to refer to a temporary variable that does not have
3032    it's DECL_CONTECT() properly set.  */
3033 static tree
3034 fix_temporary_vars_context_r (tree *node,
3035 			      int  *unused ATTRIBUTE_UNUSED,
3036 			      void *unused1 ATTRIBUTE_UNUSED)
3037 {
3038   gcc_assert (current_function_decl);
3039 
3040   if (TREE_CODE (*node) == BIND_EXPR)
3041     {
3042       tree var;
3043 
3044       for (var = BIND_EXPR_VARS (*node); var; var = DECL_CHAIN (var))
3045 	if (TREE_CODE (var) == VAR_DECL
3046 	  && !DECL_NAME (var)
3047 	  && DECL_ARTIFICIAL (var)
3048 	  && !DECL_CONTEXT (var))
3049 	  DECL_CONTEXT (var) = current_function_decl;
3050     }
3051 
3052   return NULL_TREE;
3053 }
3054 
3055 /* Set up to handle the initialization or destruction of DECL.  If
3056    INITP is nonzero, we are initializing the variable.  Otherwise, we
3057    are destroying it.  */
3058 
3059 static void
3060 one_static_initialization_or_destruction (tree decl, tree init, bool initp)
3061 {
3062   tree guard_if_stmt = NULL_TREE;
3063   tree guard;
3064 
3065   /* If we are supposed to destruct and there's a trivial destructor,
3066      nothing has to be done.  */
3067   if (!initp
3068       && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
3069     return;
3070 
3071   /* Trick the compiler into thinking we are at the file and line
3072      where DECL was declared so that error-messages make sense, and so
3073      that the debugger will show somewhat sensible file and line
3074      information.  */
3075   input_location = DECL_SOURCE_LOCATION (decl);
3076 
3077   /* Make sure temporary variables in the initialiser all have
3078      their DECL_CONTEXT() set to a value different from NULL_TREE.
3079      This can happen when global variables initialisers are built.
3080      In that case, the DECL_CONTEXT() of the global variables _AND_ of all
3081      the temporary variables that might have been generated in the
3082      accompagning initialisers is NULL_TREE, meaning the variables have been
3083      declared in the global namespace.
3084      What we want to do here is to fix that and make sure the DECL_CONTEXT()
3085      of the temporaries are set to the current function decl.  */
3086   cp_walk_tree_without_duplicates (&init,
3087 				   fix_temporary_vars_context_r,
3088 				   NULL);
3089 
3090   /* Because of:
3091 
3092        [class.access.spec]
3093 
3094        Access control for implicit calls to the constructors,
3095        the conversion functions, or the destructor called to
3096        create and destroy a static data member is performed as
3097        if these calls appeared in the scope of the member's
3098        class.
3099 
3100      we pretend we are in a static member function of the class of
3101      which the DECL is a member.  */
3102   if (member_p (decl))
3103     {
3104       DECL_CONTEXT (current_function_decl) = DECL_CONTEXT (decl);
3105       DECL_STATIC_FUNCTION_P (current_function_decl) = 1;
3106     }
3107 
3108   /* Assume we don't need a guard.  */
3109   guard = NULL_TREE;
3110   /* We need a guard if this is an object with external linkage that
3111      might be initialized in more than one place.  (For example, a
3112      static data member of a template, when the data member requires
3113      construction.)  */
3114   if (NEEDS_GUARD_P (decl))
3115     {
3116       tree guard_cond;
3117 
3118       guard = get_guard (decl);
3119 
3120       /* When using __cxa_atexit, we just check the GUARD as we would
3121 	 for a local static.  */
3122       if (flag_use_cxa_atexit)
3123 	{
3124 	  /* When using __cxa_atexit, we never try to destroy
3125 	     anything from a static destructor.  */
3126 	  gcc_assert (initp);
3127 	  guard_cond = get_guard_cond (guard);
3128 	}
3129       /* If we don't have __cxa_atexit, then we will be running
3130 	 destructors from .fini sections, or their equivalents.  So,
3131 	 we need to know how many times we've tried to initialize this
3132 	 object.  We do initializations only if the GUARD is zero,
3133 	 i.e., if we are the first to initialize the variable.  We do
3134 	 destructions only if the GUARD is one, i.e., if we are the
3135 	 last to destroy the variable.  */
3136       else if (initp)
3137 	guard_cond
3138 	  = cp_build_binary_op (input_location,
3139 				EQ_EXPR,
3140 				cp_build_unary_op (PREINCREMENT_EXPR,
3141 						   guard,
3142 						   /*noconvert=*/1,
3143 						   tf_warning_or_error),
3144 				integer_one_node,
3145 				tf_warning_or_error);
3146       else
3147 	guard_cond
3148 	  = cp_build_binary_op (input_location,
3149 				EQ_EXPR,
3150 				cp_build_unary_op (PREDECREMENT_EXPR,
3151 						   guard,
3152 						   /*noconvert=*/1,
3153 						   tf_warning_or_error),
3154 				integer_zero_node,
3155 				tf_warning_or_error);
3156 
3157       guard_if_stmt = begin_if_stmt ();
3158       finish_if_stmt_cond (guard_cond, guard_if_stmt);
3159     }
3160 
3161 
3162   /* If we're using __cxa_atexit, we have not already set the GUARD,
3163      so we must do so now.  */
3164   if (guard && initp && flag_use_cxa_atexit)
3165     finish_expr_stmt (set_guard (guard));
3166 
3167   /* Perform the initialization or destruction.  */
3168   if (initp)
3169     {
3170       if (init)
3171 	finish_expr_stmt (init);
3172 
3173       /* If we're using __cxa_atexit, register a function that calls the
3174 	 destructor for the object.  */
3175       if (flag_use_cxa_atexit)
3176 	finish_expr_stmt (register_dtor_fn (decl));
3177     }
3178   else
3179     finish_expr_stmt (build_cleanup (decl));
3180 
3181   /* Finish the guard if-stmt, if necessary.  */
3182   if (guard)
3183     {
3184       finish_then_clause (guard_if_stmt);
3185       finish_if_stmt (guard_if_stmt);
3186     }
3187 
3188   /* Now that we're done with DECL we don't need to pretend to be a
3189      member of its class any longer.  */
3190   DECL_CONTEXT (current_function_decl) = NULL_TREE;
3191   DECL_STATIC_FUNCTION_P (current_function_decl) = 0;
3192 }
3193 
3194 /* Generate code to do the initialization or destruction of the decls in VARS,
3195    a TREE_LIST of VAR_DECL with static storage duration.
3196    Whether initialization or destruction is performed is specified by INITP.  */
3197 
3198 static void
3199 do_static_initialization_or_destruction (tree vars, bool initp)
3200 {
3201   tree node, init_if_stmt, cond;
3202 
3203   /* Build the outer if-stmt to check for initialization or destruction.  */
3204   init_if_stmt = begin_if_stmt ();
3205   cond = initp ? integer_one_node : integer_zero_node;
3206   cond = cp_build_binary_op (input_location,
3207 			     EQ_EXPR,
3208 			     initialize_p_decl,
3209 			     cond,
3210 			     tf_warning_or_error);
3211   finish_if_stmt_cond (cond, init_if_stmt);
3212 
3213   node = vars;
3214   do {
3215     tree decl = TREE_VALUE (node);
3216     tree priority_if_stmt;
3217     int priority;
3218     priority_info pi;
3219 
3220     /* If we don't need a destructor, there's nothing to do.  Avoid
3221        creating a possibly empty if-stmt.  */
3222     if (!initp && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
3223       {
3224 	node = TREE_CHAIN (node);
3225 	continue;
3226       }
3227 
3228     /* Remember that we had an initialization or finalization at this
3229        priority.  */
3230     priority = DECL_EFFECTIVE_INIT_PRIORITY (decl);
3231     pi = get_priority_info (priority);
3232     if (initp)
3233       pi->initializations_p = 1;
3234     else
3235       pi->destructions_p = 1;
3236 
3237     /* Conditionalize this initialization on being in the right priority
3238        and being initializing/finalizing appropriately.  */
3239     priority_if_stmt = begin_if_stmt ();
3240     cond = cp_build_binary_op (input_location,
3241 			       EQ_EXPR,
3242 			       priority_decl,
3243 			       build_int_cst (NULL_TREE, priority),
3244 			       tf_warning_or_error);
3245     finish_if_stmt_cond (cond, priority_if_stmt);
3246 
3247     /* Process initializers with same priority.  */
3248     for (; node
3249 	   && DECL_EFFECTIVE_INIT_PRIORITY (TREE_VALUE (node)) == priority;
3250 	 node = TREE_CHAIN (node))
3251       /* Do one initialization or destruction.  */
3252       one_static_initialization_or_destruction (TREE_VALUE (node),
3253 						TREE_PURPOSE (node), initp);
3254 
3255     /* Finish up the priority if-stmt body.  */
3256     finish_then_clause (priority_if_stmt);
3257     finish_if_stmt (priority_if_stmt);
3258 
3259   } while (node);
3260 
3261   /* Finish up the init/destruct if-stmt body.  */
3262   finish_then_clause (init_if_stmt);
3263   finish_if_stmt (init_if_stmt);
3264 }
3265 
3266 /* VARS is a list of variables with static storage duration which may
3267    need initialization and/or finalization.  Remove those variables
3268    that don't really need to be initialized or finalized, and return
3269    the resulting list.  The order in which the variables appear in
3270    VARS is in reverse order of the order in which they should actually
3271    be initialized.  The list we return is in the unreversed order;
3272    i.e., the first variable should be initialized first.  */
3273 
3274 static tree
3275 prune_vars_needing_no_initialization (tree *vars)
3276 {
3277   tree *var = vars;
3278   tree result = NULL_TREE;
3279 
3280   while (*var)
3281     {
3282       tree t = *var;
3283       tree decl = TREE_VALUE (t);
3284       tree init = TREE_PURPOSE (t);
3285 
3286       /* Deal gracefully with error.  */
3287       if (decl == error_mark_node)
3288 	{
3289 	  var = &TREE_CHAIN (t);
3290 	  continue;
3291 	}
3292 
3293       /* The only things that can be initialized are variables.  */
3294       gcc_assert (TREE_CODE (decl) == VAR_DECL);
3295 
3296       /* If this object is not defined, we don't need to do anything
3297 	 here.  */
3298       if (DECL_EXTERNAL (decl))
3299 	{
3300 	  var = &TREE_CHAIN (t);
3301 	  continue;
3302 	}
3303 
3304       /* Also, if the initializer already contains errors, we can bail
3305 	 out now.  */
3306       if (init && TREE_CODE (init) == TREE_LIST
3307 	  && value_member (error_mark_node, init))
3308 	{
3309 	  var = &TREE_CHAIN (t);
3310 	  continue;
3311 	}
3312 
3313       /* This variable is going to need initialization and/or
3314 	 finalization, so we add it to the list.  */
3315       *var = TREE_CHAIN (t);
3316       TREE_CHAIN (t) = result;
3317       result = t;
3318     }
3319 
3320   return result;
3321 }
3322 
3323 /* Make sure we have told the back end about all the variables in
3324    VARS.  */
3325 
3326 static void
3327 write_out_vars (tree vars)
3328 {
3329   tree v;
3330 
3331   for (v = vars; v; v = TREE_CHAIN (v))
3332     {
3333       tree var = TREE_VALUE (v);
3334       if (!var_finalized_p (var))
3335 	{
3336 	  import_export_decl (var);
3337 	  rest_of_decl_compilation (var, 1, 1);
3338 	}
3339     }
3340 }
3341 
3342 /* Generate a static constructor (if CONSTRUCTOR_P) or destructor
3343    (otherwise) that will initialize all global objects with static
3344    storage duration having the indicated PRIORITY.  */
3345 
3346 static void
3347 generate_ctor_or_dtor_function (bool constructor_p, int priority,
3348 				location_t *locus)
3349 {
3350   char function_key;
3351   tree fndecl;
3352   tree body;
3353   size_t i;
3354 
3355   input_location = *locus;
3356   /* ??? */
3357   /* Was: locus->line++; */
3358 
3359   /* We use `I' to indicate initialization and `D' to indicate
3360      destruction.  */
3361   function_key = constructor_p ? 'I' : 'D';
3362 
3363   /* We emit the function lazily, to avoid generating empty
3364      global constructors and destructors.  */
3365   body = NULL_TREE;
3366 
3367   /* For Objective-C++, we may need to initialize metadata found in this module.
3368      This must be done _before_ any other static initializations.  */
3369   if (c_dialect_objc () && (priority == DEFAULT_INIT_PRIORITY)
3370       && constructor_p && objc_static_init_needed_p ())
3371     {
3372       body = start_objects (function_key, priority);
3373       objc_generate_static_init_call (NULL_TREE);
3374     }
3375 
3376   /* Call the static storage duration function with appropriate
3377      arguments.  */
3378   FOR_EACH_VEC_ELT (tree, ssdf_decls, i, fndecl)
3379     {
3380       /* Calls to pure or const functions will expand to nothing.  */
3381       if (! (flags_from_decl_or_type (fndecl) & (ECF_CONST | ECF_PURE)))
3382 	{
3383 	  tree call;
3384 
3385 	  if (! body)
3386 	    body = start_objects (function_key, priority);
3387 
3388 	  call = cp_build_function_call_nary (fndecl, tf_warning_or_error,
3389 					      build_int_cst (NULL_TREE,
3390 							     constructor_p),
3391 					      build_int_cst (NULL_TREE,
3392 							     priority),
3393 					      NULL_TREE);
3394 	  finish_expr_stmt (call);
3395 	}
3396     }
3397 
3398   /* Close out the function.  */
3399   if (body)
3400     finish_objects (function_key, priority, body);
3401 }
3402 
3403 /* Generate constructor and destructor functions for the priority
3404    indicated by N.  */
3405 
3406 static int
3407 generate_ctor_and_dtor_functions_for_priority (splay_tree_node n, void * data)
3408 {
3409   location_t *locus = (location_t *) data;
3410   int priority = (int) n->key;
3411   priority_info pi = (priority_info) n->value;
3412 
3413   /* Generate the functions themselves, but only if they are really
3414      needed.  */
3415   if (pi->initializations_p)
3416     generate_ctor_or_dtor_function (/*constructor_p=*/true, priority, locus);
3417   if (pi->destructions_p)
3418     generate_ctor_or_dtor_function (/*constructor_p=*/false, priority, locus);
3419 
3420   /* Keep iterating.  */
3421   return 0;
3422 }
3423 
3424 /* Called via LANGHOOK_CALLGRAPH_ANALYZE_EXPR.  It is supposed to mark
3425    decls referenced from front-end specific constructs; it will be called
3426    only for language-specific tree nodes.
3427 
3428    Here we must deal with member pointers.  */
3429 
3430 tree
3431 cxx_callgraph_analyze_expr (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED)
3432 {
3433   tree t = *tp;
3434 
3435   switch (TREE_CODE (t))
3436     {
3437     case PTRMEM_CST:
3438       if (TYPE_PTRMEMFUNC_P (TREE_TYPE (t)))
3439 	cgraph_mark_address_taken_node (
3440 			      cgraph_get_create_node (PTRMEM_CST_MEMBER (t)));
3441       break;
3442     case BASELINK:
3443       if (TREE_CODE (BASELINK_FUNCTIONS (t)) == FUNCTION_DECL)
3444 	cgraph_mark_address_taken_node (
3445 			      cgraph_get_create_node (BASELINK_FUNCTIONS (t)));
3446       break;
3447     case VAR_DECL:
3448       if (DECL_CONTEXT (t)
3449 	  && flag_use_repository
3450 	  && TREE_CODE (DECL_CONTEXT (t)) == FUNCTION_DECL)
3451 	/* If we need a static variable in a function, then we
3452 	   need the containing function.  */
3453 	mark_decl_referenced (DECL_CONTEXT (t));
3454       break;
3455     default:
3456       break;
3457     }
3458 
3459   return NULL;
3460 }
3461 
3462 /* Java requires that we be able to reference a local address for a
3463    method, and not be confused by PLT entries.  If hidden aliases are
3464    supported, collect and return all the functions for which we should
3465    emit a hidden alias.  */
3466 
3467 static struct pointer_set_t *
3468 collect_candidates_for_java_method_aliases (void)
3469 {
3470   struct cgraph_node *node;
3471   struct pointer_set_t *candidates = NULL;
3472 
3473 #ifndef HAVE_GAS_HIDDEN
3474   return candidates;
3475 #endif
3476 
3477   for (node = cgraph_nodes; node ; node = node->next)
3478     {
3479       tree fndecl = node->decl;
3480 
3481       if (DECL_CONTEXT (fndecl)
3482 	  && TYPE_P (DECL_CONTEXT (fndecl))
3483 	  && TYPE_FOR_JAVA (DECL_CONTEXT (fndecl))
3484 	  && TARGET_USE_LOCAL_THUNK_ALIAS_P (fndecl))
3485 	{
3486 	  if (candidates == NULL)
3487 	    candidates = pointer_set_create ();
3488 	  pointer_set_insert (candidates, fndecl);
3489 	}
3490     }
3491 
3492   return candidates;
3493 }
3494 
3495 
3496 /* Java requires that we be able to reference a local address for a
3497    method, and not be confused by PLT entries.  If hidden aliases are
3498    supported, emit one for each java function that we've emitted.
3499    CANDIDATES is the set of FUNCTION_DECLs that were gathered
3500    by collect_candidates_for_java_method_aliases.  */
3501 
3502 static void
3503 build_java_method_aliases (struct pointer_set_t *candidates)
3504 {
3505   struct cgraph_node *node;
3506 
3507 #ifndef HAVE_GAS_HIDDEN
3508   return;
3509 #endif
3510 
3511   for (node = cgraph_nodes; node ; node = node->next)
3512     {
3513       tree fndecl = node->decl;
3514 
3515       if (TREE_ASM_WRITTEN (fndecl)
3516 	  && pointer_set_contains (candidates, fndecl))
3517 	{
3518 	  /* Mangle the name in a predictable way; we need to reference
3519 	     this from a java compiled object file.  */
3520 	  tree oid, nid, alias;
3521 	  const char *oname;
3522 	  char *nname;
3523 
3524 	  oid = DECL_ASSEMBLER_NAME (fndecl);
3525 	  oname = IDENTIFIER_POINTER (oid);
3526 	  gcc_assert (oname[0] == '_' && oname[1] == 'Z');
3527 	  nname = ACONCAT (("_ZGA", oname+2, NULL));
3528 	  nid = get_identifier (nname);
3529 
3530 	  alias = make_alias_for (fndecl, nid);
3531 	  TREE_PUBLIC (alias) = 1;
3532 	  DECL_VISIBILITY (alias) = VISIBILITY_HIDDEN;
3533 
3534 	  assemble_alias (alias, oid);
3535 	}
3536     }
3537 }
3538 
3539 /* Return C++ property of T, based on given operation OP.  */
3540 
3541 static int
3542 cpp_check (tree t, cpp_operation op)
3543 {
3544   switch (op)
3545     {
3546       case IS_ABSTRACT:
3547 	return DECL_PURE_VIRTUAL_P (t);
3548       case IS_CONSTRUCTOR:
3549 	return DECL_CONSTRUCTOR_P (t);
3550       case IS_DESTRUCTOR:
3551 	return DECL_DESTRUCTOR_P (t);
3552       case IS_COPY_CONSTRUCTOR:
3553 	return DECL_COPY_CONSTRUCTOR_P (t);
3554       case IS_TEMPLATE:
3555 	return TREE_CODE (t) == TEMPLATE_DECL;
3556       default:
3557         return 0;
3558     }
3559 }
3560 
3561 /* Collect source file references recursively, starting from NAMESPC.  */
3562 
3563 static void
3564 collect_source_refs (tree namespc)
3565 {
3566   tree t;
3567 
3568   if (!namespc)
3569     return;
3570 
3571   /* Iterate over names in this name space.  */
3572   for (t = NAMESPACE_LEVEL (namespc)->names; t; t = TREE_CHAIN (t))
3573     if (!DECL_IS_BUILTIN (t) )
3574       collect_source_ref (DECL_SOURCE_FILE (t));
3575 
3576   /* Dump siblings, if any */
3577   collect_source_refs (TREE_CHAIN (namespc));
3578 
3579   /* Dump children, if any */
3580   collect_source_refs (NAMESPACE_LEVEL (namespc)->namespaces);
3581 }
3582 
3583 /* Collect decls relevant to SOURCE_FILE from all namespaces recursively,
3584    starting from NAMESPC.  */
3585 
3586 static void
3587 collect_ada_namespace (tree namespc, const char *source_file)
3588 {
3589   if (!namespc)
3590     return;
3591 
3592   /* Collect decls from this namespace */
3593   collect_ada_nodes (NAMESPACE_LEVEL (namespc)->names, source_file);
3594 
3595   /* Collect siblings, if any */
3596   collect_ada_namespace (TREE_CHAIN (namespc), source_file);
3597 
3598   /* Collect children, if any */
3599   collect_ada_namespace (NAMESPACE_LEVEL (namespc)->namespaces, source_file);
3600 }
3601 
3602 /* Returns true iff there is a definition available for variable or
3603    function DECL.  */
3604 
3605 static bool
3606 decl_defined_p (tree decl)
3607 {
3608   if (TREE_CODE (decl) == FUNCTION_DECL)
3609     return (DECL_INITIAL (decl) != NULL_TREE);
3610   else
3611     {
3612       gcc_assert (TREE_CODE (decl) == VAR_DECL);
3613       return !DECL_EXTERNAL (decl);
3614     }
3615 }
3616 
3617 /* Nonzero for a VAR_DECL whose value can be used in a constant expression.
3618 
3619       [expr.const]
3620 
3621       An integral constant-expression can only involve ... const
3622       variables of integral or enumeration types initialized with
3623       constant expressions ...
3624 
3625       C++0x also allows constexpr variables and temporaries initialized
3626       with constant expressions.  We handle the former here, but the latter
3627       are just folded away in cxx_eval_constant_expression.
3628 
3629    The standard does not require that the expression be non-volatile.
3630    G++ implements the proposed correction in DR 457.  */
3631 
3632 bool
3633 decl_constant_var_p (tree decl)
3634 {
3635   if (!decl_maybe_constant_var_p (decl))
3636     return false;
3637 
3638   /* We don't know if a template static data member is initialized with
3639      a constant expression until we instantiate its initializer.  Even
3640      in the case of a constexpr variable, we can't treat it as a
3641      constant until its initializer is complete in case it's used in
3642      its own initializer.  */
3643   mark_used (decl);
3644   return DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl);
3645 }
3646 
3647 /* Returns true if DECL could be a symbolic constant variable, depending on
3648    its initializer.  */
3649 
3650 bool
3651 decl_maybe_constant_var_p (tree decl)
3652 {
3653   tree type = TREE_TYPE (decl);
3654   if (TREE_CODE (decl) != VAR_DECL)
3655     return false;
3656   if (DECL_DECLARED_CONSTEXPR_P (decl))
3657     return true;
3658   return (CP_TYPE_CONST_NON_VOLATILE_P (type)
3659 	  && INTEGRAL_OR_ENUMERATION_TYPE_P (type));
3660 }
3661 
3662 /* Complain that DECL uses a type with no linkage but is never defined.  */
3663 
3664 static void
3665 no_linkage_error (tree decl)
3666 {
3667   tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
3668   if (TYPE_ANONYMOUS_P (t))
3669     {
3670       permerror (0, "%q+#D, declared using anonymous type, "
3671 		 "is used but never defined", decl);
3672       if (is_typedef_decl (TYPE_NAME (t)))
3673 	permerror (0, "%q+#D does not refer to the unqualified type, "
3674 		   "so it is not used for linkage", TYPE_NAME (t));
3675     }
3676   else
3677     permerror (0, "%q+#D, declared using local type %qT, "
3678 	       "is used but never defined", decl, t);
3679 }
3680 
3681 /* Collect declarations from all namespaces relevant to SOURCE_FILE.  */
3682 
3683 static void
3684 collect_all_refs (const char *source_file)
3685 {
3686   collect_ada_namespace (global_namespace, source_file);
3687 }
3688 
3689 /* Clear DECL_EXTERNAL for NODE.  */
3690 
3691 static bool
3692 clear_decl_external (struct cgraph_node *node, void *data ATTRIBUTE_UNUSED)
3693 {
3694   DECL_EXTERNAL (node->decl) = 0;
3695   return false;
3696 }
3697 
3698 /* This routine is called at the end of compilation.
3699    Its job is to create all the code needed to initialize and
3700    destroy the global aggregates.  We do the destruction
3701    first, since that way we only need to reverse the decls once.  */
3702 
3703 void
3704 cp_write_global_declarations (void)
3705 {
3706   tree vars;
3707   bool reconsider;
3708   size_t i;
3709   location_t locus;
3710   unsigned ssdf_count = 0;
3711   int retries = 0;
3712   tree decl;
3713   struct pointer_set_t *candidates;
3714 
3715   locus = input_location;
3716   at_eof = 1;
3717 
3718   /* Bad parse errors.  Just forget about it.  */
3719   if (! global_bindings_p () || current_class_type
3720       || !VEC_empty (tree,decl_namespace_list))
3721     return;
3722 
3723   if (pch_file)
3724     c_common_write_pch ();
3725 
3726   cgraph_process_same_body_aliases ();
3727 
3728   /* Handle -fdump-ada-spec[-slim] */
3729   if (dump_enabled_p (TDI_ada))
3730     {
3731       if (get_dump_file_info (TDI_ada)->flags & TDF_SLIM)
3732 	collect_source_ref (main_input_filename);
3733       else
3734 	collect_source_refs (global_namespace);
3735 
3736       dump_ada_specs (collect_all_refs, cpp_check);
3737     }
3738 
3739   /* FIXME - huh?  was  input_line -= 1;*/
3740 
3741   timevar_start (TV_PHASE_DEFERRED);
3742 
3743   /* We now have to write out all the stuff we put off writing out.
3744      These include:
3745 
3746        o Template specializations that we have not yet instantiated,
3747 	 but which are needed.
3748        o Initialization and destruction for non-local objects with
3749 	 static storage duration.  (Local objects with static storage
3750 	 duration are initialized when their scope is first entered,
3751 	 and are cleaned up via atexit.)
3752        o Virtual function tables.
3753 
3754      All of these may cause others to be needed.  For example,
3755      instantiating one function may cause another to be needed, and
3756      generating the initializer for an object may cause templates to be
3757      instantiated, etc., etc.  */
3758 
3759   emit_support_tinfos ();
3760 
3761   do
3762     {
3763       tree t;
3764       tree decl;
3765 
3766       reconsider = false;
3767 
3768       /* If there are templates that we've put off instantiating, do
3769 	 them now.  */
3770       instantiate_pending_templates (retries);
3771       ggc_collect ();
3772 
3773       /* Write out virtual tables as required.  Note that writing out
3774 	 the virtual table for a template class may cause the
3775 	 instantiation of members of that class.  If we write out
3776 	 vtables then we remove the class from our list so we don't
3777 	 have to look at it again.  */
3778 
3779       while (keyed_classes != NULL_TREE
3780 	     && maybe_emit_vtables (TREE_VALUE (keyed_classes)))
3781 	{
3782 	  reconsider = true;
3783 	  keyed_classes = TREE_CHAIN (keyed_classes);
3784 	}
3785 
3786       t = keyed_classes;
3787       if (t != NULL_TREE)
3788 	{
3789 	  tree next = TREE_CHAIN (t);
3790 
3791 	  while (next)
3792 	    {
3793 	      if (maybe_emit_vtables (TREE_VALUE (next)))
3794 		{
3795 		  reconsider = true;
3796 		  TREE_CHAIN (t) = TREE_CHAIN (next);
3797 		}
3798 	      else
3799 		t = next;
3800 
3801 	      next = TREE_CHAIN (t);
3802 	    }
3803 	}
3804 
3805       /* Write out needed type info variables.  We have to be careful
3806 	 looping through unemitted decls, because emit_tinfo_decl may
3807 	 cause other variables to be needed. New elements will be
3808 	 appended, and we remove from the vector those that actually
3809 	 get emitted.  */
3810       for (i = VEC_length (tree, unemitted_tinfo_decls);
3811 	   VEC_iterate (tree, unemitted_tinfo_decls, --i, t);)
3812 	if (emit_tinfo_decl (t))
3813 	  {
3814 	    reconsider = true;
3815 	    VEC_unordered_remove (tree, unemitted_tinfo_decls, i);
3816 	  }
3817 
3818       /* The list of objects with static storage duration is built up
3819 	 in reverse order.  We clear STATIC_AGGREGATES so that any new
3820 	 aggregates added during the initialization of these will be
3821 	 initialized in the correct order when we next come around the
3822 	 loop.  */
3823       vars = prune_vars_needing_no_initialization (&static_aggregates);
3824 
3825       if (vars)
3826 	{
3827 	  /* We need to start a new initialization function each time
3828 	     through the loop.  That's because we need to know which
3829 	     vtables have been referenced, and TREE_SYMBOL_REFERENCED
3830 	     isn't computed until a function is finished, and written
3831 	     out.  That's a deficiency in the back end.  When this is
3832 	     fixed, these initialization functions could all become
3833 	     inline, with resulting performance improvements.  */
3834 	  tree ssdf_body;
3835 
3836 	  /* Set the line and file, so that it is obviously not from
3837 	     the source file.  */
3838 	  input_location = locus;
3839 	  ssdf_body = start_static_storage_duration_function (ssdf_count);
3840 
3841 	  /* Make sure the back end knows about all the variables.  */
3842 	  write_out_vars (vars);
3843 
3844 	  /* First generate code to do all the initializations.  */
3845 	  if (vars)
3846 	    do_static_initialization_or_destruction (vars, /*initp=*/true);
3847 
3848 	  /* Then, generate code to do all the destructions.  Do these
3849 	     in reverse order so that the most recently constructed
3850 	     variable is the first destroyed.  If we're using
3851 	     __cxa_atexit, then we don't need to do this; functions
3852 	     were registered at initialization time to destroy the
3853 	     local statics.  */
3854 	  if (!flag_use_cxa_atexit && vars)
3855 	    {
3856 	      vars = nreverse (vars);
3857 	      do_static_initialization_or_destruction (vars, /*initp=*/false);
3858 	    }
3859 	  else
3860 	    vars = NULL_TREE;
3861 
3862 	  /* Finish up the static storage duration function for this
3863 	     round.  */
3864 	  input_location = locus;
3865 	  finish_static_storage_duration_function (ssdf_body);
3866 
3867 	  /* All those initializations and finalizations might cause
3868 	     us to need more inline functions, more template
3869 	     instantiations, etc.  */
3870 	  reconsider = true;
3871 	  ssdf_count++;
3872 	  /* ??? was:  locus.line++; */
3873 	}
3874 
3875       /* Go through the set of inline functions whose bodies have not
3876 	 been emitted yet.  If out-of-line copies of these functions
3877 	 are required, emit them.  */
3878       FOR_EACH_VEC_ELT (tree, deferred_fns, i, decl)
3879 	{
3880 	  /* Does it need synthesizing?  */
3881 	  if (DECL_DEFAULTED_FN (decl) && ! DECL_INITIAL (decl)
3882 	      && (! DECL_REALLY_EXTERN (decl) || possibly_inlined_p (decl)))
3883 	    {
3884 	      /* Even though we're already at the top-level, we push
3885 		 there again.  That way, when we pop back a few lines
3886 		 hence, all of our state is restored.  Otherwise,
3887 		 finish_function doesn't clean things up, and we end
3888 		 up with CURRENT_FUNCTION_DECL set.  */
3889 	      push_to_top_level ();
3890 	      /* The decl's location will mark where it was first
3891 		 needed.  Save that so synthesize method can indicate
3892 		 where it was needed from, in case of error  */
3893 	      input_location = DECL_SOURCE_LOCATION (decl);
3894 	      synthesize_method (decl);
3895 	      pop_from_top_level ();
3896 	      reconsider = true;
3897 	    }
3898 
3899 	  if (!DECL_SAVED_TREE (decl))
3900 	    continue;
3901 
3902 	  /* We lie to the back end, pretending that some functions
3903 	     are not defined when they really are.  This keeps these
3904 	     functions from being put out unnecessarily.  But, we must
3905 	     stop lying when the functions are referenced, or if they
3906 	     are not comdat since they need to be put out now.  If
3907 	     DECL_INTERFACE_KNOWN, then we have already set
3908 	     DECL_EXTERNAL appropriately, so there's no need to check
3909 	     again, and we do not want to clear DECL_EXTERNAL if a
3910 	     previous call to import_export_decl set it.
3911 
3912 	     This is done in a separate for cycle, because if some
3913 	     deferred function is contained in another deferred
3914 	     function later in deferred_fns varray,
3915 	     rest_of_compilation would skip this function and we
3916 	     really cannot expand the same function twice.  */
3917 	  import_export_decl (decl);
3918 	  if (DECL_NOT_REALLY_EXTERN (decl)
3919 	      && DECL_INITIAL (decl)
3920 	      && decl_needed_p (decl))
3921 	    {
3922 	      struct cgraph_node *node, *next;
3923 
3924 	      node = cgraph_get_node (decl);
3925 	      if (node->same_body_alias)
3926 		node = cgraph_alias_aliased_node (node);
3927 
3928 	      cgraph_for_node_and_aliases (node, clear_decl_external,
3929 					   NULL, true);
3930 	      /* If we mark !DECL_EXTERNAL one of the symbols in some comdat
3931 		 group, we need to mark all symbols in the same comdat group
3932 		 that way.  */
3933 	      if (node->same_comdat_group)
3934 		for (next = node->same_comdat_group;
3935 		     next != node;
3936 		     next = next->same_comdat_group)
3937 	          cgraph_for_node_and_aliases (next, clear_decl_external,
3938 					       NULL, true);
3939 	    }
3940 
3941 	  /* If we're going to need to write this function out, and
3942 	     there's already a body for it, create RTL for it now.
3943 	     (There might be no body if this is a method we haven't
3944 	     gotten around to synthesizing yet.)  */
3945 	  if (!DECL_EXTERNAL (decl)
3946 	      && decl_needed_p (decl)
3947 	      && !TREE_ASM_WRITTEN (decl)
3948 	      && !cgraph_get_node (decl)->local.finalized)
3949 	    {
3950 	      /* We will output the function; no longer consider it in this
3951 		 loop.  */
3952 	      DECL_DEFER_OUTPUT (decl) = 0;
3953 	      /* Generate RTL for this function now that we know we
3954 		 need it.  */
3955 	      expand_or_defer_fn (decl);
3956 	      /* If we're compiling -fsyntax-only pretend that this
3957 		 function has been written out so that we don't try to
3958 		 expand it again.  */
3959 	      if (flag_syntax_only)
3960 		TREE_ASM_WRITTEN (decl) = 1;
3961 	      reconsider = true;
3962 	    }
3963 	}
3964 
3965       if (walk_namespaces (wrapup_globals_for_namespace, /*data=*/0))
3966 	reconsider = true;
3967 
3968       /* Static data members are just like namespace-scope globals.  */
3969       FOR_EACH_VEC_ELT (tree, pending_statics, i, decl)
3970 	{
3971 	  if (var_finalized_p (decl) || DECL_REALLY_EXTERN (decl)
3972 	      /* Don't write it out if we haven't seen a definition.  */
3973 	      || DECL_IN_AGGR_P (decl))
3974 	    continue;
3975 	  import_export_decl (decl);
3976 	  /* If this static data member is needed, provide it to the
3977 	     back end.  */
3978 	  if (DECL_NOT_REALLY_EXTERN (decl) && decl_needed_p (decl))
3979 	    DECL_EXTERNAL (decl) = 0;
3980 	}
3981       if (VEC_length (tree, pending_statics) != 0
3982 	  && wrapup_global_declarations (VEC_address (tree, pending_statics),
3983 					 VEC_length (tree, pending_statics)))
3984 	reconsider = true;
3985 
3986       retries++;
3987     }
3988   while (reconsider);
3989 
3990   /* All used inline functions must have a definition at this point.  */
3991   FOR_EACH_VEC_ELT (tree, deferred_fns, i, decl)
3992     {
3993       if (/* Check online inline functions that were actually used.  */
3994 	  DECL_ODR_USED (decl) && DECL_DECLARED_INLINE_P (decl)
3995 	  /* If the definition actually was available here, then the
3996 	     fact that the function was not defined merely represents
3997 	     that for some reason (use of a template repository,
3998 	     #pragma interface, etc.) we decided not to emit the
3999 	     definition here.  */
4000 	  && !DECL_INITIAL (decl)
4001 	  /* Don't complain if the template was defined.  */
4002 	  && !(DECL_TEMPLATE_INSTANTIATION (decl)
4003 	       && DECL_INITIAL (DECL_TEMPLATE_RESULT
4004 				(template_for_substitution (decl)))))
4005 	{
4006 	  warning (0, "inline function %q+D used but never defined", decl);
4007 	  /* Avoid a duplicate warning from check_global_declaration_1.  */
4008 	  TREE_NO_WARNING (decl) = 1;
4009 	}
4010     }
4011 
4012   /* So must decls that use a type with no linkage.  */
4013   FOR_EACH_VEC_ELT (tree, no_linkage_decls, i, decl)
4014     if (!decl_defined_p (decl))
4015       no_linkage_error (decl);
4016 
4017   /* Then, do the Objective-C stuff.  This is where all the
4018      Objective-C module stuff gets generated (symtab,
4019      class/protocol/selector lists etc).  This must be done after C++
4020      templates, destructors etc. so that selectors used in C++
4021      templates are properly allocated.  */
4022   if (c_dialect_objc ())
4023     objc_write_global_declarations ();
4024 
4025   /* We give C linkage to static constructors and destructors.  */
4026   push_lang_context (lang_name_c);
4027 
4028   /* Generate initialization and destruction functions for all
4029      priorities for which they are required.  */
4030   if (priority_info_map)
4031     splay_tree_foreach (priority_info_map,
4032 			generate_ctor_and_dtor_functions_for_priority,
4033 			/*data=*/&locus);
4034   else if (c_dialect_objc () && objc_static_init_needed_p ())
4035     /* If this is obj-c++ and we need a static init, call
4036        generate_ctor_or_dtor_function.  */
4037     generate_ctor_or_dtor_function (/*constructor_p=*/true,
4038 				    DEFAULT_INIT_PRIORITY, &locus);
4039 
4040   /* We're done with the splay-tree now.  */
4041   if (priority_info_map)
4042     splay_tree_delete (priority_info_map);
4043 
4044   /* Generate any missing aliases.  */
4045   maybe_apply_pending_pragma_weaks ();
4046 
4047   /* We're done with static constructors, so we can go back to "C++"
4048      linkage now.  */
4049   pop_lang_context ();
4050 
4051   /* Collect candidates for Java hidden aliases.  */
4052   candidates = collect_candidates_for_java_method_aliases ();
4053 
4054   timevar_stop (TV_PHASE_DEFERRED);
4055   timevar_start (TV_PHASE_CGRAPH);
4056 
4057   cgraph_finalize_compilation_unit ();
4058 
4059   timevar_stop (TV_PHASE_CGRAPH);
4060   timevar_start (TV_PHASE_CHECK_DBGINFO);
4061 
4062   /* Now, issue warnings about static, but not defined, functions,
4063      etc., and emit debugging information.  */
4064   walk_namespaces (wrapup_globals_for_namespace, /*data=*/&reconsider);
4065   if (VEC_length (tree, pending_statics) != 0)
4066     {
4067       check_global_declarations (VEC_address (tree, pending_statics),
4068 				 VEC_length (tree, pending_statics));
4069       emit_debug_global_declarations (VEC_address (tree, pending_statics),
4070 				      VEC_length (tree, pending_statics));
4071     }
4072 
4073   perform_deferred_noexcept_checks ();
4074 
4075   /* Generate hidden aliases for Java.  */
4076   if (candidates)
4077     {
4078       build_java_method_aliases (candidates);
4079       pointer_set_destroy (candidates);
4080     }
4081 
4082   finish_repo ();
4083 
4084   /* The entire file is now complete.  If requested, dump everything
4085      to a file.  */
4086   {
4087     int flags;
4088     FILE *stream = dump_begin (TDI_tu, &flags);
4089 
4090     if (stream)
4091       {
4092 	dump_node (global_namespace, flags & ~TDF_SLIM, stream);
4093 	dump_end (TDI_tu, stream);
4094       }
4095   }
4096 
4097   if (flag_detailed_statistics)
4098     {
4099       dump_tree_statistics ();
4100       dump_time_statistics ();
4101     }
4102   input_location = locus;
4103 
4104 #ifdef ENABLE_CHECKING
4105   validate_conversion_obstack ();
4106 #endif /* ENABLE_CHECKING */
4107 
4108   timevar_stop (TV_PHASE_CHECK_DBGINFO);
4109 }
4110 
4111 /* FN is an OFFSET_REF, DOTSTAR_EXPR or MEMBER_REF indicating the
4112    function to call in parse-tree form; it has not yet been
4113    semantically analyzed.  ARGS are the arguments to the function.
4114    They have already been semantically analyzed.  This may change
4115    ARGS.  */
4116 
4117 tree
4118 build_offset_ref_call_from_tree (tree fn, VEC(tree,gc) **args)
4119 {
4120   tree orig_fn;
4121   VEC(tree,gc) *orig_args = NULL;
4122   tree expr;
4123   tree object;
4124 
4125   orig_fn = fn;
4126   object = TREE_OPERAND (fn, 0);
4127 
4128   if (processing_template_decl)
4129     {
4130       gcc_assert (TREE_CODE (fn) == DOTSTAR_EXPR
4131 		  || TREE_CODE (fn) == MEMBER_REF);
4132       if (type_dependent_expression_p (fn)
4133 	  || any_type_dependent_arguments_p (*args))
4134 	return build_nt_call_vec (fn, *args);
4135 
4136       orig_args = make_tree_vector_copy (*args);
4137 
4138       /* Transform the arguments and add the implicit "this"
4139 	 parameter.  That must be done before the FN is transformed
4140 	 because we depend on the form of FN.  */
4141       make_args_non_dependent (*args);
4142       object = build_non_dependent_expr (object);
4143       if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
4144 	{
4145 	  if (TREE_CODE (fn) == DOTSTAR_EXPR)
4146 	    object = cp_build_addr_expr (object, tf_warning_or_error);
4147 	  VEC_safe_insert (tree, gc, *args, 0, object);
4148 	}
4149       /* Now that the arguments are done, transform FN.  */
4150       fn = build_non_dependent_expr (fn);
4151     }
4152 
4153   /* A qualified name corresponding to a bound pointer-to-member is
4154      represented as an OFFSET_REF:
4155 
4156 	struct B { void g(); };
4157 	void (B::*p)();
4158 	void B::g() { (this->*p)(); }  */
4159   if (TREE_CODE (fn) == OFFSET_REF)
4160     {
4161       tree object_addr = cp_build_addr_expr (object, tf_warning_or_error);
4162       fn = TREE_OPERAND (fn, 1);
4163       fn = get_member_function_from_ptrfunc (&object_addr, fn);
4164       VEC_safe_insert (tree, gc, *args, 0, object_addr);
4165     }
4166 
4167   if (CLASS_TYPE_P (TREE_TYPE (fn)))
4168     expr = build_op_call (fn, args, tf_warning_or_error);
4169   else
4170     expr = cp_build_function_call_vec (fn, args, tf_warning_or_error);
4171   if (processing_template_decl && expr != error_mark_node)
4172     expr = build_min_non_dep_call_vec (expr, orig_fn, orig_args);
4173 
4174   if (orig_args != NULL)
4175     release_tree_vector (orig_args);
4176 
4177   return expr;
4178 }
4179 
4180 
4181 void
4182 check_default_args (tree x)
4183 {
4184   tree arg = TYPE_ARG_TYPES (TREE_TYPE (x));
4185   bool saw_def = false;
4186   int i = 0 - (TREE_CODE (TREE_TYPE (x)) == METHOD_TYPE);
4187   for (; arg && arg != void_list_node; arg = TREE_CHAIN (arg), ++i)
4188     {
4189       if (TREE_PURPOSE (arg))
4190 	saw_def = true;
4191       else if (saw_def)
4192 	{
4193 	  error ("default argument missing for parameter %P of %q+#D", i, x);
4194 	  TREE_PURPOSE (arg) = error_mark_node;
4195 	}
4196     }
4197 }
4198 
4199 /* Return true if function DECL can be inlined.  This is used to force
4200    instantiation of methods that might be interesting for inlining.  */
4201 bool
4202 possibly_inlined_p (tree decl)
4203 {
4204   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
4205   if (DECL_UNINLINABLE (decl))
4206     return false;
4207   if (!optimize || pragma_java_exceptions)
4208     return DECL_DECLARED_INLINE_P (decl);
4209   /* When optimizing, we might inline everything when flatten
4210      attribute or heuristics inlining for size or autoinlining
4211      is used.  */
4212   return true;
4213 }
4214 
4215 /* Mark DECL (either a _DECL or a BASELINK) as "used" in the program.
4216    If DECL is a specialization or implicitly declared class member,
4217    generate the actual definition.  Return false if something goes
4218    wrong, true otherwise.  */
4219 
4220 bool
4221 mark_used (tree decl)
4222 {
4223   /* If DECL is a BASELINK for a single function, then treat it just
4224      like the DECL for the function.  Otherwise, if the BASELINK is
4225      for an overloaded function, we don't know which function was
4226      actually used until after overload resolution.  */
4227   if (BASELINK_P (decl))
4228     {
4229       decl = BASELINK_FUNCTIONS (decl);
4230       if (really_overloaded_fn (decl))
4231 	return true;
4232       decl = OVL_CURRENT (decl);
4233     }
4234 
4235   /* Set TREE_USED for the benefit of -Wunused.  */
4236   TREE_USED (decl) = 1;
4237   if (DECL_CLONED_FUNCTION_P (decl))
4238     TREE_USED (DECL_CLONED_FUNCTION (decl)) = 1;
4239 
4240   if (TREE_CODE (decl) == FUNCTION_DECL
4241       && DECL_DELETED_FN (decl))
4242     {
4243       if (DECL_ARTIFICIAL (decl))
4244 	{
4245 	  if (DECL_OVERLOADED_OPERATOR_P (decl) == TYPE_EXPR
4246 	      && LAMBDA_TYPE_P (DECL_CONTEXT (decl)))
4247 	    {
4248 	      /* We mark a lambda conversion op as deleted if we can't
4249 		 generate it properly; see maybe_add_lambda_conv_op.  */
4250 	      sorry ("converting lambda which uses %<...%> to "
4251 		     "function pointer");
4252 	      return false;
4253 	    }
4254 	}
4255       error ("use of deleted function %qD", decl);
4256       if (!maybe_explain_implicit_delete (decl))
4257 	error_at (DECL_SOURCE_LOCATION (decl), "declared here");
4258       return false;
4259     }
4260 
4261   /* We can only check DECL_ODR_USED on variables or functions with
4262      DECL_LANG_SPECIFIC set, and these are also the only decls that we
4263      might need special handling for.  */
4264   if ((TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != FUNCTION_DECL)
4265       || DECL_LANG_SPECIFIC (decl) == NULL
4266       || DECL_THUNK_P (decl))
4267     return true;
4268 
4269   /* We only want to do this processing once.  We don't need to keep trying
4270      to instantiate inline templates, because unit-at-a-time will make sure
4271      we get them compiled before functions that want to inline them.  */
4272   if (DECL_ODR_USED (decl))
4273     return true;
4274 
4275   /* If within finish_function, defer the rest until that function
4276      finishes, otherwise it might recurse.  */
4277   if (defer_mark_used_calls)
4278     {
4279       VEC_safe_push (tree, gc, deferred_mark_used_calls, decl);
4280       return true;
4281     }
4282 
4283   if (TREE_CODE (decl) == FUNCTION_DECL)
4284     maybe_instantiate_noexcept (decl);
4285 
4286   /* Normally, we can wait until instantiation-time to synthesize DECL.
4287      However, if DECL is a static data member initialized with a constant
4288      or a constexpr function, we need it right now because a reference to
4289      such a data member or a call to such function is not value-dependent.  */
4290   if ((decl_maybe_constant_var_p (decl)
4291        || (TREE_CODE (decl) == FUNCTION_DECL
4292 	   && DECL_DECLARED_CONSTEXPR_P (decl)))
4293       && DECL_LANG_SPECIFIC (decl)
4294       && DECL_TEMPLATE_INFO (decl)
4295       && !uses_template_parms (DECL_TI_ARGS (decl)))
4296     {
4297       /* Instantiating a function will result in garbage collection.  We
4298 	 must treat this situation as if we were within the body of a
4299 	 function so as to avoid collecting live data only referenced from
4300 	 the stack (such as overload resolution candidates).  */
4301       ++function_depth;
4302       instantiate_decl (decl, /*defer_ok=*/false,
4303 			/*expl_inst_class_mem_p=*/false);
4304       --function_depth;
4305     }
4306 
4307   /* If we don't need a value, then we don't need to synthesize DECL.  */
4308   if (cp_unevaluated_operand != 0)
4309     return true;
4310 
4311   if (processing_template_decl)
4312     return true;
4313 
4314   /* Check this too in case we're within fold_non_dependent_expr.  */
4315   if (DECL_TEMPLATE_INFO (decl)
4316       && uses_template_parms (DECL_TI_ARGS (decl)))
4317     return true;
4318 
4319   DECL_ODR_USED (decl) = 1;
4320   if (DECL_CLONED_FUNCTION_P (decl))
4321     DECL_ODR_USED (DECL_CLONED_FUNCTION (decl)) = 1;
4322 
4323   /* DR 757: A type without linkage shall not be used as the type of a
4324      variable or function with linkage, unless
4325    o the variable or function has extern "C" linkage (7.5 [dcl.link]), or
4326    o the variable or function is not used (3.2 [basic.def.odr]) or is
4327    defined in the same translation unit.  */
4328   if (cxx_dialect > cxx98
4329       && decl_linkage (decl) != lk_none
4330       && !DECL_EXTERN_C_P (decl)
4331       && !DECL_ARTIFICIAL (decl)
4332       && !decl_defined_p (decl)
4333       && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
4334     {
4335       if (is_local_extern (decl))
4336 	/* There's no way to define a local extern, and adding it to
4337 	   the vector interferes with GC, so give an error now.  */
4338 	no_linkage_error (decl);
4339       else
4340 	VEC_safe_push (tree, gc, no_linkage_decls, decl);
4341     }
4342 
4343   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl)
4344       && !DECL_INITIAL (decl) && !DECL_ARTIFICIAL (decl))
4345     /* Remember it, so we can check it was defined.  */
4346     note_vague_linkage_fn (decl);
4347 
4348   /* Is it a synthesized method that needs to be synthesized?  */
4349   if (TREE_CODE (decl) == FUNCTION_DECL
4350       && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl)
4351       && DECL_DEFAULTED_FN (decl)
4352       /* A function defaulted outside the class is synthesized either by
4353 	 cp_finish_decl or instantiate_decl.  */
4354       && !DECL_DEFAULTED_OUTSIDE_CLASS_P (decl)
4355       && ! DECL_INITIAL (decl))
4356     {
4357       /* Defer virtual destructors so that thunks get the right
4358 	 linkage.  */
4359       if (DECL_VIRTUAL_P (decl) && !at_eof)
4360 	{
4361 	  note_vague_linkage_fn (decl);
4362 	  return true;
4363 	}
4364 
4365       /* Remember the current location for a function we will end up
4366 	 synthesizing.  Then we can inform the user where it was
4367 	 required in the case of error.  */
4368       DECL_SOURCE_LOCATION (decl) = input_location;
4369 
4370       /* Synthesizing an implicitly defined member function will result in
4371 	 garbage collection.  We must treat this situation as if we were
4372 	 within the body of a function so as to avoid collecting live data
4373 	 on the stack (such as overload resolution candidates).
4374 
4375          We could just let cp_write_global_declarations handle synthesizing
4376          this function by adding it to deferred_fns, but doing
4377          it at the use site produces better error messages.  */
4378       ++function_depth;
4379       synthesize_method (decl);
4380       --function_depth;
4381       /* If this is a synthesized method we don't need to
4382 	 do the instantiation test below.  */
4383     }
4384   else if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
4385 	   && DECL_TEMPLATE_INFO (decl)
4386 	   && (!DECL_EXPLICIT_INSTANTIATION (decl)
4387 	       || always_instantiate_p (decl)))
4388     /* If this is a function or variable that is an instance of some
4389        template, we now know that we will need to actually do the
4390        instantiation. We check that DECL is not an explicit
4391        instantiation because that is not checked in instantiate_decl.
4392 
4393        We put off instantiating functions in order to improve compile
4394        times.  Maintaining a stack of active functions is expensive,
4395        and the inliner knows to instantiate any functions it might
4396        need.  Therefore, we always try to defer instantiation.  */
4397     {
4398       ++function_depth;
4399       instantiate_decl (decl, /*defer_ok=*/true,
4400 			/*expl_inst_class_mem_p=*/false);
4401       --function_depth;
4402     }
4403 
4404   return true;
4405 }
4406 
4407 #include "gt-cp-decl2.h"
4408