xref: /dragonfly/contrib/gcc-8.0/gcc/cp/decl.c (revision eea5ad68)
1 /* Process declarations and variables for C++ compiler.
2    Copyright (C) 1988-2018 Free Software Foundation, Inc.
3    Contributed by Michael Tiemann (tiemann@cygnus.com)
4 
5 This file is part of GCC.
6 
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
11 
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3.  If not see
19 <http://www.gnu.org/licenses/>.  */
20 
21 
22 /* Process declarations and symbol lookup for C++ front end.
23    Also constructs types; the standard scalar types at initialization,
24    and structure, union, array and enum types when they are declared.  */
25 
26 /* ??? not all decl nodes are given the most useful possible
27    line numbers.  For example, the CONST_DECLs for enum values.  */
28 
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "target.h"
33 #include "c-family/c-target.h"
34 #include "cp-tree.h"
35 #include "timevar.h"
36 #include "stringpool.h"
37 #include "cgraph.h"
38 #include "stor-layout.h"
39 #include "varasm.h"
40 #include "attribs.h"
41 #include "flags.h"
42 #include "tree-iterator.h"
43 #include "decl.h"
44 #include "intl.h"
45 #include "toplev.h"
46 #include "c-family/c-objc.h"
47 #include "c-family/c-pragma.h"
48 #include "c-family/c-ubsan.h"
49 #include "debug.h"
50 #include "plugin.h"
51 #include "builtins.h"
52 #include "gimplify.h"
53 #include "asan.h"
54 
55 /* Possible cases of bad specifiers type used by bad_specifiers. */
56 enum bad_spec_place {
57   BSP_VAR,    /* variable */
58   BSP_PARM,   /* parameter */
59   BSP_TYPE,   /* type */
60   BSP_FIELD   /* field */
61 };
62 
63 static const char *redeclaration_error_message (tree, tree);
64 
65 static int decl_jump_unsafe (tree);
66 static void require_complete_types_for_parms (tree);
67 static void push_local_name (tree);
68 static tree grok_reference_init (tree, tree, tree, int);
69 static tree grokvardecl (tree, tree, tree, const cp_decl_specifier_seq *,
70 			 int, int, int, bool, int, tree);
71 static int check_static_variable_definition (tree, tree);
72 static void record_unknown_type (tree, const char *);
73 static tree builtin_function_1 (tree, tree, bool);
74 static int member_function_or_else (tree, tree, enum overload_flags);
75 static tree local_variable_p_walkfn (tree *, int *, void *);
76 static const char *tag_name (enum tag_types);
77 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
78 static void maybe_deduce_size_from_array_init (tree, tree);
79 static void layout_var_decl (tree);
80 static tree check_initializer (tree, tree, int, vec<tree, va_gc> **);
81 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
82 static void save_function_data (tree);
83 static void copy_type_enum (tree , tree);
84 static void check_function_type (tree, tree);
85 static void finish_constructor_body (void);
86 static void begin_destructor_body (void);
87 static void finish_destructor_body (void);
88 static void record_key_method_defined (tree);
89 static tree create_array_type_for_decl (tree, tree, tree);
90 static tree get_atexit_node (void);
91 static tree get_dso_handle_node (void);
92 static tree start_cleanup_fn (void);
93 static void end_cleanup_fn (void);
94 static tree cp_make_fname_decl (location_t, tree, int);
95 static void initialize_predefined_identifiers (void);
96 static tree check_special_function_return_type
97        (special_function_kind, tree, tree, int, const location_t*);
98 static tree push_cp_library_fn (enum tree_code, tree, int);
99 static tree build_cp_library_fn (tree, enum tree_code, tree, int);
100 static void store_parm_decls (tree);
101 static void initialize_local_var (tree, tree);
102 static void expand_static_init (tree, tree);
103 
104 /* The following symbols are subsumed in the cp_global_trees array, and
105    listed here individually for documentation purposes.
106 
107    C++ extensions
108 	tree wchar_decl_node;
109 
110 	tree vtable_entry_type;
111 	tree delta_type_node;
112 	tree __t_desc_type_node;
113 
114 	tree class_type_node;
115 	tree unknown_type_node;
116 
117    Array type `vtable_entry_type[]'
118 
119 	tree vtbl_type_node;
120 	tree vtbl_ptr_type_node;
121 
122    Namespaces,
123 
124 	tree std_node;
125 	tree abi_node;
126 
127    A FUNCTION_DECL which can call `abort'.  Not necessarily the
128    one that the user will declare, but sufficient to be called
129    by routines that want to abort the program.
130 
131 	tree abort_fndecl;
132 
133    Used by RTTI
134 	tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
135 	tree tinfo_var_id;  */
136 
137 tree cp_global_trees[CPTI_MAX];
138 
139 #define local_names cp_function_chain->x_local_names
140 
141 /* A list of objects which have constructors or destructors
142    which reside in the global scope.  The decl is stored in
143    the TREE_VALUE slot and the initializer is stored
144    in the TREE_PURPOSE slot.  */
145 tree static_aggregates;
146 
147 /* Like static_aggregates, but for thread_local variables.  */
148 tree tls_aggregates;
149 
150 /* -- end of C++ */
151 
152 /* A node for the integer constant 2.  */
153 
154 tree integer_two_node;
155 
156 /* vector of static decls.  */
157 vec<tree, va_gc> *static_decls;
158 
159 /* vector of keyed classes.  */
160 vec<tree, va_gc> *keyed_classes;
161 
162 /* Used only for jumps to as-yet undefined labels, since jumps to
163    defined labels can have their validity checked immediately.  */
164 
165 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
166   struct named_label_use_entry *next;
167   /* The binding level to which this entry is *currently* attached.
168      This is initially the binding level in which the goto appeared,
169      but is modified as scopes are closed.  */
170   cp_binding_level *binding_level;
171   /* The head of the names list that was current when the goto appeared,
172      or the inner scope popped.  These are the decls that will *not* be
173      skipped when jumping to the label.  */
174   tree names_in_scope;
175   /* The location of the goto, for error reporting.  */
176   location_t o_goto_locus;
177   /* True if an OpenMP structured block scope has been closed since
178      the goto appeared.  This means that the branch from the label will
179      illegally exit an OpenMP scope.  */
180   bool in_omp_scope;
181 };
182 
183 /* A list of all LABEL_DECLs in the function that have names.  Here so
184    we can clear out their names' definitions at the end of the
185    function, and so we can check the validity of jumps to these labels.  */
186 
187 struct GTY((for_user)) named_label_entry {
188 
189   tree name;  /* Name of decl. */
190 
191   tree label_decl; /* LABEL_DECL, unless deleted local label. */
192 
193   named_label_entry *outer; /* Outer shadowed chain.  */
194 
195   /* The binding level to which the label is *currently* attached.
196      This is initially set to the binding level in which the label
197      is defined, but is modified as scopes are closed.  */
198   cp_binding_level *binding_level;
199 
200   /* The head of the names list that was current when the label was
201      defined, or the inner scope popped.  These are the decls that will
202      be skipped when jumping to the label.  */
203   tree names_in_scope;
204 
205   /* A vector of all decls from all binding levels that would be
206      crossed by a backward branch to the label.  */
207   vec<tree, va_gc> *bad_decls;
208 
209   /* A list of uses of the label, before the label is defined.  */
210   named_label_use_entry *uses;
211 
212   /* The following bits are set after the label is defined, and are
213      updated as scopes are popped.  They indicate that a jump to the
214      label will illegally enter a scope of the given flavor.  */
215   bool in_try_scope;
216   bool in_catch_scope;
217   bool in_omp_scope;
218   bool in_transaction_scope;
219   bool in_constexpr_if;
220 };
221 
222 #define named_labels cp_function_chain->x_named_labels
223 
224 /* The number of function bodies which we are currently processing.
225    (Zero if we are at namespace scope, one inside the body of a
226    function, two inside the body of a function in a local class, etc.)  */
227 int function_depth;
228 
229 /* Whether the exception-specifier is part of a function type (i.e. C++17).  */
230 bool flag_noexcept_type;
231 
232 /* States indicating how grokdeclarator() should handle declspecs marked
233    with __attribute__((deprecated)).  An object declared as
234    __attribute__((deprecated)) suppresses warnings of uses of other
235    deprecated items.  */
236 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
237 
238 
239 /* A list of VAR_DECLs whose type was incomplete at the time the
240    variable was declared.  */
241 
242 struct GTY(()) incomplete_var {
243   tree decl;
244   tree incomplete_type;
245 };
246 
247 
248 static GTY(()) vec<incomplete_var, va_gc> *incomplete_vars;
249 
250 /* Returns the kind of template specialization we are currently
251    processing, given that it's declaration contained N_CLASS_SCOPES
252    explicit scope qualifications.  */
253 
254 tmpl_spec_kind
255 current_tmpl_spec_kind (int n_class_scopes)
256 {
257   int n_template_parm_scopes = 0;
258   int seen_specialization_p = 0;
259   int innermost_specialization_p = 0;
260   cp_binding_level *b;
261 
262   /* Scan through the template parameter scopes.  */
263   for (b = current_binding_level;
264        b->kind == sk_template_parms;
265        b = b->level_chain)
266     {
267       /* If we see a specialization scope inside a parameter scope,
268 	 then something is wrong.  That corresponds to a declaration
269 	 like:
270 
271 	    template <class T> template <> ...
272 
273 	 which is always invalid since [temp.expl.spec] forbids the
274 	 specialization of a class member template if the enclosing
275 	 class templates are not explicitly specialized as well.  */
276       if (b->explicit_spec_p)
277 	{
278 	  if (n_template_parm_scopes == 0)
279 	    innermost_specialization_p = 1;
280 	  else
281 	    seen_specialization_p = 1;
282 	}
283       else if (seen_specialization_p == 1)
284 	return tsk_invalid_member_spec;
285 
286       ++n_template_parm_scopes;
287     }
288 
289   /* Handle explicit instantiations.  */
290   if (processing_explicit_instantiation)
291     {
292       if (n_template_parm_scopes != 0)
293 	/* We've seen a template parameter list during an explicit
294 	   instantiation.  For example:
295 
296 	     template <class T> template void f(int);
297 
298 	   This is erroneous.  */
299 	return tsk_invalid_expl_inst;
300       else
301 	return tsk_expl_inst;
302     }
303 
304   if (n_template_parm_scopes < n_class_scopes)
305     /* We've not seen enough template headers to match all the
306        specialized classes present.  For example:
307 
308 	 template <class T> void R<T>::S<T>::f(int);
309 
310        This is invalid; there needs to be one set of template
311        parameters for each class.  */
312     return tsk_insufficient_parms;
313   else if (n_template_parm_scopes == n_class_scopes)
314     /* We're processing a non-template declaration (even though it may
315        be a member of a template class.)  For example:
316 
317 	 template <class T> void S<T>::f(int);
318 
319        The `class T' matches the `S<T>', leaving no template headers
320        corresponding to the `f'.  */
321     return tsk_none;
322   else if (n_template_parm_scopes > n_class_scopes + 1)
323     /* We've got too many template headers.  For example:
324 
325 	 template <> template <class T> void f (T);
326 
327        There need to be more enclosing classes.  */
328     return tsk_excessive_parms;
329   else
330     /* This must be a template.  It's of the form:
331 
332 	 template <class T> template <class U> void S<T>::f(U);
333 
334        This is a specialization if the innermost level was a
335        specialization; otherwise it's just a definition of the
336        template.  */
337     return innermost_specialization_p ? tsk_expl_spec : tsk_template;
338 }
339 
340 /* Exit the current scope.  */
341 
342 void
343 finish_scope (void)
344 {
345   poplevel (0, 0, 0);
346 }
347 
348 /* When a label goes out of scope, check to see if that label was used
349    in a valid manner, and issue any appropriate warnings or errors.  */
350 
351 static void
352 check_label_used (tree label)
353 {
354   if (!processing_template_decl)
355     {
356       if (DECL_INITIAL (label) == NULL_TREE)
357 	{
358 	  location_t location;
359 
360 	  error ("label %q+D used but not defined", label);
361 	  location = input_location;
362 	    /* FIXME want (LOCATION_FILE (input_location), (line)0) */
363 	  /* Avoid crashing later.  */
364 	  define_label (location, DECL_NAME (label));
365 	}
366       else
367 	warn_for_unused_label (label);
368     }
369 }
370 
371 /* Helper function to sort named label entries in a vector by DECL_UID.  */
372 
373 static int
374 sort_labels (const void *a, const void *b)
375 {
376   tree label1 = *(tree const *) a;
377   tree label2 = *(tree const *) b;
378 
379   /* DECL_UIDs can never be equal.  */
380   return DECL_UID (label1) > DECL_UID (label2) ? -1 : +1;
381 }
382 
383 /* At the end of a function, all labels declared within the function
384    go out of scope.  BLOCK is the top-level block for the
385    function.  */
386 
387 static void
388 pop_labels (tree block)
389 {
390   if (!named_labels)
391     return;
392 
393   /* We need to add the labels to the block chain, so debug
394      information is emitted.  But, we want the order to be stable so
395      need to sort them first.  Otherwise the debug output could be
396      randomly ordered.  I guess it's mostly stable, unless the hash
397      table implementation changes.  */
398   auto_vec<tree, 32> labels (named_labels->elements ());
399   hash_table<named_label_hash>::iterator end (named_labels->end ());
400   for (hash_table<named_label_hash>::iterator iter
401 	 (named_labels->begin ()); iter != end; ++iter)
402     {
403       named_label_entry *ent = *iter;
404 
405       gcc_checking_assert (!ent->outer);
406       if (ent->label_decl)
407 	labels.quick_push (ent->label_decl);
408       ggc_free (ent);
409     }
410   named_labels = NULL;
411   labels.qsort (sort_labels);
412 
413   while (labels.length ())
414     {
415       tree label = labels.pop ();
416 
417       DECL_CHAIN (label) = BLOCK_VARS (block);
418       BLOCK_VARS (block) = label;
419 
420       check_label_used (label);
421     }
422 }
423 
424 /* At the end of a block with local labels, restore the outer definition.  */
425 
426 static void
427 pop_local_label (tree id, tree label)
428 {
429   check_label_used (label);
430   named_label_entry **slot = named_labels->find_slot_with_hash
431     (id, IDENTIFIER_HASH_VALUE (id), NO_INSERT);
432   named_label_entry *ent = *slot;
433 
434   if (ent->outer)
435     ent = ent->outer;
436   else
437     {
438       ent = ggc_cleared_alloc<named_label_entry> ();
439       ent->name = id;
440     }
441   *slot = ent;
442 }
443 
444 /* The following two routines are used to interface to Objective-C++.
445    The binding level is purposely treated as an opaque type.  */
446 
447 void *
448 objc_get_current_scope (void)
449 {
450   return current_binding_level;
451 }
452 
453 /* The following routine is used by the NeXT-style SJLJ exceptions;
454    variables get marked 'volatile' so as to not be clobbered by
455    _setjmp()/_longjmp() calls.  All variables in the current scope,
456    as well as parent scopes up to (but not including) ENCLOSING_BLK
457    shall be thusly marked.  */
458 
459 void
460 objc_mark_locals_volatile (void *enclosing_blk)
461 {
462   cp_binding_level *scope;
463 
464   for (scope = current_binding_level;
465        scope && scope != enclosing_blk;
466        scope = scope->level_chain)
467     {
468       tree decl;
469 
470       for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
471 	objc_volatilize_decl (decl);
472 
473       /* Do not climb up past the current function.  */
474       if (scope->kind == sk_function_parms)
475 	break;
476     }
477 }
478 
479 /* True if B is the level for the condition of a constexpr if.  */
480 
481 static bool
482 level_for_constexpr_if (cp_binding_level *b)
483 {
484   return (b->kind == sk_cond && b->this_entity
485 	  && TREE_CODE (b->this_entity) == IF_STMT
486 	  && IF_STMT_CONSTEXPR_P (b->this_entity));
487 }
488 
489 /* Update data for defined and undefined labels when leaving a scope.  */
490 
491 int
492 poplevel_named_label_1 (named_label_entry **slot, cp_binding_level *bl)
493 {
494   named_label_entry *ent = *slot;
495   cp_binding_level *obl = bl->level_chain;
496 
497   if (ent->binding_level == bl)
498     {
499       tree decl;
500 
501       /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
502 	 TREE_LISTs representing OVERLOADs, so be careful.  */
503       for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
504 						     ? DECL_CHAIN (decl)
505 						     : TREE_CHAIN (decl)))
506 	if (decl_jump_unsafe (decl))
507 	  vec_safe_push (ent->bad_decls, decl);
508 
509       ent->binding_level = obl;
510       ent->names_in_scope = obl->names;
511       switch (bl->kind)
512 	{
513 	case sk_try:
514 	  ent->in_try_scope = true;
515 	  break;
516 	case sk_catch:
517 	  ent->in_catch_scope = true;
518 	  break;
519 	case sk_omp:
520 	  ent->in_omp_scope = true;
521 	  break;
522 	case sk_transaction:
523 	  ent->in_transaction_scope = true;
524 	  break;
525 	case sk_block:
526 	  if (level_for_constexpr_if (bl->level_chain))
527 	    ent->in_constexpr_if = true;
528 	  break;
529 	default:
530 	  break;
531 	}
532     }
533   else if (ent->uses)
534     {
535       struct named_label_use_entry *use;
536 
537       for (use = ent->uses; use ; use = use->next)
538 	if (use->binding_level == bl)
539 	  {
540 	    use->binding_level = obl;
541 	    use->names_in_scope = obl->names;
542 	    if (bl->kind == sk_omp)
543 	      use->in_omp_scope = true;
544 	  }
545     }
546 
547   return 1;
548 }
549 
550 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
551    when errors were reported, except for -Werror-unused-but-set-*.  */
552 static int unused_but_set_errorcount;
553 
554 /* Exit a binding level.
555    Pop the level off, and restore the state of the identifier-decl mappings
556    that were in effect when this level was entered.
557 
558    If KEEP == 1, this level had explicit declarations, so
559    and create a "block" (a BLOCK node) for the level
560    to record its declarations and subblocks for symbol table output.
561 
562    If FUNCTIONBODY is nonzero, this level is the body of a function,
563    so create a block as if KEEP were set and also clear out all
564    label names.
565 
566    If REVERSE is nonzero, reverse the order of decls before putting
567    them into the BLOCK.  */
568 
569 tree
570 poplevel (int keep, int reverse, int functionbody)
571 {
572   tree link;
573   /* The chain of decls was accumulated in reverse order.
574      Put it into forward order, just for cleanliness.  */
575   tree decls;
576   tree subblocks;
577   tree block;
578   tree decl;
579   int leaving_for_scope;
580   scope_kind kind;
581   unsigned ix;
582 
583   bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
584  restart:
585 
586   block = NULL_TREE;
587 
588   gcc_assert (current_binding_level->kind != sk_class
589 	      && current_binding_level->kind != sk_namespace);
590 
591   if (current_binding_level->kind == sk_cleanup)
592     functionbody = 0;
593   subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
594 
595   gcc_assert (!vec_safe_length (current_binding_level->class_shadowed));
596 
597   /* We used to use KEEP == 2 to indicate that the new block should go
598      at the beginning of the list of blocks at this binding level,
599      rather than the end.  This hack is no longer used.  */
600   gcc_assert (keep == 0 || keep == 1);
601 
602   if (current_binding_level->keep)
603     keep = 1;
604 
605   /* Any uses of undefined labels, and any defined labels, now operate
606      under constraints of next binding contour.  */
607   if (cfun && !functionbody && named_labels)
608     named_labels->traverse<cp_binding_level *, poplevel_named_label_1>
609 		   (current_binding_level);
610 
611   /* Get the decls in the order they were written.
612      Usually current_binding_level->names is in reverse order.
613      But parameter decls were previously put in forward order.  */
614 
615   decls = current_binding_level->names;
616   if (reverse)
617     {
618       decls = nreverse (decls);
619       current_binding_level->names = decls;
620     }
621 
622   /* If there were any declarations or structure tags in that level,
623      or if this level is a function body,
624      create a BLOCK to record them for the life of this function.  */
625   block = NULL_TREE;
626   /* Avoid function body block if possible.  */
627   if (functionbody && subblocks && BLOCK_CHAIN (subblocks) == NULL_TREE)
628     keep = 0;
629   else if (keep == 1 || functionbody)
630     block = make_node (BLOCK);
631   if (block != NULL_TREE)
632     {
633       BLOCK_VARS (block) = decls;
634       BLOCK_SUBBLOCKS (block) = subblocks;
635     }
636 
637   /* In each subblock, record that this is its superior.  */
638   if (keep >= 0)
639     for (link = subblocks; link; link = BLOCK_CHAIN (link))
640       BLOCK_SUPERCONTEXT (link) = block;
641 
642   /* We still support the old for-scope rules, whereby the variables
643      in a init statement were in scope after the for-statement ended.
644      We only use the new rules if flag_new_for_scope is nonzero.  */
645   leaving_for_scope
646     = current_binding_level->kind == sk_for && flag_new_for_scope;
647 
648   /* Before we remove the declarations first check for unused variables.  */
649   if ((warn_unused_variable || warn_unused_but_set_variable)
650       && current_binding_level->kind != sk_template_parms
651       && !processing_template_decl)
652     for (tree d = get_local_decls (); d; d = TREE_CHAIN (d))
653       {
654 	/* There are cases where D itself is a TREE_LIST.  See in
655 	   push_local_binding where the list of decls returned by
656 	   getdecls is built.  */
657 	decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
658 
659 	tree type = TREE_TYPE (decl);
660 	if (VAR_P (decl)
661 	    && (! TREE_USED (decl) || !DECL_READ_P (decl))
662 	    && ! DECL_IN_SYSTEM_HEADER (decl)
663 	    /* For structured bindings, consider only real variables, not
664 	       subobjects.  */
665 	    && (DECL_DECOMPOSITION_P (decl) ? !DECL_DECOMP_BASE (decl)
666 		: (DECL_NAME (decl) && !DECL_ARTIFICIAL (decl)))
667 	    && type != error_mark_node
668 	    && (!CLASS_TYPE_P (type)
669 		|| !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
670 		|| lookup_attribute ("warn_unused",
671 				     TYPE_ATTRIBUTES (TREE_TYPE (decl)))))
672 	  {
673 	    if (! TREE_USED (decl))
674 	      {
675 		if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
676 		  warning_at (DECL_SOURCE_LOCATION (decl),
677 			      OPT_Wunused_variable,
678 			      "unused structured binding declaration");
679 		else
680 		  warning_at (DECL_SOURCE_LOCATION (decl),
681 			      OPT_Wunused_variable, "unused variable %qD", decl);
682 	      }
683 	    else if (DECL_CONTEXT (decl) == current_function_decl
684 		     // For -Wunused-but-set-variable leave references alone.
685 		     && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
686 		     && errorcount == unused_but_set_errorcount)
687 	      {
688 		if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
689 		  warning_at (DECL_SOURCE_LOCATION (decl),
690 			      OPT_Wunused_but_set_variable, "structured "
691 			      "binding declaration set but not used");
692 		else
693 		  warning_at (DECL_SOURCE_LOCATION (decl),
694 			      OPT_Wunused_but_set_variable,
695 			      "variable %qD set but not used", decl);
696 		unused_but_set_errorcount = errorcount;
697 	      }
698 	  }
699       }
700 
701   /* Remove declarations for all the DECLs in this level.  */
702   for (link = decls; link; link = TREE_CHAIN (link))
703     {
704       decl = TREE_CODE (link) == TREE_LIST ? TREE_VALUE (link) : link;
705       tree name = OVL_NAME (decl);
706 
707       if (leaving_for_scope && VAR_P (decl)
708 	  /* It's hard to make this ARM compatibility hack play nicely with
709 	     lambdas, and it really isn't necessary in C++11 mode.  */
710 	  && cxx_dialect < cxx11
711 	  && name)
712 	{
713 	  cxx_binding *ob = outer_binding (name,
714 					   IDENTIFIER_BINDING (name),
715 					   /*class_p=*/true);
716 	  tree ns_binding = NULL_TREE;
717 	  if (!ob)
718 	    ns_binding = get_namespace_binding (current_namespace, name);
719 
720 	  if (ob && ob->scope == current_binding_level->level_chain)
721 	    /* We have something like:
722 
723 		 int i;
724 		 for (int i; ;);
725 
726 	       and we are leaving the `for' scope.  There's no reason to
727 	       keep the binding of the inner `i' in this case.  */
728 	    ;
729 	  else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
730 		   || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
731 	    /* Here, we have something like:
732 
733 		 typedef int I;
734 
735 		 void f () {
736 		   for (int I; ;);
737 		 }
738 
739 	       We must pop the for-scope binding so we know what's a
740 	       type and what isn't.  */
741 	    ;
742 	  else
743 	    {
744 	      /* Mark this VAR_DECL as dead so that we can tell we left it
745 		 there only for backward compatibility.  */
746 	      DECL_DEAD_FOR_LOCAL (link) = 1;
747 
748 	      /* Keep track of what should have happened when we
749 		 popped the binding.  */
750 	      if (ob && ob->value)
751 		{
752 		  SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
753 		  DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
754 		}
755 
756 	      /* Add it to the list of dead variables in the next
757 		 outermost binding to that we can remove these when we
758 		 leave that binding.  */
759 	      vec_safe_push (
760 		  current_binding_level->level_chain->dead_vars_from_for,
761 		  link);
762 
763 	      /* Although we don't pop the cxx_binding, we do clear
764 		 its SCOPE since the scope is going away now.  */
765 	      IDENTIFIER_BINDING (name)->scope
766 		= current_binding_level->level_chain;
767 
768 	      /* Don't remove the binding. */
769 	      name = NULL_TREE;
770 	    }
771 	}
772       /* Remove the binding.  */
773       if (TREE_CODE (decl) == LABEL_DECL)
774 	pop_local_label (name, decl);
775       else
776 	pop_local_binding (name, decl);
777     }
778 
779   /* Remove declarations for any `for' variables from inner scopes
780      that we kept around.  */
781   FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->dead_vars_from_for,
782 			         ix, decl)
783     pop_local_binding (DECL_NAME (decl), decl);
784 
785   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
786   for (link = current_binding_level->type_shadowed;
787        link; link = TREE_CHAIN (link))
788     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
789 
790   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
791      list if a `using' declaration put them there.  The debugging
792      back ends won't understand OVERLOAD, so we remove them here.
793      Because the BLOCK_VARS are (temporarily) shared with
794      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
795      popped all the bindings.  Also remove undeduced 'auto' decls,
796      which LTO doesn't understand, and can't have been used by anything.  */
797   if (block)
798     {
799       tree* d;
800 
801       for (d = &BLOCK_VARS (block); *d; )
802 	{
803 	  if (TREE_CODE (*d) == TREE_LIST
804 	      || (!processing_template_decl
805 		  && undeduced_auto_decl (*d)))
806 	    *d = TREE_CHAIN (*d);
807 	  else
808 	    d = &DECL_CHAIN (*d);
809 	}
810     }
811 
812   /* If the level being exited is the top level of a function,
813      check over all the labels.  */
814   if (functionbody)
815     {
816       if (block)
817 	{
818 	  /* Since this is the top level block of a function, the vars are
819 	     the function's parameters.  Don't leave them in the BLOCK
820 	     because they are found in the FUNCTION_DECL instead.  */
821 	  BLOCK_VARS (block) = 0;
822 	  pop_labels (block);
823 	}
824       else
825 	pop_labels (subblocks);
826     }
827 
828   kind = current_binding_level->kind;
829   if (kind == sk_cleanup)
830     {
831       tree stmt;
832 
833       /* If this is a temporary binding created for a cleanup, then we'll
834 	 have pushed a statement list level.  Pop that, create a new
835 	 BIND_EXPR for the block, and insert it into the stream.  */
836       stmt = pop_stmt_list (current_binding_level->statement_list);
837       stmt = c_build_bind_expr (input_location, block, stmt);
838       add_stmt (stmt);
839     }
840 
841   leave_scope ();
842   if (functionbody)
843     {
844       /* The current function is being defined, so its DECL_INITIAL
845 	 should be error_mark_node.  */
846       gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
847       DECL_INITIAL (current_function_decl) = block ? block : subblocks;
848       if (subblocks)
849 	{
850 	  if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
851 	    {
852 	      if (BLOCK_SUBBLOCKS (subblocks))
853 		BLOCK_OUTER_CURLY_BRACE_P (BLOCK_SUBBLOCKS (subblocks)) = 1;
854 	    }
855 	  else
856 	    BLOCK_OUTER_CURLY_BRACE_P (subblocks) = 1;
857 	}
858     }
859   else if (block)
860     current_binding_level->blocks
861       = block_chainon (current_binding_level->blocks, block);
862 
863   /* If we did not make a block for the level just exited,
864      any blocks made for inner levels
865      (since they cannot be recorded as subblocks in that level)
866      must be carried forward so they will later become subblocks
867      of something else.  */
868   else if (subblocks)
869     current_binding_level->blocks
870       = block_chainon (current_binding_level->blocks, subblocks);
871 
872   /* Each and every BLOCK node created here in `poplevel' is important
873      (e.g. for proper debugging information) so if we created one
874      earlier, mark it as "used".  */
875   if (block)
876     TREE_USED (block) = 1;
877 
878   /* All temporary bindings created for cleanups are popped silently.  */
879   if (kind == sk_cleanup)
880     goto restart;
881 
882   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
883   return block;
884 }
885 
886 /* Call wrapup_globals_declarations for the globals in NAMESPACE.  */
887 /* Diagnose odr-used extern inline variables without definitions
888    in the current TU.  */
889 
890 int
891 wrapup_namespace_globals ()
892 {
893   if (vec<tree, va_gc> *statics = static_decls)
894     {
895       tree decl;
896       unsigned int i;
897       FOR_EACH_VEC_ELT (*statics, i, decl)
898 	{
899 	  if (warn_unused_function
900 	      && TREE_CODE (decl) == FUNCTION_DECL
901 	      && DECL_INITIAL (decl) == 0
902 	      && DECL_EXTERNAL (decl)
903 	      && !TREE_PUBLIC (decl)
904 	      && !DECL_ARTIFICIAL (decl)
905 	      && !DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
906 	      && !TREE_NO_WARNING (decl))
907 	    warning_at (DECL_SOURCE_LOCATION (decl),
908 			OPT_Wunused_function,
909 			"%qF declared %<static%> but never defined", decl);
910 
911 	  if (VAR_P (decl)
912 	      && DECL_EXTERNAL (decl)
913 	      && DECL_INLINE_VAR_P (decl)
914 	      && DECL_ODR_USED (decl))
915 	    error_at (DECL_SOURCE_LOCATION (decl),
916 		      "odr-used inline variable %qD is not defined", decl);
917 	}
918 
919       /* Clear out the list, so we don't rescan next time.  */
920       static_decls = NULL;
921 
922       /* Write out any globals that need to be output.  */
923       return wrapup_global_declarations (statics->address (),
924 					 statics->length ());
925     }
926   return 0;
927 }
928 
929 /* In C++, you don't have to write `struct S' to refer to `S'; you
930    can just use `S'.  We accomplish this by creating a TYPE_DECL as
931    if the user had written `typedef struct S S'.  Create and return
932    the TYPE_DECL for TYPE.  */
933 
934 tree
935 create_implicit_typedef (tree name, tree type)
936 {
937   tree decl;
938 
939   decl = build_decl (input_location, TYPE_DECL, name, type);
940   DECL_ARTIFICIAL (decl) = 1;
941   /* There are other implicit type declarations, like the one *within*
942      a class that allows you to write `S::S'.  We must distinguish
943      amongst these.  */
944   SET_DECL_IMPLICIT_TYPEDEF_P (decl);
945   TYPE_NAME (type) = decl;
946   TYPE_STUB_DECL (type) = decl;
947 
948   return decl;
949 }
950 
951 /* Remember a local name for name-mangling purposes.  */
952 
953 static void
954 push_local_name (tree decl)
955 {
956   size_t i, nelts;
957   tree t, name;
958 
959   timevar_start (TV_NAME_LOOKUP);
960 
961   name = DECL_NAME (decl);
962 
963   nelts = vec_safe_length (local_names);
964   for (i = 0; i < nelts; i++)
965     {
966       t = (*local_names)[i];
967       if (DECL_NAME (t) == name)
968 	{
969 	  retrofit_lang_decl (decl);
970 	  DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
971 	  if (DECL_DISCRIMINATOR_SET_P (t))
972 	    DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
973 	  else
974 	    DECL_DISCRIMINATOR (decl) = 1;
975 
976 	  (*local_names)[i] = decl;
977 	  timevar_stop (TV_NAME_LOOKUP);
978 	  return;
979 	}
980     }
981 
982   vec_safe_push (local_names, decl);
983   timevar_stop (TV_NAME_LOOKUP);
984 }
985 
986 /* Subroutine of duplicate_decls: return truthvalue of whether
987    or not types of these decls match.
988 
989    For C++, we must compare the parameter list so that `int' can match
990    `int&' in a parameter position, but `int&' is not confused with
991    `const int&'.  */
992 
993 int
994 decls_match (tree newdecl, tree olddecl, bool record_versions /* = true */)
995 {
996   int types_match;
997 
998   if (newdecl == olddecl)
999     return 1;
1000 
1001   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
1002     /* If the two DECLs are not even the same kind of thing, we're not
1003        interested in their types.  */
1004     return 0;
1005 
1006   gcc_assert (DECL_P (newdecl));
1007 
1008   if (TREE_CODE (newdecl) == FUNCTION_DECL)
1009     {
1010       tree f1 = TREE_TYPE (newdecl);
1011       tree f2 = TREE_TYPE (olddecl);
1012       tree p1 = TYPE_ARG_TYPES (f1);
1013       tree p2 = TYPE_ARG_TYPES (f2);
1014       tree r2;
1015 
1016       /* Specializations of different templates are different functions
1017 	 even if they have the same type.  */
1018       tree t1 = (DECL_USE_TEMPLATE (newdecl)
1019 		 ? DECL_TI_TEMPLATE (newdecl)
1020 		 : NULL_TREE);
1021       tree t2 = (DECL_USE_TEMPLATE (olddecl)
1022 		 ? DECL_TI_TEMPLATE (olddecl)
1023 		 : NULL_TREE);
1024       if (t1 != t2)
1025 	return 0;
1026 
1027       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1028 	  && ! (DECL_EXTERN_C_P (newdecl)
1029 		&& DECL_EXTERN_C_P (olddecl)))
1030 	return 0;
1031 
1032       /* A new declaration doesn't match a built-in one unless it
1033 	 is also extern "C".  */
1034       if (DECL_IS_BUILTIN (olddecl)
1035 	  && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
1036 	return 0;
1037 
1038       if (TREE_CODE (f1) != TREE_CODE (f2))
1039 	return 0;
1040 
1041       /* A declaration with deduced return type should use its pre-deduction
1042 	 type for declaration matching.  */
1043       r2 = fndecl_declared_return_type (olddecl);
1044 
1045       if (same_type_p (TREE_TYPE (f1), r2))
1046 	{
1047 	  if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
1048 	      && (DECL_BUILT_IN (olddecl)
1049 #ifndef NO_IMPLICIT_EXTERN_C
1050 		  || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
1051 		  || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
1052 #endif
1053 	      ))
1054 	    {
1055 	      types_match = self_promoting_args_p (p1);
1056 	      if (p1 == void_list_node)
1057 		TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1058 	    }
1059 #ifndef NO_IMPLICIT_EXTERN_C
1060 	  else if (!prototype_p (f1)
1061 		   && (DECL_EXTERN_C_P (olddecl)
1062 		       && DECL_IN_SYSTEM_HEADER (olddecl)
1063 		       && !DECL_CLASS_SCOPE_P (olddecl))
1064 		   && (DECL_EXTERN_C_P (newdecl)
1065 		       && DECL_IN_SYSTEM_HEADER (newdecl)
1066 		       && !DECL_CLASS_SCOPE_P (newdecl)))
1067 	    {
1068 	      types_match = self_promoting_args_p (p2);
1069 	      TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1070 	    }
1071 #endif
1072 	  else
1073 	    types_match =
1074 	      compparms (p1, p2)
1075 	      && type_memfn_rqual (f1) == type_memfn_rqual (f2)
1076 	      && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1077 	          || comp_type_attributes (TREE_TYPE (newdecl),
1078 					   TREE_TYPE (olddecl)) != 0);
1079 	}
1080       else
1081 	types_match = 0;
1082 
1083       /* The decls dont match if they correspond to two different versions
1084 	 of the same function.   Disallow extern "C" functions to be
1085 	 versions for now.  */
1086       if (types_match
1087 	  && !DECL_EXTERN_C_P (newdecl)
1088 	  && !DECL_EXTERN_C_P (olddecl)
1089 	  && record_versions
1090 	  && maybe_version_functions (newdecl, olddecl,
1091 				      (!DECL_FUNCTION_VERSIONED (newdecl)
1092 				       || !DECL_FUNCTION_VERSIONED (olddecl))))
1093 	return 0;
1094     }
1095   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1096     {
1097       tree oldres = DECL_TEMPLATE_RESULT (olddecl);
1098       tree newres = DECL_TEMPLATE_RESULT (newdecl);
1099 
1100       if (TREE_CODE (newres) != TREE_CODE (oldres))
1101 	return 0;
1102 
1103       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1104 				DECL_TEMPLATE_PARMS (olddecl)))
1105 	return 0;
1106 
1107       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1108 	types_match = (same_type_p (TREE_TYPE (oldres), TREE_TYPE (newres))
1109 		       && equivalently_constrained (olddecl, newdecl));
1110       else
1111 	// We don't need to check equivalently_constrained for variable and
1112 	// function templates because we check it on the results.
1113 	types_match = decls_match (oldres, newres);
1114     }
1115   else
1116     {
1117       /* Need to check scope for variable declaration (VAR_DECL).
1118 	 For typedef (TYPE_DECL), scope is ignored.  */
1119       if (VAR_P (newdecl)
1120 	  && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1121 	  /* [dcl.link]
1122 	     Two declarations for an object with C language linkage
1123 	     with the same name (ignoring the namespace that qualify
1124 	     it) that appear in different namespace scopes refer to
1125 	     the same object.  */
1126 	  && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1127 	return 0;
1128 
1129       if (TREE_TYPE (newdecl) == error_mark_node)
1130 	types_match = TREE_TYPE (olddecl) == error_mark_node;
1131       else if (TREE_TYPE (olddecl) == NULL_TREE)
1132 	types_match = TREE_TYPE (newdecl) == NULL_TREE;
1133       else if (TREE_TYPE (newdecl) == NULL_TREE)
1134 	types_match = 0;
1135       else
1136 	types_match = comptypes (TREE_TYPE (newdecl),
1137 				 TREE_TYPE (olddecl),
1138 				 COMPARE_REDECLARATION);
1139     }
1140 
1141   // Normal functions can be constrained, as can variable partial
1142   // specializations.
1143   if (types_match && VAR_OR_FUNCTION_DECL_P (newdecl))
1144     types_match = equivalently_constrained (newdecl, olddecl);
1145 
1146   return types_match;
1147 }
1148 
1149 /* NEWDECL and OLDDECL have identical signatures.  If they are
1150    different versions adjust them and return true.
1151    If RECORD is set to true, record function versions.  */
1152 
1153 bool
1154 maybe_version_functions (tree newdecl, tree olddecl, bool record)
1155 {
1156   if (!targetm.target_option.function_versions (newdecl, olddecl))
1157     return false;
1158 
1159   if (!DECL_FUNCTION_VERSIONED (olddecl))
1160     {
1161       DECL_FUNCTION_VERSIONED (olddecl) = 1;
1162       if (DECL_ASSEMBLER_NAME_SET_P (olddecl))
1163 	mangle_decl (olddecl);
1164     }
1165 
1166   if (!DECL_FUNCTION_VERSIONED (newdecl))
1167     {
1168       DECL_FUNCTION_VERSIONED (newdecl) = 1;
1169       if (DECL_ASSEMBLER_NAME_SET_P (newdecl))
1170 	mangle_decl (newdecl);
1171     }
1172 
1173   if (record)
1174     cgraph_node::record_function_versions (olddecl, newdecl);
1175 
1176   return true;
1177 }
1178 
1179 /* If NEWDECL is `static' and an `extern' was seen previously,
1180    warn about it.  OLDDECL is the previous declaration.
1181 
1182    Note that this does not apply to the C++ case of declaring
1183    a variable `extern const' and then later `const'.
1184 
1185    Don't complain about built-in functions, since they are beyond
1186    the user's control.  */
1187 
1188 void
1189 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1190 {
1191   if (TREE_CODE (newdecl) == TYPE_DECL
1192       || TREE_CODE (newdecl) == TEMPLATE_DECL
1193       || TREE_CODE (newdecl) == CONST_DECL
1194       || TREE_CODE (newdecl) == NAMESPACE_DECL)
1195     return;
1196 
1197   /* Don't get confused by static member functions; that's a different
1198      use of `static'.  */
1199   if (TREE_CODE (newdecl) == FUNCTION_DECL
1200       && DECL_STATIC_FUNCTION_P (newdecl))
1201     return;
1202 
1203   /* If the old declaration was `static', or the new one isn't, then
1204      everything is OK.  */
1205   if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1206     return;
1207 
1208   /* It's OK to declare a builtin function as `static'.  */
1209   if (TREE_CODE (olddecl) == FUNCTION_DECL
1210       && DECL_ARTIFICIAL (olddecl))
1211     return;
1212 
1213   if (permerror (DECL_SOURCE_LOCATION (newdecl),
1214 		 "%qD was declared %<extern%> and later %<static%>", newdecl))
1215     inform (DECL_SOURCE_LOCATION (olddecl),
1216 	    "previous declaration of %qD", olddecl);
1217 }
1218 
1219 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1220    function templates.  If their exception specifications do not
1221    match, issue a diagnostic.  */
1222 
1223 static void
1224 check_redeclaration_exception_specification (tree new_decl,
1225 					     tree old_decl)
1226 {
1227   tree new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1228   tree old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1229 
1230   /* Two default specs are equivalent, don't force evaluation.  */
1231   if (UNEVALUATED_NOEXCEPT_SPEC_P (new_exceptions)
1232       && UNEVALUATED_NOEXCEPT_SPEC_P (old_exceptions))
1233     return;
1234 
1235   if (!type_dependent_expression_p (old_decl))
1236     {
1237       maybe_instantiate_noexcept (new_decl);
1238       maybe_instantiate_noexcept (old_decl);
1239     }
1240   new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1241   old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1242 
1243   /* [except.spec]
1244 
1245      If any declaration of a function has an exception-specification,
1246      all declarations, including the definition and an explicit
1247      specialization, of that function shall have an
1248      exception-specification with the same set of type-ids.  */
1249   if (! DECL_IS_BUILTIN (old_decl)
1250       && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1251     {
1252       const char *const msg
1253 	= G_("declaration of %qF has a different exception specifier");
1254       bool complained = true;
1255       location_t new_loc = DECL_SOURCE_LOCATION (new_decl);
1256       if (DECL_IN_SYSTEM_HEADER (old_decl))
1257 	complained = pedwarn (new_loc, OPT_Wsystem_headers, msg, new_decl);
1258       else if (!flag_exceptions)
1259 	/* We used to silently permit mismatched eh specs with
1260 	   -fno-exceptions, so make them a pedwarn now.  */
1261 	complained = pedwarn (new_loc, OPT_Wpedantic, msg, new_decl);
1262       else
1263 	error_at (new_loc, msg, new_decl);
1264       if (complained)
1265 	inform (DECL_SOURCE_LOCATION (old_decl),
1266 		"from previous declaration %qF", old_decl);
1267     }
1268 }
1269 
1270 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1271    Otherwise issue diagnostics.  */
1272 
1273 static bool
1274 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1275 {
1276   old_decl = STRIP_TEMPLATE (old_decl);
1277   new_decl = STRIP_TEMPLATE (new_decl);
1278   if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1279       || !VAR_OR_FUNCTION_DECL_P (new_decl))
1280     return true;
1281   if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1282       == DECL_DECLARED_CONSTEXPR_P (new_decl))
1283     return true;
1284   if (TREE_CODE (old_decl) == FUNCTION_DECL)
1285     {
1286       if (DECL_BUILT_IN (old_decl))
1287 	{
1288 	  /* Hide a built-in declaration.  */
1289 	  DECL_DECLARED_CONSTEXPR_P (old_decl)
1290 	    = DECL_DECLARED_CONSTEXPR_P (new_decl);
1291 	  return true;
1292 	}
1293       /* 7.1.5 [dcl.constexpr]
1294 	 Note: An explicit specialization can differ from the template
1295 	 declaration with respect to the constexpr specifier.  */
1296       if (! DECL_TEMPLATE_SPECIALIZATION (old_decl)
1297 	  && DECL_TEMPLATE_SPECIALIZATION (new_decl))
1298 	return true;
1299 
1300       error_at (DECL_SOURCE_LOCATION (new_decl),
1301 		"redeclaration %qD differs in %<constexpr%> "
1302 		"from previous declaration", new_decl);
1303       inform (DECL_SOURCE_LOCATION (old_decl),
1304 	      "previous declaration %qD", old_decl);
1305       return false;
1306     }
1307   return true;
1308 }
1309 
1310 // If OLDDECL and NEWDECL are concept declarations with the same type
1311 // (i.e., and template parameters), but different requirements,
1312 // emit diagnostics and return true. Otherwise, return false.
1313 static inline bool
1314 check_concept_refinement (tree olddecl, tree newdecl)
1315 {
1316   if (!DECL_DECLARED_CONCEPT_P (olddecl) || !DECL_DECLARED_CONCEPT_P (newdecl))
1317     return false;
1318 
1319   tree d1 = DECL_TEMPLATE_RESULT (olddecl);
1320   tree d2 = DECL_TEMPLATE_RESULT (newdecl);
1321   if (TREE_CODE (d1) != TREE_CODE (d2))
1322     return false;
1323 
1324   tree t1 = TREE_TYPE (d1);
1325   tree t2 = TREE_TYPE (d2);
1326   if (TREE_CODE (d1) == FUNCTION_DECL)
1327     {
1328       if (compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2))
1329           && comp_template_parms (DECL_TEMPLATE_PARMS (olddecl),
1330                                   DECL_TEMPLATE_PARMS (newdecl))
1331           && !equivalently_constrained (olddecl, newdecl))
1332         {
1333           error ("cannot specialize concept %q#D", olddecl);
1334           return true;
1335         }
1336     }
1337   return false;
1338 }
1339 
1340 /* DECL is a redeclaration of a function or function template.  If
1341    it does have default arguments issue a diagnostic.  Note: this
1342    function is used to enforce the requirements in C++11 8.3.6 about
1343    no default arguments in redeclarations.  */
1344 
1345 static void
1346 check_redeclaration_no_default_args (tree decl)
1347 {
1348   gcc_assert (DECL_DECLARES_FUNCTION_P (decl));
1349 
1350   for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
1351        t && t != void_list_node; t = TREE_CHAIN (t))
1352     if (TREE_PURPOSE (t))
1353       {
1354 	permerror (DECL_SOURCE_LOCATION (decl),
1355 		   "redeclaration of %q#D may not have default "
1356 		   "arguments", decl);
1357 	return;
1358       }
1359 }
1360 
1361 /* Merge tree bits that correspond to attributes noreturn, nothrow,
1362    const,  malloc, and pure from NEWDECL with those of OLDDECL.  */
1363 
1364 static void
1365 merge_attribute_bits (tree newdecl, tree olddecl)
1366 {
1367   TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1368   TREE_THIS_VOLATILE (olddecl) |= TREE_THIS_VOLATILE (newdecl);
1369   TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1370   TREE_NOTHROW (olddecl) |= TREE_NOTHROW (newdecl);
1371   TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1372   TREE_READONLY (olddecl) |= TREE_READONLY (newdecl);
1373   DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1374   DECL_IS_MALLOC (olddecl) |= DECL_IS_MALLOC (newdecl);
1375   DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1376   DECL_PURE_P (olddecl) |= DECL_PURE_P (newdecl);
1377   DECL_UNINLINABLE (newdecl) |= DECL_UNINLINABLE (olddecl);
1378   DECL_UNINLINABLE (olddecl) |= DECL_UNINLINABLE (newdecl);
1379 }
1380 
1381 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn)			\
1382 			  && lookup_attribute ("gnu_inline",		\
1383 					       DECL_ATTRIBUTES (fn)))
1384 
1385 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1386    If the redeclaration is invalid, a diagnostic is issued, and the
1387    error_mark_node is returned.  Otherwise, OLDDECL is returned.
1388 
1389    If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1390    returned.
1391 
1392    NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend.  */
1393 
1394 tree
1395 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1396 {
1397   unsigned olddecl_uid = DECL_UID (olddecl);
1398   int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1399   int new_defines_function = 0;
1400   tree new_template_info;
1401 
1402   if (newdecl == olddecl)
1403     return olddecl;
1404 
1405   types_match = decls_match (newdecl, olddecl);
1406 
1407   /* If either the type of the new decl or the type of the old decl is an
1408      error_mark_node, then that implies that we have already issued an
1409      error (earlier) for some bogus type specification, and in that case,
1410      it is rather pointless to harass the user with yet more error message
1411      about the same declaration, so just pretend the types match here.  */
1412   if (TREE_TYPE (newdecl) == error_mark_node
1413       || TREE_TYPE (olddecl) == error_mark_node)
1414     return error_mark_node;
1415 
1416   if (DECL_NAME (newdecl)
1417       && DECL_NAME (olddecl)
1418       && UDLIT_OPER_P (DECL_NAME (newdecl))
1419       && UDLIT_OPER_P (DECL_NAME (olddecl)))
1420     {
1421       if (TREE_CODE (newdecl) == TEMPLATE_DECL
1422 	  && TREE_CODE (olddecl) != TEMPLATE_DECL
1423 	  && check_raw_literal_operator (olddecl))
1424 	error ("literal operator template %q+D conflicts with"
1425 	       " raw literal operator %qD", newdecl, olddecl);
1426       else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1427 	       && TREE_CODE (olddecl) == TEMPLATE_DECL
1428 	       && check_raw_literal_operator (newdecl))
1429 	error ("raw literal operator %q+D conflicts with"
1430 	       " literal operator template %qD", newdecl, olddecl);
1431     }
1432 
1433   /* True to merge attributes between the declarations, false to
1434      set OLDDECL's attributes to those of NEWDECL (for template
1435      explicit specializations that specify their own attributes
1436      independent of those specified for the primary template).  */
1437   const bool merge_attr = (TREE_CODE (newdecl) != FUNCTION_DECL
1438 			   || !DECL_TEMPLATE_SPECIALIZATION (newdecl)
1439 			   || DECL_TEMPLATE_SPECIALIZATION (olddecl));
1440 
1441   if (DECL_P (olddecl)
1442       && TREE_CODE (newdecl) == FUNCTION_DECL
1443       && TREE_CODE (olddecl) == FUNCTION_DECL
1444       && merge_attr
1445       && diagnose_mismatched_attributes (olddecl, newdecl))
1446     {
1447       if (DECL_INITIAL (olddecl))
1448 	inform (DECL_SOURCE_LOCATION (olddecl),
1449 		"previous definition of %qD was here", olddecl);
1450       else
1451 	inform (DECL_SOURCE_LOCATION (olddecl),
1452 		"previous declaration of %qD was here", olddecl);
1453     }
1454 
1455   /* Check for redeclaration and other discrepancies.  */
1456   if (TREE_CODE (olddecl) == FUNCTION_DECL
1457       && DECL_ARTIFICIAL (olddecl))
1458     {
1459       gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1460       if (TREE_CODE (newdecl) != FUNCTION_DECL)
1461 	{
1462 	  /* Avoid warnings redeclaring built-ins which have not been
1463 	     explicitly declared.  */
1464 	  if (DECL_ANTICIPATED (olddecl))
1465 	    {
1466 	      if (TREE_PUBLIC (newdecl)
1467 		  && CP_DECL_CONTEXT (newdecl) == global_namespace)
1468 		warning_at (DECL_SOURCE_LOCATION (newdecl),
1469 			    OPT_Wbuiltin_declaration_mismatch,
1470 			    "built-in function %qD declared as non-function",
1471 			    newdecl);
1472 	      return NULL_TREE;
1473 	    }
1474 
1475 	  /* If you declare a built-in or predefined function name as static,
1476 	     the old definition is overridden, but optionally warn this was a
1477 	     bad choice of name.  */
1478 	  if (! TREE_PUBLIC (newdecl))
1479 	    {
1480 	      warning (OPT_Wshadow,
1481                        DECL_BUILT_IN (olddecl)
1482                        ? G_("shadowing built-in function %q#D")
1483                        : G_("shadowing library function %q#D"), olddecl);
1484 	      /* Discard the old built-in function.  */
1485 	      return NULL_TREE;
1486 	    }
1487 	  /* If the built-in is not ansi, then programs can override
1488 	     it even globally without an error.  */
1489 	  else if (! DECL_BUILT_IN (olddecl))
1490 	    warning_at (DECL_SOURCE_LOCATION (newdecl), 0,
1491 			"library function %q#D redeclared as non-function %q#D",
1492 			olddecl, newdecl);
1493 	  else
1494 	    error ("declaration of %q+#D conflicts with built-in "
1495 		   "declaration %q#D", newdecl, olddecl);
1496 	  return NULL_TREE;
1497 	}
1498       else if (DECL_OMP_DECLARE_REDUCTION_P (olddecl))
1499 	{
1500 	  gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (newdecl));
1501 	  error_at (DECL_SOURCE_LOCATION (newdecl),
1502 		    "redeclaration of %<pragma omp declare reduction%>");
1503 	  inform (DECL_SOURCE_LOCATION (olddecl),
1504 		  "previous %<pragma omp declare reduction%> declaration");
1505 	  return error_mark_node;
1506 	}
1507       else if (!types_match)
1508 	{
1509 	  /* Avoid warnings redeclaring built-ins which have not been
1510 	     explicitly declared.  */
1511 	  if (DECL_ANTICIPATED (olddecl))
1512 	    {
1513 	      tree t1, t2;
1514 
1515 	      /* A new declaration doesn't match a built-in one unless it
1516 		 is also extern "C".  */
1517 	      gcc_assert (DECL_IS_BUILTIN (olddecl));
1518 	      gcc_assert (DECL_EXTERN_C_P (olddecl));
1519 	      if (!DECL_EXTERN_C_P (newdecl))
1520 		return NULL_TREE;
1521 
1522 	      for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1523 		   t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1524 		   t1 || t2;
1525 		   t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1526 		{
1527 		  if (!t1 || !t2)
1528 		    break;
1529 		  /* FILE, tm types are not known at the time
1530 		     we create the builtins.  */
1531 		  for (unsigned i = 0;
1532 		       i < sizeof (builtin_structptr_types)
1533 			   / sizeof (builtin_structptr_type);
1534 		       ++i)
1535 		    if (TREE_VALUE (t2) == builtin_structptr_types[i].node)
1536 		      {
1537 			tree t = TREE_VALUE (t1);
1538 
1539 			if (TYPE_PTR_P (t)
1540 			    && TYPE_IDENTIFIER (TREE_TYPE (t))
1541 			    == get_identifier (builtin_structptr_types[i].str)
1542 			    && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1543 			  {
1544 			    tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1545 
1546 			    TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1547 			      = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1548 			    types_match = decls_match (newdecl, olddecl);
1549 			    if (types_match)
1550 			      return duplicate_decls (newdecl, olddecl,
1551 						      newdecl_is_friend);
1552 			    TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1553 			  }
1554 			goto next_arg;
1555 		      }
1556 
1557 		  if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1558 		    break;
1559 next_arg:;
1560 		}
1561 
1562 	      warning_at (DECL_SOURCE_LOCATION (newdecl),
1563 			  OPT_Wbuiltin_declaration_mismatch,
1564 			  "declaration of %q#D conflicts with built-in "
1565 			  "declaration %q#D", newdecl, olddecl);
1566 	    }
1567 	  else if ((DECL_EXTERN_C_P (newdecl)
1568 		    && DECL_EXTERN_C_P (olddecl))
1569 		   || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1570 				 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1571 	    {
1572 	      /* Don't really override olddecl for __* prefixed builtins
1573 		 except for __[^b]*_chk, the compiler might be using those
1574 		 explicitly.  */
1575 	      if (DECL_BUILT_IN (olddecl))
1576 		{
1577 		  tree id = DECL_NAME (olddecl);
1578 		  const char *name = IDENTIFIER_POINTER (id);
1579 		  size_t len;
1580 
1581 		  if (name[0] == '_'
1582 		      && name[1] == '_'
1583 		      && (strncmp (name + 2, "builtin_",
1584 				   strlen ("builtin_")) == 0
1585 			  || (len = strlen (name)) <= strlen ("___chk")
1586 			  || memcmp (name + len - strlen ("_chk"),
1587 				     "_chk", strlen ("_chk") + 1) != 0))
1588 		    {
1589 		      if (DECL_INITIAL (newdecl))
1590 			{
1591 			  error_at (DECL_SOURCE_LOCATION (newdecl),
1592 				    "definition of %q#D ambiguates built-in "
1593 				    "declaration %q#D", newdecl, olddecl);
1594 			  return error_mark_node;
1595 			}
1596 		      if (permerror (DECL_SOURCE_LOCATION (newdecl),
1597 				     "new declaration %q#D ambiguates built-in"
1598 				     " declaration %q#D", newdecl, olddecl)
1599 			  && flag_permissive)
1600 			inform (DECL_SOURCE_LOCATION (newdecl),
1601 				"ignoring the %q#D declaration", newdecl);
1602 		      return flag_permissive ? olddecl : error_mark_node;
1603 		    }
1604 		}
1605 
1606 	      /* A near match; override the builtin.  */
1607 
1608 	      if (TREE_PUBLIC (newdecl))
1609 		warning_at (DECL_SOURCE_LOCATION (newdecl),
1610 			    OPT_Wbuiltin_declaration_mismatch,
1611 			    "new declaration %q#D ambiguates built-in "
1612 			    "declaration %q#D", newdecl, olddecl);
1613 	      else
1614 		warning (OPT_Wshadow,
1615                          DECL_BUILT_IN (olddecl)
1616                          ? G_("shadowing built-in function %q#D")
1617                          : G_("shadowing library function %q#D"), olddecl);
1618 	    }
1619 	  else
1620 	    /* Discard the old built-in function.  */
1621 	    return NULL_TREE;
1622 
1623 	  /* Replace the old RTL to avoid problems with inlining.  */
1624 	  COPY_DECL_RTL (newdecl, olddecl);
1625 	}
1626       /* Even if the types match, prefer the new declarations type for
1627 	 built-ins which have not been explicitly declared, for
1628 	 exception lists, etc...  */
1629       else if (DECL_IS_BUILTIN (olddecl))
1630 	{
1631 	  tree type = TREE_TYPE (newdecl);
1632 	  tree attribs = (*targetm.merge_type_attributes)
1633 	    (TREE_TYPE (olddecl), type);
1634 
1635 	  type = cp_build_type_attribute_variant (type, attribs);
1636 	  TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1637 	}
1638 
1639       /* If a function is explicitly declared "throw ()", propagate that to
1640 	 the corresponding builtin.  */
1641       if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1642 	  && DECL_ANTICIPATED (olddecl)
1643 	  && TREE_NOTHROW (newdecl)
1644 	  && !TREE_NOTHROW (olddecl))
1645 	{
1646 	  enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1647 	  tree tmpdecl = builtin_decl_explicit (fncode);
1648 	  if (tmpdecl && tmpdecl != olddecl && types_match)
1649 	    TREE_NOTHROW (tmpdecl)  = 1;
1650 	}
1651 
1652       /* Whether or not the builtin can throw exceptions has no
1653 	 bearing on this declarator.  */
1654       TREE_NOTHROW (olddecl) = 0;
1655 
1656       if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1657 	{
1658 	  /* If a builtin function is redeclared as `static', merge
1659 	     the declarations, but make the original one static.  */
1660 	  DECL_THIS_STATIC (olddecl) = 1;
1661 	  TREE_PUBLIC (olddecl) = 0;
1662 
1663 	  /* Make the old declaration consistent with the new one so
1664 	     that all remnants of the builtin-ness of this function
1665 	     will be banished.  */
1666 	  SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1667 	  COPY_DECL_RTL (newdecl, olddecl);
1668 	}
1669     }
1670   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1671     {
1672       /* C++ Standard, 3.3, clause 4:
1673 	 "[Note: a namespace name or a class template name must be unique
1674 	 in its declarative region (7.3.2, clause 14). ]"  */
1675       if (TREE_CODE (olddecl) != NAMESPACE_DECL
1676 	  && TREE_CODE (newdecl) != NAMESPACE_DECL
1677 	  && (TREE_CODE (olddecl) != TEMPLATE_DECL
1678 	      || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1679 	  && (TREE_CODE (newdecl) != TEMPLATE_DECL
1680 	      || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1681 	{
1682 	  if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1683 	       && TREE_CODE (newdecl) != TYPE_DECL)
1684 	      || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1685 		  && TREE_CODE (olddecl) != TYPE_DECL))
1686 	    {
1687 	      /* We do nothing special here, because C++ does such nasty
1688 		 things with TYPE_DECLs.  Instead, just let the TYPE_DECL
1689 		 get shadowed, and know that if we need to find a TYPE_DECL
1690 		 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1691 		 slot of the identifier.  */
1692 	      return NULL_TREE;
1693 	    }
1694 
1695 	    if ((TREE_CODE (newdecl) == FUNCTION_DECL
1696 		 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1697 		|| (TREE_CODE (olddecl) == FUNCTION_DECL
1698 		    && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1699 	      return NULL_TREE;
1700 	}
1701 
1702       error ("%q#D redeclared as different kind of symbol", newdecl);
1703       if (TREE_CODE (olddecl) == TREE_LIST)
1704 	olddecl = TREE_VALUE (olddecl);
1705       inform (DECL_SOURCE_LOCATION (olddecl),
1706 	      "previous declaration %q#D", olddecl);
1707 
1708       return error_mark_node;
1709     }
1710   else if (!types_match)
1711     {
1712       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1713 	/* These are certainly not duplicate declarations; they're
1714 	   from different scopes.  */
1715 	return NULL_TREE;
1716 
1717       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1718 	{
1719 	  /* The name of a class template may not be declared to refer to
1720 	     any other template, class, function, object, namespace, value,
1721 	     or type in the same scope.  */
1722 	  if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1723 	      || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1724 	    {
1725 	      error ("conflicting declaration of template %q+#D", newdecl);
1726 	      inform (DECL_SOURCE_LOCATION (olddecl),
1727 		      "previous declaration %q#D", olddecl);
1728 	      return error_mark_node;
1729 	    }
1730 	  else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1731 		   && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1732 		   && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1733 				 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1734 		   && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1735 					   DECL_TEMPLATE_PARMS (olddecl))
1736 		   /* Template functions can be disambiguated by
1737 		      return type.  */
1738 		   && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1739 				   TREE_TYPE (TREE_TYPE (olddecl)))
1740                    // Template functions can also be disambiguated by
1741                    // constraints.
1742                    && equivalently_constrained (olddecl, newdecl))
1743 	    {
1744 	      error ("ambiguating new declaration %q+#D", newdecl);
1745 	      inform (DECL_SOURCE_LOCATION (olddecl),
1746 		      "old declaration %q#D", olddecl);
1747 	    }
1748           else if (check_concept_refinement (olddecl, newdecl))
1749 	    return error_mark_node;
1750 	  return NULL_TREE;
1751 	}
1752       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1753 	{
1754 	  if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1755 	    {
1756 	      error ("conflicting declaration of C function %q+#D",
1757 		     newdecl);
1758 	      inform (DECL_SOURCE_LOCATION (olddecl),
1759 		      "previous declaration %q#D", olddecl);
1760 	      return NULL_TREE;
1761 	    }
1762 	  /* For function versions, params and types match, but they
1763 	     are not ambiguous.  */
1764 	  else if ((!DECL_FUNCTION_VERSIONED (newdecl)
1765 		    && !DECL_FUNCTION_VERSIONED (olddecl))
1766                    // The functions have the same parameter types.
1767 		   && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1768 				 TYPE_ARG_TYPES (TREE_TYPE (olddecl)))
1769                    // And the same constraints.
1770                    && equivalently_constrained (newdecl, olddecl))
1771 	    {
1772 	      error ("ambiguating new declaration of %q+#D", newdecl);
1773 	      inform (DECL_SOURCE_LOCATION (olddecl),
1774 		      "old declaration %q#D", olddecl);
1775               return error_mark_node;
1776 	    }
1777 	  else
1778 	    return NULL_TREE;
1779 	}
1780       else
1781 	{
1782 	  error ("conflicting declaration %q+#D", newdecl);
1783 	  inform (DECL_SOURCE_LOCATION (olddecl),
1784 		  "previous declaration as %q#D", olddecl);
1785 	  return error_mark_node;
1786 	}
1787     }
1788   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1789 	    && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1790 		 && (!DECL_TEMPLATE_INFO (newdecl)
1791 		     || (DECL_TI_TEMPLATE (newdecl)
1792 			 != DECL_TI_TEMPLATE (olddecl))))
1793 		|| (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1794 		    && (!DECL_TEMPLATE_INFO (olddecl)
1795 			|| (DECL_TI_TEMPLATE (olddecl)
1796 			    != DECL_TI_TEMPLATE (newdecl))))))
1797     /* It's OK to have a template specialization and a non-template
1798        with the same type, or to have specializations of two
1799        different templates with the same type.  Note that if one is a
1800        specialization, and the other is an instantiation of the same
1801        template, that we do not exit at this point.  That situation
1802        can occur if we instantiate a template class, and then
1803        specialize one of its methods.  This situation is valid, but
1804        the declarations must be merged in the usual way.  */
1805     return NULL_TREE;
1806   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1807 	   && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1808 		&& !DECL_USE_TEMPLATE (newdecl))
1809 	       || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1810 		   && !DECL_USE_TEMPLATE (olddecl))))
1811     /* One of the declarations is a template instantiation, and the
1812        other is not a template at all.  That's OK.  */
1813     return NULL_TREE;
1814   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1815     {
1816       /* In [namespace.alias] we have:
1817 
1818 	   In a declarative region, a namespace-alias-definition can be
1819 	   used to redefine a namespace-alias declared in that declarative
1820 	   region to refer only to the namespace to which it already
1821 	   refers.
1822 
1823 	 Therefore, if we encounter a second alias directive for the same
1824 	 alias, we can just ignore the second directive.  */
1825       if (DECL_NAMESPACE_ALIAS (newdecl)
1826 	  && (DECL_NAMESPACE_ALIAS (newdecl)
1827 	      == DECL_NAMESPACE_ALIAS (olddecl)))
1828 	return olddecl;
1829 
1830       /* Leave it to update_binding to merge or report error.  */
1831       return NULL_TREE;
1832     }
1833   else
1834     {
1835       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1836       if (errmsg)
1837 	{
1838 	  error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1839 	  if (DECL_NAME (olddecl) != NULL_TREE)
1840 	    inform (DECL_SOURCE_LOCATION (olddecl),
1841 		    (DECL_INITIAL (olddecl) && namespace_bindings_p ())
1842 		    ? G_("%q#D previously defined here")
1843 		    : G_("%q#D previously declared here"), olddecl);
1844 	  return error_mark_node;
1845 	}
1846       else if (TREE_CODE (olddecl) == FUNCTION_DECL
1847 	       && DECL_INITIAL (olddecl) != NULL_TREE
1848 	       && !prototype_p (TREE_TYPE (olddecl))
1849 	       && prototype_p (TREE_TYPE (newdecl)))
1850 	{
1851 	  /* Prototype decl follows defn w/o prototype.  */
1852 	  if (warning_at (DECL_SOURCE_LOCATION (newdecl), 0,
1853 			  "prototype specified for %q#D", newdecl))
1854 	    inform (DECL_SOURCE_LOCATION (olddecl),
1855 		    "previous non-prototype definition here");
1856 	}
1857       else if (VAR_OR_FUNCTION_DECL_P (olddecl)
1858 	       && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1859 	{
1860 	  /* [dcl.link]
1861 	     If two declarations of the same function or object
1862 	     specify different linkage-specifications ..., the program
1863 	     is ill-formed.... Except for functions with C++ linkage,
1864 	     a function declaration without a linkage specification
1865 	     shall not precede the first linkage specification for
1866 	     that function.  A function can be declared without a
1867 	     linkage specification after an explicit linkage
1868 	     specification has been seen; the linkage explicitly
1869 	     specified in the earlier declaration is not affected by
1870 	     such a function declaration.
1871 
1872 	     DR 563 raises the question why the restrictions on
1873 	     functions should not also apply to objects.  Older
1874 	     versions of G++ silently ignore the linkage-specification
1875 	     for this example:
1876 
1877 	       namespace N {
1878                  extern int i;
1879    	         extern "C" int i;
1880                }
1881 
1882              which is clearly wrong.  Therefore, we now treat objects
1883 	     like functions.  */
1884 	  if (current_lang_depth () == 0)
1885 	    {
1886 	      /* There is no explicit linkage-specification, so we use
1887 		 the linkage from the previous declaration.  */
1888 	      retrofit_lang_decl (newdecl);
1889 	      SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1890 	    }
1891 	  else
1892 	    {
1893 	      error ("conflicting declaration of %q+#D with %qL linkage",
1894 		     newdecl, DECL_LANGUAGE (newdecl));
1895 	      inform (DECL_SOURCE_LOCATION (olddecl),
1896 		      "previous declaration with %qL linkage",
1897 		      DECL_LANGUAGE (olddecl));
1898 	    }
1899 	}
1900 
1901       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1902 	;
1903       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1904 	{
1905 	  /* Note: free functions, as TEMPLATE_DECLs, are handled below.  */
1906 	  if (DECL_FUNCTION_MEMBER_P (olddecl)
1907 	      && (/* grokfndecl passes member function templates too
1908 		     as FUNCTION_DECLs.  */
1909 		  DECL_TEMPLATE_INFO (olddecl)
1910 		  /* C++11 8.3.6/6.
1911 		     Default arguments for a member function of a class
1912 		     template shall be specified on the initial declaration
1913 		     of the member function within the class template.  */
1914 		  || CLASSTYPE_TEMPLATE_INFO (CP_DECL_CONTEXT (olddecl))))
1915 	    check_redeclaration_no_default_args (newdecl);
1916 	  else
1917 	    {
1918 	      tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl);
1919 	      tree t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
1920 	      int i = 1;
1921 
1922 	      for (; t1 && t1 != void_list_node;
1923 		   t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1924 		if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1925 		  {
1926 		    if (simple_cst_equal (TREE_PURPOSE (t1),
1927 					  TREE_PURPOSE (t2)) == 1)
1928 		      {
1929 			if (permerror (input_location,
1930 				       "default argument given for parameter "
1931 				       "%d of %q#D", i, newdecl))
1932 			  inform (DECL_SOURCE_LOCATION (olddecl),
1933 				  "previous specification in %q#D here",
1934 				  olddecl);
1935 		      }
1936 		    else
1937 		      {
1938 			error ("default argument given for parameter %d "
1939 			       "of %q#D", i, newdecl);
1940 			inform (DECL_SOURCE_LOCATION (olddecl),
1941 				"previous specification in %q#D here",
1942 				olddecl);
1943 		      }
1944 		  }
1945 	    }
1946 	}
1947     }
1948 
1949   /* Do not merge an implicit typedef with an explicit one.  In:
1950 
1951        class A;
1952        ...
1953        typedef class A A __attribute__ ((foo));
1954 
1955      the attribute should apply only to the typedef.  */
1956   if (TREE_CODE (olddecl) == TYPE_DECL
1957       && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1958 	  || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1959     return NULL_TREE;
1960 
1961   /* If new decl is `static' and an `extern' was seen previously,
1962      warn about it.  */
1963   warn_extern_redeclared_static (newdecl, olddecl);
1964 
1965   if (!validate_constexpr_redeclaration (olddecl, newdecl))
1966     return error_mark_node;
1967 
1968   /* We have committed to returning 1 at this point.  */
1969   if (TREE_CODE (newdecl) == FUNCTION_DECL)
1970     {
1971       /* Now that functions must hold information normally held
1972 	 by field decls, there is extra work to do so that
1973 	 declaration information does not get destroyed during
1974 	 definition.  */
1975       if (DECL_VINDEX (olddecl))
1976 	DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1977       if (DECL_CONTEXT (olddecl))
1978 	DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1979       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1980       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1981       DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1982       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1983       DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1984       DECL_FINAL_P (newdecl) |= DECL_FINAL_P (olddecl);
1985       DECL_OVERRIDE_P (newdecl) |= DECL_OVERRIDE_P (olddecl);
1986       DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1987       if (DECL_OVERLOADED_OPERATOR_P (olddecl))
1988 	DECL_OVERLOADED_OPERATOR_CODE_RAW (newdecl)
1989 	  = DECL_OVERLOADED_OPERATOR_CODE_RAW (olddecl);
1990       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1991 
1992       /* Optionally warn about more than one declaration for the same
1993 	 name, but don't warn about a function declaration followed by a
1994 	 definition.  */
1995       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1996 	  && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1997 	  /* Don't warn about extern decl followed by definition.  */
1998 	  && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1999 	  /* Don't warn about friends, let add_friend take care of it.  */
2000 	  && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
2001 	  /* Don't warn about declaration followed by specialization.  */
2002 	  && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
2003 	      || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
2004 	{
2005 	  if (warning_at (DECL_SOURCE_LOCATION (newdecl),
2006 			  OPT_Wredundant_decls,
2007 			  "redundant redeclaration of %qD in same scope",
2008 			  newdecl))
2009 	    inform (DECL_SOURCE_LOCATION (olddecl),
2010 		    "previous declaration of %qD", olddecl);
2011 	}
2012 
2013       if (!(DECL_TEMPLATE_INSTANTIATION (olddecl)
2014 	    && DECL_TEMPLATE_SPECIALIZATION (newdecl)))
2015 	{
2016 	  if (DECL_DELETED_FN (newdecl))
2017 	    {
2018 	      error ("deleted definition of %q+D", newdecl);
2019 	      inform (DECL_SOURCE_LOCATION (olddecl),
2020 		      "previous declaration of %qD", olddecl);
2021 	    }
2022 	  DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
2023 	}
2024     }
2025 
2026   /* Deal with C++: must preserve virtual function table size.  */
2027   if (TREE_CODE (olddecl) == TYPE_DECL)
2028     {
2029       tree newtype = TREE_TYPE (newdecl);
2030       tree oldtype = TREE_TYPE (olddecl);
2031 
2032       if (newtype != error_mark_node && oldtype != error_mark_node
2033 	  && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
2034 	CLASSTYPE_FRIEND_CLASSES (newtype)
2035 	  = CLASSTYPE_FRIEND_CLASSES (oldtype);
2036 
2037       DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
2038     }
2039 
2040   /* Copy all the DECL_... slots specified in the new decl except for
2041      any that we copy here from the old type.  */
2042   if (merge_attr)
2043     DECL_ATTRIBUTES (newdecl)
2044       = (*targetm.merge_decl_attributes) (olddecl, newdecl);
2045   else
2046     DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2047 
2048   if (DECL_DECLARES_FUNCTION_P (olddecl) && DECL_DECLARES_FUNCTION_P (newdecl))
2049     {
2050       olddecl_friend = DECL_FRIEND_P (olddecl);
2051       hidden_friend = (DECL_ANTICIPATED (olddecl)
2052 		       && DECL_HIDDEN_FRIEND_P (olddecl)
2053 		       && newdecl_is_friend);
2054       if (!hidden_friend)
2055 	{
2056 	  DECL_ANTICIPATED (olddecl) = 0;
2057 	  DECL_HIDDEN_FRIEND_P (olddecl) = 0;
2058 	}
2059     }
2060 
2061   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2062     {
2063       tree old_result;
2064       tree new_result;
2065       old_result = DECL_TEMPLATE_RESULT (olddecl);
2066       new_result = DECL_TEMPLATE_RESULT (newdecl);
2067       TREE_TYPE (olddecl) = TREE_TYPE (old_result);
2068       DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
2069 	= chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
2070 		   DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
2071 
2072       DECL_ATTRIBUTES (old_result)
2073 	= (*targetm.merge_decl_attributes) (old_result, new_result);
2074 
2075       if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2076 	{
2077 	  /* Per C++11 8.3.6/4, default arguments cannot be added in later
2078 	     declarations of a function template.  */
2079 	  if (DECL_SOURCE_LOCATION (newdecl)
2080 	      != DECL_SOURCE_LOCATION (olddecl))
2081 	    check_redeclaration_no_default_args (newdecl);
2082 
2083 	  check_default_args (newdecl);
2084 
2085 	  if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
2086 	      && DECL_INITIAL (new_result))
2087 	    {
2088 	      if (DECL_INITIAL (old_result))
2089 		DECL_UNINLINABLE (old_result) = 1;
2090 	      else
2091 		DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
2092 	      DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
2093 	      DECL_NOT_REALLY_EXTERN (old_result)
2094 		= DECL_NOT_REALLY_EXTERN (new_result);
2095 	      DECL_INTERFACE_KNOWN (old_result)
2096 		= DECL_INTERFACE_KNOWN (new_result);
2097 	      DECL_DECLARED_INLINE_P (old_result)
2098 		= DECL_DECLARED_INLINE_P (new_result);
2099 	      DECL_DISREGARD_INLINE_LIMITS (old_result)
2100 	        |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2101 
2102 	    }
2103 	  else
2104 	    {
2105 	      DECL_DECLARED_INLINE_P (old_result)
2106 		|= DECL_DECLARED_INLINE_P (new_result);
2107 	      DECL_DISREGARD_INLINE_LIMITS (old_result)
2108 	        |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2109 	      check_redeclaration_exception_specification (newdecl, olddecl);
2110 
2111 	      merge_attribute_bits (new_result, old_result);
2112 	    }
2113 	}
2114 
2115       /* If the new declaration is a definition, update the file and
2116 	 line information on the declaration, and also make
2117 	 the old declaration the same definition.  */
2118       if (DECL_INITIAL (new_result) != NULL_TREE)
2119 	{
2120 	  DECL_SOURCE_LOCATION (olddecl)
2121 	    = DECL_SOURCE_LOCATION (old_result)
2122 	    = DECL_SOURCE_LOCATION (newdecl);
2123 	  DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
2124 	  if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2125 	    {
2126 	      tree parm;
2127 	      DECL_ARGUMENTS (old_result)
2128 		= DECL_ARGUMENTS (new_result);
2129 	      for (parm = DECL_ARGUMENTS (old_result); parm;
2130 		   parm = DECL_CHAIN (parm))
2131 		DECL_CONTEXT (parm) = old_result;
2132 	    }
2133 	}
2134 
2135       return olddecl;
2136     }
2137 
2138   if (types_match)
2139     {
2140       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2141 	check_redeclaration_exception_specification (newdecl, olddecl);
2142 
2143       /* Automatically handles default parameters.  */
2144       tree oldtype = TREE_TYPE (olddecl);
2145       tree newtype;
2146 
2147       /* For typedefs use the old type, as the new type's DECL_NAME points
2148 	 at newdecl, which will be ggc_freed.  */
2149       if (TREE_CODE (newdecl) == TYPE_DECL)
2150 	{
2151 	  /* But NEWTYPE might have an attribute, honor that.  */
2152 	  tree tem = TREE_TYPE (newdecl);
2153 	  newtype = oldtype;
2154 
2155 	  if (TYPE_USER_ALIGN (tem))
2156 	    {
2157 	      if (TYPE_ALIGN (tem) > TYPE_ALIGN (newtype))
2158 		SET_TYPE_ALIGN (newtype, TYPE_ALIGN (tem));
2159 	      TYPE_USER_ALIGN (newtype) = true;
2160 	    }
2161 
2162 	  /* And remove the new type from the variants list.  */
2163 	  if (TYPE_NAME (TREE_TYPE (newdecl)) == newdecl)
2164 	    {
2165 	      tree remove = TREE_TYPE (newdecl);
2166 	      for (tree t = TYPE_MAIN_VARIANT (remove); ;
2167 		   t = TYPE_NEXT_VARIANT (t))
2168 		if (TYPE_NEXT_VARIANT (t) == remove)
2169 		  {
2170 		    TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove);
2171 		    break;
2172 		  }
2173 	    }
2174 	}
2175       else if (merge_attr)
2176 	newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
2177       else
2178 	newtype = TREE_TYPE (newdecl);
2179 
2180       if (VAR_P (newdecl))
2181 	{
2182 	  DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
2183 	  /* For already initialized vars, TREE_READONLY could have been
2184 	     cleared in cp_finish_decl, because the var needs runtime
2185 	     initialization or destruction.  Make sure not to set
2186 	     TREE_READONLY on it again.  */
2187 	  if (DECL_INITIALIZED_P (olddecl)
2188 	      && !DECL_EXTERNAL (olddecl)
2189 	      && !TREE_READONLY (olddecl))
2190 	    TREE_READONLY (newdecl) = 0;
2191 	  DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
2192 	  DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
2193 	    |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
2194 	  if (DECL_DEPENDENT_INIT_P (olddecl))
2195 	    SET_DECL_DEPENDENT_INIT_P (newdecl, true);
2196 	  DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
2197 	    |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
2198           if (DECL_CLASS_SCOPE_P (olddecl))
2199             DECL_DECLARED_CONSTEXPR_P (newdecl)
2200 	      |= DECL_DECLARED_CONSTEXPR_P (olddecl);
2201 
2202 	  /* Merge the threadprivate attribute from OLDDECL into NEWDECL.  */
2203 	  if (DECL_LANG_SPECIFIC (olddecl)
2204 	      && CP_DECL_THREADPRIVATE_P (olddecl))
2205 	    {
2206 	      /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed.  */
2207 	      retrofit_lang_decl (newdecl);
2208 	      CP_DECL_THREADPRIVATE_P (newdecl) = 1;
2209 	    }
2210 	}
2211 
2212       /* An explicit specialization of a function template or of a member
2213 	 function of a class template can be declared transaction_safe
2214 	 independently of whether the corresponding template entity is declared
2215 	 transaction_safe. */
2216       if (flag_tm && TREE_CODE (newdecl) == FUNCTION_DECL
2217 	  && DECL_TEMPLATE_INSTANTIATION (olddecl)
2218 	  && DECL_TEMPLATE_SPECIALIZATION (newdecl)
2219 	  && tx_safe_fn_type_p (newtype)
2220 	  && !tx_safe_fn_type_p (TREE_TYPE (newdecl)))
2221 	newtype = tx_unsafe_fn_variant (newtype);
2222 
2223       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
2224 
2225       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2226 	check_default_args (newdecl);
2227 
2228       /* Lay the type out, unless already done.  */
2229       if (! same_type_p (newtype, oldtype)
2230 	  && TREE_TYPE (newdecl) != error_mark_node
2231 	  && !(processing_template_decl && uses_template_parms (newdecl)))
2232 	layout_type (TREE_TYPE (newdecl));
2233 
2234       if ((VAR_P (newdecl)
2235 	   || TREE_CODE (newdecl) == PARM_DECL
2236 	   || TREE_CODE (newdecl) == RESULT_DECL
2237 	   || TREE_CODE (newdecl) == FIELD_DECL
2238 	   || TREE_CODE (newdecl) == TYPE_DECL)
2239 	  && !(processing_template_decl && uses_template_parms (newdecl)))
2240 	layout_decl (newdecl, 0);
2241 
2242       /* Merge deprecatedness.  */
2243       if (TREE_DEPRECATED (newdecl))
2244 	TREE_DEPRECATED (olddecl) = 1;
2245 
2246       /* Preserve function specific target and optimization options */
2247       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2248 	{
2249 	  if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2250 	      && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2251 	    DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2252 	      = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2253 
2254 	  if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2255 	      && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2256 	    DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2257 	      = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2258 	}
2259       else
2260 	{
2261 	  /* Merge the const type qualifier.  */
2262 	  if (TREE_READONLY (newdecl))
2263 	    TREE_READONLY (olddecl) = 1;
2264 	  /* Merge the volatile type qualifier.  */
2265 	  if (TREE_THIS_VOLATILE (newdecl))
2266 	    TREE_THIS_VOLATILE (olddecl) = 1;
2267 	}
2268 
2269       /* Merge the initialization information.  */
2270       if (DECL_INITIAL (newdecl) == NULL_TREE
2271 	  && DECL_INITIAL (olddecl) != NULL_TREE)
2272 	{
2273 	  DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2274 	  DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2275 	  if (TREE_CODE (newdecl) == FUNCTION_DECL)
2276 	    {
2277 	      DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2278 	      DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2279 	    }
2280 	}
2281 
2282       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2283 	{
2284 	  DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2285 	    |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2286 	  DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2287 	  DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2288 	  DECL_LOOPING_CONST_OR_PURE_P (newdecl)
2289 	    |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2290 
2291 	  if (merge_attr)
2292 	    merge_attribute_bits (newdecl, olddecl);
2293 	  else
2294 	    {
2295 	      /* Merge the noreturn bit.  */
2296 	      TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2297 	      TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2298 	      TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2299 	      DECL_IS_MALLOC (olddecl) = DECL_IS_MALLOC (newdecl);
2300 	      DECL_PURE_P (olddecl) = DECL_PURE_P (newdecl);
2301 	    }
2302 	  /* Keep the old RTL.  */
2303 	  COPY_DECL_RTL (olddecl, newdecl);
2304 	}
2305       else if (VAR_P (newdecl)
2306 	       && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2307 	{
2308 	  /* Keep the old RTL.  We cannot keep the old RTL if the old
2309 	     declaration was for an incomplete object and the new
2310 	     declaration is not since many attributes of the RTL will
2311 	     change.  */
2312 	  COPY_DECL_RTL (olddecl, newdecl);
2313 	}
2314     }
2315   /* If cannot merge, then use the new type and qualifiers,
2316      and don't preserve the old rtl.  */
2317   else
2318     {
2319       /* Clean out any memory we had of the old declaration.  */
2320       tree oldstatic = value_member (olddecl, static_aggregates);
2321       if (oldstatic)
2322 	TREE_VALUE (oldstatic) = error_mark_node;
2323 
2324       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2325       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2326       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2327       TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2328       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2329     }
2330 
2331   /* Merge the storage class information.  */
2332   merge_weak (newdecl, olddecl);
2333 
2334   DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2335   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2336   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2337   if (! DECL_EXTERNAL (olddecl))
2338     DECL_EXTERNAL (newdecl) = 0;
2339   if (! DECL_COMDAT (olddecl))
2340     DECL_COMDAT (newdecl) = 0;
2341 
2342   new_template_info = NULL_TREE;
2343   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2344     {
2345       bool new_redefines_gnu_inline = false;
2346 
2347       if (new_defines_function
2348 	  && ((DECL_INTERFACE_KNOWN (olddecl)
2349 	       && TREE_CODE (olddecl) == FUNCTION_DECL)
2350 	      || (TREE_CODE (olddecl) == TEMPLATE_DECL
2351 		  && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2352 		      == FUNCTION_DECL))))
2353 	{
2354 	  tree fn = olddecl;
2355 
2356 	  if (TREE_CODE (fn) == TEMPLATE_DECL)
2357 	    fn = DECL_TEMPLATE_RESULT (olddecl);
2358 
2359 	  new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
2360 	}
2361 
2362       if (!new_redefines_gnu_inline)
2363 	{
2364 	  DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2365 	  DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2366 	  DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2367 	}
2368       DECL_TEMPLATE_INSTANTIATED (newdecl)
2369 	|= DECL_TEMPLATE_INSTANTIATED (olddecl);
2370       DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2371 
2372       /* If the OLDDECL is an instantiation and/or specialization,
2373 	 then the NEWDECL must be too.  But, it may not yet be marked
2374 	 as such if the caller has created NEWDECL, but has not yet
2375 	 figured out that it is a redeclaration.  */
2376       if (!DECL_USE_TEMPLATE (newdecl))
2377 	DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2378 
2379       /* Don't really know how much of the language-specific
2380 	 values we should copy from old to new.  */
2381       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2382       DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2383       DECL_INITIALIZED_IN_CLASS_P (newdecl)
2384 	|= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2385 
2386       if (LANG_DECL_HAS_MIN (newdecl))
2387 	{
2388 	  DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2389 	    DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2390 	  if (DECL_TEMPLATE_INFO (newdecl))
2391 	    {
2392 	      new_template_info = DECL_TEMPLATE_INFO (newdecl);
2393 	      if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2394 		  && DECL_TEMPLATE_SPECIALIZATION (newdecl))
2395 		/* Remember the presence of explicit specialization args.  */
2396 		TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (olddecl))
2397 		  = TINFO_USED_TEMPLATE_ID (new_template_info);
2398 	    }
2399 	  DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2400 	}
2401       /* Only functions have these fields.  */
2402       if (DECL_DECLARES_FUNCTION_P (newdecl))
2403 	{
2404 	  DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2405 	  DECL_BEFRIENDING_CLASSES (newdecl)
2406 	    = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2407 		       DECL_BEFRIENDING_CLASSES (olddecl));
2408 	  /* DECL_THUNKS is only valid for virtual functions,
2409 	     otherwise it is a DECL_FRIEND_CONTEXT.  */
2410 	  if (DECL_VIRTUAL_P (newdecl))
2411 	    SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2412 	}
2413       /* Only variables have this field.  */
2414       else if (VAR_P (newdecl)
2415 	       && VAR_HAD_UNKNOWN_BOUND (olddecl))
2416 	SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2417     }
2418 
2419   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2420     {
2421       tree parm;
2422 
2423       /* Merge parameter attributes. */
2424       tree oldarg, newarg;
2425       for (oldarg = DECL_ARGUMENTS(olddecl),
2426                newarg = DECL_ARGUMENTS(newdecl);
2427            oldarg && newarg;
2428            oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2429           DECL_ATTRIBUTES (newarg)
2430               = (*targetm.merge_decl_attributes) (oldarg, newarg);
2431           DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2432       }
2433 
2434       if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2435 	  && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2436 	{
2437 	  /* If newdecl is not a specialization, then it is not a
2438 	     template-related function at all.  And that means that we
2439 	     should have exited above, returning 0.  */
2440 	  gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2441 
2442 	  if (DECL_ODR_USED (olddecl))
2443 	    /* From [temp.expl.spec]:
2444 
2445 	       If a template, a member template or the member of a class
2446 	       template is explicitly specialized then that
2447 	       specialization shall be declared before the first use of
2448 	       that specialization that would cause an implicit
2449 	       instantiation to take place, in every translation unit in
2450 	       which such a use occurs.  */
2451 	    error ("explicit specialization of %qD after first use",
2452 		      olddecl);
2453 
2454 	  SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2455 	  DECL_COMDAT (newdecl) = (TREE_PUBLIC (newdecl)
2456 				   && DECL_DECLARED_INLINE_P (newdecl));
2457 
2458 	  /* Don't propagate visibility from the template to the
2459 	     specialization here.  We'll do that in determine_visibility if
2460 	     appropriate.  */
2461 	  DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2462 
2463 	  /* [temp.expl.spec/14] We don't inline explicit specialization
2464 	     just because the primary template says so.  */
2465 	  gcc_assert (!merge_attr);
2466 
2467 	  DECL_DECLARED_INLINE_P (olddecl)
2468 	    = DECL_DECLARED_INLINE_P (newdecl);
2469 
2470 	  DECL_DISREGARD_INLINE_LIMITS (olddecl)
2471 	    = DECL_DISREGARD_INLINE_LIMITS (newdecl);
2472 
2473 	  DECL_UNINLINABLE (olddecl) = DECL_UNINLINABLE (newdecl);
2474 	}
2475       else if (new_defines_function && DECL_INITIAL (olddecl))
2476 	{
2477 	  /* Never inline re-defined extern inline functions.
2478 	     FIXME: this could be better handled by keeping both
2479 	     function as separate declarations.  */
2480 	  DECL_UNINLINABLE (newdecl) = 1;
2481 	}
2482       else
2483 	{
2484 	  if (DECL_PENDING_INLINE_P (olddecl))
2485 	    {
2486 	      DECL_PENDING_INLINE_P (newdecl) = 1;
2487 	      DECL_PENDING_INLINE_INFO (newdecl)
2488 		= DECL_PENDING_INLINE_INFO (olddecl);
2489 	    }
2490 	  else if (DECL_PENDING_INLINE_P (newdecl))
2491 	    ;
2492 	  else if (DECL_SAVED_FUNCTION_DATA (newdecl) == NULL)
2493 	    DECL_SAVED_FUNCTION_DATA (newdecl)
2494 	      = DECL_SAVED_FUNCTION_DATA (olddecl);
2495 
2496 	  DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2497 
2498 	  DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2499 	    = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2500 
2501 	  DECL_DISREGARD_INLINE_LIMITS (newdecl)
2502 	    = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2503 	    = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2504 	       || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2505 	}
2506 
2507       /* Preserve abstractness on cloned [cd]tors.  */
2508       DECL_ABSTRACT_P (newdecl) = DECL_ABSTRACT_P (olddecl);
2509 
2510       /* Update newdecl's parms to point at olddecl.  */
2511       for (parm = DECL_ARGUMENTS (newdecl); parm;
2512 	   parm = DECL_CHAIN (parm))
2513 	DECL_CONTEXT (parm) = olddecl;
2514 
2515       if (! types_match)
2516 	{
2517 	  SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2518 	  COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2519 	  COPY_DECL_RTL (newdecl, olddecl);
2520 	}
2521       if (! types_match || new_defines_function)
2522 	{
2523 	  /* These need to be copied so that the names are available.
2524 	     Note that if the types do match, we'll preserve inline
2525 	     info and other bits, but if not, we won't.  */
2526 	  DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2527 	  DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2528 	}
2529       /* If redeclaring a builtin function, it stays built in
2530 	 if newdecl is a gnu_inline definition, or if newdecl is just
2531 	 a declaration.  */
2532       if (DECL_BUILT_IN (olddecl)
2533 	  && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2534 	{
2535 	  DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2536 	  DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2537 	  /* If we're keeping the built-in definition, keep the rtl,
2538 	     regardless of declaration matches.  */
2539 	  COPY_DECL_RTL (olddecl, newdecl);
2540 	  if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2541 	    {
2542 	      enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2543 	      switch (fncode)
2544 		{
2545 		  /* If a compatible prototype of these builtin functions
2546 		     is seen, assume the runtime implements it with the
2547 		     expected semantics.  */
2548 		case BUILT_IN_STPCPY:
2549 		  if (builtin_decl_explicit_p (fncode))
2550 		    set_builtin_decl_implicit_p (fncode, true);
2551 		  break;
2552 		default:
2553 		  if (builtin_decl_explicit_p (fncode))
2554 		    set_builtin_decl_declared_p (fncode, true);
2555 		  break;
2556 		}
2557 	    }
2558 
2559 	  copy_attributes_to_builtin (newdecl);
2560 	}
2561       if (new_defines_function)
2562 	/* If defining a function declared with other language
2563 	   linkage, use the previously declared language linkage.  */
2564 	SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2565       else if (types_match)
2566 	{
2567 	  DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2568 	  /* Don't clear out the arguments if we're just redeclaring a
2569 	     function.  */
2570 	  if (DECL_ARGUMENTS (olddecl))
2571 	    DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2572 	}
2573     }
2574   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2575     NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2576 
2577   /* Now preserve various other info from the definition.  */
2578   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2579   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2580   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2581   COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2582 
2583   /* Warn about conflicting visibility specifications.  */
2584   if (DECL_VISIBILITY_SPECIFIED (olddecl)
2585       && DECL_VISIBILITY_SPECIFIED (newdecl)
2586       && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2587     {
2588       if (warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wattributes,
2589 		      "%qD: visibility attribute ignored because it "
2590 		      "conflicts with previous declaration", newdecl))
2591 	inform (DECL_SOURCE_LOCATION (olddecl),
2592 		"previous declaration of %qD", olddecl);
2593     }
2594   /* Choose the declaration which specified visibility.  */
2595   if (DECL_VISIBILITY_SPECIFIED (olddecl))
2596     {
2597       DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2598       DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2599     }
2600   /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2601      so keep this behavior.  */
2602   if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2603     {
2604       SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2605       DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2606     }
2607   /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED.  */
2608   if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2609     {
2610       SET_DECL_ALIGN (newdecl, DECL_ALIGN (olddecl));
2611       DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2612     }
2613   DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2614   if (DECL_WARN_IF_NOT_ALIGN (olddecl)
2615       > DECL_WARN_IF_NOT_ALIGN (newdecl))
2616     SET_DECL_WARN_IF_NOT_ALIGN (newdecl,
2617 				DECL_WARN_IF_NOT_ALIGN (olddecl));
2618   if (TREE_CODE (newdecl) == FIELD_DECL)
2619     DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2620 
2621   /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2622      with that from NEWDECL below.  */
2623   if (DECL_LANG_SPECIFIC (olddecl))
2624     {
2625       gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2626 		  != DECL_LANG_SPECIFIC (newdecl));
2627       ggc_free (DECL_LANG_SPECIFIC (olddecl));
2628     }
2629 
2630   /* Merge the USED information.  */
2631   if (TREE_USED (olddecl))
2632     TREE_USED (newdecl) = 1;
2633   else if (TREE_USED (newdecl))
2634     TREE_USED (olddecl) = 1;
2635   if (VAR_P (newdecl))
2636     {
2637       if (DECL_READ_P (olddecl))
2638 	DECL_READ_P (newdecl) = 1;
2639       else if (DECL_READ_P (newdecl))
2640 	DECL_READ_P (olddecl) = 1;
2641     }
2642   if (DECL_PRESERVE_P (olddecl))
2643     DECL_PRESERVE_P (newdecl) = 1;
2644   else if (DECL_PRESERVE_P (newdecl))
2645     DECL_PRESERVE_P (olddecl) = 1;
2646 
2647   /* Merge the DECL_FUNCTION_VERSIONED information.  newdecl will be copied
2648      to olddecl and deleted.  */
2649   if (TREE_CODE (newdecl) == FUNCTION_DECL
2650       && DECL_FUNCTION_VERSIONED (olddecl))
2651     {
2652       /* Set the flag for newdecl so that it gets copied to olddecl.  */
2653       DECL_FUNCTION_VERSIONED (newdecl) = 1;
2654       /* newdecl will be purged after copying to olddecl and is no longer
2655          a version.  */
2656       cgraph_node::delete_function_version_by_decl (newdecl);
2657     }
2658 
2659   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2660     {
2661       int function_size;
2662       struct symtab_node *snode = symtab_node::get (olddecl);
2663 
2664       function_size = sizeof (struct tree_decl_common);
2665 
2666       memcpy ((char *) olddecl + sizeof (struct tree_common),
2667 	      (char *) newdecl + sizeof (struct tree_common),
2668 	      function_size - sizeof (struct tree_common));
2669 
2670       memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2671 	      (char *) newdecl + sizeof (struct tree_decl_common),
2672 	      sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2673 
2674       /* Preserve symtab node mapping.  */
2675       olddecl->decl_with_vis.symtab_node = snode;
2676 
2677       if (new_template_info)
2678 	/* If newdecl is a template instantiation, it is possible that
2679 	   the following sequence of events has occurred:
2680 
2681 	   o A friend function was declared in a class template.  The
2682 	   class template was instantiated.
2683 
2684 	   o The instantiation of the friend declaration was
2685 	   recorded on the instantiation list, and is newdecl.
2686 
2687 	   o Later, however, instantiate_class_template called pushdecl
2688 	   on the newdecl to perform name injection.  But, pushdecl in
2689 	   turn called duplicate_decls when it discovered that another
2690 	   declaration of a global function with the same name already
2691 	   existed.
2692 
2693 	   o Here, in duplicate_decls, we decided to clobber newdecl.
2694 
2695 	   If we're going to do that, we'd better make sure that
2696 	   olddecl, and not newdecl, is on the list of
2697 	   instantiations so that if we try to do the instantiation
2698 	   again we won't get the clobbered declaration.  */
2699 	reregister_specialization (newdecl,
2700 				   new_template_info,
2701 				   olddecl);
2702     }
2703   else
2704     {
2705       size_t size = tree_code_size (TREE_CODE (newdecl));
2706 
2707       memcpy ((char *) olddecl + sizeof (struct tree_common),
2708 	      (char *) newdecl + sizeof (struct tree_common),
2709 	      sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2710       switch (TREE_CODE (newdecl))
2711 	{
2712 	case LABEL_DECL:
2713 	case VAR_DECL:
2714 	case RESULT_DECL:
2715 	case PARM_DECL:
2716 	case FIELD_DECL:
2717 	case TYPE_DECL:
2718 	case CONST_DECL:
2719 	  {
2720             struct symtab_node *snode = NULL;
2721 
2722 	    if (VAR_P (newdecl)
2723 		&& (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl)
2724 		    || DECL_EXTERNAL (olddecl)))
2725 	      snode = symtab_node::get (olddecl);
2726 	    memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2727 		    (char *) newdecl + sizeof (struct tree_decl_common),
2728 		    size - sizeof (struct tree_decl_common)
2729 		    + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2730 	    if (VAR_P (newdecl))
2731 	      olddecl->decl_with_vis.symtab_node = snode;
2732 	  }
2733 	  break;
2734 	default:
2735 	  memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2736 		  (char *) newdecl + sizeof (struct tree_decl_common),
2737 		  sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2738 		  + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2739 	  break;
2740 	}
2741     }
2742 
2743   if (VAR_OR_FUNCTION_DECL_P (newdecl))
2744     {
2745       if (DECL_EXTERNAL (olddecl)
2746 	  || TREE_PUBLIC (olddecl)
2747 	  || TREE_STATIC (olddecl))
2748 	{
2749 	  /* Merge the section attribute.
2750 	     We want to issue an error if the sections conflict but that must be
2751 	     done later in decl_attributes since we are called before attributes
2752 	     are assigned.  */
2753 	  if (DECL_SECTION_NAME (newdecl) != NULL)
2754 	    set_decl_section_name (olddecl, DECL_SECTION_NAME (newdecl));
2755 
2756 	  if (DECL_ONE_ONLY (newdecl))
2757 	    {
2758 	      struct symtab_node *oldsym, *newsym;
2759 	      if (TREE_CODE (olddecl) == FUNCTION_DECL)
2760 		oldsym = cgraph_node::get_create (olddecl);
2761 	      else
2762 		oldsym = varpool_node::get_create (olddecl);
2763 	      newsym = symtab_node::get (newdecl);
2764 	      oldsym->set_comdat_group (newsym->get_comdat_group ());
2765 	    }
2766 	}
2767 
2768       if (VAR_P (newdecl)
2769 	  && CP_DECL_THREAD_LOCAL_P (newdecl))
2770 	{
2771 	  CP_DECL_THREAD_LOCAL_P (olddecl) = true;
2772 	  if (!processing_template_decl)
2773 	    set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl));
2774 	}
2775     }
2776 
2777   DECL_UID (olddecl) = olddecl_uid;
2778   if (olddecl_friend)
2779     DECL_FRIEND_P (olddecl) = 1;
2780   if (hidden_friend)
2781     {
2782       DECL_ANTICIPATED (olddecl) = 1;
2783       DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2784     }
2785 
2786   /* NEWDECL contains the merged attribute lists.
2787      Update OLDDECL to be the same.  */
2788   DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2789 
2790   /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2791     so that encode_section_info has a chance to look at the new decl
2792     flags and attributes.  */
2793   if (DECL_RTL_SET_P (olddecl)
2794       && (TREE_CODE (olddecl) == FUNCTION_DECL
2795 	  || (VAR_P (olddecl)
2796 	      && TREE_STATIC (olddecl))))
2797     make_decl_rtl (olddecl);
2798 
2799   /* The NEWDECL will no longer be needed.  Because every out-of-class
2800      declaration of a member results in a call to duplicate_decls,
2801      freeing these nodes represents in a significant savings.
2802 
2803      Before releasing the node, be sore to remove function from symbol
2804      table that might have been inserted there to record comdat group.
2805      Be sure to however do not free DECL_STRUCT_FUNCTION because this
2806      structure is shared in between newdecl and oldecl.  */
2807   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2808     DECL_STRUCT_FUNCTION (newdecl) = NULL;
2809   if (VAR_OR_FUNCTION_DECL_P (newdecl))
2810     {
2811       struct symtab_node *snode = symtab_node::get (newdecl);
2812       if (snode)
2813 	snode->remove ();
2814     }
2815 
2816   /* Remove the associated constraints for newdecl, if any, before
2817      reclaiming memory. */
2818   if (flag_concepts)
2819     remove_constraints (newdecl);
2820 
2821   ggc_free (newdecl);
2822 
2823   return olddecl;
2824 }
2825 
2826 /* Return zero if the declaration NEWDECL is valid
2827    when the declaration OLDDECL (assumed to be for the same name)
2828    has already been seen.
2829    Otherwise return an error message format string with a %s
2830    where the identifier should go.  */
2831 
2832 static const char *
2833 redeclaration_error_message (tree newdecl, tree olddecl)
2834 {
2835   if (TREE_CODE (newdecl) == TYPE_DECL)
2836     {
2837       /* Because C++ can put things into name space for free,
2838 	 constructs like "typedef struct foo { ... } foo"
2839 	 would look like an erroneous redeclaration.  */
2840       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2841 	return NULL;
2842       else
2843 	return G_("redefinition of %q#D");
2844     }
2845   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2846     {
2847       /* If this is a pure function, its olddecl will actually be
2848 	 the original initialization to `0' (which we force to call
2849 	 abort()).  Don't complain about redefinition in this case.  */
2850       if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2851 	  && DECL_INITIAL (olddecl) == NULL_TREE)
2852 	return NULL;
2853 
2854       /* If both functions come from different namespaces, this is not
2855 	 a redeclaration - this is a conflict with a used function.  */
2856       if (DECL_NAMESPACE_SCOPE_P (olddecl)
2857 	  && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2858 	  && ! decls_match (olddecl, newdecl))
2859 	return G_("%qD conflicts with used function");
2860 
2861       /* We'll complain about linkage mismatches in
2862 	 warn_extern_redeclared_static.  */
2863 
2864       /* Defining the same name twice is no good.  */
2865       if (decl_defined_p (olddecl)
2866 	  && decl_defined_p (newdecl))
2867 	{
2868 	  if (DECL_NAME (olddecl) == NULL_TREE)
2869 	    return G_("%q#D not declared in class");
2870 	  else if (!GNU_INLINE_P (olddecl)
2871 		   || GNU_INLINE_P (newdecl))
2872 	    return G_("redefinition of %q#D");
2873 	}
2874 
2875       if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2876 	{
2877 	  bool olda = GNU_INLINE_P (olddecl);
2878 	  bool newa = GNU_INLINE_P (newdecl);
2879 
2880 	  if (olda != newa)
2881 	    {
2882 	      if (newa)
2883 		return G_("%q+D redeclared inline with "
2884 			  "%<gnu_inline%> attribute");
2885 	      else
2886 		return G_("%q+D redeclared inline without "
2887 			  "%<gnu_inline%> attribute");
2888 	    }
2889 	}
2890 
2891       check_abi_tag_redeclaration
2892 	(olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
2893 	 lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
2894 
2895       return NULL;
2896     }
2897   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2898     {
2899       tree nt, ot;
2900 
2901       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2902 	{
2903 	  if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2904 	      && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2905 	    return G_("redefinition of %q#D");
2906 	  return NULL;
2907 	}
2908 
2909       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2910 	  || (DECL_TEMPLATE_RESULT (newdecl)
2911 	      == DECL_TEMPLATE_RESULT (olddecl)))
2912 	return NULL;
2913 
2914       nt = DECL_TEMPLATE_RESULT (newdecl);
2915       if (DECL_TEMPLATE_INFO (nt))
2916 	nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2917       ot = DECL_TEMPLATE_RESULT (olddecl);
2918       if (DECL_TEMPLATE_INFO (ot))
2919 	ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2920       if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2921 	  && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2922 	return G_("redefinition of %q#D");
2923 
2924       if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2925 	{
2926 	  bool olda = GNU_INLINE_P (ot);
2927 	  bool newa = GNU_INLINE_P (nt);
2928 
2929 	  if (olda != newa)
2930 	    {
2931 	      if (newa)
2932 		return G_("%q+D redeclared inline with "
2933 			  "%<gnu_inline%> attribute");
2934 	      else
2935 		return G_("%q+D redeclared inline without "
2936 		     	  "%<gnu_inline%> attribute");
2937 	    }
2938 	}
2939 
2940       /* Core issue #226 (C++0x):
2941 
2942            If a friend function template declaration specifies a
2943            default template-argument, that declaration shall be a
2944            definition and shall be the only declaration of the
2945            function template in the translation unit.  */
2946       if ((cxx_dialect != cxx98)
2947           && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2948           && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2949                                        /*is_primary=*/true,
2950 				       /*is_partial=*/false,
2951                                        /*is_friend_decl=*/2))
2952         return G_("redeclaration of friend %q#D "
2953 	 	  "may not have default template arguments");
2954 
2955       return NULL;
2956     }
2957   else if (VAR_P (newdecl)
2958 	   && CP_DECL_THREAD_LOCAL_P (newdecl) != CP_DECL_THREAD_LOCAL_P (olddecl)
2959 	   && (! DECL_LANG_SPECIFIC (olddecl)
2960 	       || ! CP_DECL_THREADPRIVATE_P (olddecl)
2961 	       || CP_DECL_THREAD_LOCAL_P (newdecl)))
2962     {
2963       /* Only variables can be thread-local, and all declarations must
2964 	 agree on this property.  */
2965       if (CP_DECL_THREAD_LOCAL_P (newdecl))
2966 	return G_("thread-local declaration of %q#D follows "
2967 	          "non-thread-local declaration");
2968       else
2969 	return G_("non-thread-local declaration of %q#D follows "
2970 	          "thread-local declaration");
2971     }
2972   else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2973     {
2974       /* The objects have been declared at namespace scope.  If either
2975 	 is a member of an anonymous union, then this is an invalid
2976 	 redeclaration.  For example:
2977 
2978 	   int i;
2979 	   union { int i; };
2980 
2981 	   is invalid.  */
2982       if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
2983 	  || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
2984 	return G_("redeclaration of %q#D");
2985       /* If at least one declaration is a reference, there is no
2986 	 conflict.  For example:
2987 
2988 	   int i = 3;
2989 	   extern int i;
2990 
2991 	 is valid.  */
2992       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2993 	return NULL;
2994 
2995       /* Static data member declared outside a class definition
2996 	 if the variable is defined within the class with constexpr
2997 	 specifier is declaration rather than definition (and
2998 	 deprecated).  */
2999       if (cxx_dialect >= cxx17
3000 	  && VAR_P (olddecl)
3001 	  && DECL_CLASS_SCOPE_P (olddecl)
3002 	  && DECL_DECLARED_CONSTEXPR_P (olddecl)
3003 	  && !DECL_INITIAL (newdecl))
3004 	{
3005 	  DECL_EXTERNAL (newdecl) = 1;
3006 	  /* For now, only warn with explicit -Wdeprecated.  */
3007 	  if (global_options_set.x_warn_deprecated
3008 	      && warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wdeprecated,
3009 			     "redundant redeclaration of %<constexpr%> static "
3010 			     "data member %qD", newdecl))
3011 	    inform (DECL_SOURCE_LOCATION (olddecl),
3012 		    "previous declaration of %qD", olddecl);
3013 	  return NULL;
3014 	}
3015 
3016       /* Reject two definitions.  */
3017       return G_("redefinition of %q#D");
3018     }
3019   else
3020     {
3021       /* Objects declared with block scope:  */
3022       /* Reject two definitions, and reject a definition
3023 	 together with an external reference.  */
3024       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
3025 	return G_("redeclaration of %q#D");
3026       return NULL;
3027     }
3028 }
3029 
3030 
3031 /* Hash and equality functions for the named_label table.  */
3032 
3033 hashval_t
3034 named_label_hash::hash (const value_type entry)
3035 {
3036   return IDENTIFIER_HASH_VALUE (entry->name);
3037 }
3038 
3039 bool
3040 named_label_hash::equal (const value_type entry, compare_type name)
3041 {
3042   return name == entry->name;
3043 }
3044 
3045 /* Look for a label named ID in the current function.  If one cannot
3046    be found, create one.  Return the named_label_entry, or NULL on
3047    failure.  */
3048 
3049 static named_label_entry *
3050 lookup_label_1 (tree id, bool making_local_p)
3051 {
3052   /* You can't use labels at global scope.  */
3053   if (current_function_decl == NULL_TREE)
3054     {
3055       error ("label %qE referenced outside of any function", id);
3056       return NULL;
3057     }
3058 
3059   if (!named_labels)
3060     named_labels = hash_table<named_label_hash>::create_ggc (13);
3061 
3062   hashval_t hash = IDENTIFIER_HASH_VALUE (id);
3063   named_label_entry **slot
3064     = named_labels->find_slot_with_hash (id, hash, INSERT);
3065   named_label_entry *old = *slot;
3066 
3067   if (old && old->label_decl)
3068     {
3069       if (!making_local_p)
3070 	return old;
3071 
3072       if (old->binding_level == current_binding_level)
3073 	{
3074 	  error ("local label %qE conflicts with existing label", id);
3075 	  inform (DECL_SOURCE_LOCATION (old->label_decl), "previous label");
3076 	  return NULL;
3077 	}
3078     }
3079 
3080   /* We are making a new decl, create or reuse the named_label_entry  */
3081   named_label_entry *ent = NULL;
3082   if (old && !old->label_decl)
3083     ent = old;
3084   else
3085     {
3086       ent = ggc_cleared_alloc<named_label_entry> ();
3087       ent->name = id;
3088       ent->outer = old;
3089       *slot = ent;
3090     }
3091 
3092   /* Now create the LABEL_DECL.  */
3093   tree decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
3094 
3095   DECL_CONTEXT (decl) = current_function_decl;
3096   SET_DECL_MODE (decl, VOIDmode);
3097   if (making_local_p)
3098     {
3099       C_DECLARED_LABEL_FLAG (decl) = true;
3100       DECL_CHAIN (decl) = current_binding_level->names;
3101       current_binding_level->names = decl;
3102     }
3103 
3104   ent->label_decl = decl;
3105 
3106   return ent;
3107 }
3108 
3109 /* Wrapper for lookup_label_1.  */
3110 
3111 tree
3112 lookup_label (tree id)
3113 {
3114   bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3115   named_label_entry *ent = lookup_label_1 (id, false);
3116   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3117   return ent ? ent->label_decl : NULL_TREE;
3118 }
3119 
3120 tree
3121 declare_local_label (tree id)
3122 {
3123   bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3124   named_label_entry *ent = lookup_label_1 (id, true);
3125   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3126   return ent ? ent->label_decl : NULL_TREE;
3127 }
3128 
3129 /* Returns nonzero if it is ill-formed to jump past the declaration of
3130    DECL.  Returns 2 if it's also a real problem.  */
3131 
3132 static int
3133 decl_jump_unsafe (tree decl)
3134 {
3135   /* [stmt.dcl]/3: A program that jumps from a point where a local variable
3136      with automatic storage duration is not in scope to a point where it is
3137      in scope is ill-formed unless the variable has scalar type, class type
3138      with a trivial default constructor and a trivial destructor, a
3139      cv-qualified version of one of these types, or an array of one of the
3140      preceding types and is declared without an initializer (8.5).  */
3141   tree type = TREE_TYPE (decl);
3142 
3143   if (!VAR_P (decl) || TREE_STATIC (decl)
3144       || type == error_mark_node)
3145     return 0;
3146 
3147   if (DECL_NONTRIVIALLY_INITIALIZED_P (decl)
3148       || variably_modified_type_p (type, NULL_TREE))
3149     return 2;
3150 
3151   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3152     return 1;
3153 
3154   return 0;
3155 }
3156 
3157 /* A subroutine of check_previous_goto_1 and check_goto to identify a branch
3158    to the user.  */
3159 
3160 static bool
3161 identify_goto (tree decl, location_t loc, const location_t *locus,
3162 	       diagnostic_t diag_kind)
3163 {
3164   bool complained
3165     = emit_diagnostic (diag_kind, loc, 0,
3166 		       decl ? N_("jump to label %qD")
3167 		       : N_("jump to case label"), decl);
3168   if (complained && locus)
3169     inform (*locus, "  from here");
3170   return complained;
3171 }
3172 
3173 /* Check that a single previously seen jump to a newly defined label
3174    is OK.  DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
3175    the jump context; NAMES are the names in scope in LEVEL at the jump
3176    context; LOCUS is the source position of the jump or 0.  Returns
3177    true if all is well.  */
3178 
3179 static bool
3180 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
3181 		       bool exited_omp, const location_t *locus)
3182 {
3183   cp_binding_level *b;
3184   bool complained = false;
3185   int identified = 0;
3186   bool saw_eh = false, saw_omp = false, saw_tm = false, saw_cxif = false;
3187 
3188   if (exited_omp)
3189     {
3190       complained = identify_goto (decl, input_location, locus, DK_ERROR);
3191       if (complained)
3192 	inform (input_location, "  exits OpenMP structured block");
3193       saw_omp = true;
3194       identified = 2;
3195     }
3196 
3197   for (b = current_binding_level; b ; b = b->level_chain)
3198     {
3199       tree new_decls, old_decls = (b == level ? names : NULL_TREE);
3200 
3201       for (new_decls = b->names; new_decls != old_decls;
3202 	   new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
3203 			: TREE_CHAIN (new_decls)))
3204 	{
3205 	  int problem = decl_jump_unsafe (new_decls);
3206 	  if (! problem)
3207 	    continue;
3208 
3209 	  if (!identified)
3210 	    {
3211 	      complained = identify_goto (decl, input_location, locus,
3212 					  DK_PERMERROR);
3213 	      identified = 1;
3214 	    }
3215 	  if (complained)
3216 	    {
3217 	      if (problem > 1)
3218 		inform (DECL_SOURCE_LOCATION (new_decls),
3219 			"  crosses initialization of %q#D", new_decls);
3220 	      else
3221 		inform (DECL_SOURCE_LOCATION (new_decls),
3222 			"  enters scope of %q#D, which has "
3223 			"non-trivial destructor", new_decls);
3224 	    }
3225 	}
3226 
3227       if (b == level)
3228 	break;
3229 
3230       const char *inf = NULL;
3231       location_t loc = input_location;
3232       switch (b->kind)
3233 	{
3234 	case sk_try:
3235 	  if (!saw_eh)
3236 	    inf = N_("enters try block");
3237 	  saw_eh = true;
3238 	  break;
3239 
3240 	case sk_catch:
3241 	  if (!saw_eh)
3242 	    inf = N_("enters catch block");
3243 	  saw_eh = true;
3244 	  break;
3245 
3246 	case sk_omp:
3247 	  if (!saw_omp)
3248 	    inf = N_("enters OpenMP structured block");
3249 	  saw_omp = true;
3250 	  break;
3251 
3252 	case sk_transaction:
3253 	  if (!saw_tm)
3254 	    inf = N_("enters synchronized or atomic statement");
3255 	  saw_tm = true;
3256 	  break;
3257 
3258 	case sk_block:
3259 	  if (!saw_cxif && level_for_constexpr_if (b->level_chain))
3260 	    {
3261 	      inf = N_("enters constexpr if statement");
3262 	      loc = EXPR_LOCATION (b->level_chain->this_entity);
3263 	      saw_cxif = true;
3264 	    }
3265 	  break;
3266 
3267 	default:
3268 	  break;
3269 	}
3270 
3271       if (inf)
3272 	{
3273 	  if (identified < 2)
3274 	    complained = identify_goto (decl, input_location, locus, DK_ERROR);
3275 	  identified = 2;
3276 	  if (complained)
3277 	    inform (loc, "  %s", inf);
3278 	}
3279     }
3280 
3281   return !identified;
3282 }
3283 
3284 static void
3285 check_previous_goto (tree decl, struct named_label_use_entry *use)
3286 {
3287   check_previous_goto_1 (decl, use->binding_level,
3288 			 use->names_in_scope, use->in_omp_scope,
3289 			 &use->o_goto_locus);
3290 }
3291 
3292 static bool
3293 check_switch_goto (cp_binding_level* level)
3294 {
3295   return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
3296 }
3297 
3298 /* Check that a new jump to a label DECL is OK.  Called by
3299    finish_goto_stmt.  */
3300 
3301 void
3302 check_goto (tree decl)
3303 {
3304   /* We can't know where a computed goto is jumping.
3305      So we assume that it's OK.  */
3306   if (TREE_CODE (decl) != LABEL_DECL)
3307     return;
3308 
3309   /* We didn't record any information about this label when we created it,
3310      and there's not much point since it's trivial to analyze as a return.  */
3311   if (decl == cdtor_label)
3312     return;
3313 
3314   hashval_t hash = IDENTIFIER_HASH_VALUE (DECL_NAME (decl));
3315   named_label_entry **slot
3316     = named_labels->find_slot_with_hash (DECL_NAME (decl), hash, NO_INSERT);
3317   named_label_entry *ent = *slot;
3318 
3319   /* If the label hasn't been defined yet, defer checking.  */
3320   if (! DECL_INITIAL (decl))
3321     {
3322       /* Don't bother creating another use if the last goto had the
3323 	 same data, and will therefore create the same set of errors.  */
3324       if (ent->uses
3325 	  && ent->uses->names_in_scope == current_binding_level->names)
3326 	return;
3327 
3328       named_label_use_entry *new_use
3329 	= ggc_alloc<named_label_use_entry> ();
3330       new_use->binding_level = current_binding_level;
3331       new_use->names_in_scope = current_binding_level->names;
3332       new_use->o_goto_locus = input_location;
3333       new_use->in_omp_scope = false;
3334 
3335       new_use->next = ent->uses;
3336       ent->uses = new_use;
3337       return;
3338     }
3339 
3340   bool saw_catch = false, complained = false;
3341   int identified = 0;
3342   tree bad;
3343   unsigned ix;
3344 
3345   if (ent->in_try_scope || ent->in_catch_scope || ent->in_transaction_scope
3346       || ent->in_constexpr_if
3347       || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
3348     {
3349       diagnostic_t diag_kind = DK_PERMERROR;
3350       if (ent->in_try_scope || ent->in_catch_scope || ent->in_constexpr_if
3351 	  || ent->in_transaction_scope || ent->in_omp_scope)
3352 	diag_kind = DK_ERROR;
3353       complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3354 				  &input_location, diag_kind);
3355       identified = 1 + (diag_kind == DK_ERROR);
3356     }
3357 
3358   FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
3359     {
3360       int u = decl_jump_unsafe (bad);
3361 
3362       if (u > 1 && DECL_ARTIFICIAL (bad))
3363 	{
3364 	  /* Can't skip init of __exception_info.  */
3365 	  if (identified == 1)
3366 	    {
3367 	      complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3368 					  &input_location, DK_ERROR);
3369 	      identified = 2;
3370 	    }
3371 	  if (complained)
3372 	    inform (DECL_SOURCE_LOCATION (bad), "  enters catch block");
3373 	  saw_catch = true;
3374 	}
3375       else if (complained)
3376 	{
3377 	  if (u > 1)
3378 	    inform (DECL_SOURCE_LOCATION (bad),
3379 		    "  skips initialization of %q#D", bad);
3380 	  else
3381 	    inform (DECL_SOURCE_LOCATION (bad),
3382 		    "  enters scope of %q#D which has "
3383 		    "non-trivial destructor", bad);
3384 	}
3385     }
3386 
3387   if (complained)
3388     {
3389       if (ent->in_try_scope)
3390 	inform (input_location, "  enters try block");
3391       else if (ent->in_catch_scope && !saw_catch)
3392 	inform (input_location, "  enters catch block");
3393       else if (ent->in_transaction_scope)
3394 	inform (input_location, "  enters synchronized or atomic statement");
3395       else if (ent->in_constexpr_if)
3396 	inform (input_location, "  enters %<constexpr%> if statement");
3397     }
3398 
3399   if (ent->in_omp_scope)
3400     {
3401       if (complained)
3402 	inform (input_location, "  enters OpenMP structured block");
3403     }
3404   else if (flag_openmp)
3405     for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3406       {
3407 	if (b == ent->binding_level)
3408 	  break;
3409 	if (b->kind == sk_omp)
3410 	  {
3411 	    if (identified < 2)
3412 	      {
3413 		complained = identify_goto (decl,
3414 					    DECL_SOURCE_LOCATION (decl),
3415 					    &input_location, DK_ERROR);
3416 		identified = 2;
3417 	      }
3418 	    if (complained)
3419 	      inform (input_location, "  exits OpenMP structured block");
3420 	    break;
3421 	  }
3422       }
3423 }
3424 
3425 /* Check that a return is ok wrt OpenMP structured blocks.
3426    Called by finish_return_stmt.  Returns true if all is well.  */
3427 
3428 bool
3429 check_omp_return (void)
3430 {
3431   for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3432     if (b->kind == sk_omp)
3433       {
3434 	error ("invalid exit from OpenMP structured block");
3435 	return false;
3436       }
3437     else if (b->kind == sk_function_parms)
3438       break;
3439   return true;
3440 }
3441 
3442 /* Define a label, specifying the location in the source file.
3443    Return the LABEL_DECL node for the label.  */
3444 
3445 static tree
3446 define_label_1 (location_t location, tree name)
3447 {
3448   /* After labels, make any new cleanups in the function go into their
3449      own new (temporary) binding contour.  */
3450   for (cp_binding_level *p = current_binding_level;
3451        p->kind != sk_function_parms;
3452        p = p->level_chain)
3453     p->more_cleanups_ok = 0;
3454 
3455   named_label_entry *ent = lookup_label_1 (name, false);
3456   tree decl = ent->label_decl;
3457 
3458   if (DECL_INITIAL (decl) != NULL_TREE)
3459     {
3460       error ("duplicate label %qD", decl);
3461       return error_mark_node;
3462     }
3463   else
3464     {
3465       /* Mark label as having been defined.  */
3466       DECL_INITIAL (decl) = error_mark_node;
3467       /* Say where in the source.  */
3468       DECL_SOURCE_LOCATION (decl) = location;
3469 
3470       ent->binding_level = current_binding_level;
3471       ent->names_in_scope = current_binding_level->names;
3472 
3473       for (named_label_use_entry *use = ent->uses; use; use = use->next)
3474 	check_previous_goto (decl, use);
3475       ent->uses = NULL;
3476     }
3477 
3478   return decl;
3479 }
3480 
3481 /* Wrapper for define_label_1.  */
3482 
3483 tree
3484 define_label (location_t location, tree name)
3485 {
3486   bool running = timevar_cond_start (TV_NAME_LOOKUP);
3487   tree ret = define_label_1 (location, name);
3488   timevar_cond_stop (TV_NAME_LOOKUP, running);
3489   return ret;
3490 }
3491 
3492 
3493 struct cp_switch
3494 {
3495   cp_binding_level *level;
3496   struct cp_switch *next;
3497   /* The SWITCH_STMT being built.  */
3498   tree switch_stmt;
3499   /* A splay-tree mapping the low element of a case range to the high
3500      element, or NULL_TREE if there is no high element.  Used to
3501      determine whether or not a new case label duplicates an old case
3502      label.  We need a tree, rather than simply a hash table, because
3503      of the GNU case range extension.  */
3504   splay_tree cases;
3505   /* Remember whether there was a case value that is outside the
3506      range of the original type of the controlling expression.  */
3507   bool outside_range_p;
3508   /* Remember whether a default: case label has been seen.  */
3509   bool has_default_p;
3510   /* Remember whether a BREAK_STMT has been seen in this SWITCH_STMT.  */
3511   bool break_stmt_seen_p;
3512   /* Set if inside of {FOR,DO,WHILE}_BODY nested inside of a switch,
3513      where BREAK_STMT doesn't belong to the SWITCH_STMT.  */
3514   bool in_loop_body_p;
3515 };
3516 
3517 /* A stack of the currently active switch statements.  The innermost
3518    switch statement is on the top of the stack.  There is no need to
3519    mark the stack for garbage collection because it is only active
3520    during the processing of the body of a function, and we never
3521    collect at that point.  */
3522 
3523 static struct cp_switch *switch_stack;
3524 
3525 /* Called right after a switch-statement condition is parsed.
3526    SWITCH_STMT is the switch statement being parsed.  */
3527 
3528 void
3529 push_switch (tree switch_stmt)
3530 {
3531   struct cp_switch *p = XNEW (struct cp_switch);
3532   p->level = current_binding_level;
3533   p->next = switch_stack;
3534   p->switch_stmt = switch_stmt;
3535   p->cases = splay_tree_new (case_compare, NULL, NULL);
3536   p->outside_range_p = false;
3537   p->has_default_p = false;
3538   p->break_stmt_seen_p = false;
3539   p->in_loop_body_p = false;
3540   switch_stack = p;
3541 }
3542 
3543 void
3544 pop_switch (void)
3545 {
3546   struct cp_switch *cs = switch_stack;
3547   location_t switch_location;
3548 
3549   /* Emit warnings as needed.  */
3550   switch_location = EXPR_LOC_OR_LOC (cs->switch_stmt, input_location);
3551   const bool bool_cond_p
3552     = (SWITCH_STMT_TYPE (cs->switch_stmt)
3553        && TREE_CODE (SWITCH_STMT_TYPE (cs->switch_stmt)) == BOOLEAN_TYPE);
3554   if (!processing_template_decl)
3555     c_do_switch_warnings (cs->cases, switch_location,
3556 			  SWITCH_STMT_TYPE (cs->switch_stmt),
3557 			  SWITCH_STMT_COND (cs->switch_stmt),
3558 			  bool_cond_p, cs->outside_range_p);
3559 
3560   /* For the benefit of block_may_fallthru remember if the switch body
3561      case labels cover all possible values and if there are break; stmts.  */
3562   if (cs->has_default_p
3563       || (!processing_template_decl
3564 	  && c_switch_covers_all_cases_p (cs->cases,
3565 					  SWITCH_STMT_TYPE (cs->switch_stmt))))
3566     SWITCH_STMT_ALL_CASES_P (cs->switch_stmt) = 1;
3567   if (!cs->break_stmt_seen_p)
3568     SWITCH_STMT_NO_BREAK_P (cs->switch_stmt) = 1;
3569   gcc_assert (!cs->in_loop_body_p);
3570   splay_tree_delete (cs->cases);
3571   switch_stack = switch_stack->next;
3572   free (cs);
3573 }
3574 
3575 /* Note that a BREAK_STMT is about to be added.  If it is inside of
3576    a SWITCH_STMT and not inside of a loop body inside of it, note
3577    in switch_stack we've seen a BREAK_STMT.  */
3578 
3579 void
3580 note_break_stmt (void)
3581 {
3582   if (switch_stack && !switch_stack->in_loop_body_p)
3583     switch_stack->break_stmt_seen_p = true;
3584 }
3585 
3586 /* Note the start of processing of an iteration statement's body.
3587    The note_break_stmt function will do nothing while processing it.
3588    Return a flag that should be passed to note_iteration_stmt_body_end.  */
3589 
3590 bool
3591 note_iteration_stmt_body_start (void)
3592 {
3593   if (!switch_stack)
3594     return false;
3595   bool ret = switch_stack->in_loop_body_p;
3596   switch_stack->in_loop_body_p = true;
3597   return ret;
3598 }
3599 
3600 /* Note the end of processing of an iteration statement's body.  */
3601 
3602 void
3603 note_iteration_stmt_body_end (bool prev)
3604 {
3605   if (switch_stack)
3606     switch_stack->in_loop_body_p = prev;
3607 }
3608 
3609 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3610    condition.  Note that if TYPE and VALUE are already integral we don't
3611    really do the conversion because the language-independent
3612    warning/optimization code will work better that way.  */
3613 
3614 static tree
3615 case_conversion (tree type, tree value)
3616 {
3617   if (value == NULL_TREE)
3618     return value;
3619 
3620   value = mark_rvalue_use (value);
3621 
3622   if (cxx_dialect >= cxx11
3623       && (SCOPED_ENUM_P (type)
3624 	  || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3625     {
3626       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3627 	type = type_promotes_to (type);
3628       value = (perform_implicit_conversion_flags
3629 	       (type, value, tf_warning_or_error,
3630 		LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL));
3631     }
3632   return cxx_constant_value (value);
3633 }
3634 
3635 /* Note that we've seen a definition of a case label, and complain if this
3636    is a bad place for one.  */
3637 
3638 tree
3639 finish_case_label (location_t loc, tree low_value, tree high_value)
3640 {
3641   tree cond, r;
3642   cp_binding_level *p;
3643   tree type;
3644 
3645   if (low_value == NULL_TREE && high_value == NULL_TREE)
3646     switch_stack->has_default_p = true;
3647 
3648   if (processing_template_decl)
3649     {
3650       tree label;
3651 
3652       /* For templates, just add the case label; we'll do semantic
3653 	 analysis at instantiation-time.  */
3654       label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3655       return add_stmt (build_case_label (low_value, high_value, label));
3656     }
3657 
3658   /* Find the condition on which this switch statement depends.  */
3659   cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3660   if (cond && TREE_CODE (cond) == TREE_LIST)
3661     cond = TREE_VALUE (cond);
3662 
3663   if (!check_switch_goto (switch_stack->level))
3664     return error_mark_node;
3665 
3666   type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3667 
3668   low_value = case_conversion (type, low_value);
3669   high_value = case_conversion (type, high_value);
3670 
3671   r = c_add_case_label (loc, switch_stack->cases, cond, type,
3672 			low_value, high_value,
3673 			&switch_stack->outside_range_p);
3674 
3675   /* After labels, make any new cleanups in the function go into their
3676      own new (temporary) binding contour.  */
3677   for (p = current_binding_level;
3678        p->kind != sk_function_parms;
3679        p = p->level_chain)
3680     p->more_cleanups_ok = 0;
3681 
3682   return r;
3683 }
3684 
3685 struct typename_info {
3686   tree scope;
3687   tree name;
3688   tree template_id;
3689   bool enum_p;
3690   bool class_p;
3691 };
3692 
3693 struct typename_hasher : ggc_ptr_hash<tree_node>
3694 {
3695   typedef typename_info *compare_type;
3696 
3697   /* Hash a TYPENAME_TYPE.  */
3698 
3699   static hashval_t
3700   hash (tree t)
3701   {
3702     hashval_t hash;
3703 
3704     hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3705 	    ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
3706 
3707     return hash;
3708   }
3709 
3710   /* Compare two TYPENAME_TYPEs.  */
3711 
3712   static bool
3713   equal (tree t1, const typename_info *t2)
3714   {
3715     return (TYPE_IDENTIFIER (t1) == t2->name
3716 	    && TYPE_CONTEXT (t1) == t2->scope
3717 	    && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3718 	    && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3719 	    && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3720   }
3721 };
3722 
3723 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
3724    the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3725 
3726    Returns the new TYPENAME_TYPE.  */
3727 
3728 static GTY (()) hash_table<typename_hasher> *typename_htab;
3729 
3730 tree
3731 build_typename_type (tree context, tree name, tree fullname,
3732 		     enum tag_types tag_type)
3733 {
3734   tree t;
3735   tree d;
3736   typename_info ti;
3737   tree *e;
3738   hashval_t hash;
3739 
3740   if (typename_htab == NULL)
3741     typename_htab = hash_table<typename_hasher>::create_ggc (61);
3742 
3743   ti.scope = FROB_CONTEXT (context);
3744   ti.name = name;
3745   ti.template_id = fullname;
3746   ti.enum_p = tag_type == enum_type;
3747   ti.class_p = (tag_type == class_type
3748 		|| tag_type == record_type
3749 		|| tag_type == union_type);
3750   hash =  (htab_hash_pointer (ti.scope)
3751 	   ^ htab_hash_pointer (ti.name));
3752 
3753   /* See if we already have this type.  */
3754   e = typename_htab->find_slot_with_hash (&ti, hash, INSERT);
3755   if (*e)
3756     t = *e;
3757   else
3758     {
3759       /* Build the TYPENAME_TYPE.  */
3760       t = cxx_make_type (TYPENAME_TYPE);
3761       TYPE_CONTEXT (t) = ti.scope;
3762       TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3763       TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3764       TYPENAME_IS_CLASS_P (t) = ti.class_p;
3765 
3766       /* Build the corresponding TYPE_DECL.  */
3767       d = build_decl (input_location, TYPE_DECL, name, t);
3768       TYPE_NAME (TREE_TYPE (d)) = d;
3769       TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3770       DECL_CONTEXT (d) = FROB_CONTEXT (context);
3771       DECL_ARTIFICIAL (d) = 1;
3772 
3773       /* Store it in the hash table.  */
3774       *e = t;
3775 
3776       /* TYPENAME_TYPEs must always be compared structurally, because
3777 	 they may or may not resolve down to another type depending on
3778 	 the currently open classes. */
3779       SET_TYPE_STRUCTURAL_EQUALITY (t);
3780     }
3781 
3782   return t;
3783 }
3784 
3785 /* Resolve `typename CONTEXT::NAME'.  TAG_TYPE indicates the tag
3786    provided to name the type.  Returns an appropriate type, unless an
3787    error occurs, in which case error_mark_node is returned.  If we
3788    locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3789    return that, rather than the _TYPE it corresponds to, in other
3790    cases we look through the type decl.  If TF_ERROR is set, complain
3791    about errors, otherwise be quiet.  */
3792 
3793 tree
3794 make_typename_type (tree context, tree name, enum tag_types tag_type,
3795 		    tsubst_flags_t complain)
3796 {
3797   tree fullname;
3798   tree t;
3799   bool want_template;
3800 
3801   if (name == error_mark_node
3802       || context == NULL_TREE
3803       || context == error_mark_node)
3804     return error_mark_node;
3805 
3806   if (TYPE_P (name))
3807     {
3808       if (!(TYPE_LANG_SPECIFIC (name)
3809 	    && (CLASSTYPE_IS_TEMPLATE (name)
3810 		|| CLASSTYPE_USE_TEMPLATE (name))))
3811 	name = TYPE_IDENTIFIER (name);
3812       else
3813 	/* Create a TEMPLATE_ID_EXPR for the type.  */
3814 	name = build_nt (TEMPLATE_ID_EXPR,
3815 			 CLASSTYPE_TI_TEMPLATE (name),
3816 			 CLASSTYPE_TI_ARGS (name));
3817     }
3818   else if (TREE_CODE (name) == TYPE_DECL)
3819     name = DECL_NAME (name);
3820 
3821   fullname = name;
3822 
3823   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3824     {
3825       name = TREE_OPERAND (name, 0);
3826       if (DECL_TYPE_TEMPLATE_P (name))
3827 	name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3828       if (TREE_CODE (name) != IDENTIFIER_NODE)
3829 	{
3830 	  if (complain & tf_error)
3831 	    error ("%qD is not a type", name);
3832 	  return error_mark_node;
3833 	}
3834     }
3835   if (TREE_CODE (name) == TEMPLATE_DECL)
3836     {
3837       if (complain & tf_error)
3838 	error ("%qD used without template parameters", name);
3839       return error_mark_node;
3840     }
3841   gcc_assert (identifier_p (name));
3842   gcc_assert (TYPE_P (context));
3843 
3844   if (!MAYBE_CLASS_TYPE_P (context))
3845     {
3846       if (complain & tf_error)
3847 	error ("%q#T is not a class", context);
3848       return error_mark_node;
3849     }
3850 
3851   /* When the CONTEXT is a dependent type,  NAME could refer to a
3852      dependent base class of CONTEXT.  But look inside it anyway
3853      if CONTEXT is a currently open scope, in case it refers to a
3854      member of the current instantiation or a non-dependent base;
3855      lookup will stop when we hit a dependent base.  */
3856   if (!dependent_scope_p (context))
3857     /* We should only set WANT_TYPE when we're a nested typename type.
3858        Then we can give better diagnostics if we find a non-type.  */
3859     t = lookup_field (context, name, 2, /*want_type=*/true);
3860   else
3861     t = NULL_TREE;
3862 
3863   if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3864     return build_typename_type (context, name, fullname, tag_type);
3865 
3866   want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3867 
3868   if (!t)
3869     {
3870       if (complain & tf_error)
3871 	{
3872 	  if (!COMPLETE_TYPE_P (context))
3873 	    cxx_incomplete_type_error (NULL_TREE, context);
3874 	  else
3875 	    error (want_template ? G_("no class template named %q#T in %q#T")
3876 		   : G_("no type named %q#T in %q#T"), name, context);
3877 	}
3878       return error_mark_node;
3879     }
3880 
3881   /* Pull out the template from an injected-class-name (or multiple).  */
3882   if (want_template)
3883     t = maybe_get_template_decl_from_type_decl (t);
3884 
3885   if (TREE_CODE (t) == TREE_LIST)
3886     {
3887       if (complain & tf_error)
3888 	{
3889 	  error ("lookup of %qT in %qT is ambiguous", name, context);
3890 	  print_candidates (t);
3891 	}
3892       return error_mark_node;
3893     }
3894 
3895   if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3896     {
3897       if (complain & tf_error)
3898 	error ("%<typename %T::%D%> names %q#T, which is not a class template",
3899 	       context, name, t);
3900       return error_mark_node;
3901     }
3902   if (!want_template && TREE_CODE (t) != TYPE_DECL)
3903     {
3904       if (complain & tf_error)
3905 	error ("%<typename %T::%D%> names %q#T, which is not a type",
3906 	       context, name, t);
3907       return error_mark_node;
3908     }
3909 
3910   if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3911     return error_mark_node;
3912 
3913   /* If we are currently parsing a template and if T is a typedef accessed
3914      through CONTEXT then we need to remember and check access of T at
3915      template instantiation time.  */
3916   add_typedef_to_current_template_for_access_check (t, context, input_location);
3917 
3918   if (want_template)
3919     return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3920 				  NULL_TREE, context,
3921 				  /*entering_scope=*/0,
3922 				  complain | tf_user);
3923 
3924   if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3925     t = TREE_TYPE (t);
3926 
3927   maybe_record_typedef_use (t);
3928 
3929   return t;
3930 }
3931 
3932 /* Resolve `CONTEXT::template NAME'.  Returns a TEMPLATE_DECL if the name
3933    can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3934    in which case error_mark_node is returned.
3935 
3936    If PARM_LIST is non-NULL, also make sure that the template parameter
3937    list of TEMPLATE_DECL matches.
3938 
3939    If COMPLAIN zero, don't complain about any errors that occur.  */
3940 
3941 tree
3942 make_unbound_class_template (tree context, tree name, tree parm_list,
3943 			     tsubst_flags_t complain)
3944 {
3945   tree t;
3946   tree d;
3947 
3948   if (TYPE_P (name))
3949     name = TYPE_IDENTIFIER (name);
3950   else if (DECL_P (name))
3951     name = DECL_NAME (name);
3952   gcc_assert (identifier_p (name));
3953 
3954   if (!dependent_type_p (context)
3955       || currently_open_class (context))
3956     {
3957       tree tmpl = NULL_TREE;
3958 
3959       if (MAYBE_CLASS_TYPE_P (context))
3960 	tmpl = lookup_field (context, name, 0, false);
3961 
3962       if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3963 	tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3964 
3965       if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3966 	{
3967 	  if (complain & tf_error)
3968 	    error ("no class template named %q#T in %q#T", name, context);
3969 	  return error_mark_node;
3970 	}
3971 
3972       if (parm_list
3973 	  && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3974 	{
3975 	  if (complain & tf_error)
3976 	    {
3977 	      error ("template parameters do not match template %qD", tmpl);
3978 	      inform (DECL_SOURCE_LOCATION (tmpl),
3979 		      "%qD declared here", tmpl);
3980 	    }
3981 	  return error_mark_node;
3982 	}
3983 
3984       if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3985 					  complain))
3986 	return error_mark_node;
3987 
3988       return tmpl;
3989     }
3990 
3991   /* Build the UNBOUND_CLASS_TEMPLATE.  */
3992   t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3993   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3994   TREE_TYPE (t) = NULL_TREE;
3995   SET_TYPE_STRUCTURAL_EQUALITY (t);
3996 
3997   /* Build the corresponding TEMPLATE_DECL.  */
3998   d = build_decl (input_location, TEMPLATE_DECL, name, t);
3999   TYPE_NAME (TREE_TYPE (d)) = d;
4000   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
4001   DECL_CONTEXT (d) = FROB_CONTEXT (context);
4002   DECL_ARTIFICIAL (d) = 1;
4003   DECL_TEMPLATE_PARMS (d) = parm_list;
4004 
4005   return t;
4006 }
4007 
4008 
4009 
4010 /* Push the declarations of builtin types into the global namespace.
4011    RID_INDEX is the index of the builtin type in the array
4012    RID_POINTERS.  NAME is the name used when looking up the builtin
4013    type.  TYPE is the _TYPE node for the builtin type.
4014 
4015    The calls to set_global_binding below should be
4016    eliminated.  Built-in types should not be looked up name; their
4017    names are keywords that the parser can recognize.  However, there
4018    is code in c-common.c that uses identifier_global_value to look up
4019    built-in types by name.  */
4020 
4021 void
4022 record_builtin_type (enum rid rid_index,
4023 		     const char* name,
4024 		     tree type)
4025 {
4026   tree decl = NULL_TREE;
4027 
4028   if (name)
4029     {
4030       tree tname = get_identifier (name);
4031       tree tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
4032       DECL_ARTIFICIAL (tdecl) = 1;
4033       set_global_binding (tdecl);
4034       decl = tdecl;
4035     }
4036 
4037   if ((int) rid_index < (int) RID_MAX)
4038     if (tree rname = ridpointers[(int) rid_index])
4039       if (!decl || DECL_NAME (decl) != rname)
4040 	{
4041 	  tree rdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
4042 	  DECL_ARTIFICIAL (rdecl) = 1;
4043 	  set_global_binding (rdecl);
4044 	  if (!decl)
4045 	    decl = rdecl;
4046 	}
4047 
4048   if (decl)
4049     {
4050       if (!TYPE_NAME (type))
4051 	TYPE_NAME (type) = decl;
4052       debug_hooks->type_decl (decl, 0);
4053     }
4054 }
4055 
4056 /* Push a type into the namespace so that the back ends ignore it.  */
4057 
4058 static void
4059 record_unknown_type (tree type, const char* name)
4060 {
4061   tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
4062 				    TYPE_DECL, get_identifier (name), type));
4063   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
4064   DECL_IGNORED_P (decl) = 1;
4065   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
4066   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
4067   SET_TYPE_ALIGN (type, 1);
4068   TYPE_USER_ALIGN (type) = 0;
4069   SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
4070 }
4071 
4072 /* Create all the predefined identifiers.  */
4073 
4074 static void
4075 initialize_predefined_identifiers (void)
4076 {
4077   struct predefined_identifier
4078   {
4079     const char *name; /* Name.  */
4080     tree *node;  /* Node to store it in.  */
4081     cp_identifier_kind kind;  /* Kind of identifier.  */
4082   };
4083 
4084   /* A table of identifiers to create at startup.  */
4085   static const predefined_identifier predefined_identifiers[] = {
4086     {"C++", &lang_name_cplusplus, cik_normal},
4087     {"C", &lang_name_c, cik_normal},
4088     /* Some of these names have a trailing space so that it is
4089        impossible for them to conflict with names written by users.  */
4090     {"__ct ", &ctor_identifier, cik_ctor},
4091     {"__ct_base ", &base_ctor_identifier, cik_ctor},
4092     {"__ct_comp ", &complete_ctor_identifier, cik_ctor},
4093     {"__dt ", &dtor_identifier, cik_dtor},
4094     {"__dt_base ", &base_dtor_identifier, cik_dtor},
4095     {"__dt_comp ", &complete_dtor_identifier, cik_dtor},
4096     {"__dt_del ", &deleting_dtor_identifier, cik_dtor},
4097     {"__conv_op ", &conv_op_identifier, cik_conv_op},
4098     {"__in_chrg", &in_charge_identifier, cik_normal},
4099     {"this", &this_identifier, cik_normal},
4100     {"__delta", &delta_identifier, cik_normal},
4101     {"__pfn", &pfn_identifier, cik_normal},
4102     {"_vptr", &vptr_identifier, cik_normal},
4103     {"__vtt_parm", &vtt_parm_identifier, cik_normal},
4104     {"::", &global_identifier, cik_normal},
4105     {"std", &std_identifier, cik_normal},
4106       /* The demangler expects anonymous namespaces to be called
4107 	 something starting with '_GLOBAL__N_'.  It no longer needs
4108 	 to be unique to the TU.  */
4109     {"_GLOBAL__N_1", &anon_identifier, cik_normal},
4110     {"auto", &auto_identifier, cik_normal},
4111     {"decltype(auto)", &decltype_auto_identifier, cik_normal},
4112     {"initializer_list", &init_list_identifier, cik_normal},
4113     {NULL, NULL, cik_normal}
4114   };
4115 
4116   for (const predefined_identifier *pid = predefined_identifiers;
4117        pid->name; ++pid)
4118     {
4119       *pid->node = get_identifier (pid->name);
4120       /* Some of these identifiers already have a special kind.  */
4121       if (pid->kind != cik_normal)
4122 	set_identifier_kind (*pid->node, pid->kind);
4123     }
4124 }
4125 
4126 /* Create the predefined scalar types of C,
4127    and some nodes representing standard constants (0, 1, (void *)0).
4128    Initialize the global binding level.
4129    Make definitions for built-in primitive functions.  */
4130 
4131 void
4132 cxx_init_decl_processing (void)
4133 {
4134   tree void_ftype;
4135   tree void_ftype_ptr;
4136 
4137   /* Create all the identifiers we need.  */
4138   initialize_predefined_identifiers ();
4139 
4140   /* Create the global variables.  */
4141   push_to_top_level ();
4142 
4143   current_function_decl = NULL_TREE;
4144   current_binding_level = NULL;
4145   /* Enter the global namespace.  */
4146   gcc_assert (global_namespace == NULL_TREE);
4147   global_namespace = build_lang_decl (NAMESPACE_DECL, global_identifier,
4148 				      void_type_node);
4149   TREE_PUBLIC (global_namespace) = 1;
4150   DECL_CONTEXT (global_namespace)
4151     = build_translation_unit_decl (get_identifier (main_input_filename));
4152   /* Remember whether we want the empty class passing ABI change warning
4153      in this TU.  */
4154   TRANSLATION_UNIT_WARN_EMPTY_P (DECL_CONTEXT (global_namespace))
4155     = warn_abi && abi_version_crosses (12);
4156   debug_hooks->register_main_translation_unit
4157     (DECL_CONTEXT (global_namespace));
4158   begin_scope (sk_namespace, global_namespace);
4159   current_namespace = global_namespace;
4160 
4161   if (flag_visibility_ms_compat)
4162     default_visibility = VISIBILITY_HIDDEN;
4163 
4164   /* Initially, C.  */
4165   current_lang_name = lang_name_c;
4166 
4167   /* Create the `std' namespace.  */
4168   push_namespace (std_identifier);
4169   std_node = current_namespace;
4170   pop_namespace ();
4171 
4172   flag_noexcept_type = (cxx_dialect >= cxx17);
4173   /* There's no fixed location for <command-line>, the current
4174      location is <builtins>, which is somewhat confusing.  */
4175   if (!flag_new_for_scope)
4176     warning_at (UNKNOWN_LOCATION, OPT_Wdeprecated,
4177 		"%<-fno-for-scope%> is deprecated");
4178   if (flag_friend_injection)
4179     warning_at (UNKNOWN_LOCATION, OPT_Wdeprecated,
4180 		"%<-ffriend-injection%> is deprecated");
4181 
4182   c_common_nodes_and_builtins ();
4183 
4184   integer_two_node = build_int_cst (NULL_TREE, 2);
4185 
4186   /* Guess at the initial static decls size.  */
4187   vec_alloc (static_decls, 500);
4188 
4189   /* ... and keyed classes.  */
4190   vec_alloc (keyed_classes, 100);
4191 
4192   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
4193   truthvalue_type_node = boolean_type_node;
4194   truthvalue_false_node = boolean_false_node;
4195   truthvalue_true_node = boolean_true_node;
4196 
4197   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
4198   noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
4199   noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
4200   noexcept_deferred_spec = build_tree_list (make_node (DEFERRED_NOEXCEPT),
4201 					    NULL_TREE);
4202 
4203 #if 0
4204   record_builtin_type (RID_MAX, NULL, string_type_node);
4205 #endif
4206 
4207   delta_type_node = ptrdiff_type_node;
4208   vtable_index_type = ptrdiff_type_node;
4209 
4210   vtt_parm_type = build_pointer_type (const_ptr_type_node);
4211   void_ftype = build_function_type_list (void_type_node, NULL_TREE);
4212   void_ftype_ptr = build_function_type_list (void_type_node,
4213 					     ptr_type_node, NULL_TREE);
4214   void_ftype_ptr
4215     = build_exception_variant (void_ftype_ptr, empty_except_spec);
4216 
4217   /* Create the conversion operator marker.  This operator's DECL_NAME
4218      is in the identifier table, so we can use identifier equality to
4219      find it.  */
4220   conv_op_marker = build_lang_decl (FUNCTION_DECL, conv_op_identifier,
4221 				    void_ftype);
4222 
4223   /* C++ extensions */
4224 
4225   unknown_type_node = make_node (LANG_TYPE);
4226   record_unknown_type (unknown_type_node, "unknown type");
4227 
4228   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
4229   TREE_TYPE (unknown_type_node) = unknown_type_node;
4230 
4231   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
4232      result.  */
4233   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
4234   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
4235 
4236   init_list_type_node = make_node (LANG_TYPE);
4237   record_unknown_type (init_list_type_node, "init list");
4238 
4239   {
4240     /* Make sure we get a unique function type, so we can give
4241        its pointer type a name.  (This wins for gdb.) */
4242     tree vfunc_type = make_node (FUNCTION_TYPE);
4243     TREE_TYPE (vfunc_type) = integer_type_node;
4244     TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
4245     layout_type (vfunc_type);
4246 
4247     vtable_entry_type = build_pointer_type (vfunc_type);
4248   }
4249   record_builtin_type (RID_MAX, "__vtbl_ptr_type", vtable_entry_type);
4250 
4251   vtbl_type_node
4252     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
4253   layout_type (vtbl_type_node);
4254   vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
4255   record_builtin_type (RID_MAX, NULL, vtbl_type_node);
4256   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
4257   layout_type (vtbl_ptr_type_node);
4258   record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
4259 
4260   push_namespace (get_identifier ("__cxxabiv1"));
4261   abi_node = current_namespace;
4262   pop_namespace ();
4263 
4264   global_type_node = make_node (LANG_TYPE);
4265   record_unknown_type (global_type_node, "global type");
4266 
4267   any_targ_node = make_node (LANG_TYPE);
4268   record_unknown_type (any_targ_node, "any type");
4269 
4270   /* Now, C++.  */
4271   current_lang_name = lang_name_cplusplus;
4272 
4273   if (aligned_new_threshold > 1
4274       && !pow2p_hwi (aligned_new_threshold))
4275     {
4276       error ("-faligned-new=%d is not a power of two", aligned_new_threshold);
4277       aligned_new_threshold = 1;
4278     }
4279   if (aligned_new_threshold == -1)
4280     aligned_new_threshold = (cxx_dialect >= cxx17) ? 1 : 0;
4281   if (aligned_new_threshold == 1)
4282     aligned_new_threshold = malloc_alignment () / BITS_PER_UNIT;
4283 
4284   {
4285     tree newattrs, extvisattr;
4286     tree newtype, deltype;
4287     tree ptr_ftype_sizetype;
4288     tree new_eh_spec;
4289 
4290     ptr_ftype_sizetype
4291       = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
4292     if (cxx_dialect == cxx98)
4293       {
4294 	tree bad_alloc_id;
4295 	tree bad_alloc_type_node;
4296 	tree bad_alloc_decl;
4297 
4298 	push_namespace (std_identifier);
4299 	bad_alloc_id = get_identifier ("bad_alloc");
4300 	bad_alloc_type_node = make_class_type (RECORD_TYPE);
4301 	TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
4302 	bad_alloc_decl
4303 	  = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
4304 	DECL_CONTEXT (bad_alloc_decl) = current_namespace;
4305 	pop_namespace ();
4306 
4307 	new_eh_spec
4308 	  = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
4309       }
4310     else
4311       new_eh_spec = noexcept_false_spec;
4312 
4313     /* Ensure attribs.c is initialized.  */
4314     init_attributes ();
4315 
4316     /* Ensure constraint.cc is initialized. */
4317     init_constraint_processing ();
4318 
4319     extvisattr = build_tree_list (get_identifier ("externally_visible"),
4320 				  NULL_TREE);
4321     newattrs = tree_cons (get_identifier ("alloc_size"),
4322 			  build_tree_list (NULL_TREE, integer_one_node),
4323 			  extvisattr);
4324     newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
4325     newtype = build_exception_variant (newtype, new_eh_spec);
4326     deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
4327     deltype = build_exception_variant (deltype, empty_except_spec);
4328     tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4329     DECL_IS_MALLOC (opnew) = 1;
4330     DECL_IS_OPERATOR_NEW (opnew) = 1;
4331     opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4332     DECL_IS_MALLOC (opnew) = 1;
4333     DECL_IS_OPERATOR_NEW (opnew) = 1;
4334     push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4335     push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4336     if (flag_sized_deallocation)
4337       {
4338 	/* Also push the sized deallocation variants:
4339 	     void operator delete(void*, std::size_t) throw();
4340 	     void operator delete[](void*, std::size_t) throw();  */
4341 	tree void_ftype_ptr_size
4342 	  = build_function_type_list (void_type_node, ptr_type_node,
4343 				      size_type_node, NULL_TREE);
4344 	deltype = cp_build_type_attribute_variant (void_ftype_ptr_size,
4345 						   extvisattr);
4346 	deltype = build_exception_variant (deltype, empty_except_spec);
4347 	push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4348 	push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4349       }
4350 
4351     if (aligned_new_threshold)
4352       {
4353 	push_namespace (std_identifier);
4354 	tree align_id = get_identifier ("align_val_t");
4355 	align_type_node = start_enum (align_id, NULL_TREE, size_type_node,
4356 				      NULL_TREE, /*scoped*/true, NULL);
4357 	pop_namespace ();
4358 
4359 	/* operator new (size_t, align_val_t); */
4360 	newtype = build_function_type_list (ptr_type_node, size_type_node,
4361 					    align_type_node, NULL_TREE);
4362 	newtype = cp_build_type_attribute_variant (newtype, newattrs);
4363 	newtype = build_exception_variant (newtype, new_eh_spec);
4364 	opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4365 	DECL_IS_MALLOC (opnew) = 1;
4366 	DECL_IS_OPERATOR_NEW (opnew) = 1;
4367 	opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4368 	DECL_IS_MALLOC (opnew) = 1;
4369 	DECL_IS_OPERATOR_NEW (opnew) = 1;
4370 
4371 	/* operator delete (void *, align_val_t); */
4372 	deltype = build_function_type_list (void_type_node, ptr_type_node,
4373 					    align_type_node, NULL_TREE);
4374 	deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4375 	deltype = build_exception_variant (deltype, empty_except_spec);
4376 	push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4377 	push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4378 
4379 	if (flag_sized_deallocation)
4380 	  {
4381 	    /* operator delete (void *, size_t, align_val_t); */
4382 	    deltype = build_function_type_list (void_type_node, ptr_type_node,
4383 						size_type_node, align_type_node,
4384 						NULL_TREE);
4385 	    deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4386 	    deltype = build_exception_variant (deltype, empty_except_spec);
4387 	    push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4388 	    push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4389 	  }
4390       }
4391 
4392     nullptr_type_node = make_node (NULLPTR_TYPE);
4393     TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
4394     TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
4395     TYPE_UNSIGNED (nullptr_type_node) = 1;
4396     TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
4397     if (abi_version_at_least (9))
4398       SET_TYPE_ALIGN (nullptr_type_node, GET_MODE_ALIGNMENT (ptr_mode));
4399     SET_TYPE_MODE (nullptr_type_node, ptr_mode);
4400     record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
4401     nullptr_node = build_int_cst (nullptr_type_node, 0);
4402   }
4403 
4404   abort_fndecl
4405     = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
4406 			    ECF_NORETURN | ECF_NOTHROW | ECF_COLD);
4407 
4408   /* Perform other language dependent initializations.  */
4409   init_class_processing ();
4410   init_rtti_processing ();
4411   init_template_processing ();
4412 
4413   if (flag_exceptions)
4414     init_exception_processing ();
4415 
4416   if (! supports_one_only ())
4417     flag_weak = 0;
4418 
4419   make_fname_decl = cp_make_fname_decl;
4420   start_fname_decls ();
4421 
4422   /* Show we use EH for cleanups.  */
4423   if (flag_exceptions)
4424     using_eh_for_cleanups ();
4425 }
4426 
4427 /* Generate an initializer for a function naming variable from
4428    NAME. NAME may be NULL, to indicate a dependent name.  TYPE_P is
4429    filled in with the type of the init.  */
4430 
4431 tree
4432 cp_fname_init (const char* name, tree *type_p)
4433 {
4434   tree domain = NULL_TREE;
4435   tree type;
4436   tree init = NULL_TREE;
4437   size_t length = 0;
4438 
4439   if (name)
4440     {
4441       length = strlen (name);
4442       domain = build_index_type (size_int (length));
4443       init = build_string (length + 1, name);
4444     }
4445 
4446   type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
4447   type = build_cplus_array_type (type, domain);
4448 
4449   *type_p = type;
4450 
4451   if (init)
4452     TREE_TYPE (init) = type;
4453   else
4454     init = error_mark_node;
4455 
4456   return init;
4457 }
4458 
4459 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
4460    the decl, LOC is the location to give the decl, NAME is the
4461    initialization string and TYPE_DEP indicates whether NAME depended
4462    on the type of the function. We make use of that to detect
4463    __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
4464    at the point of first use, so we mustn't push the decl now.  */
4465 
4466 static tree
4467 cp_make_fname_decl (location_t loc, tree id, int type_dep)
4468 {
4469   const char *const name = (type_dep && processing_template_decl
4470 			    ? NULL : fname_as_string (type_dep));
4471   tree type;
4472   tree init = cp_fname_init (name, &type);
4473   tree decl = build_decl (loc, VAR_DECL, id, type);
4474 
4475   if (name)
4476     free (CONST_CAST (char *, name));
4477 
4478   TREE_STATIC (decl) = 1;
4479   TREE_READONLY (decl) = 1;
4480   DECL_ARTIFICIAL (decl) = 1;
4481 
4482   TREE_USED (decl) = 1;
4483 
4484   if (current_function_decl)
4485     {
4486       DECL_CONTEXT (decl) = current_function_decl;
4487       decl = pushdecl_outermost_localscope (decl);
4488       cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
4489 		      LOOKUP_ONLYCONVERTING);
4490     }
4491   else
4492     {
4493       DECL_THIS_STATIC (decl) = true;
4494       pushdecl_top_level_and_finish (decl, init);
4495     }
4496 
4497   return decl;
4498 }
4499 
4500 static tree
4501 builtin_function_1 (tree decl, tree context, bool is_global)
4502 {
4503   tree          id = DECL_NAME (decl);
4504   const char *name = IDENTIFIER_POINTER (id);
4505 
4506   retrofit_lang_decl (decl);
4507 
4508   DECL_ARTIFICIAL (decl) = 1;
4509   SET_DECL_LANGUAGE (decl, lang_c);
4510   /* Runtime library routines are, by definition, available in an
4511      external shared object.  */
4512   DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4513   DECL_VISIBILITY_SPECIFIED (decl) = 1;
4514 
4515   DECL_CONTEXT (decl) = context;
4516 
4517   /* A function in the user's namespace should have an explicit
4518      declaration before it is used.  Mark the built-in function as
4519      anticipated but not actually declared.  */
4520   if (name[0] != '_' || name[1] != '_')
4521     DECL_ANTICIPATED (decl) = 1;
4522   else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4523     {
4524       size_t len = strlen (name);
4525 
4526       /* Treat __*_chk fortification functions as anticipated as well,
4527 	 unless they are __builtin_*.  */
4528       if (len > strlen ("___chk")
4529 	  && memcmp (name + len - strlen ("_chk"),
4530 		     "_chk", strlen ("_chk") + 1) == 0)
4531 	DECL_ANTICIPATED (decl) = 1;
4532     }
4533 
4534   if (is_global)
4535     pushdecl_top_level (decl);
4536   else
4537     pushdecl (decl);
4538 
4539   return decl;
4540 }
4541 
4542 tree
4543 cxx_builtin_function (tree decl)
4544 {
4545   tree          id = DECL_NAME (decl);
4546   const char *name = IDENTIFIER_POINTER (id);
4547   /* All builtins that don't begin with an '_' should additionally
4548      go in the 'std' namespace.  */
4549   if (name[0] != '_')
4550     {
4551       tree decl2 = copy_node(decl);
4552       push_namespace (std_identifier);
4553       builtin_function_1 (decl2, std_node, false);
4554       pop_namespace ();
4555     }
4556 
4557   return builtin_function_1 (decl, NULL_TREE, false);
4558 }
4559 
4560 /* Like cxx_builtin_function, but guarantee the function is added to the global
4561    scope.  This is to allow function specific options to add new machine
4562    dependent builtins when the target ISA changes via attribute((target(...)))
4563    which saves space on program startup if the program does not use non-generic
4564    ISAs.  */
4565 
4566 tree
4567 cxx_builtin_function_ext_scope (tree decl)
4568 {
4569 
4570   tree          id = DECL_NAME (decl);
4571   const char *name = IDENTIFIER_POINTER (id);
4572   /* All builtins that don't begin with an '_' should additionally
4573      go in the 'std' namespace.  */
4574   if (name[0] != '_')
4575     {
4576       tree decl2 = copy_node(decl);
4577       push_namespace (std_identifier);
4578       builtin_function_1 (decl2, std_node, true);
4579       pop_namespace ();
4580     }
4581 
4582   return builtin_function_1 (decl, NULL_TREE, true);
4583 }
4584 
4585 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4586    function.  Not called directly.  */
4587 
4588 static tree
4589 build_library_fn (tree name, enum tree_code operator_code, tree type,
4590 		  int ecf_flags)
4591 {
4592   tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4593   DECL_EXTERNAL (fn) = 1;
4594   TREE_PUBLIC (fn) = 1;
4595   DECL_ARTIFICIAL (fn) = 1;
4596   DECL_OVERLOADED_OPERATOR_CODE_RAW (fn)
4597     = OVL_OP_INFO (false, operator_code)->ovl_op_code;
4598   SET_DECL_LANGUAGE (fn, lang_c);
4599   /* Runtime library routines are, by definition, available in an
4600      external shared object.  */
4601   DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4602   DECL_VISIBILITY_SPECIFIED (fn) = 1;
4603   set_call_expr_flags (fn, ecf_flags);
4604   return fn;
4605 }
4606 
4607 /* Returns the _DECL for a library function with C++ linkage.  */
4608 
4609 static tree
4610 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4611 		     int ecf_flags)
4612 {
4613   tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4614   DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4615   SET_DECL_LANGUAGE (fn, lang_cplusplus);
4616   return fn;
4617 }
4618 
4619 /* Like build_library_fn, but takes a C string instead of an
4620    IDENTIFIER_NODE.  */
4621 
4622 tree
4623 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4624 {
4625   return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4626 }
4627 
4628 /* Like build_cp_library_fn, but takes a C string instead of an
4629    IDENTIFIER_NODE.  */
4630 
4631 tree
4632 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4633 {
4634   return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4635 			      ecf_flags);
4636 }
4637 
4638 /* Like build_library_fn, but also pushes the function so that we will
4639    be able to find it via get_global_binding.  Also, the function
4640    may throw exceptions listed in RAISES.  */
4641 
4642 tree
4643 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4644 {
4645   tree fn;
4646 
4647   if (raises)
4648     type = build_exception_variant (type, raises);
4649 
4650   fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4651   pushdecl_top_level (fn);
4652   return fn;
4653 }
4654 
4655 /* Like build_cp_library_fn, but also pushes the function so that it
4656    will be found by normal lookup.  */
4657 
4658 static tree
4659 push_cp_library_fn (enum tree_code operator_code, tree type,
4660 		    int ecf_flags)
4661 {
4662   tree fn = build_cp_library_fn (ovl_op_identifier (false, operator_code),
4663 				 operator_code, type, ecf_flags);
4664   pushdecl (fn);
4665   if (flag_tm)
4666     apply_tm_attr (fn, get_identifier ("transaction_safe"));
4667   return fn;
4668 }
4669 
4670 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4671    a FUNCTION_TYPE.  */
4672 
4673 tree
4674 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4675 {
4676   tree type = build_function_type (void_type_node, parmtypes);
4677   return push_library_fn (name, type, NULL_TREE, ecf_flags);
4678 }
4679 
4680 /* Like push_library_fn, but also note that this function throws
4681    and does not return.  Used for __throw_foo and the like.  */
4682 
4683 tree
4684 push_throw_library_fn (tree name, tree type)
4685 {
4686   tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN | ECF_COLD);
4687   return fn;
4688 }
4689 
4690 /* When we call finish_struct for an anonymous union, we create
4691    default copy constructors and such.  But, an anonymous union
4692    shouldn't have such things; this function undoes the damage to the
4693    anonymous union type T.
4694 
4695    (The reason that we create the synthesized methods is that we don't
4696    distinguish `union { int i; }' from `typedef union { int i; } U'.
4697    The first is an anonymous union; the second is just an ordinary
4698    union type.)  */
4699 
4700 void
4701 fixup_anonymous_aggr (tree t)
4702 {
4703   /* Wipe out memory of synthesized methods.  */
4704   TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4705   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4706   TYPE_HAS_COPY_CTOR (t) = 0;
4707   TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4708   TYPE_HAS_COPY_ASSIGN (t) = 0;
4709   TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4710 
4711   /* Splice the implicitly generated functions out of TYPE_FIELDS.  */
4712   for (tree probe, *prev_p = &TYPE_FIELDS (t); (probe = *prev_p);)
4713     if (TREE_CODE (probe) == FUNCTION_DECL && DECL_ARTIFICIAL (probe))
4714       *prev_p = DECL_CHAIN (probe);
4715     else
4716       prev_p = &DECL_CHAIN (probe);
4717 
4718   /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4719      assignment operators (because they cannot have these methods themselves).
4720      For anonymous unions this is already checked because they are not allowed
4721      in any union, otherwise we have to check it.  */
4722   if (TREE_CODE (t) != UNION_TYPE)
4723     {
4724       tree field, type;
4725 
4726       for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4727 	if (TREE_CODE (field) == FIELD_DECL)
4728 	  {
4729 	    type = TREE_TYPE (field);
4730 	    if (CLASS_TYPE_P (type))
4731 	      {
4732 		if (TYPE_NEEDS_CONSTRUCTING (type))
4733 		  error ("member %q+#D with constructor not allowed "
4734 			 "in anonymous aggregate", field);
4735 		if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4736 		  error ("member %q+#D with destructor not allowed "
4737 			 "in anonymous aggregate", field);
4738 		if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4739 		  error ("member %q+#D with copy assignment operator "
4740 			 "not allowed in anonymous aggregate", field);
4741 	      }
4742 	  }
4743     }
4744 }
4745 
4746 /* Warn for an attribute located at LOCATION that appertains to the
4747    class type CLASS_TYPE that has not been properly placed after its
4748    class-key, in it class-specifier.  */
4749 
4750 void
4751 warn_misplaced_attr_for_class_type (source_location location,
4752 				    tree class_type)
4753 {
4754   gcc_assert (OVERLOAD_TYPE_P (class_type));
4755 
4756   if (warning_at (location, OPT_Wattributes,
4757 		  "attribute ignored in declaration "
4758 		  "of %q#T", class_type))
4759     inform (location,
4760 	    "attribute for %q#T must follow the %qs keyword",
4761 	    class_type, class_key_or_enum_as_string (class_type));
4762 }
4763 
4764 /* Make sure that a declaration with no declarator is well-formed, i.e.
4765    just declares a tagged type or anonymous union.
4766 
4767    Returns the type declared; or NULL_TREE if none.  */
4768 
4769 tree
4770 check_tag_decl (cp_decl_specifier_seq *declspecs,
4771 		bool explicit_type_instantiation_p)
4772 {
4773   int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4774   int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4775   /* If a class, struct, or enum type is declared by the DECLSPECS
4776      (i.e, if a class-specifier, enum-specifier, or non-typename
4777      elaborated-type-specifier appears in the DECLSPECS),
4778      DECLARED_TYPE is set to the corresponding type.  */
4779   tree declared_type = NULL_TREE;
4780   bool error_p = false;
4781 
4782   if (declspecs->multiple_types_p)
4783     error ("multiple types in one declaration");
4784   else if (declspecs->redefined_builtin_type)
4785     {
4786       if (!in_system_header_at (input_location))
4787 	permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4788 		   "redeclaration of C++ built-in type %qT",
4789 		   declspecs->redefined_builtin_type);
4790       return NULL_TREE;
4791     }
4792 
4793   if (declspecs->type
4794       && TYPE_P (declspecs->type)
4795       && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4796 	   && MAYBE_CLASS_TYPE_P (declspecs->type))
4797 	  || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4798     declared_type = declspecs->type;
4799   else if (declspecs->type == error_mark_node)
4800     error_p = true;
4801   if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4802     permerror (input_location, "declaration does not declare anything");
4803   else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4804     {
4805       error_at (declspecs->locations[ds_type_spec],
4806 		"%<auto%> can only be specified for variables "
4807 		"or function declarations");
4808       return error_mark_node;
4809     }
4810   /* Check for an anonymous union.  */
4811   else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4812 	   && TYPE_UNNAMED_P (declared_type))
4813     {
4814       /* 7/3 In a simple-declaration, the optional init-declarator-list
4815 	 can be omitted only when declaring a class (clause 9) or
4816 	 enumeration (7.2), that is, when the decl-specifier-seq contains
4817 	 either a class-specifier, an elaborated-type-specifier with
4818 	 a class-key (9.1), or an enum-specifier.  In these cases and
4819 	 whenever a class-specifier or enum-specifier is present in the
4820 	 decl-specifier-seq, the identifiers in these specifiers are among
4821 	 the names being declared by the declaration (as class-name,
4822 	 enum-names, or enumerators, depending on the syntax).  In such
4823 	 cases, and except for the declaration of an unnamed bit-field (9.6),
4824 	 the decl-specifier-seq shall introduce one or more names into the
4825 	 program, or shall redeclare a name introduced by a previous
4826 	 declaration.  [Example:
4827 	     enum { };			// ill-formed
4828 	     typedef class { };		// ill-formed
4829 	 --end example]  */
4830       if (saw_typedef)
4831 	{
4832 	  error ("missing type-name in typedef-declaration");
4833 	  return NULL_TREE;
4834 	}
4835       /* Anonymous unions are objects, so they can have specifiers.  */;
4836       SET_ANON_AGGR_TYPE_P (declared_type);
4837 
4838       if (TREE_CODE (declared_type) != UNION_TYPE
4839 	  && !in_system_header_at (input_location))
4840 	pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4841     }
4842 
4843   else
4844     {
4845       if (decl_spec_seq_has_spec_p (declspecs, ds_inline))
4846 	error_at (declspecs->locations[ds_inline],
4847 		  "%<inline%> can only be specified for functions");
4848       else if (decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4849 	error_at (declspecs->locations[ds_virtual],
4850 		  "%<virtual%> can only be specified for functions");
4851       else if (saw_friend
4852 	       && (!current_class_type
4853 		   || current_scope () != current_class_type))
4854 	error_at (declspecs->locations[ds_friend],
4855 		  "%<friend%> can only be specified inside a class");
4856       else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4857 	error_at (declspecs->locations[ds_explicit],
4858 		  "%<explicit%> can only be specified for constructors");
4859       else if (declspecs->storage_class)
4860 	error_at (declspecs->locations[ds_storage_class],
4861 		  "a storage class can only be specified for objects "
4862 		  "and functions");
4863       else if (decl_spec_seq_has_spec_p (declspecs, ds_const))
4864 	error_at (declspecs->locations[ds_const],
4865 		  "%<const%> can only be specified for objects and "
4866 		  "functions");
4867       else if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
4868 	error_at (declspecs->locations[ds_volatile],
4869 		  "%<volatile%> can only be specified for objects and "
4870 		  "functions");
4871       else if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
4872 	error_at (declspecs->locations[ds_restrict],
4873 		  "%<__restrict%> can only be specified for objects and "
4874 		  "functions");
4875       else if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
4876 	error_at (declspecs->locations[ds_thread],
4877 		  "%<__thread%> can only be specified for objects "
4878 		  "and functions");
4879       else if (saw_typedef)
4880 	warning_at (declspecs->locations[ds_typedef], 0,
4881 		    "%<typedef%> was ignored in this declaration");
4882       else if (decl_spec_seq_has_spec_p (declspecs,  ds_constexpr))
4883         error_at (declspecs->locations[ds_constexpr],
4884 		  "%<constexpr%> cannot be used for type declarations");
4885     }
4886 
4887   if (declspecs->attributes && warn_attributes && declared_type)
4888     {
4889       location_t loc;
4890       if (!CLASS_TYPE_P (declared_type)
4891 	  || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4892 	/* For a non-template class, use the name location.  */
4893 	loc = location_of (declared_type);
4894       else
4895 	/* For a template class (an explicit instantiation), use the
4896 	   current location.  */
4897 	loc = input_location;
4898 
4899       if (explicit_type_instantiation_p)
4900 	/* [dcl.attr.grammar]/4:
4901 
4902 	       No attribute-specifier-seq shall appertain to an explicit
4903 	       instantiation.  */
4904 	{
4905 	  if (warning_at (loc, OPT_Wattributes,
4906 			  "attribute ignored in explicit instantiation %q#T",
4907 			  declared_type))
4908 	    inform (loc,
4909 		    "no attribute can be applied to "
4910 		    "an explicit instantiation");
4911 	}
4912       else
4913 	warn_misplaced_attr_for_class_type (loc, declared_type);
4914     }
4915 
4916   return declared_type;
4917 }
4918 
4919 /* Called when a declaration is seen that contains no names to declare.
4920    If its type is a reference to a structure, union or enum inherited
4921    from a containing scope, shadow that tag name for the current scope
4922    with a forward reference.
4923    If its type defines a new named structure or union
4924    or defines an enum, it is valid but we need not do anything here.
4925    Otherwise, it is an error.
4926 
4927    C++: may have to grok the declspecs to learn about static,
4928    complain for anonymous unions.
4929 
4930    Returns the TYPE declared -- or NULL_TREE if none.  */
4931 
4932 tree
4933 shadow_tag (cp_decl_specifier_seq *declspecs)
4934 {
4935   tree t = check_tag_decl (declspecs,
4936 			   /*explicit_type_instantiation_p=*/false);
4937 
4938   if (!t)
4939     return NULL_TREE;
4940 
4941   if (maybe_process_partial_specialization (t) == error_mark_node)
4942     return NULL_TREE;
4943 
4944   /* This is where the variables in an anonymous union are
4945      declared.  An anonymous union declaration looks like:
4946      union { ... } ;
4947      because there is no declarator after the union, the parser
4948      sends that declaration here.  */
4949   if (ANON_AGGR_TYPE_P (t))
4950     {
4951       fixup_anonymous_aggr (t);
4952 
4953       if (TYPE_FIELDS (t))
4954 	{
4955 	  tree decl = grokdeclarator (/*declarator=*/NULL,
4956 				      declspecs, NORMAL, 0, NULL);
4957 	  finish_anon_union (decl);
4958 	}
4959     }
4960 
4961   return t;
4962 }
4963 
4964 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
4965 
4966 tree
4967 groktypename (cp_decl_specifier_seq *type_specifiers,
4968 	      const cp_declarator *declarator,
4969 	      bool is_template_arg)
4970 {
4971   tree attrs;
4972   tree type;
4973   enum decl_context context
4974     = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4975   attrs = type_specifiers->attributes;
4976   type_specifiers->attributes = NULL_TREE;
4977   type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4978   if (attrs && type != error_mark_node)
4979     {
4980       if (CLASS_TYPE_P (type))
4981 	warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4982 		 "outside of definition", type);
4983       else if (MAYBE_CLASS_TYPE_P (type))
4984 	/* A template type parameter or other dependent type.  */
4985 	warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4986 		 "type %qT without an associated declaration", type);
4987       else
4988 	cplus_decl_attributes (&type, attrs, 0);
4989     }
4990   return type;
4991 }
4992 
4993 /* Process a DECLARATOR for a function-scope variable declaration,
4994    namespace-scope variable declaration, or function declaration.
4995    (Function definitions go through start_function; class member
4996    declarations appearing in the body of the class go through
4997    grokfield.)  The DECL corresponding to the DECLARATOR is returned.
4998    If an error occurs, the error_mark_node is returned instead.
4999 
5000    DECLSPECS are the decl-specifiers for the declaration.  INITIALIZED is
5001    SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
5002    for an explicitly defaulted function, or SD_DELETED for an explicitly
5003    deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
5004    implicitly initialized via a default constructor.  ATTRIBUTES and
5005    PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
5006 
5007    The scope represented by the context of the returned DECL is pushed
5008    (if it is not the global namespace) and is assigned to
5009    *PUSHED_SCOPE_P.  The caller is then responsible for calling
5010    pop_scope on *PUSHED_SCOPE_P if it is set.  */
5011 
5012 tree
5013 start_decl (const cp_declarator *declarator,
5014 	    cp_decl_specifier_seq *declspecs,
5015 	    int initialized,
5016 	    tree attributes,
5017 	    tree prefix_attributes,
5018 	    tree *pushed_scope_p)
5019 {
5020   tree decl;
5021   tree context;
5022   bool was_public;
5023   int flags;
5024   bool alias;
5025 
5026   *pushed_scope_p = NULL_TREE;
5027 
5028   /* An object declared as __attribute__((deprecated)) suppresses
5029      warnings of uses of other deprecated items.  */
5030   if (lookup_attribute ("deprecated", attributes))
5031     deprecated_state = DEPRECATED_SUPPRESS;
5032 
5033   attributes = chainon (attributes, prefix_attributes);
5034 
5035   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
5036 			 &attributes);
5037 
5038   deprecated_state = DEPRECATED_NORMAL;
5039 
5040   if (decl == NULL_TREE || VOID_TYPE_P (decl)
5041       || decl == error_mark_node)
5042     return error_mark_node;
5043 
5044   context = CP_DECL_CONTEXT (decl);
5045   if (context != global_namespace)
5046     *pushed_scope_p = push_scope (context);
5047 
5048   /* Is it valid for this decl to have an initializer at all?
5049      If not, set INITIALIZED to zero, which will indirectly
5050      tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
5051   if (initialized
5052       && TREE_CODE (decl) == TYPE_DECL)
5053     {
5054       error ("typedef %qD is initialized (use decltype instead)", decl);
5055       return error_mark_node;
5056     }
5057 
5058   if (initialized)
5059     {
5060       if (! toplevel_bindings_p ()
5061 	  && DECL_EXTERNAL (decl))
5062 	warning (0, "declaration of %q#D has %<extern%> and is initialized",
5063 		 decl);
5064       DECL_EXTERNAL (decl) = 0;
5065       if (toplevel_bindings_p ())
5066 	TREE_STATIC (decl) = 1;
5067     }
5068   alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
5069 
5070   if (alias && TREE_CODE (decl) == FUNCTION_DECL)
5071     record_key_method_defined (decl);
5072 
5073   /* If this is a typedef that names the class for linkage purposes
5074      (7.1.3p8), apply any attributes directly to the type.  */
5075   if (TREE_CODE (decl) == TYPE_DECL
5076       && OVERLOAD_TYPE_P (TREE_TYPE (decl))
5077       && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
5078     flags = ATTR_FLAG_TYPE_IN_PLACE;
5079   else
5080     flags = 0;
5081 
5082   /* Set attributes here so if duplicate decl, will have proper attributes.  */
5083   cplus_decl_attributes (&decl, attributes, flags);
5084 
5085   /* Dllimported symbols cannot be defined.  Static data members (which
5086      can be initialized in-class and dllimported) go through grokfield,
5087      not here, so we don't need to exclude those decls when checking for
5088      a definition.  */
5089   if (initialized && DECL_DLLIMPORT_P (decl))
5090     {
5091       error ("definition of %q#D is marked %<dllimport%>", decl);
5092       DECL_DLLIMPORT_P (decl) = 0;
5093     }
5094 
5095   /* If #pragma weak was used, mark the decl weak now.  */
5096   if (!processing_template_decl && !DECL_DECOMPOSITION_P (decl))
5097     maybe_apply_pragma_weak (decl);
5098 
5099   if (TREE_CODE (decl) == FUNCTION_DECL
5100       && DECL_DECLARED_INLINE_P (decl)
5101       && DECL_UNINLINABLE (decl)
5102       && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
5103     warning_at (DECL_SOURCE_LOCATION (decl), 0,
5104 		"inline function %qD given attribute noinline", decl);
5105 
5106   if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
5107     {
5108       bool this_tmpl = (processing_template_decl
5109 			> template_class_depth (context));
5110       if (VAR_P (decl))
5111 	{
5112 	  tree field = lookup_field (context, DECL_NAME (decl), 0, false);
5113 	  if (field == NULL_TREE
5114 	      || !(VAR_P (field) || variable_template_p (field)))
5115 	    error ("%q+#D is not a static data member of %q#T", decl, context);
5116 	  else if (variable_template_p (field)
5117 		   && (DECL_LANG_SPECIFIC (decl)
5118 		       && DECL_TEMPLATE_SPECIALIZATION (decl)))
5119 	    /* OK, specialization was already checked.  */;
5120 	  else if (variable_template_p (field) && !this_tmpl)
5121 	    {
5122 	      error_at (DECL_SOURCE_LOCATION (decl),
5123 			"non-member-template declaration of %qD", decl);
5124 	      inform (DECL_SOURCE_LOCATION (field), "does not match "
5125 		      "member template declaration here");
5126 	      return error_mark_node;
5127 	    }
5128 	  else
5129 	    {
5130 	      if (variable_template_p (field))
5131 		field = DECL_TEMPLATE_RESULT (field);
5132 
5133 	      if (DECL_CONTEXT (field) != context)
5134 		{
5135 		  if (!same_type_p (DECL_CONTEXT (field), context))
5136 		    permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
5137 			       "to be defined as %<%T::%D%>",
5138 			       DECL_CONTEXT (field), DECL_NAME (decl),
5139 			       context, DECL_NAME (decl));
5140 		  DECL_CONTEXT (decl) = DECL_CONTEXT (field);
5141 		}
5142 	      /* Static data member are tricky; an in-class initialization
5143 		 still doesn't provide a definition, so the in-class
5144 		 declaration will have DECL_EXTERNAL set, but will have an
5145 		 initialization.  Thus, duplicate_decls won't warn
5146 		 about this situation, and so we check here.  */
5147 	      if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
5148 		error ("duplicate initialization of %qD", decl);
5149 	      field = duplicate_decls (decl, field,
5150 				       /*newdecl_is_friend=*/false);
5151 	      if (field == error_mark_node)
5152 		return error_mark_node;
5153 	      else if (field)
5154 		decl = field;
5155 	    }
5156 	}
5157       else
5158 	{
5159 	  tree field = check_classfn (context, decl,
5160 				      this_tmpl
5161 				      ? current_template_parms
5162 				      : NULL_TREE);
5163 	  if (field && field != error_mark_node
5164 	      && duplicate_decls (decl, field,
5165 				 /*newdecl_is_friend=*/false))
5166 	    decl = field;
5167 	}
5168 
5169       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
5170       DECL_IN_AGGR_P (decl) = 0;
5171       /* Do not mark DECL as an explicit specialization if it was not
5172 	 already marked as an instantiation; a declaration should
5173 	 never be marked as a specialization unless we know what
5174 	 template is being specialized.  */
5175       if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
5176 	{
5177 	  SET_DECL_TEMPLATE_SPECIALIZATION (decl);
5178 	  if (TREE_CODE (decl) == FUNCTION_DECL)
5179 	    DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
5180 				  && DECL_DECLARED_INLINE_P (decl));
5181 	  else
5182 	    DECL_COMDAT (decl) = false;
5183 
5184 	  /* [temp.expl.spec] An explicit specialization of a static data
5185 	     member of a template is a definition if the declaration
5186 	     includes an initializer; otherwise, it is a declaration.
5187 
5188 	     We check for processing_specialization so this only applies
5189 	     to the new specialization syntax.  */
5190 	  if (!initialized && processing_specialization)
5191 	    DECL_EXTERNAL (decl) = 1;
5192 	}
5193 
5194       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
5195 	  /* Aliases are definitions. */
5196 	  && !alias)
5197 	permerror (input_location, "declaration of %q#D outside of class is not definition",
5198 		   decl);
5199     }
5200 
5201   was_public = TREE_PUBLIC (decl);
5202 
5203   /* Enter this declaration into the symbol table.  Don't push the plain
5204      VAR_DECL for a variable template.  */
5205   if (!template_parm_scope_p ()
5206       || !VAR_P (decl))
5207     decl = maybe_push_decl (decl);
5208 
5209   if (processing_template_decl)
5210     decl = push_template_decl (decl);
5211   if (decl == error_mark_node)
5212     return error_mark_node;
5213 
5214   if (VAR_P (decl)
5215       && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
5216       && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
5217     {
5218       /* This is a const variable with implicit 'static'.  Set
5219 	 DECL_THIS_STATIC so we can tell it from variables that are
5220 	 !TREE_PUBLIC because of the anonymous namespace.  */
5221       gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
5222       DECL_THIS_STATIC (decl) = 1;
5223     }
5224 
5225   if (current_function_decl && VAR_P (decl)
5226       && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
5227     {
5228       bool ok = false;
5229       if (CP_DECL_THREAD_LOCAL_P (decl))
5230 	error ("%qD declared %<thread_local%> in %<constexpr%> function",
5231 	       decl);
5232       else if (TREE_STATIC (decl))
5233 	error ("%qD declared %<static%> in %<constexpr%> function", decl);
5234       else
5235 	ok = true;
5236       if (!ok)
5237 	cp_function_chain->invalid_constexpr = true;
5238     }
5239 
5240   if (!processing_template_decl && VAR_P (decl))
5241     start_decl_1 (decl, initialized);
5242 
5243   return decl;
5244 }
5245 
5246 /* Process the declaration of a variable DECL.  INITIALIZED is true
5247    iff DECL is explicitly initialized.  (INITIALIZED is false if the
5248    variable is initialized via an implicitly-called constructor.)
5249    This function must be called for ordinary variables (including, for
5250    example, implicit instantiations of templates), but must not be
5251    called for template declarations.  */
5252 
5253 void
5254 start_decl_1 (tree decl, bool initialized)
5255 {
5256   tree type;
5257   bool complete_p;
5258   bool aggregate_definition_p;
5259 
5260   gcc_assert (!processing_template_decl);
5261 
5262   if (error_operand_p (decl))
5263     return;
5264 
5265   gcc_assert (VAR_P (decl));
5266 
5267   type = TREE_TYPE (decl);
5268   complete_p = COMPLETE_TYPE_P (type);
5269   aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
5270 
5271   /* If an explicit initializer is present, or if this is a definition
5272      of an aggregate, then we need a complete type at this point.
5273      (Scalars are always complete types, so there is nothing to
5274      check.)  This code just sets COMPLETE_P; errors (if necessary)
5275      are issued below.  */
5276   if ((initialized || aggregate_definition_p)
5277       && !complete_p
5278       && COMPLETE_TYPE_P (complete_type (type)))
5279     {
5280       complete_p = true;
5281       /* We will not yet have set TREE_READONLY on DECL if the type
5282 	 was "const", but incomplete, before this point.  But, now, we
5283 	 have a complete type, so we can try again.  */
5284       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
5285     }
5286 
5287   if (initialized)
5288     /* Is it valid for this decl to have an initializer at all?  */
5289     {
5290       /* Don't allow initializations for incomplete types except for
5291 	 arrays which might be completed by the initialization.  */
5292       if (complete_p)
5293 	;			/* A complete type is ok.  */
5294       else if (type_uses_auto (type))
5295 	; 			/* An auto type is ok.  */
5296       else if (TREE_CODE (type) != ARRAY_TYPE)
5297 	{
5298 	  error ("variable %q#D has initializer but incomplete type", decl);
5299 	  type = TREE_TYPE (decl) = error_mark_node;
5300 	}
5301       else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5302 	{
5303 	  if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
5304 	    error ("elements of array %q#D have incomplete type", decl);
5305 	  /* else we already gave an error in start_decl.  */
5306 	}
5307     }
5308   else if (aggregate_definition_p && !complete_p)
5309     {
5310       if (type_uses_auto (type))
5311 	gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (type));
5312       else
5313 	{
5314 	  error ("aggregate %q#D has incomplete type and cannot be defined",
5315 		 decl);
5316 	  /* Change the type so that assemble_variable will give
5317 	     DECL an rtl we can live with: (mem (const_int 0)).  */
5318 	  type = TREE_TYPE (decl) = error_mark_node;
5319 	}
5320     }
5321 
5322   /* Create a new scope to hold this declaration if necessary.
5323      Whether or not a new scope is necessary cannot be determined
5324      until after the type has been completed; if the type is a
5325      specialization of a class template it is not until after
5326      instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
5327      will be set correctly.  */
5328   maybe_push_cleanup_level (type);
5329 }
5330 
5331 /* Handle initialization of references.  DECL, TYPE, and INIT have the
5332    same meaning as in cp_finish_decl.  *CLEANUP must be NULL on entry,
5333    but will be set to a new CLEANUP_STMT if a temporary is created
5334    that must be destroyed subsequently.
5335 
5336    Returns an initializer expression to use to initialize DECL, or
5337    NULL if the initialization can be performed statically.
5338 
5339    Quotes on semantics can be found in ARM 8.4.3.  */
5340 
5341 static tree
5342 grok_reference_init (tree decl, tree type, tree init, int flags)
5343 {
5344   if (init == NULL_TREE)
5345     {
5346       if ((DECL_LANG_SPECIFIC (decl) == 0
5347 	   || DECL_IN_AGGR_P (decl) == 0)
5348 	  && ! DECL_THIS_EXTERN (decl))
5349 	error ("%qD declared as reference but not initialized", decl);
5350       return NULL_TREE;
5351     }
5352 
5353   if (TREE_CODE (init) == TREE_LIST)
5354     init = build_x_compound_expr_from_list (init, ELK_INIT,
5355 					    tf_warning_or_error);
5356 
5357   tree ttype = TREE_TYPE (type);
5358   if (TREE_CODE (ttype) != ARRAY_TYPE
5359       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
5360     /* Note: default conversion is only called in very special cases.  */
5361     init = decay_conversion (init, tf_warning_or_error);
5362 
5363   /* check_initializer handles this for non-reference variables, but for
5364      references we need to do it here or the initializer will get the
5365      incomplete array type and confuse later calls to
5366      cp_complete_array_type.  */
5367   if (TREE_CODE (ttype) == ARRAY_TYPE
5368       && TYPE_DOMAIN (ttype) == NULL_TREE
5369       && (BRACE_ENCLOSED_INITIALIZER_P (init)
5370 	  || TREE_CODE (init) == STRING_CST))
5371     {
5372       cp_complete_array_type (&ttype, init, false);
5373       if (ttype != TREE_TYPE (type))
5374 	type = cp_build_reference_type (ttype, TYPE_REF_IS_RVALUE (type));
5375     }
5376 
5377   /* Convert INIT to the reference type TYPE.  This may involve the
5378      creation of a temporary, whose lifetime must be the same as that
5379      of the reference.  If so, a DECL_EXPR for the temporary will be
5380      added just after the DECL_EXPR for DECL.  That's why we don't set
5381      DECL_INITIAL for local references (instead assigning to them
5382      explicitly); we need to allow the temporary to be initialized
5383      first.  */
5384   return initialize_reference (type, init, flags,
5385 			       tf_warning_or_error);
5386 }
5387 
5388 /* Designated initializers in arrays are not supported in GNU C++.
5389    The parser cannot detect this error since it does not know whether
5390    a given brace-enclosed initializer is for a class type or for an
5391    array.  This function checks that CE does not use a designated
5392    initializer.  If it does, an error is issued.  Returns true if CE
5393    is valid, i.e., does not have a designated initializer.  */
5394 
5395 bool
5396 check_array_designated_initializer (constructor_elt *ce,
5397 				    unsigned HOST_WIDE_INT index)
5398 {
5399   /* Designated initializers for array elements are not supported.  */
5400   if (ce->index)
5401     {
5402       /* The parser only allows identifiers as designated
5403 	 initializers.  */
5404       if (ce->index == error_mark_node)
5405 	{
5406 	  error ("name used in a GNU-style designated "
5407 		 "initializer for an array");
5408 	  return false;
5409 	}
5410       else if (identifier_p (ce->index))
5411 	{
5412 	  error ("name %qD used in a GNU-style designated "
5413 		 "initializer for an array", ce->index);
5414 	  return false;
5415 	}
5416 
5417       tree ce_index = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5418 						  ce->index, true);
5419       if (ce_index
5420 	  && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index))
5421 	  && (TREE_CODE (ce_index = fold_non_dependent_expr (ce_index))
5422 	      == INTEGER_CST))
5423 	{
5424 	  /* A C99 designator is OK if it matches the current index.  */
5425 	  if (wi::to_wide (ce_index) == index)
5426 	    {
5427 	      ce->index = ce_index;
5428 	      return true;
5429 	    }
5430 	  else
5431 	    sorry ("non-trivial designated initializers not supported");
5432 	}
5433       else
5434 	error ("C99 designator %qE is not an integral constant-expression",
5435 	       ce->index);
5436 
5437       return false;
5438     }
5439 
5440   return true;
5441 }
5442 
5443 /* When parsing `int a[] = {1, 2};' we don't know the size of the
5444    array until we finish parsing the initializer.  If that's the
5445    situation we're in, update DECL accordingly.  */
5446 
5447 static void
5448 maybe_deduce_size_from_array_init (tree decl, tree init)
5449 {
5450   tree type = TREE_TYPE (decl);
5451 
5452   if (TREE_CODE (type) == ARRAY_TYPE
5453       && TYPE_DOMAIN (type) == NULL_TREE
5454       && TREE_CODE (decl) != TYPE_DECL)
5455     {
5456       /* do_default is really a C-ism to deal with tentative definitions.
5457 	 But let's leave it here to ease the eventual merge.  */
5458       int do_default = !DECL_EXTERNAL (decl);
5459       tree initializer = init ? init : DECL_INITIAL (decl);
5460       int failure = 0;
5461 
5462       /* Check that there are no designated initializers in INIT, as
5463 	 those are not supported in GNU C++, and as the middle-end
5464 	 will crash if presented with a non-numeric designated
5465 	 initializer.  */
5466       if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
5467 	{
5468 	  vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
5469 	  constructor_elt *ce;
5470 	  HOST_WIDE_INT i;
5471 	  FOR_EACH_VEC_SAFE_ELT (v, i, ce)
5472 	    {
5473 	      if (instantiation_dependent_expression_p (ce->index))
5474 		return;
5475 	      if (!check_array_designated_initializer (ce, i))
5476 		failure = 1;
5477 	    }
5478 	}
5479 
5480       if (failure)
5481 	TREE_TYPE (decl) = error_mark_node;
5482       else
5483 	{
5484 	  failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
5485 					    do_default);
5486 	  if (failure == 1)
5487 	    {
5488 	      error_at (EXPR_LOC_OR_LOC (initializer,
5489 					 DECL_SOURCE_LOCATION (decl)),
5490 			"initializer fails to determine size of %qD", decl);
5491 	    }
5492 	  else if (failure == 2)
5493 	    {
5494 	      if (do_default)
5495 		{
5496 		  error_at (DECL_SOURCE_LOCATION (decl),
5497 			    "array size missing in %qD", decl);
5498 		}
5499 	      /* If a `static' var's size isn't known, make it extern as
5500 		 well as static, so it does not get allocated.  If it's not
5501 		 `static', then don't mark it extern; finish_incomplete_decl
5502 		 will give it a default size and it will get allocated.  */
5503 	      else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
5504 		DECL_EXTERNAL (decl) = 1;
5505 	    }
5506 	  else if (failure == 3)
5507 	    {
5508 	      error_at (DECL_SOURCE_LOCATION (decl),
5509 			"zero-size array %qD", decl);
5510 	    }
5511 	}
5512 
5513       cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
5514 
5515       relayout_decl (decl);
5516     }
5517 }
5518 
5519 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
5520    any appropriate error messages regarding the layout.  */
5521 
5522 static void
5523 layout_var_decl (tree decl)
5524 {
5525   tree type;
5526 
5527   type = TREE_TYPE (decl);
5528   if (type == error_mark_node)
5529     return;
5530 
5531   /* If we haven't already laid out this declaration, do so now.
5532      Note that we must not call complete type for an external object
5533      because it's type might involve templates that we are not
5534      supposed to instantiate yet.  (And it's perfectly valid to say
5535      `extern X x' for some incomplete type `X'.)  */
5536   if (!DECL_EXTERNAL (decl))
5537     complete_type (type);
5538   if (!DECL_SIZE (decl)
5539       && TREE_TYPE (decl) != error_mark_node
5540       && complete_or_array_type_p (type))
5541     layout_decl (decl, 0);
5542 
5543   if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
5544     {
5545       /* An automatic variable with an incomplete type: that is an error.
5546 	 Don't talk about array types here, since we took care of that
5547 	 message in grokdeclarator.  */
5548       error_at (DECL_SOURCE_LOCATION (decl),
5549 		"storage size of %qD isn%'t known", decl);
5550       TREE_TYPE (decl) = error_mark_node;
5551     }
5552 #if 0
5553   /* Keep this code around in case we later want to control debug info
5554      based on whether a type is "used".  (jason 1999-11-11) */
5555 
5556   else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
5557     /* Let debugger know it should output info for this type.  */
5558     note_debug_info_needed (ttype);
5559 
5560   if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
5561     note_debug_info_needed (DECL_CONTEXT (decl));
5562 #endif
5563 
5564   if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
5565       && DECL_SIZE (decl) != NULL_TREE
5566       && ! TREE_CONSTANT (DECL_SIZE (decl)))
5567     {
5568       if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
5569 	constant_expression_warning (DECL_SIZE (decl));
5570       else
5571 	{
5572 	  error_at (DECL_SOURCE_LOCATION (decl),
5573 		    "storage size of %qD isn%'t constant", decl);
5574 	  TREE_TYPE (decl) = error_mark_node;
5575 	}
5576     }
5577 }
5578 
5579 /* If a local static variable is declared in an inline function, or if
5580    we have a weak definition, we must endeavor to create only one
5581    instance of the variable at link-time.  */
5582 
5583 void
5584 maybe_commonize_var (tree decl)
5585 {
5586   /* Static data in a function with comdat linkage also has comdat
5587      linkage.  */
5588   if ((TREE_STATIC (decl)
5589        /* Don't mess with __FUNCTION__.  */
5590        && ! DECL_ARTIFICIAL (decl)
5591        && DECL_FUNCTION_SCOPE_P (decl)
5592        && vague_linkage_p (DECL_CONTEXT (decl)))
5593       || (TREE_PUBLIC (decl) && DECL_INLINE_VAR_P (decl)))
5594     {
5595       if (flag_weak)
5596 	{
5597 	  /* With weak symbols, we simply make the variable COMDAT;
5598 	     that will cause copies in multiple translations units to
5599 	     be merged.  */
5600 	  comdat_linkage (decl);
5601 	}
5602       else
5603 	{
5604 	  if (DECL_INITIAL (decl) == NULL_TREE
5605 	      || DECL_INITIAL (decl) == error_mark_node)
5606 	    {
5607 	      /* Without weak symbols, we can use COMMON to merge
5608 		 uninitialized variables.  */
5609 	      TREE_PUBLIC (decl) = 1;
5610 	      DECL_COMMON (decl) = 1;
5611 	    }
5612 	  else
5613 	    {
5614 	      /* While for initialized variables, we must use internal
5615 		 linkage -- which means that multiple copies will not
5616 		 be merged.  */
5617 	      TREE_PUBLIC (decl) = 0;
5618 	      DECL_COMMON (decl) = 0;
5619 	      const char *msg;
5620 	      if (DECL_INLINE_VAR_P (decl))
5621 		msg = G_("sorry: semantics of inline variable "
5622 			 "%q#D are wrong (you%'ll wind up with "
5623 			 "multiple copies)");
5624 	      else
5625 		msg = G_("sorry: semantics of inline function "
5626 			 "static data %q#D are wrong (you%'ll wind "
5627 			 "up with multiple copies)");
5628 	      if (warning_at (DECL_SOURCE_LOCATION (decl), 0,
5629 			      msg, decl))
5630 		inform (DECL_SOURCE_LOCATION (decl),
5631 			"you can work around this by removing the initializer");
5632 	    }
5633 	}
5634     }
5635 }
5636 
5637 /* Issue an error message if DECL is an uninitialized const variable.
5638    CONSTEXPR_CONTEXT_P is true when the function is called in a constexpr
5639    context from potential_constant_expression.  Returns true if all is well,
5640    false otherwise.  */
5641 
5642 bool
5643 check_for_uninitialized_const_var (tree decl, bool constexpr_context_p,
5644 				   tsubst_flags_t complain)
5645 {
5646   tree type = strip_array_types (TREE_TYPE (decl));
5647 
5648   /* ``Unless explicitly declared extern, a const object does not have
5649      external linkage and must be initialized. ($8.4; $12.1)'' ARM
5650      7.1.6 */
5651   if (VAR_P (decl)
5652       && TREE_CODE (type) != REFERENCE_TYPE
5653       && (constexpr_context_p
5654 	  || CP_TYPE_CONST_P (type) || var_in_constexpr_fn (decl))
5655       && !DECL_NONTRIVIALLY_INITIALIZED_P (decl))
5656     {
5657       tree field = default_init_uninitialized_part (type);
5658       if (!field)
5659 	return true;
5660 
5661       if (!constexpr_context_p)
5662 	{
5663 	  if (CP_TYPE_CONST_P (type))
5664 	    {
5665 	      if (complain & tf_error)
5666 		permerror (DECL_SOURCE_LOCATION (decl),
5667 			   "uninitialized const %qD", decl);
5668 	    }
5669 	  else
5670 	    {
5671 	      if (!is_instantiation_of_constexpr (current_function_decl)
5672 		  && (complain & tf_error))
5673 		error_at (DECL_SOURCE_LOCATION (decl),
5674 			  "uninitialized variable %qD in %<constexpr%> "
5675 			  "function", decl);
5676 	      cp_function_chain->invalid_constexpr = true;
5677 	    }
5678 	}
5679       else if (complain & tf_error)
5680 	error_at (DECL_SOURCE_LOCATION (decl),
5681 		  "uninitialized variable %qD in %<constexpr%> context",
5682 		  decl);
5683 
5684       if (CLASS_TYPE_P (type) && (complain & tf_error))
5685 	{
5686 	  tree defaulted_ctor;
5687 
5688 	  inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5689 		  "%q#T has no user-provided default constructor", type);
5690 	  defaulted_ctor = in_class_defaulted_default_constructor (type);
5691 	  if (defaulted_ctor)
5692 	    inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5693 		    "constructor is not user-provided because it is "
5694 		    "explicitly defaulted in the class body");
5695 	  inform (DECL_SOURCE_LOCATION (field),
5696 		  "and the implicitly-defined constructor does not "
5697 		  "initialize %q#D", field);
5698 	}
5699 
5700       return false;
5701     }
5702 
5703   return true;
5704 }
5705 
5706 /* Structure holding the current initializer being processed by reshape_init.
5707    CUR is a pointer to the current element being processed, END is a pointer
5708    after the last element present in the initializer.  */
5709 struct reshape_iter
5710 {
5711   constructor_elt *cur;
5712   constructor_elt *end;
5713 };
5714 
5715 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5716 
5717 /* FIELD is a FIELD_DECL or NULL.  In the former case, the value
5718    returned is the next FIELD_DECL (possibly FIELD itself) that can be
5719    initialized.  If there are no more such fields, the return value
5720    will be NULL.  */
5721 
5722 tree
5723 next_initializable_field (tree field)
5724 {
5725   while (field
5726 	 && (TREE_CODE (field) != FIELD_DECL
5727 	     || DECL_UNNAMED_BIT_FIELD (field)
5728 	     || (DECL_ARTIFICIAL (field)
5729 		 && !(cxx_dialect >= cxx17 && DECL_FIELD_IS_BASE (field)))))
5730     field = DECL_CHAIN (field);
5731 
5732   return field;
5733 }
5734 
5735 /* Return true for [dcl.init.list] direct-list-initialization from
5736    single element of enumeration with a fixed underlying type.  */
5737 
5738 bool
5739 is_direct_enum_init (tree type, tree init)
5740 {
5741   if (cxx_dialect >= cxx17
5742       && TREE_CODE (type) == ENUMERAL_TYPE
5743       && ENUM_FIXED_UNDERLYING_TYPE_P (type)
5744       && TREE_CODE (init) == CONSTRUCTOR
5745       && CONSTRUCTOR_IS_DIRECT_INIT (init)
5746       && CONSTRUCTOR_NELTS (init) == 1)
5747     return true;
5748   return false;
5749 }
5750 
5751 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5752    the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5753    INTEGER_CST representing the size of the array minus one (the maximum index),
5754    or NULL_TREE if the array was declared without specifying the size. D is
5755    the iterator within the constructor.  */
5756 
5757 static tree
5758 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5759 		      tsubst_flags_t complain)
5760 {
5761   tree new_init;
5762   bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5763   unsigned HOST_WIDE_INT max_index_cst = 0;
5764   unsigned HOST_WIDE_INT index;
5765 
5766   /* The initializer for an array is always a CONSTRUCTOR.  */
5767   new_init = build_constructor (init_list_type_node, NULL);
5768 
5769   if (sized_array_p)
5770     {
5771       /* Minus 1 is used for zero sized arrays.  */
5772       if (integer_all_onesp (max_index))
5773 	return new_init;
5774 
5775       if (tree_fits_uhwi_p (max_index))
5776 	max_index_cst = tree_to_uhwi (max_index);
5777       /* sizetype is sign extended, not zero extended.  */
5778       else
5779 	max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
5780     }
5781 
5782   /* Loop until there are no more initializers.  */
5783   for (index = 0;
5784        d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5785        ++index)
5786     {
5787       tree elt_init;
5788       constructor_elt *old_cur = d->cur;
5789 
5790       check_array_designated_initializer (d->cur, index);
5791       elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5792 				 complain);
5793       if (elt_init == error_mark_node)
5794 	return error_mark_node;
5795       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5796 			      size_int (index), elt_init);
5797       if (!TREE_CONSTANT (elt_init))
5798 	TREE_CONSTANT (new_init) = false;
5799 
5800       /* This can happen with an invalid initializer (c++/54501).  */
5801       if (d->cur == old_cur && !sized_array_p)
5802 	break;
5803     }
5804 
5805   return new_init;
5806 }
5807 
5808 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5809    Parameters are the same of reshape_init_r.  */
5810 
5811 static tree
5812 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5813 {
5814   tree max_index = NULL_TREE;
5815 
5816   gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5817 
5818   if (TYPE_DOMAIN (type))
5819     max_index = array_type_nelts (type);
5820 
5821   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5822 }
5823 
5824 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5825    Parameters are the same of reshape_init_r.  */
5826 
5827 static tree
5828 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5829 {
5830   tree max_index = NULL_TREE;
5831 
5832   gcc_assert (VECTOR_TYPE_P (type));
5833 
5834   if (COMPOUND_LITERAL_P (d->cur->value))
5835     {
5836       tree value = d->cur->value;
5837       if (!same_type_p (TREE_TYPE (value), type))
5838 	{
5839 	  if (complain & tf_error)
5840 	    error ("invalid type %qT as initializer for a vector of type %qT",
5841 		   TREE_TYPE (d->cur->value), type);
5842 	  value = error_mark_node;
5843 	}
5844       ++d->cur;
5845       return value;
5846     }
5847 
5848   /* For a vector, we initialize it as an array of the appropriate size.  */
5849   if (VECTOR_TYPE_P (type))
5850     max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5851 
5852   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5853 }
5854 
5855 /* Subroutine of reshape_init_r, processes the initializers for classes
5856    or union. Parameters are the same of reshape_init_r.  */
5857 
5858 static tree
5859 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5860 		    tsubst_flags_t complain)
5861 {
5862   tree field;
5863   tree new_init;
5864 
5865   gcc_assert (CLASS_TYPE_P (type));
5866 
5867   /* The initializer for a class is always a CONSTRUCTOR.  */
5868   new_init = build_constructor (init_list_type_node, NULL);
5869   field = next_initializable_field (TYPE_FIELDS (type));
5870 
5871   if (!field)
5872     {
5873       /* [dcl.init.aggr]
5874 
5875 	An initializer for an aggregate member that is an
5876 	empty class shall have the form of an empty
5877 	initializer-list {}.  */
5878       if (!first_initializer_p)
5879 	{
5880 	  if (complain & tf_error)
5881 	    error ("initializer for %qT must be brace-enclosed", type);
5882 	  return error_mark_node;
5883 	}
5884       return new_init;
5885     }
5886 
5887   /* Loop through the initializable fields, gathering initializers.  */
5888   while (d->cur != d->end)
5889     {
5890       tree field_init;
5891       constructor_elt *old_cur = d->cur;
5892 
5893       /* Handle designated initializers, as an extension.  */
5894       if (d->cur->index)
5895 	{
5896 	  if (d->cur->index == error_mark_node)
5897 	    return error_mark_node;
5898 
5899 	  if (TREE_CODE (d->cur->index) == FIELD_DECL)
5900 	    {
5901 	      /* We already reshaped this.  */
5902 	      if (field != d->cur->index)
5903 		{
5904 		  tree id = DECL_NAME (d->cur->index);
5905 		  gcc_assert (id);
5906 		  gcc_checking_assert (d->cur->index
5907 				       == get_class_binding (type, id, false));
5908 		  field = d->cur->index;
5909 		}
5910 	    }
5911 	  else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
5912 	    field = get_class_binding (type, d->cur->index, false);
5913 	  else
5914 	    {
5915 	      if (complain & tf_error)
5916 		error ("%<[%E] =%> used in a GNU-style designated initializer"
5917 		       " for class %qT", d->cur->index, type);
5918 	      return error_mark_node;
5919 	    }
5920 
5921 	  if (!field || TREE_CODE (field) != FIELD_DECL)
5922 	    {
5923 	      if (complain & tf_error)
5924 		error ("%qT has no non-static data member named %qD", type,
5925 		       d->cur->index);
5926 	      return error_mark_node;
5927 	    }
5928 	}
5929 
5930       /* If we processed all the member of the class, we are done.  */
5931       if (!field)
5932 	break;
5933 
5934       field_init = reshape_init_r (TREE_TYPE (field), d,
5935 				   /*first_initializer_p=*/false, complain);
5936       if (field_init == error_mark_node)
5937 	return error_mark_node;
5938 
5939       if (d->cur == old_cur && d->cur->index)
5940 	{
5941 	  /* This can happen with an invalid initializer for a flexible
5942 	     array member (c++/54441).  */
5943 	  if (complain & tf_error)
5944 	    error ("invalid initializer for %q#D", field);
5945 	  return error_mark_node;
5946 	}
5947 
5948       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5949 
5950       /* [dcl.init.aggr]
5951 
5952 	When a union  is  initialized with a brace-enclosed
5953 	initializer, the braces shall only contain an
5954 	initializer for the first member of the union.  */
5955       if (TREE_CODE (type) == UNION_TYPE)
5956 	break;
5957 
5958       field = next_initializable_field (DECL_CHAIN (field));
5959     }
5960 
5961   return new_init;
5962 }
5963 
5964 /* Subroutine of reshape_init_r.  We're in a context where C99 initializer
5965    designators are not valid; either complain or return true to indicate
5966    that reshape_init_r should return error_mark_node.  */
5967 
5968 static bool
5969 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5970 {
5971   if (d->cur->index)
5972     {
5973       if (complain & tf_error)
5974 	error ("C99 designator %qE outside aggregate initializer",
5975 	       d->cur->index);
5976       else
5977 	return true;
5978     }
5979   return false;
5980 }
5981 
5982 /* Subroutine of reshape_init, which processes a single initializer (part of
5983    a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5984    iterator within the CONSTRUCTOR which points to the initializer to process.
5985    FIRST_INITIALIZER_P is true if this is the first initializer of the
5986    outermost CONSTRUCTOR node.  */
5987 
5988 static tree
5989 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5990 		tsubst_flags_t complain)
5991 {
5992   tree init = d->cur->value;
5993 
5994   if (error_operand_p (init))
5995     return error_mark_node;
5996 
5997   if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5998       && has_designator_problem (d, complain))
5999     return error_mark_node;
6000 
6001   if (TREE_CODE (type) == COMPLEX_TYPE)
6002     {
6003       /* A complex type can be initialized from one or two initializers,
6004 	 but braces are not elided.  */
6005       d->cur++;
6006       if (BRACE_ENCLOSED_INITIALIZER_P (init))
6007 	{
6008 	  if (CONSTRUCTOR_NELTS (init) > 2)
6009 	    {
6010 	      if (complain & tf_error)
6011 		error ("too many initializers for %qT", type);
6012 	      else
6013 		return error_mark_node;
6014 	    }
6015 	}
6016       else if (first_initializer_p && d->cur != d->end)
6017 	{
6018 	  vec<constructor_elt, va_gc> *v = 0;
6019 	  CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
6020 	  CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
6021 	  if (has_designator_problem (d, complain))
6022 	    return error_mark_node;
6023 	  d->cur++;
6024 	  init = build_constructor (init_list_type_node, v);
6025 	}
6026       return init;
6027     }
6028 
6029   /* A non-aggregate type is always initialized with a single
6030      initializer.  */
6031   if (!CP_AGGREGATE_TYPE_P (type))
6032     {
6033       /* It is invalid to initialize a non-aggregate type with a
6034 	 brace-enclosed initializer before C++0x.
6035 	 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
6036 	 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
6037 	 a CONSTRUCTOR (with a record type).  */
6038       if (TREE_CODE (init) == CONSTRUCTOR
6039 	  /* Don't complain about a capture-init.  */
6040 	  && !CONSTRUCTOR_IS_DIRECT_INIT (init)
6041 	  && BRACE_ENCLOSED_INITIALIZER_P (init))  /* p7626.C */
6042 	{
6043 	  if (SCALAR_TYPE_P (type))
6044 	    {
6045 	      if (cxx_dialect < cxx11
6046 		  /* Isn't value-initialization.  */
6047 		  || CONSTRUCTOR_NELTS (init) > 0)
6048 		{
6049 		  if (complain & tf_error)
6050 		    error ("braces around scalar initializer for type %qT",
6051 			   type);
6052 		  init = error_mark_node;
6053 		}
6054 	    }
6055 	  else
6056 	    maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6057 	}
6058 
6059       d->cur++;
6060       return init;
6061     }
6062 
6063   /* "If T is a class type and the initializer list has a single element of
6064      type cv U, where U is T or a class derived from T, the object is
6065      initialized from that element."  Even if T is an aggregate.  */
6066   if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
6067       && first_initializer_p
6068       && d->end - d->cur == 1
6069       && reference_related_p (type, TREE_TYPE (init)))
6070     {
6071       d->cur++;
6072       return init;
6073     }
6074 
6075   /* [dcl.init.aggr]
6076 
6077      All implicit type conversions (clause _conv_) are considered when
6078      initializing the aggregate member with an initializer from an
6079      initializer-list.  If the initializer can initialize a member,
6080      the member is initialized.  Otherwise, if the member is itself a
6081      non-empty subaggregate, brace elision is assumed and the
6082      initializer is considered for the initialization of the first
6083      member of the subaggregate.  */
6084   if (TREE_CODE (init) != CONSTRUCTOR
6085       /* But don't try this for the first initializer, since that would be
6086 	 looking through the outermost braces; A a2 = { a1 }; is not a
6087 	 valid aggregate initialization.  */
6088       && !first_initializer_p
6089       && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
6090 	  || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
6091 			      complain)))
6092     {
6093       d->cur++;
6094       return init;
6095     }
6096 
6097   /* [dcl.init.string]
6098 
6099       A char array (whether plain char, signed char, or unsigned char)
6100       can be initialized by a string-literal (optionally enclosed in
6101       braces); a wchar_t array can be initialized by a wide
6102       string-literal (optionally enclosed in braces).  */
6103   if (TREE_CODE (type) == ARRAY_TYPE
6104       && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
6105     {
6106       tree str_init = init;
6107 
6108       /* Strip one level of braces if and only if they enclose a single
6109 	 element (as allowed by [dcl.init.string]).  */
6110       if (!first_initializer_p
6111 	  && TREE_CODE (str_init) == CONSTRUCTOR
6112 	  && CONSTRUCTOR_NELTS (str_init) == 1)
6113 	{
6114 	  str_init = (*CONSTRUCTOR_ELTS (str_init))[0].value;
6115 	}
6116 
6117       /* If it's a string literal, then it's the initializer for the array
6118 	 as a whole. Otherwise, continue with normal initialization for
6119 	 array types (one value per array element).  */
6120       if (TREE_CODE (str_init) == STRING_CST)
6121 	{
6122 	  if (has_designator_problem (d, complain))
6123 	    return error_mark_node;
6124 	  d->cur++;
6125 	  return str_init;
6126 	}
6127     }
6128 
6129   /* The following cases are about aggregates. If we are not within a full
6130      initializer already, and there is not a CONSTRUCTOR, it means that there
6131      is a missing set of braces (that is, we are processing the case for
6132      which reshape_init exists).  */
6133   if (!first_initializer_p)
6134     {
6135       if (TREE_CODE (init) == CONSTRUCTOR)
6136 	{
6137 	  if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
6138 	    /* There is no need to reshape pointer-to-member function
6139 	       initializers, as they are always constructed correctly
6140 	       by the front end.  */
6141            ;
6142 	  else if (COMPOUND_LITERAL_P (init))
6143 	  /* For a nested compound literal, there is no need to reshape since
6144 	     brace elision is not allowed. Even if we decided to allow it,
6145 	     we should add a call to reshape_init in finish_compound_literal,
6146 	     before calling digest_init, so changing this code would still
6147 	     not be necessary.  */
6148 	    gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
6149 	  else
6150 	    {
6151 	      ++d->cur;
6152 	      gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6153 	      return reshape_init (type, init, complain);
6154 	    }
6155 	}
6156 
6157       if (complain & tf_warning)
6158 	warning (OPT_Wmissing_braces,
6159 		 "missing braces around initializer for %qT",
6160 		 type);
6161     }
6162 
6163   /* Dispatch to specialized routines.  */
6164   if (CLASS_TYPE_P (type))
6165     return reshape_init_class (type, d, first_initializer_p, complain);
6166   else if (TREE_CODE (type) == ARRAY_TYPE)
6167     return reshape_init_array (type, d, complain);
6168   else if (VECTOR_TYPE_P (type))
6169     return reshape_init_vector (type, d, complain);
6170   else
6171     gcc_unreachable();
6172 }
6173 
6174 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
6175    brace-enclosed aggregate initializer.
6176 
6177    INIT is the CONSTRUCTOR containing the list of initializers describing
6178    a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
6179    It may not presently match the shape of the TYPE; for example:
6180 
6181      struct S { int a; int b; };
6182      struct S a[] = { 1, 2, 3, 4 };
6183 
6184    Here INIT will hold a vector of four elements, rather than a
6185    vector of two elements, each itself a vector of two elements.  This
6186    routine transforms INIT from the former form into the latter.  The
6187    revised CONSTRUCTOR node is returned.  */
6188 
6189 tree
6190 reshape_init (tree type, tree init, tsubst_flags_t complain)
6191 {
6192   vec<constructor_elt, va_gc> *v;
6193   reshape_iter d;
6194   tree new_init;
6195 
6196   gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6197 
6198   v = CONSTRUCTOR_ELTS (init);
6199 
6200   /* An empty constructor does not need reshaping, and it is always a valid
6201      initializer.  */
6202   if (vec_safe_is_empty (v))
6203     return init;
6204 
6205   /* Handle [dcl.init.list] direct-list-initialization from
6206      single element of enumeration with a fixed underlying type.  */
6207   if (is_direct_enum_init (type, init))
6208     {
6209       tree elt = CONSTRUCTOR_ELT (init, 0)->value;
6210       type = cv_unqualified (type);
6211       if (check_narrowing (ENUM_UNDERLYING_TYPE (type), elt, complain))
6212 	{
6213 	  warning_sentinel w (warn_useless_cast);
6214 	  warning_sentinel w2 (warn_ignored_qualifiers);
6215 	  return cp_build_c_cast (type, elt, tf_warning_or_error);
6216 	}
6217       else
6218 	return error_mark_node;
6219     }
6220 
6221   /* Recurse on this CONSTRUCTOR.  */
6222   d.cur = &(*v)[0];
6223   d.end = d.cur + v->length ();
6224 
6225   new_init = reshape_init_r (type, &d, true, complain);
6226   if (new_init == error_mark_node)
6227     return error_mark_node;
6228 
6229   /* Make sure all the element of the constructor were used. Otherwise,
6230      issue an error about exceeding initializers.  */
6231   if (d.cur != d.end)
6232     {
6233       if (complain & tf_error)
6234 	error ("too many initializers for %qT", type);
6235       return error_mark_node;
6236     }
6237 
6238   if (CONSTRUCTOR_IS_DIRECT_INIT (init)
6239       && BRACE_ENCLOSED_INITIALIZER_P (new_init))
6240     CONSTRUCTOR_IS_DIRECT_INIT (new_init) = true;
6241 
6242   return new_init;
6243 }
6244 
6245 /* Verify array initializer.  Returns true if errors have been reported.  */
6246 
6247 bool
6248 check_array_initializer (tree decl, tree type, tree init)
6249 {
6250   tree element_type = TREE_TYPE (type);
6251 
6252   /* The array type itself need not be complete, because the
6253      initializer may tell us how many elements are in the array.
6254      But, the elements of the array must be complete.  */
6255   if (!COMPLETE_TYPE_P (complete_type (element_type)))
6256     {
6257       if (decl)
6258 	error_at (DECL_SOURCE_LOCATION (decl),
6259 		  "elements of array %q#D have incomplete type", decl);
6260       else
6261 	error ("elements of array %q#T have incomplete type", type);
6262       return true;
6263     }
6264   /* A compound literal can't have variable size.  */
6265   if (init && !decl
6266       && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
6267 	  || !TREE_CONSTANT (TYPE_SIZE (element_type))))
6268     {
6269       error ("variable-sized compound literal");
6270       return true;
6271     }
6272   return false;
6273 }
6274 
6275 /* Subroutine of check_initializer; args are passed down from that function.
6276    Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init.  */
6277 
6278 static tree
6279 build_aggr_init_full_exprs (tree decl, tree init, int flags)
6280 
6281 {
6282   gcc_assert (stmts_are_full_exprs_p ());
6283   return build_aggr_init (decl, init, flags, tf_warning_or_error);
6284 }
6285 
6286 /* Verify INIT (the initializer for DECL), and record the
6287    initialization in DECL_INITIAL, if appropriate.  CLEANUP is as for
6288    grok_reference_init.
6289 
6290    If the return value is non-NULL, it is an expression that must be
6291    evaluated dynamically to initialize DECL.  */
6292 
6293 static tree
6294 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
6295 {
6296   tree type = TREE_TYPE (decl);
6297   tree init_code = NULL;
6298   tree core_type;
6299 
6300   /* Things that are going to be initialized need to have complete
6301      type.  */
6302   TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
6303 
6304   if (DECL_HAS_VALUE_EXPR_P (decl))
6305     {
6306       /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
6307 	 it doesn't have storage to be initialized.  */
6308       gcc_assert (init == NULL_TREE);
6309       return NULL_TREE;
6310     }
6311 
6312   if (type == error_mark_node)
6313     /* We will have already complained.  */
6314     return NULL_TREE;
6315 
6316   if (TREE_CODE (type) == ARRAY_TYPE)
6317     {
6318       if (check_array_initializer (decl, type, init))
6319 	return NULL_TREE;
6320     }
6321   else if (!COMPLETE_TYPE_P (type))
6322     {
6323       error_at (DECL_SOURCE_LOCATION (decl),
6324 		"%q#D has incomplete type", decl);
6325       TREE_TYPE (decl) = error_mark_node;
6326       return NULL_TREE;
6327     }
6328   else
6329     /* There is no way to make a variable-sized class type in GNU C++.  */
6330     gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
6331 
6332   if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
6333     {
6334       int init_len = CONSTRUCTOR_NELTS (init);
6335       if (SCALAR_TYPE_P (type))
6336 	{
6337 	  if (init_len == 0)
6338 	    {
6339 	      maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6340 	      init = build_zero_init (type, NULL_TREE, false);
6341 	    }
6342 	  else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
6343 	    {
6344 	      error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)),
6345 			"scalar object %qD requires one element in "
6346 			"initializer", decl);
6347 	      TREE_TYPE (decl) = error_mark_node;
6348 	      return NULL_TREE;
6349 	    }
6350 	}
6351     }
6352 
6353   if (TREE_CODE (decl) == CONST_DECL)
6354     {
6355       gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
6356 
6357       DECL_INITIAL (decl) = init;
6358 
6359       gcc_assert (init != NULL_TREE);
6360       init = NULL_TREE;
6361     }
6362   else if (!init && DECL_REALLY_EXTERN (decl))
6363     ;
6364   else if (init || type_build_ctor_call (type)
6365 	   || TREE_CODE (type) == REFERENCE_TYPE)
6366     {
6367       if (TREE_CODE (type) == REFERENCE_TYPE)
6368 	{
6369 	  init = grok_reference_init (decl, type, init, flags);
6370 	  flags |= LOOKUP_ALREADY_DIGESTED;
6371 	}
6372       else if (!init)
6373 	check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
6374 					   tf_warning_or_error);
6375       /* Do not reshape constructors of vectors (they don't need to be
6376 	 reshaped.  */
6377       else if (BRACE_ENCLOSED_INITIALIZER_P (init))
6378 	{
6379 	  if (is_std_init_list (type))
6380 	    {
6381 	      init = perform_implicit_conversion (type, init,
6382 						  tf_warning_or_error);
6383 	      flags |= LOOKUP_ALREADY_DIGESTED;
6384 	    }
6385 	  else if (TYPE_NON_AGGREGATE_CLASS (type))
6386 	    {
6387 	      /* Don't reshape if the class has constructors.  */
6388 	      if (cxx_dialect == cxx98)
6389 		error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)),
6390 			  "in C++98 %qD must be initialized by "
6391 			  "constructor, not by %<{...}%>",
6392 			  decl);
6393 	    }
6394 	  else if (VECTOR_TYPE_P (type) && TYPE_VECTOR_OPAQUE (type))
6395 	    {
6396 	      error ("opaque vector types cannot be initialized");
6397 	      init = error_mark_node;
6398 	    }
6399 	  else
6400 	    {
6401 	      init = reshape_init (type, init, tf_warning_or_error);
6402 	      flags |= LOOKUP_NO_NARROWING;
6403 	    }
6404 	}
6405       else if (TREE_CODE (init) == TREE_LIST
6406 	       && TREE_TYPE (init) != unknown_type_node
6407 	       && !MAYBE_CLASS_TYPE_P (type))
6408 	{
6409 	  gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6410 
6411 	  /* We get here with code like `int a (2);' */
6412 	  init = build_x_compound_expr_from_list (init, ELK_INIT,
6413 						  tf_warning_or_error);
6414 	}
6415 
6416       /* If DECL has an array type without a specific bound, deduce the
6417 	 array size from the initializer.  */
6418       maybe_deduce_size_from_array_init (decl, init);
6419       type = TREE_TYPE (decl);
6420       if (type == error_mark_node)
6421 	return NULL_TREE;
6422 
6423       if (((type_build_ctor_call (type) || CLASS_TYPE_P (type))
6424 	   && !(flags & LOOKUP_ALREADY_DIGESTED)
6425 	   && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
6426 		&& CP_AGGREGATE_TYPE_P (type)
6427 		&& (CLASS_TYPE_P (type)
6428 		    || !TYPE_NEEDS_CONSTRUCTING (type)
6429 		    || type_has_extended_temps (type))))
6430 	  || (DECL_DECOMPOSITION_P (decl) && TREE_CODE (type) == ARRAY_TYPE))
6431 	{
6432 	  init_code = build_aggr_init_full_exprs (decl, init, flags);
6433 
6434 	  /* A constructor call is a non-trivial initializer even if
6435 	     it isn't explicitly written.  */
6436 	  if (TREE_SIDE_EFFECTS (init_code))
6437 	    DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
6438 
6439 	  /* If this is a constexpr initializer, expand_default_init will
6440 	     have returned an INIT_EXPR rather than a CALL_EXPR.  In that
6441 	     case, pull the initializer back out and pass it down into
6442 	     store_init_value.  */
6443 	  while (TREE_CODE (init_code) == EXPR_STMT
6444 		 || TREE_CODE (init_code) == CONVERT_EXPR)
6445 	    init_code = TREE_OPERAND (init_code, 0);
6446 	  if (TREE_CODE (init_code) == INIT_EXPR)
6447 	    {
6448 	      init = TREE_OPERAND (init_code, 1);
6449 	      init_code = NULL_TREE;
6450 	      /* Don't call digest_init; it's unnecessary and will complain
6451 		 about aggregate initialization of non-aggregate classes.  */
6452 	      flags |= LOOKUP_ALREADY_DIGESTED;
6453 	    }
6454 	  else if (DECL_DECLARED_CONSTEXPR_P (decl))
6455 	    {
6456 	      /* Declared constexpr, but no suitable initializer; massage
6457 		 init appropriately so we can pass it into store_init_value
6458 		 for the error.  */
6459 	      if (CLASS_TYPE_P (type)
6460 		  && (!init || TREE_CODE (init) == TREE_LIST))
6461 		{
6462 		  init = build_functional_cast (type, init, tf_none);
6463 		  if (TREE_CODE (init) == TARGET_EXPR)
6464 		    TARGET_EXPR_DIRECT_INIT_P (init) = true;
6465 		}
6466 	      init_code = NULL_TREE;
6467 	    }
6468 	  else
6469 	    init = NULL_TREE;
6470 	}
6471 
6472       if (init && TREE_CODE (init) != TREE_VEC)
6473 	{
6474 	  /* In aggregate initialization of a variable, each element
6475 	     initialization is a full-expression because there is no
6476 	     enclosing expression.  */
6477 	  gcc_assert (stmts_are_full_exprs_p ());
6478 
6479 	  init_code = store_init_value (decl, init, cleanups, flags);
6480 
6481 	  if (pedantic && TREE_CODE (type) == ARRAY_TYPE
6482 	      && DECL_INITIAL (decl)
6483 	      && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
6484 	      && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
6485 	    warning_at (EXPR_LOC_OR_LOC (DECL_INITIAL (decl),
6486 					 DECL_SOURCE_LOCATION (decl)),
6487 			0, "array %qD initialized by parenthesized "
6488 			"string literal %qE",
6489 			decl, DECL_INITIAL (decl));
6490 	  init = NULL;
6491 	}
6492     }
6493   else
6494     {
6495       if (CLASS_TYPE_P (core_type = strip_array_types (type))
6496 	  && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
6497 	      || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
6498 	diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
6499 						  /*complain=*/true);
6500 
6501       check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
6502 					 tf_warning_or_error);
6503     }
6504 
6505   if (init && init != error_mark_node)
6506     init_code = build2 (INIT_EXPR, type, decl, init);
6507 
6508   if (init_code)
6509     {
6510       /* We might have set these in cp_finish_decl.  */
6511       DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
6512       TREE_CONSTANT (decl) = false;
6513     }
6514 
6515   if (init_code
6516       && (DECL_IN_AGGR_P (decl)
6517 	  && DECL_INITIALIZED_IN_CLASS_P (decl)
6518 	  && !DECL_VAR_DECLARED_INLINE_P (decl)))
6519     {
6520       static int explained = 0;
6521 
6522       if (cxx_dialect < cxx11)
6523 	error ("initializer invalid for static member with constructor");
6524       else if (cxx_dialect < cxx17)
6525 	error ("non-constant in-class initialization invalid for static "
6526 	       "member %qD", decl);
6527       else
6528 	error ("non-constant in-class initialization invalid for non-inline "
6529 	       "static member %qD", decl);
6530       if (!explained)
6531 	{
6532 	  inform (input_location,
6533 		  "(an out of class initialization is required)");
6534 	  explained = 1;
6535 	}
6536       return NULL_TREE;
6537     }
6538 
6539   return init_code;
6540 }
6541 
6542 /* If DECL is not a local variable, give it RTL.  */
6543 
6544 static void
6545 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
6546 {
6547   int toplev = toplevel_bindings_p ();
6548   int defer_p;
6549 
6550   /* Set the DECL_ASSEMBLER_NAME for the object.  */
6551   if (asmspec)
6552     {
6553       /* The `register' keyword, when used together with an
6554 	 asm-specification, indicates that the variable should be
6555 	 placed in a particular register.  */
6556       if (VAR_P (decl) && DECL_REGISTER (decl))
6557 	{
6558 	  set_user_assembler_name (decl, asmspec);
6559 	  DECL_HARD_REGISTER (decl) = 1;
6560 	}
6561       else
6562 	{
6563 	  if (TREE_CODE (decl) == FUNCTION_DECL
6564 	      && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
6565 	    set_builtin_user_assembler_name (decl, asmspec);
6566 	  set_user_assembler_name (decl, asmspec);
6567 	}
6568     }
6569 
6570   /* Handle non-variables up front.  */
6571   if (!VAR_P (decl))
6572     {
6573       rest_of_decl_compilation (decl, toplev, at_eof);
6574       return;
6575     }
6576 
6577   /* If we see a class member here, it should be a static data
6578      member.  */
6579   if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
6580     {
6581       gcc_assert (TREE_STATIC (decl));
6582       /* An in-class declaration of a static data member should be
6583 	 external; it is only a declaration, and not a definition.  */
6584       if (init == NULL_TREE)
6585 	gcc_assert (DECL_EXTERNAL (decl)
6586 		    || !TREE_PUBLIC (decl)
6587 		    || DECL_INLINE_VAR_P (decl));
6588     }
6589 
6590   /* We don't create any RTL for local variables.  */
6591   if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6592     return;
6593 
6594   /* We defer emission of local statics until the corresponding
6595      DECL_EXPR is expanded.  But with constexpr its function might never
6596      be expanded, so go ahead and tell cgraph about the variable now.  */
6597   defer_p = ((DECL_FUNCTION_SCOPE_P (decl)
6598 	      && !var_in_maybe_constexpr_fn (decl))
6599 	     || DECL_VIRTUAL_P (decl));
6600 
6601   /* Defer template instantiations.  */
6602   if (DECL_LANG_SPECIFIC (decl)
6603       && DECL_IMPLICIT_INSTANTIATION (decl))
6604     defer_p = 1;
6605 
6606   /* If we're not deferring, go ahead and assemble the variable.  */
6607   if (!defer_p)
6608     rest_of_decl_compilation (decl, toplev, at_eof);
6609 }
6610 
6611 /* walk_tree helper for wrap_temporary_cleanups, below.  */
6612 
6613 static tree
6614 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
6615 {
6616   /* Stop at types or full-expression boundaries.  */
6617   if (TYPE_P (*stmt_p)
6618       || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
6619     {
6620       *walk_subtrees = 0;
6621       return NULL_TREE;
6622     }
6623 
6624   if (TREE_CODE (*stmt_p) == TARGET_EXPR)
6625     {
6626       tree guard = (tree)data;
6627       tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
6628 
6629       tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
6630       /* Tell honor_protect_cleanup_actions to handle this as a separate
6631 	 cleanup.  */
6632       TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
6633 
6634       TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
6635     }
6636 
6637   return NULL_TREE;
6638 }
6639 
6640 /* We're initializing a local variable which has a cleanup GUARD.  If there
6641    are any temporaries used in the initializer INIT of this variable, we
6642    need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6643    variable will be cleaned up properly if one of them throws.
6644 
6645    Unfortunately, there's no way to express this properly in terms of
6646    nesting, as the regions for the temporaries overlap the region for the
6647    variable itself; if there are two temporaries, the variable needs to be
6648    the first thing destroyed if either of them throws.  However, we only
6649    want to run the variable's cleanup if it actually got constructed.  So
6650    we need to guard the temporary cleanups with the variable's cleanup if
6651    they are run on the normal path, but not if they are run on the
6652    exceptional path.  We implement this by telling
6653    honor_protect_cleanup_actions to strip the variable cleanup from the
6654    exceptional path.  */
6655 
6656 static void
6657 wrap_temporary_cleanups (tree init, tree guard)
6658 {
6659   cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6660 }
6661 
6662 /* Generate code to initialize DECL (a local variable).  */
6663 
6664 static void
6665 initialize_local_var (tree decl, tree init)
6666 {
6667   tree type = TREE_TYPE (decl);
6668   tree cleanup;
6669   int already_used;
6670 
6671   gcc_assert (VAR_P (decl)
6672 	      || TREE_CODE (decl) == RESULT_DECL);
6673   gcc_assert (!TREE_STATIC (decl));
6674 
6675   if (DECL_SIZE (decl) == NULL_TREE)
6676     {
6677       /* If we used it already as memory, it must stay in memory.  */
6678       DECL_INITIAL (decl) = NULL_TREE;
6679       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6680       return;
6681     }
6682 
6683   if (type == error_mark_node)
6684     return;
6685 
6686   /* Compute and store the initial value.  */
6687   already_used = TREE_USED (decl) || TREE_USED (type);
6688   if (TREE_USED (type))
6689     DECL_READ_P (decl) = 1;
6690 
6691   /* Generate a cleanup, if necessary.  */
6692   cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6693 
6694   /* Perform the initialization.  */
6695   if (init)
6696     {
6697       tree rinit = (TREE_CODE (init) == INIT_EXPR
6698 		    ? TREE_OPERAND (init, 1) : NULL_TREE);
6699       if (rinit && !TREE_SIDE_EFFECTS (rinit))
6700 	{
6701 	  /* Stick simple initializers in DECL_INITIAL so that
6702 	     -Wno-init-self works (c++/34772).  */
6703 	  gcc_assert (TREE_OPERAND (init, 0) == decl);
6704 	  DECL_INITIAL (decl) = rinit;
6705 
6706 	  if (warn_init_self && TREE_CODE (type) == REFERENCE_TYPE)
6707 	    {
6708 	      STRIP_NOPS (rinit);
6709 	      if (rinit == decl)
6710 		warning_at (DECL_SOURCE_LOCATION (decl),
6711 			    OPT_Winit_self,
6712 			    "reference %qD is initialized with itself", decl);
6713 	    }
6714 	}
6715       else
6716 	{
6717 	  int saved_stmts_are_full_exprs_p;
6718 
6719 	  /* If we're only initializing a single object, guard the
6720 	     destructors of any temporaries used in its initializer with
6721 	     its destructor.  This isn't right for arrays because each
6722 	     element initialization is a full-expression.  */
6723 	  if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6724 	    wrap_temporary_cleanups (init, cleanup);
6725 
6726 	  gcc_assert (building_stmt_list_p ());
6727 	  saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6728 	  current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6729 	  finish_expr_stmt (init);
6730 	  current_stmt_tree ()->stmts_are_full_exprs_p =
6731 	    saved_stmts_are_full_exprs_p;
6732 	}
6733     }
6734 
6735   /* Set this to 0 so we can tell whether an aggregate which was
6736      initialized was ever used.  Don't do this if it has a
6737      destructor, so we don't complain about the 'resource
6738      allocation is initialization' idiom.  Now set
6739      attribute((unused)) on types so decls of that type will be
6740      marked used. (see TREE_USED, above.)  */
6741   if (TYPE_NEEDS_CONSTRUCTING (type)
6742       && ! already_used
6743       && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6744       && DECL_NAME (decl))
6745     TREE_USED (decl) = 0;
6746   else if (already_used)
6747     TREE_USED (decl) = 1;
6748 
6749   if (cleanup)
6750     finish_decl_cleanup (decl, cleanup);
6751 }
6752 
6753 /* DECL is a VAR_DECL for a compiler-generated variable with static
6754    storage duration (like a virtual table) whose initializer is a
6755    compile-time constant.  Initialize the variable and provide it to the
6756    back end.  */
6757 
6758 void
6759 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6760 {
6761   tree init;
6762   gcc_assert (DECL_ARTIFICIAL (decl));
6763   init = build_constructor (TREE_TYPE (decl), v);
6764   gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6765   DECL_INITIAL (decl) = init;
6766   DECL_INITIALIZED_P (decl) = 1;
6767   determine_visibility (decl);
6768   layout_var_decl (decl);
6769   maybe_commonize_var (decl);
6770   make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6771 }
6772 
6773 /* INIT is the initializer for a variable, as represented by the
6774    parser.  Returns true iff INIT is value-dependent.  */
6775 
6776 static bool
6777 value_dependent_init_p (tree init)
6778 {
6779   if (TREE_CODE (init) == TREE_LIST)
6780     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6781     return any_value_dependent_elements_p (init);
6782   else if (TREE_CODE (init) == CONSTRUCTOR)
6783   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6784     {
6785       if (dependent_type_p (TREE_TYPE (init)))
6786 	return true;
6787 
6788       vec<constructor_elt, va_gc> *elts;
6789       size_t nelts;
6790       size_t i;
6791 
6792       elts = CONSTRUCTOR_ELTS (init);
6793       nelts = vec_safe_length (elts);
6794       for (i = 0; i < nelts; ++i)
6795 	if (value_dependent_init_p ((*elts)[i].value))
6796 	  return true;
6797     }
6798   else
6799     /* It must be a simple expression, e.g., int i = 3;  */
6800     return value_dependent_expression_p (init);
6801 
6802   return false;
6803 }
6804 
6805 // Returns true if a DECL is VAR_DECL with the concept specifier.
6806 static inline bool
6807 is_concept_var (tree decl)
6808 {
6809   return (VAR_P (decl)
6810 	  // Not all variables have DECL_LANG_SPECIFIC.
6811           && DECL_LANG_SPECIFIC (decl)
6812           && DECL_DECLARED_CONCEPT_P (decl));
6813 }
6814 
6815 /* A helper function to be called via walk_tree.  If any label exists
6816    under *TP, it is (going to be) forced.  Set has_forced_label_in_static.  */
6817 
6818 static tree
6819 notice_forced_label_r (tree *tp, int *walk_subtrees, void *)
6820 {
6821   if (TYPE_P (*tp))
6822     *walk_subtrees = 0;
6823   if (TREE_CODE (*tp) == LABEL_DECL)
6824     cfun->has_forced_label_in_static = 1;
6825   return NULL_TREE;
6826 }
6827 
6828 /* Finish processing of a declaration;
6829    install its line number and initial value.
6830    If the length of an array type is not known before,
6831    it must be determined now, from the initial value, or it is an error.
6832 
6833    INIT is the initializer (if any) for DECL.  If INIT_CONST_EXPR_P is
6834    true, then INIT is an integral constant expression.
6835 
6836    FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6837    if the (init) syntax was used.  */
6838 
6839 void
6840 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6841 		tree asmspec_tree, int flags)
6842 {
6843   tree type;
6844   vec<tree, va_gc> *cleanups = NULL;
6845   const char *asmspec = NULL;
6846   int was_readonly = 0;
6847   bool var_definition_p = false;
6848   tree auto_node;
6849 
6850   if (decl == error_mark_node)
6851     return;
6852   else if (! decl)
6853     {
6854       if (init)
6855 	error ("assignment (not initialization) in declaration");
6856       return;
6857     }
6858 
6859   gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6860   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
6861   gcc_assert (TREE_CODE (decl) != PARM_DECL);
6862 
6863   type = TREE_TYPE (decl);
6864   if (type == error_mark_node)
6865     return;
6866 
6867   /* Warn about register storage specifiers except when in GNU global
6868      or local register variable extension.  */
6869   if (VAR_P (decl) && DECL_REGISTER (decl) && asmspec_tree == NULL_TREE)
6870     {
6871       if (cxx_dialect >= cxx17)
6872 	pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6873 		 "ISO C++17 does not allow %<register%> storage "
6874 		 "class specifier");
6875       else
6876 	warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6877 		    "%<register%> storage class specifier used");
6878     }
6879 
6880   /* If a name was specified, get the string.  */
6881   if (at_namespace_scope_p ())
6882     asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6883   if (asmspec_tree && asmspec_tree != error_mark_node)
6884     asmspec = TREE_STRING_POINTER (asmspec_tree);
6885 
6886   if (current_class_type
6887       && CP_DECL_CONTEXT (decl) == current_class_type
6888       && TYPE_BEING_DEFINED (current_class_type)
6889       && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6890       && (DECL_INITIAL (decl) || init))
6891     DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6892 
6893   if (TREE_CODE (decl) != FUNCTION_DECL
6894       && (auto_node = type_uses_auto (type)))
6895     {
6896       tree d_init;
6897       if (init == NULL_TREE)
6898 	{
6899 	  if (DECL_LANG_SPECIFIC (decl)
6900 	      && DECL_TEMPLATE_INSTANTIATION (decl)
6901 	      && !DECL_TEMPLATE_INSTANTIATED (decl))
6902 	    {
6903 	      /* init is null because we're deferring instantiating the
6904 		 initializer until we need it.  Well, we need it now.  */
6905 	      instantiate_decl (decl, /*defer_ok*/true, /*expl*/false);
6906 	      return;
6907 	    }
6908 
6909 	  gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (auto_node));
6910 	}
6911       d_init = init;
6912       if (d_init)
6913 	{
6914 	  if (TREE_CODE (d_init) == TREE_LIST
6915 	      && !CLASS_PLACEHOLDER_TEMPLATE (auto_node))
6916 	    d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6917 						      tf_warning_or_error);
6918 	  d_init = resolve_nondeduced_context (d_init, tf_warning_or_error);
6919 	}
6920       enum auto_deduction_context adc = adc_variable_type;
6921       if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
6922 	adc = adc_decomp_type;
6923       type = TREE_TYPE (decl) = do_auto_deduction (type, d_init, auto_node,
6924 						   tf_warning_or_error, adc,
6925 						   NULL_TREE, flags);
6926       if (type == error_mark_node)
6927 	return;
6928       if (TREE_CODE (type) == FUNCTION_TYPE)
6929 	{
6930 	  error ("initializer for %<decltype(auto) %D%> has function type "
6931 		 "(did you forget the %<()%> ?)", decl);
6932 	  TREE_TYPE (decl) = error_mark_node;
6933 	  return;
6934 	}
6935       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6936     }
6937 
6938   if (ensure_literal_type_for_constexpr_object (decl) == error_mark_node)
6939     {
6940       DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6941       if (VAR_P (decl) && DECL_CLASS_SCOPE_P (decl))
6942 	{
6943 	  init = NULL_TREE;
6944 	  DECL_EXTERNAL (decl) = 1;
6945 	}
6946     }
6947 
6948   if (VAR_P (decl)
6949       && DECL_CLASS_SCOPE_P (decl)
6950       && DECL_INITIALIZED_IN_CLASS_P (decl))
6951     check_static_variable_definition (decl, type);
6952 
6953   if (init && TREE_CODE (decl) == FUNCTION_DECL)
6954     {
6955       tree clone;
6956       if (init == ridpointers[(int)RID_DELETE])
6957 	{
6958 	  /* FIXME check this is 1st decl.  */
6959 	  DECL_DELETED_FN (decl) = 1;
6960 	  DECL_DECLARED_INLINE_P (decl) = 1;
6961 	  DECL_INITIAL (decl) = error_mark_node;
6962 	  FOR_EACH_CLONE (clone, decl)
6963 	    {
6964 	      DECL_DELETED_FN (clone) = 1;
6965 	      DECL_DECLARED_INLINE_P (clone) = 1;
6966 	      DECL_INITIAL (clone) = error_mark_node;
6967 	    }
6968 	  init = NULL_TREE;
6969 	}
6970       else if (init == ridpointers[(int)RID_DEFAULT])
6971 	{
6972 	  if (defaultable_fn_check (decl))
6973 	    DECL_DEFAULTED_FN (decl) = 1;
6974 	  else
6975 	    DECL_INITIAL (decl) = NULL_TREE;
6976 	}
6977     }
6978 
6979   if (init && VAR_P (decl))
6980     {
6981       DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6982       /* If DECL is a reference, then we want to know whether init is a
6983 	 reference constant; init_const_expr_p as passed tells us whether
6984 	 it's an rvalue constant.  */
6985       if (TREE_CODE (type) == REFERENCE_TYPE)
6986 	init_const_expr_p = potential_constant_expression (init);
6987       if (init_const_expr_p)
6988 	{
6989 	  /* Set these flags now for templates.  We'll update the flags in
6990 	     store_init_value for instantiations.  */
6991 	  DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6992 	  if (decl_maybe_constant_var_p (decl)
6993 	      /* FIXME setting TREE_CONSTANT on refs breaks the back end.  */
6994 	      && TREE_CODE (type) != REFERENCE_TYPE)
6995 	    TREE_CONSTANT (decl) = 1;
6996 	}
6997     }
6998 
6999   if (processing_template_decl)
7000     {
7001       bool type_dependent_p;
7002 
7003       /* Add this declaration to the statement-tree.  */
7004       if (at_function_scope_p ())
7005 	add_decl_expr (decl);
7006 
7007       type_dependent_p = dependent_type_p (type);
7008 
7009       if (check_for_bare_parameter_packs (init))
7010 	{
7011 	  init = NULL_TREE;
7012 	  DECL_INITIAL (decl) = NULL_TREE;
7013 	}
7014 
7015       /* Generally, initializers in templates are expanded when the
7016 	 template is instantiated.  But, if DECL is a variable constant
7017 	 then it can be used in future constant expressions, so its value
7018 	 must be available. */
7019 
7020       bool dep_init = false;
7021 
7022       if (!VAR_P (decl) || type_dependent_p)
7023 	/* We can't do anything if the decl has dependent type.  */;
7024       else if (!init && is_concept_var (decl))
7025 	{
7026 	  error ("variable concept has no initializer");
7027 	  init = boolean_true_node;
7028 	}
7029       else if (init
7030 	       && init_const_expr_p
7031 	       && TREE_CODE (type) != REFERENCE_TYPE
7032 	       && decl_maybe_constant_var_p (decl)
7033 	       && !(dep_init = value_dependent_init_p (init)))
7034 	{
7035 	  /* This variable seems to be a non-dependent constant, so process
7036 	     its initializer.  If check_initializer returns non-null the
7037 	     initialization wasn't constant after all.  */
7038 	  tree init_code;
7039 	  cleanups = make_tree_vector ();
7040 	  init_code = check_initializer (decl, init, flags, &cleanups);
7041 	  if (init_code == NULL_TREE)
7042 	    init = NULL_TREE;
7043 	  release_tree_vector (cleanups);
7044 	}
7045       else if (!DECL_PRETTY_FUNCTION_P (decl))
7046 	{
7047 	  /* Deduce array size even if the initializer is dependent.  */
7048 	  maybe_deduce_size_from_array_init (decl, init);
7049 	  /* And complain about multiple initializers.  */
7050 	  if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
7051 	      && !MAYBE_CLASS_TYPE_P (type))
7052 	    init = build_x_compound_expr_from_list (init, ELK_INIT,
7053 						    tf_warning_or_error);
7054 	}
7055 
7056       if (init)
7057 	{
7058 	  if (TREE_CODE (init) == TREE_LIST)
7059 	    lookup_list_keep (init, true);
7060 	  DECL_INITIAL (decl) = init;
7061 	}
7062       if (dep_init)
7063 	{
7064 	  retrofit_lang_decl (decl);
7065 	  SET_DECL_DEPENDENT_INIT_P (decl, true);
7066 	}
7067       return;
7068     }
7069 
7070   /* Just store non-static data member initializers for later.  */
7071   if (init && TREE_CODE (decl) == FIELD_DECL)
7072     DECL_INITIAL (decl) = init;
7073 
7074   /* Take care of TYPE_DECLs up front.  */
7075   if (TREE_CODE (decl) == TYPE_DECL)
7076     {
7077       if (type != error_mark_node
7078 	  && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
7079 	{
7080 	  if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7081 	    warning (0, "shadowing previous type declaration of %q#D", decl);
7082 	  set_identifier_type_value (DECL_NAME (decl), decl);
7083 	}
7084 
7085       /* If we have installed this as the canonical typedef for this
7086 	 type, and that type has not been defined yet, delay emitting
7087 	 the debug information for it, as we will emit it later.  */
7088       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7089 	  && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
7090 	TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7091 
7092       rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
7093 				at_eof);
7094       return;
7095     }
7096 
7097   /* A reference will be modified here, as it is initialized.  */
7098   if (! DECL_EXTERNAL (decl)
7099       && TREE_READONLY (decl)
7100       && TREE_CODE (type) == REFERENCE_TYPE)
7101     {
7102       was_readonly = 1;
7103       TREE_READONLY (decl) = 0;
7104     }
7105 
7106   if (VAR_P (decl))
7107     {
7108       /* If this is a local variable that will need a mangled name,
7109 	 register it now.  We must do this before processing the
7110 	 initializer for the variable, since the initialization might
7111 	 require a guard variable, and since the mangled name of the
7112 	 guard variable will depend on the mangled name of this
7113 	 variable.  */
7114       if (DECL_FUNCTION_SCOPE_P (decl)
7115 	  && TREE_STATIC (decl)
7116 	  && !DECL_ARTIFICIAL (decl))
7117 	{
7118 	  push_local_name (decl);
7119 	  /* Normally has_forced_label_in_static is set during GIMPLE
7120 	     lowering, but [cd]tors are never actually compiled directly.
7121 	     We need to set this early so we can deal with the label
7122 	     address extension.  */
7123 	  if ((DECL_CONSTRUCTOR_P (current_function_decl)
7124 	       || DECL_DESTRUCTOR_P (current_function_decl))
7125 	      && init)
7126 	    {
7127 	      walk_tree (&init, notice_forced_label_r, NULL, NULL);
7128 	      add_local_decl (cfun, decl);
7129 	    }
7130 	  /* And make sure it's in the symbol table for
7131 	     c_parse_final_cleanups to find.  */
7132 	  varpool_node::get_create (decl);
7133 	}
7134 
7135       /* Convert the initializer to the type of DECL, if we have not
7136 	 already initialized DECL.  */
7137       if (!DECL_INITIALIZED_P (decl)
7138 	  /* If !DECL_EXTERNAL then DECL is being defined.  In the
7139 	     case of a static data member initialized inside the
7140 	     class-specifier, there can be an initializer even if DECL
7141 	     is *not* defined.  */
7142 	  && (!DECL_EXTERNAL (decl) || init))
7143 	{
7144 	  cleanups = make_tree_vector ();
7145 	  init = check_initializer (decl, init, flags, &cleanups);
7146 
7147 	  /* Handle:
7148 
7149 	     [dcl.init]
7150 
7151 	     The memory occupied by any object of static storage
7152 	     duration is zero-initialized at program startup before
7153 	     any other initialization takes place.
7154 
7155 	     We cannot create an appropriate initializer until after
7156 	     the type of DECL is finalized.  If DECL_INITIAL is set,
7157 	     then the DECL is statically initialized, and any
7158 	     necessary zero-initialization has already been performed.  */
7159 	  if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
7160 	    DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
7161 						   /*nelts=*/NULL_TREE,
7162 						   /*static_storage_p=*/true);
7163 	  /* Remember that the initialization for this variable has
7164 	     taken place.  */
7165 	  DECL_INITIALIZED_P (decl) = 1;
7166 	  /* This declaration is the definition of this variable,
7167 	     unless we are initializing a static data member within
7168 	     the class specifier.  */
7169 	  if (!DECL_EXTERNAL (decl))
7170 	    var_definition_p = true;
7171 	}
7172       /* If the variable has an array type, lay out the type, even if
7173 	 there is no initializer.  It is valid to index through the
7174 	 array, and we must get TYPE_ALIGN set correctly on the array
7175 	 type.  */
7176       else if (TREE_CODE (type) == ARRAY_TYPE)
7177 	layout_type (type);
7178 
7179       if (TREE_STATIC (decl)
7180 	  && !at_function_scope_p ()
7181 	  && current_function_decl == NULL)
7182 	/* So decl is a global variable or a static member of a
7183 	   non local class. Record the types it uses
7184 	   so that we can decide later to emit debug info for them.  */
7185 	record_types_used_by_current_var_decl (decl);
7186     }
7187 
7188   /* Add this declaration to the statement-tree.  This needs to happen
7189      after the call to check_initializer so that the DECL_EXPR for a
7190      reference temp is added before the DECL_EXPR for the reference itself.  */
7191   if (DECL_FUNCTION_SCOPE_P (decl))
7192     {
7193       /* If we're building a variable sized type, and we might be
7194 	 reachable other than via the top of the current binding
7195 	 level, then create a new BIND_EXPR so that we deallocate
7196 	 the object at the right time.  */
7197       if (VAR_P (decl)
7198 	  && DECL_SIZE (decl)
7199 	  && !TREE_CONSTANT (DECL_SIZE (decl))
7200 	  && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
7201 	{
7202 	  tree bind;
7203 	  bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
7204 	  TREE_SIDE_EFFECTS (bind) = 1;
7205 	  add_stmt (bind);
7206 	  BIND_EXPR_BODY (bind) = push_stmt_list ();
7207 	}
7208       add_decl_expr (decl);
7209     }
7210 
7211   /* Let the middle end know about variables and functions -- but not
7212      static data members in uninstantiated class templates.  */
7213   if (VAR_OR_FUNCTION_DECL_P (decl))
7214     {
7215       if (VAR_P (decl))
7216 	{
7217 	  layout_var_decl (decl);
7218 	  maybe_commonize_var (decl);
7219 	}
7220 
7221       /* This needs to happen after the linkage is set. */
7222       determine_visibility (decl);
7223 
7224       if (var_definition_p && TREE_STATIC (decl))
7225 	{
7226 	  /* If a TREE_READONLY variable needs initialization
7227 	     at runtime, it is no longer readonly and we need to
7228 	     avoid MEM_READONLY_P being set on RTL created for it.  */
7229 	  if (init)
7230 	    {
7231 	      if (TREE_READONLY (decl))
7232 		TREE_READONLY (decl) = 0;
7233 	      was_readonly = 0;
7234 	    }
7235 	  else if (was_readonly)
7236 	    TREE_READONLY (decl) = 1;
7237 
7238 	  /* Likewise if it needs destruction.  */
7239 	  if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7240 	    TREE_READONLY (decl) = 0;
7241 	}
7242 
7243       make_rtl_for_nonlocal_decl (decl, init, asmspec);
7244 
7245       /* Check for abstractness of the type. Notice that there is no
7246 	 need to strip array types here since the check for those types
7247 	 is already done within create_array_type_for_decl.  */
7248       abstract_virtuals_error (decl, type);
7249 
7250       if (TREE_TYPE (decl) == error_mark_node)
7251 	/* No initialization required.  */
7252 	;
7253       else if (TREE_CODE (decl) == FUNCTION_DECL)
7254 	{
7255 	  if (init)
7256 	    {
7257 	      if (init == ridpointers[(int)RID_DEFAULT])
7258 		{
7259 		  /* An out-of-class default definition is defined at
7260 		     the point where it is explicitly defaulted.  */
7261 		  if (DECL_DELETED_FN (decl))
7262 		    maybe_explain_implicit_delete (decl);
7263 		  else if (DECL_INITIAL (decl) == error_mark_node)
7264 		    synthesize_method (decl);
7265 		}
7266 	      else
7267 		error ("function %q#D is initialized like a variable", decl);
7268 	    }
7269 	  /* else no initialization required.  */
7270 	}
7271       else if (DECL_EXTERNAL (decl)
7272 	       && ! (DECL_LANG_SPECIFIC (decl)
7273 		     && DECL_NOT_REALLY_EXTERN (decl)))
7274 	{
7275 	  if (init)
7276 	    DECL_INITIAL (decl) = init;
7277 	}
7278       /* A variable definition.  */
7279       else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
7280 	/* Initialize the local variable.  */
7281 	initialize_local_var (decl, init);
7282 
7283       /* If a variable is defined, and then a subsequent
7284 	 definition with external linkage is encountered, we will
7285 	 get here twice for the same variable.  We want to avoid
7286 	 calling expand_static_init more than once.  For variables
7287 	 that are not static data members, we can call
7288 	 expand_static_init only when we actually process the
7289 	 initializer.  It is not legal to redeclare a static data
7290 	 member, so this issue does not arise in that case.  */
7291       else if (var_definition_p && TREE_STATIC (decl))
7292 	expand_static_init (decl, init);
7293     }
7294 
7295   /* If a CLEANUP_STMT was created to destroy a temporary bound to a
7296      reference, insert it in the statement-tree now.  */
7297   if (cleanups)
7298     {
7299       unsigned i; tree t;
7300       FOR_EACH_VEC_ELT (*cleanups, i, t)
7301 	push_cleanup (decl, t, false);
7302       release_tree_vector (cleanups);
7303     }
7304 
7305   if (was_readonly)
7306     TREE_READONLY (decl) = 1;
7307 
7308   invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
7309 }
7310 
7311 /* For class TYPE return itself or some its bases that contain
7312    any direct non-static data members.  Return error_mark_node if an
7313    error has been diagnosed.  */
7314 
7315 static tree
7316 find_decomp_class_base (location_t loc, tree type, tree ret)
7317 {
7318   bool member_seen = false;
7319   for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
7320     if (TREE_CODE (field) != FIELD_DECL
7321 	|| DECL_ARTIFICIAL (field)
7322 	|| DECL_UNNAMED_BIT_FIELD (field))
7323       continue;
7324     else if (ret)
7325       return type;
7326     else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
7327       {
7328 	if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
7329 	  error_at (loc, "cannot decompose class type %qT because it has an "
7330 			 "anonymous struct member", type);
7331 	else
7332 	  error_at (loc, "cannot decompose class type %qT because it has an "
7333 			 "anonymous union member", type);
7334 	inform (DECL_SOURCE_LOCATION (field), "declared here");
7335 	return error_mark_node;
7336       }
7337     else if (!accessible_p (type, field, true))
7338       {
7339 	error_at (loc, "cannot decompose inaccessible member %qD of %qT",
7340 		  field, type);
7341 	inform (DECL_SOURCE_LOCATION (field),
7342 		TREE_PRIVATE (field)
7343 		? G_("declared private here")
7344 		: G_("declared protected here"));
7345 	return error_mark_node;
7346       }
7347     else
7348       member_seen = true;
7349 
7350   tree base_binfo, binfo;
7351   tree orig_ret = ret;
7352   int i;
7353   if (member_seen)
7354     ret = type;
7355   for (binfo = TYPE_BINFO (type), i = 0;
7356        BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
7357     {
7358       tree t = find_decomp_class_base (loc, TREE_TYPE (base_binfo), ret);
7359       if (t == error_mark_node)
7360 	return error_mark_node;
7361       if (t != NULL_TREE && t != ret)
7362 	{
7363 	  if (ret == type)
7364 	    {
7365 	      error_at (loc, "cannot decompose class type %qT: both it and "
7366 			     "its base class %qT have non-static data members",
7367 			type, t);
7368 	      return error_mark_node;
7369 	    }
7370 	  else if (orig_ret != NULL_TREE)
7371 	    return t;
7372 	  else if (ret != NULL_TREE)
7373 	    {
7374 	      error_at (loc, "cannot decompose class type %qT: its base "
7375 			     "classes %qT and %qT have non-static data "
7376 			     "members", type, ret, t);
7377 	      return error_mark_node;
7378 	    }
7379 	  else
7380 	    ret = t;
7381 	}
7382     }
7383   return ret;
7384 }
7385 
7386 /* Return std::tuple_size<TYPE>::value.  */
7387 
7388 static tree
7389 get_tuple_size (tree type)
7390 {
7391   tree args = make_tree_vec (1);
7392   TREE_VEC_ELT (args, 0) = type;
7393   tree inst = lookup_template_class (get_identifier ("tuple_size"), args,
7394 				     /*in_decl*/NULL_TREE,
7395 				     /*context*/std_node,
7396 				     /*entering_scope*/false, tf_none);
7397   inst = complete_type (inst);
7398   if (inst == error_mark_node || !COMPLETE_TYPE_P (inst))
7399     return NULL_TREE;
7400   tree val = lookup_qualified_name (inst, get_identifier ("value"),
7401 				    /*type*/false, /*complain*/false);
7402   if (TREE_CODE (val) == VAR_DECL || TREE_CODE (val) == CONST_DECL)
7403     val = maybe_constant_value (val);
7404   if (TREE_CODE (val) == INTEGER_CST)
7405     return val;
7406   else
7407     return error_mark_node;
7408 }
7409 
7410 /* Return std::tuple_element<I,TYPE>::type.  */
7411 
7412 static tree
7413 get_tuple_element_type (tree type, unsigned i)
7414 {
7415   tree args = make_tree_vec (2);
7416   TREE_VEC_ELT (args, 0) = build_int_cst (integer_type_node, i);
7417   TREE_VEC_ELT (args, 1) = type;
7418   tree inst = lookup_template_class (get_identifier ("tuple_element"), args,
7419 				     /*in_decl*/NULL_TREE,
7420 				     /*context*/std_node,
7421 				     /*entering_scope*/false,
7422 				     tf_warning_or_error);
7423   return make_typename_type (inst, get_identifier ("type"),
7424 			     none_type, tf_warning_or_error);
7425 }
7426 
7427 /* Return e.get<i>() or get<i>(e).  */
7428 
7429 static tree
7430 get_tuple_decomp_init (tree decl, unsigned i)
7431 {
7432   tree get_id = get_identifier ("get");
7433   tree targs = make_tree_vec (1);
7434   TREE_VEC_ELT (targs, 0) = build_int_cst (integer_type_node, i);
7435 
7436   tree etype = TREE_TYPE (decl);
7437   tree e = convert_from_reference (decl);
7438 
7439   /* [The id-expression] e is an lvalue if the type of the entity e is an
7440      lvalue reference and an xvalue otherwise.  */
7441   if (TREE_CODE (etype) != REFERENCE_TYPE
7442       || TYPE_REF_IS_RVALUE (etype))
7443     e = move (e);
7444 
7445   tree fns = lookup_qualified_name (TREE_TYPE (e), get_id,
7446 				    /*type*/false, /*complain*/false);
7447   bool use_member_get = false;
7448 
7449   /* To use a member get, member lookup must find at least one
7450      declaration that is a function template
7451      whose first template parameter is a non-type parameter.  */
7452   for (lkp_iterator iter (MAYBE_BASELINK_FUNCTIONS (fns)); iter; ++iter)
7453     {
7454       tree fn = *iter;
7455       if (TREE_CODE (fn) == TEMPLATE_DECL)
7456 	{
7457 	  tree tparms = DECL_TEMPLATE_PARMS (fn);
7458 	  tree parm = TREE_VEC_ELT (INNERMOST_TEMPLATE_PARMS (tparms), 0);
7459 	  if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
7460 	    {
7461 	      use_member_get = true;
7462 	      break;
7463 	    }
7464 	}
7465     }
7466 
7467   if (use_member_get)
7468     {
7469       fns = lookup_template_function (fns, targs);
7470       return build_new_method_call (e, fns, /*args*/NULL,
7471 				    /*path*/NULL_TREE, LOOKUP_NORMAL,
7472 				    /*fn_p*/NULL, tf_warning_or_error);
7473     }
7474   else
7475     {
7476       vec<tree,va_gc> *args = make_tree_vector_single (e);
7477       fns = lookup_template_function (get_id, targs);
7478       fns = perform_koenig_lookup (fns, args, tf_warning_or_error);
7479       return finish_call_expr (fns, &args, /*novirt*/false,
7480 			       /*koenig*/true, tf_warning_or_error);
7481     }
7482 }
7483 
7484 /* It's impossible to recover the decltype of a tuple decomposition variable
7485    based on the actual type of the variable, so store it in a hash table.  */
7486 
7487 static GTY((cache)) tree_cache_map *decomp_type_table;
7488 static void
7489 store_decomp_type (tree v, tree t)
7490 {
7491   if (!decomp_type_table)
7492     decomp_type_table = tree_cache_map::create_ggc (13);
7493   decomp_type_table->put (v, t);
7494 }
7495 
7496 tree
7497 lookup_decomp_type (tree v)
7498 {
7499   return *decomp_type_table->get (v);
7500 }
7501 
7502 /* Mangle a decomposition declaration if needed.  Arguments like
7503    in cp_finish_decomp.  */
7504 
7505 void
7506 cp_maybe_mangle_decomp (tree decl, tree first, unsigned int count)
7507 {
7508   if (!processing_template_decl
7509       && !error_operand_p (decl)
7510       && DECL_NAMESPACE_SCOPE_P (decl))
7511     {
7512       auto_vec<tree, 16> v;
7513       v.safe_grow (count);
7514       tree d = first;
7515       for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7516 	v[count - i - 1] = d;
7517       SET_DECL_ASSEMBLER_NAME (decl, mangle_decomp (decl, v));
7518       maybe_apply_pragma_weak (decl);
7519     }
7520 }
7521 
7522 /* Finish a decomposition declaration.  DECL is the underlying declaration
7523    "e", FIRST is the head of a chain of decls for the individual identifiers
7524    chained through DECL_CHAIN in reverse order and COUNT is the number of
7525    those decls.  */
7526 
7527 void
7528 cp_finish_decomp (tree decl, tree first, unsigned int count)
7529 {
7530   if (error_operand_p (decl))
7531     {
7532      error_out:
7533       while (count--)
7534 	{
7535 	  TREE_TYPE (first) = error_mark_node;
7536 	  if (DECL_HAS_VALUE_EXPR_P (first))
7537 	    {
7538 	      SET_DECL_VALUE_EXPR (first, NULL_TREE);
7539 	      DECL_HAS_VALUE_EXPR_P (first) = 0;
7540 	    }
7541 	  first = DECL_CHAIN (first);
7542 	}
7543       if (DECL_P (decl) && DECL_NAMESPACE_SCOPE_P (decl))
7544 	SET_DECL_ASSEMBLER_NAME (decl, get_identifier ("<decomp>"));
7545       return;
7546     }
7547 
7548   location_t loc = DECL_SOURCE_LOCATION (decl);
7549   if (type_dependent_expression_p (decl)
7550       /* This happens for range for when not in templates.
7551 	 Still add the DECL_VALUE_EXPRs for later processing.  */
7552       || (!processing_template_decl
7553 	  && type_uses_auto (TREE_TYPE (decl))))
7554     {
7555       for (unsigned int i = 0; i < count; i++)
7556 	{
7557 	  if (!DECL_HAS_VALUE_EXPR_P (first))
7558 	    {
7559 	      tree v = build_nt (ARRAY_REF, decl,
7560 				 size_int (count - i - 1),
7561 				 NULL_TREE, NULL_TREE);
7562 	      SET_DECL_VALUE_EXPR (first, v);
7563 	      DECL_HAS_VALUE_EXPR_P (first) = 1;
7564 	    }
7565 	  if (processing_template_decl)
7566 	    fit_decomposition_lang_decl (first, decl);
7567 	  first = DECL_CHAIN (first);
7568 	}
7569       return;
7570     }
7571 
7572   auto_vec<tree, 16> v;
7573   v.safe_grow (count);
7574   tree d = first;
7575   for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7576     {
7577       v[count - i - 1] = d;
7578       fit_decomposition_lang_decl (d, decl);
7579     }
7580 
7581   tree type = TREE_TYPE (decl);
7582   tree dexp = decl;
7583 
7584   if (TREE_CODE (type) == REFERENCE_TYPE)
7585     {
7586       dexp = convert_from_reference (dexp);
7587       type = complete_type (TREE_TYPE (type));
7588       if (type == error_mark_node)
7589 	goto error_out;
7590       if (!COMPLETE_TYPE_P (type))
7591 	{
7592 	  error_at (loc, "structured binding refers to incomplete type %qT",
7593 		    type);
7594 	  goto error_out;
7595 	}
7596     }
7597 
7598   tree eltype = NULL_TREE;
7599   unsigned HOST_WIDE_INT eltscnt = 0;
7600   if (TREE_CODE (type) == ARRAY_TYPE)
7601     {
7602       tree nelts;
7603       nelts = array_type_nelts_top (type);
7604       if (nelts == error_mark_node)
7605 	goto error_out;
7606       if (!tree_fits_uhwi_p (nelts))
7607 	{
7608 	  error_at (loc, "cannot decompose variable length array %qT", type);
7609 	  goto error_out;
7610 	}
7611       eltscnt = tree_to_uhwi (nelts);
7612       if (count != eltscnt)
7613 	{
7614        cnt_mismatch:
7615 	  if (count > eltscnt)
7616 	    error_n (loc, count,
7617 		     "%u name provided for structured binding",
7618 		     "%u names provided for structured binding", count);
7619 	  else
7620 	    error_n (loc, count,
7621 		     "only %u name provided for structured binding",
7622 		     "only %u names provided for structured binding", count);
7623 	  inform_n (loc, eltscnt,
7624 		    "while %qT decomposes into %wu element",
7625 		    "while %qT decomposes into %wu elements",
7626 		    type, eltscnt);
7627 	  goto error_out;
7628 	}
7629       eltype = TREE_TYPE (type);
7630       for (unsigned int i = 0; i < count; i++)
7631 	{
7632 	  TREE_TYPE (v[i]) = eltype;
7633 	  layout_decl (v[i], 0);
7634 	  if (processing_template_decl)
7635 	    continue;
7636 	  tree t = unshare_expr (dexp);
7637 	  t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7638 			  eltype, t, size_int (i), NULL_TREE,
7639 			  NULL_TREE);
7640 	  SET_DECL_VALUE_EXPR (v[i], t);
7641 	  DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7642 	}
7643     }
7644   /* 2 GNU extensions.  */
7645   else if (TREE_CODE (type) == COMPLEX_TYPE)
7646     {
7647       eltscnt = 2;
7648       if (count != eltscnt)
7649 	goto cnt_mismatch;
7650       eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7651       for (unsigned int i = 0; i < count; i++)
7652 	{
7653 	  TREE_TYPE (v[i]) = eltype;
7654 	  layout_decl (v[i], 0);
7655 	  if (processing_template_decl)
7656 	    continue;
7657 	  tree t = unshare_expr (dexp);
7658 	  t = build1_loc (DECL_SOURCE_LOCATION (v[i]),
7659 			  i ? IMAGPART_EXPR : REALPART_EXPR, eltype,
7660 			  t);
7661 	  SET_DECL_VALUE_EXPR (v[i], t);
7662 	  DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7663 	}
7664     }
7665   else if (TREE_CODE (type) == VECTOR_TYPE)
7666     {
7667       if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&eltscnt))
7668 	{
7669 	  error_at (loc, "cannot decompose variable length vector %qT", type);
7670 	  goto error_out;
7671 	}
7672       if (count != eltscnt)
7673 	goto cnt_mismatch;
7674       eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7675       for (unsigned int i = 0; i < count; i++)
7676 	{
7677 	  TREE_TYPE (v[i]) = eltype;
7678 	  layout_decl (v[i], 0);
7679 	  if (processing_template_decl)
7680 	    continue;
7681 	  tree t = unshare_expr (dexp);
7682 	  convert_vector_to_array_for_subscript (DECL_SOURCE_LOCATION (v[i]),
7683 						 &t, size_int (i));
7684 	  t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7685 			  eltype, t, size_int (i), NULL_TREE,
7686 			  NULL_TREE);
7687 	  SET_DECL_VALUE_EXPR (v[i], t);
7688 	  DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7689 	}
7690     }
7691   else if (tree tsize = get_tuple_size (type))
7692     {
7693       if (tsize == error_mark_node)
7694 	{
7695 	  error_at (loc, "%<std::tuple_size<%T>::value%> is not an integral "
7696 			 "constant expression", type);
7697 	  goto error_out;
7698 	}
7699       if (!tree_fits_uhwi_p (tsize))
7700 	{
7701 	  error_n (loc, count,
7702 		   "%u name provided for structured binding",
7703 		   "%u names provided for structured binding", count);
7704 	  inform (loc, "while %qT decomposes into %E elements",
7705 		  type, tsize);
7706 	  goto error_out;
7707 	}
7708       eltscnt = tree_to_uhwi (tsize);
7709       if (count != eltscnt)
7710 	goto cnt_mismatch;
7711       int save_read = DECL_READ_P (decl);
7712       for (unsigned i = 0; i < count; ++i)
7713 	{
7714 	  location_t sloc = input_location;
7715 	  location_t dloc = DECL_SOURCE_LOCATION (v[i]);
7716 
7717 	  input_location = dloc;
7718 	  tree init = get_tuple_decomp_init (decl, i);
7719 	  tree eltype = (init == error_mark_node ? error_mark_node
7720 			 : get_tuple_element_type (type, i));
7721 	  input_location = sloc;
7722 
7723 	  if (init == error_mark_node || eltype == error_mark_node)
7724 	    {
7725 	      inform (dloc, "in initialization of structured binding "
7726 		      "variable %qD", v[i]);
7727 	      goto error_out;
7728 	    }
7729 	  /* Save the decltype away before reference collapse.  */
7730 	  store_decomp_type (v[i], eltype);
7731 	  eltype = cp_build_reference_type (eltype, !lvalue_p (init));
7732 	  TREE_TYPE (v[i]) = eltype;
7733 	  layout_decl (v[i], 0);
7734 	  if (DECL_HAS_VALUE_EXPR_P (v[i]))
7735 	    {
7736 	      /* In this case the names are variables, not just proxies.  */
7737 	      SET_DECL_VALUE_EXPR (v[i], NULL_TREE);
7738 	      DECL_HAS_VALUE_EXPR_P (v[i]) = 0;
7739 	    }
7740 	  if (!processing_template_decl)
7741 	    cp_finish_decl (v[i], init, /*constexpr*/false,
7742 			    /*asm*/NULL_TREE, LOOKUP_NORMAL);
7743 	}
7744       /* Ignore reads from the underlying decl performed during initialization
7745 	 of the individual variables.  If those will be read, we'll mark
7746 	 the underlying decl as read at that point.  */
7747       DECL_READ_P (decl) = save_read;
7748     }
7749   else if (TREE_CODE (type) == UNION_TYPE)
7750     {
7751       error_at (loc, "cannot decompose union type %qT", type);
7752       goto error_out;
7753     }
7754   else if (!CLASS_TYPE_P (type))
7755     {
7756       error_at (loc, "cannot decompose non-array non-class type %qT", type);
7757       goto error_out;
7758     }
7759   else if (LAMBDA_TYPE_P (type))
7760     {
7761       error_at (loc, "cannot decompose lambda closure type %qT", type);
7762       goto error_out;
7763     }
7764   else if (processing_template_decl && !COMPLETE_TYPE_P (type))
7765     pedwarn (loc, 0, "structured binding refers to incomplete class type %qT",
7766 	     type);
7767   else
7768     {
7769       tree btype = find_decomp_class_base (loc, type, NULL_TREE);
7770       if (btype == error_mark_node)
7771 	goto error_out;
7772       else if (btype == NULL_TREE)
7773 	{
7774 	  error_at (loc, "cannot decompose class type %qT without non-static "
7775 			 "data members", type);
7776 	  goto error_out;
7777 	}
7778       for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7779 	if (TREE_CODE (field) != FIELD_DECL
7780 	    || DECL_ARTIFICIAL (field)
7781 	    || DECL_UNNAMED_BIT_FIELD (field))
7782 	  continue;
7783 	else
7784 	  eltscnt++;
7785       if (count != eltscnt)
7786 	goto cnt_mismatch;
7787       tree t = dexp;
7788       if (type != btype)
7789 	{
7790 	  t = convert_to_base (t, btype, /*check_access*/true,
7791 			       /*nonnull*/false, tf_warning_or_error);
7792 	  type = btype;
7793 	}
7794       unsigned int i = 0;
7795       for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7796 	if (TREE_CODE (field) != FIELD_DECL
7797 	    || DECL_ARTIFICIAL (field)
7798 	    || DECL_UNNAMED_BIT_FIELD (field))
7799 	  continue;
7800 	else
7801 	  {
7802 	    tree tt = finish_non_static_data_member (field, unshare_expr (t),
7803 						     NULL_TREE);
7804 	    if (REFERENCE_REF_P (tt))
7805 	      tt = TREE_OPERAND (tt, 0);
7806 	    TREE_TYPE (v[i]) = TREE_TYPE (tt);
7807 	    layout_decl (v[i], 0);
7808 	    if (!processing_template_decl)
7809 	      {
7810 		SET_DECL_VALUE_EXPR (v[i], tt);
7811 		DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7812 	      }
7813 	    i++;
7814 	  }
7815     }
7816   if (processing_template_decl)
7817     {
7818       for (unsigned int i = 0; i < count; i++)
7819 	if (!DECL_HAS_VALUE_EXPR_P (v[i]))
7820 	  {
7821 	    tree a = build_nt (ARRAY_REF, decl, size_int (i),
7822 			       NULL_TREE, NULL_TREE);
7823 	    SET_DECL_VALUE_EXPR (v[i], a);
7824 	    DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7825 	  }
7826     }
7827 }
7828 
7829 /* Returns a declaration for a VAR_DECL as if:
7830 
7831      extern "C" TYPE NAME;
7832 
7833    had been seen.  Used to create compiler-generated global
7834    variables.  */
7835 
7836 static tree
7837 declare_global_var (tree name, tree type)
7838 {
7839   tree decl;
7840 
7841   push_to_top_level ();
7842   decl = build_decl (input_location, VAR_DECL, name, type);
7843   TREE_PUBLIC (decl) = 1;
7844   DECL_EXTERNAL (decl) = 1;
7845   DECL_ARTIFICIAL (decl) = 1;
7846   DECL_CONTEXT (decl) = FROB_CONTEXT (global_namespace);
7847   /* If the user has explicitly declared this variable (perhaps
7848      because the code we are compiling is part of a low-level runtime
7849      library), then it is possible that our declaration will be merged
7850      with theirs by pushdecl.  */
7851   decl = pushdecl (decl);
7852   cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
7853   pop_from_top_level ();
7854 
7855   return decl;
7856 }
7857 
7858 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
7859    if "__cxa_atexit" is not being used) corresponding to the function
7860    to be called when the program exits.  */
7861 
7862 static tree
7863 get_atexit_fn_ptr_type (void)
7864 {
7865   tree fn_type;
7866 
7867   if (!atexit_fn_ptr_type_node)
7868     {
7869       tree arg_type;
7870       if (flag_use_cxa_atexit
7871 	  && !targetm.cxx.use_atexit_for_cxa_atexit ())
7872 	/* The parameter to "__cxa_atexit" is "void (*)(void *)".  */
7873 	arg_type = ptr_type_node;
7874       else
7875 	/* The parameter to "atexit" is "void (*)(void)".  */
7876 	arg_type = NULL_TREE;
7877 
7878       fn_type = build_function_type_list (void_type_node,
7879 					  arg_type, NULL_TREE);
7880       atexit_fn_ptr_type_node = build_pointer_type (fn_type);
7881     }
7882 
7883   return atexit_fn_ptr_type_node;
7884 }
7885 
7886 /* Returns a pointer to the `atexit' function.  Note that if
7887    FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
7888    `__cxa_atexit' function specified in the IA64 C++ ABI.  */
7889 
7890 static tree
7891 get_atexit_node (void)
7892 {
7893   tree atexit_fndecl;
7894   tree fn_type;
7895   tree fn_ptr_type;
7896   const char *name;
7897   bool use_aeabi_atexit;
7898 
7899   if (atexit_node)
7900     return atexit_node;
7901 
7902   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
7903     {
7904       /* The declaration for `__cxa_atexit' is:
7905 
7906 	   int __cxa_atexit (void (*)(void *), void *, void *)
7907 
7908 	 We build up the argument types and then the function type
7909 	 itself.  */
7910       tree argtype0, argtype1, argtype2;
7911 
7912       use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
7913       /* First, build the pointer-to-function type for the first
7914 	 argument.  */
7915       fn_ptr_type = get_atexit_fn_ptr_type ();
7916       /* Then, build the rest of the argument types.  */
7917       argtype2 = ptr_type_node;
7918       if (use_aeabi_atexit)
7919 	{
7920 	  argtype1 = fn_ptr_type;
7921 	  argtype0 = ptr_type_node;
7922 	}
7923       else
7924 	{
7925 	  argtype1 = ptr_type_node;
7926 	  argtype0 = fn_ptr_type;
7927 	}
7928       /* And the final __cxa_atexit type.  */
7929       fn_type = build_function_type_list (integer_type_node,
7930 					  argtype0, argtype1, argtype2,
7931 					  NULL_TREE);
7932       if (use_aeabi_atexit)
7933 	name = "__aeabi_atexit";
7934       else
7935 	name = "__cxa_atexit";
7936     }
7937   else
7938     {
7939       /* The declaration for `atexit' is:
7940 
7941 	   int atexit (void (*)());
7942 
7943 	 We build up the argument types and then the function type
7944 	 itself.  */
7945       fn_ptr_type = get_atexit_fn_ptr_type ();
7946       /* Build the final atexit type.  */
7947       fn_type = build_function_type_list (integer_type_node,
7948 					  fn_ptr_type, NULL_TREE);
7949       name = "atexit";
7950     }
7951 
7952   /* Now, build the function declaration.  */
7953   push_lang_context (lang_name_c);
7954   atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
7955   mark_used (atexit_fndecl);
7956   pop_lang_context ();
7957   atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
7958 
7959   return atexit_node;
7960 }
7961 
7962 /* Like get_atexit_node, but for thread-local cleanups.  */
7963 
7964 static tree
7965 get_thread_atexit_node (void)
7966 {
7967   /* The declaration for `__cxa_thread_atexit' is:
7968 
7969      int __cxa_thread_atexit (void (*)(void *), void *, void *) */
7970   tree fn_type = build_function_type_list (integer_type_node,
7971 					   get_atexit_fn_ptr_type (),
7972 					   ptr_type_node, ptr_type_node,
7973 					   NULL_TREE);
7974 
7975   /* Now, build the function declaration.  */
7976   tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
7977 					     ECF_LEAF | ECF_NOTHROW);
7978   return decay_conversion (atexit_fndecl, tf_warning_or_error);
7979 }
7980 
7981 /* Returns the __dso_handle VAR_DECL.  */
7982 
7983 static tree
7984 get_dso_handle_node (void)
7985 {
7986   if (dso_handle_node)
7987     return dso_handle_node;
7988 
7989   /* Declare the variable.  */
7990   dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
7991 					ptr_type_node);
7992 
7993 #ifdef HAVE_GAS_HIDDEN
7994   if (dso_handle_node != error_mark_node)
7995     {
7996       DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
7997       DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
7998     }
7999 #endif
8000 
8001   return dso_handle_node;
8002 }
8003 
8004 /* Begin a new function with internal linkage whose job will be simply
8005    to destroy some particular variable.  */
8006 
8007 static GTY(()) int start_cleanup_cnt;
8008 
8009 static tree
8010 start_cleanup_fn (void)
8011 {
8012   char name[32];
8013   tree fntype;
8014   tree fndecl;
8015   bool use_cxa_atexit = flag_use_cxa_atexit
8016 			&& !targetm.cxx.use_atexit_for_cxa_atexit ();
8017 
8018   push_to_top_level ();
8019 
8020   /* No need to mangle this.  */
8021   push_lang_context (lang_name_c);
8022 
8023   /* Build the name of the function.  */
8024   sprintf (name, "__tcf_%d", start_cleanup_cnt++);
8025   /* Build the function declaration.  */
8026   fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
8027   fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
8028   /* It's a function with internal linkage, generated by the
8029      compiler.  */
8030   TREE_PUBLIC (fndecl) = 0;
8031   DECL_ARTIFICIAL (fndecl) = 1;
8032   /* Make the function `inline' so that it is only emitted if it is
8033      actually needed.  It is unlikely that it will be inlined, since
8034      it is only called via a function pointer, but we avoid unnecessary
8035      emissions this way.  */
8036   DECL_DECLARED_INLINE_P (fndecl) = 1;
8037   DECL_INTERFACE_KNOWN (fndecl) = 1;
8038   /* Build the parameter.  */
8039   if (use_cxa_atexit)
8040     {
8041       tree parmdecl = cp_build_parm_decl (fndecl, NULL_TREE, ptr_type_node);
8042       TREE_USED (parmdecl) = 1;
8043       DECL_READ_P (parmdecl) = 1;
8044       DECL_ARGUMENTS (fndecl) = parmdecl;
8045     }
8046 
8047   pushdecl (fndecl);
8048   start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
8049 
8050   pop_lang_context ();
8051 
8052   return current_function_decl;
8053 }
8054 
8055 /* Finish the cleanup function begun by start_cleanup_fn.  */
8056 
8057 static void
8058 end_cleanup_fn (void)
8059 {
8060   expand_or_defer_fn (finish_function (/*inline_p=*/false));
8061 
8062   pop_from_top_level ();
8063 }
8064 
8065 /* Generate code to handle the destruction of DECL, an object with
8066    static storage duration.  */
8067 
8068 tree
8069 register_dtor_fn (tree decl)
8070 {
8071   tree cleanup;
8072   tree addr;
8073   tree compound_stmt;
8074   tree fcall;
8075   tree type;
8076   bool ob_parm, dso_parm, use_dtor;
8077   tree arg0, arg1, arg2;
8078   tree atex_node;
8079 
8080   type = TREE_TYPE (decl);
8081   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
8082     return void_node;
8083 
8084   /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
8085      "__aeabi_atexit"), and DECL is a class object, we can just pass the
8086      destructor to "__cxa_atexit"; we don't have to build a temporary
8087      function to do the cleanup.  */
8088   dso_parm = (flag_use_cxa_atexit
8089 	      && !targetm.cxx.use_atexit_for_cxa_atexit ());
8090   ob_parm = (CP_DECL_THREAD_LOCAL_P (decl) || dso_parm);
8091   use_dtor = ob_parm && CLASS_TYPE_P (type);
8092   if (use_dtor)
8093     {
8094       cleanup = get_class_binding (type, complete_dtor_identifier);
8095 
8096       /* Make sure it is accessible.  */
8097       perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
8098 				     tf_warning_or_error);
8099     }
8100   else
8101     {
8102       /* Call build_cleanup before we enter the anonymous function so
8103 	 that any access checks will be done relative to the current
8104 	 scope, rather than the scope of the anonymous function.  */
8105       build_cleanup (decl);
8106 
8107       /* Now start the function.  */
8108       cleanup = start_cleanup_fn ();
8109 
8110       /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
8111 	 to the original function, rather than the anonymous one.  That
8112 	 will make the back end think that nested functions are in use,
8113 	 which causes confusion.  */
8114       push_deferring_access_checks (dk_no_check);
8115       fcall = build_cleanup (decl);
8116       pop_deferring_access_checks ();
8117 
8118       /* Create the body of the anonymous function.  */
8119       compound_stmt = begin_compound_stmt (BCS_FN_BODY);
8120       finish_expr_stmt (fcall);
8121       finish_compound_stmt (compound_stmt);
8122       end_cleanup_fn ();
8123     }
8124 
8125   /* Call atexit with the cleanup function.  */
8126   mark_used (cleanup);
8127   cleanup = build_address (cleanup);
8128 
8129   if (CP_DECL_THREAD_LOCAL_P (decl))
8130     atex_node = get_thread_atexit_node ();
8131   else
8132     atex_node = get_atexit_node ();
8133 
8134   if (use_dtor)
8135     {
8136       /* We must convert CLEANUP to the type that "__cxa_atexit"
8137 	 expects.  */
8138       cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
8139       /* "__cxa_atexit" will pass the address of DECL to the
8140 	 cleanup function.  */
8141       mark_used (decl);
8142       addr = build_address (decl);
8143       /* The declared type of the parameter to "__cxa_atexit" is
8144 	 "void *".  For plain "T*", we could just let the
8145 	 machinery in cp_build_function_call convert it -- but if the
8146 	 type is "cv-qualified T *", then we need to convert it
8147 	 before passing it in, to avoid spurious errors.  */
8148       addr = build_nop (ptr_type_node, addr);
8149     }
8150   else
8151     /* Since the cleanup functions we build ignore the address
8152        they're given, there's no reason to pass the actual address
8153        in, and, in general, it's cheaper to pass NULL than any
8154        other value.  */
8155     addr = null_pointer_node;
8156 
8157   if (dso_parm)
8158     arg2 = cp_build_addr_expr (get_dso_handle_node (),
8159 			       tf_warning_or_error);
8160   else if (ob_parm)
8161     /* Just pass NULL to the dso handle parm if we don't actually
8162        have a DSO handle on this target.  */
8163     arg2 = null_pointer_node;
8164   else
8165     arg2 = NULL_TREE;
8166 
8167   if (ob_parm)
8168     {
8169       if (!CP_DECL_THREAD_LOCAL_P (decl)
8170 	  && targetm.cxx.use_aeabi_atexit ())
8171 	{
8172 	  arg1 = cleanup;
8173 	  arg0 = addr;
8174 	}
8175       else
8176 	{
8177 	  arg1 = addr;
8178 	  arg0 = cleanup;
8179 	}
8180     }
8181   else
8182     {
8183       arg0 = cleanup;
8184       arg1 = NULL_TREE;
8185     }
8186   return cp_build_function_call_nary (atex_node, tf_warning_or_error,
8187 				      arg0, arg1, arg2, NULL_TREE);
8188 }
8189 
8190 /* DECL is a VAR_DECL with static storage duration.  INIT, if present,
8191    is its initializer.  Generate code to handle the construction
8192    and destruction of DECL.  */
8193 
8194 static void
8195 expand_static_init (tree decl, tree init)
8196 {
8197   gcc_assert (VAR_P (decl));
8198   gcc_assert (TREE_STATIC (decl));
8199 
8200   /* Some variables require no dynamic initialization.  */
8201   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
8202     {
8203       /* Make sure the destructor is callable.  */
8204       cxx_maybe_build_cleanup (decl, tf_warning_or_error);
8205       if (!init)
8206 	return;
8207     }
8208 
8209   if (CP_DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
8210       && !DECL_FUNCTION_SCOPE_P (decl))
8211     {
8212       if (init)
8213 	error ("non-local variable %qD declared %<__thread%> "
8214 	       "needs dynamic initialization", decl);
8215       else
8216 	error ("non-local variable %qD declared %<__thread%> "
8217 	       "has a non-trivial destructor", decl);
8218       static bool informed;
8219       if (!informed)
8220 	{
8221 	  inform (DECL_SOURCE_LOCATION (decl),
8222 		  "C++11 %<thread_local%> allows dynamic initialization "
8223 		  "and destruction");
8224 	  informed = true;
8225 	}
8226       return;
8227     }
8228 
8229   if (DECL_FUNCTION_SCOPE_P (decl))
8230     {
8231       /* Emit code to perform this initialization but once.  */
8232       tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
8233       tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
8234       tree guard, guard_addr;
8235       tree flag, begin;
8236       /* We don't need thread-safety code for thread-local vars.  */
8237       bool thread_guard = (flag_threadsafe_statics
8238 			   && !CP_DECL_THREAD_LOCAL_P (decl));
8239 
8240       /* Emit code to perform this initialization but once.  This code
8241 	 looks like:
8242 
8243 	   static <type> guard;
8244 	   if (!__atomic_load (guard.first_byte)) {
8245 	     if (__cxa_guard_acquire (&guard)) {
8246 	       bool flag = false;
8247 	       try {
8248 		 // Do initialization.
8249 		 flag = true; __cxa_guard_release (&guard);
8250 		 // Register variable for destruction at end of program.
8251 	       } catch {
8252 		 if (!flag) __cxa_guard_abort (&guard);
8253 	       }
8254 	     }
8255 	   }
8256 
8257 	 Note that the `flag' variable is only set to 1 *after* the
8258 	 initialization is complete.  This ensures that an exception,
8259 	 thrown during the construction, will cause the variable to
8260 	 reinitialized when we pass through this code again, as per:
8261 
8262 	   [stmt.dcl]
8263 
8264 	   If the initialization exits by throwing an exception, the
8265 	   initialization is not complete, so it will be tried again
8266 	   the next time control enters the declaration.
8267 
8268 	 This process should be thread-safe, too; multiple threads
8269 	 should not be able to initialize the variable more than
8270 	 once.  */
8271 
8272       /* Create the guard variable.  */
8273       guard = get_guard (decl);
8274 
8275       /* Begin the conditional initialization.  */
8276       if_stmt = begin_if_stmt ();
8277 
8278       finish_if_stmt_cond (get_guard_cond (guard, thread_guard), if_stmt);
8279       then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8280 
8281       if (thread_guard)
8282 	{
8283 	  tree vfntype = NULL_TREE;
8284 	  tree acquire_name, release_name, abort_name;
8285 	  tree acquire_fn, release_fn, abort_fn;
8286 	  guard_addr = build_address (guard);
8287 
8288 	  acquire_name = get_identifier ("__cxa_guard_acquire");
8289 	  release_name = get_identifier ("__cxa_guard_release");
8290 	  abort_name = get_identifier ("__cxa_guard_abort");
8291 	  acquire_fn = get_global_binding (acquire_name);
8292 	  release_fn = get_global_binding (release_name);
8293 	  abort_fn = get_global_binding (abort_name);
8294 	  if (!acquire_fn)
8295 	    acquire_fn = push_library_fn
8296 	      (acquire_name, build_function_type_list (integer_type_node,
8297 						       TREE_TYPE (guard_addr),
8298 						       NULL_TREE),
8299 	       NULL_TREE, ECF_NOTHROW | ECF_LEAF);
8300 	  if (!release_fn || !abort_fn)
8301 	    vfntype = build_function_type_list (void_type_node,
8302 						TREE_TYPE (guard_addr),
8303 						NULL_TREE);
8304 	  if (!release_fn)
8305 	    release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
8306 					   ECF_NOTHROW | ECF_LEAF);
8307 	  if (!abort_fn)
8308 	    abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
8309 					ECF_NOTHROW | ECF_LEAF);
8310 
8311 	  inner_if_stmt = begin_if_stmt ();
8312 	  finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
8313 			       inner_if_stmt);
8314 
8315 	  inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8316 	  begin = get_target_expr (boolean_false_node);
8317 	  flag = TARGET_EXPR_SLOT (begin);
8318 
8319 	  TARGET_EXPR_CLEANUP (begin)
8320 	    = build3 (COND_EXPR, void_type_node, flag,
8321 		      void_node,
8322 		      build_call_n (abort_fn, 1, guard_addr));
8323 	  CLEANUP_EH_ONLY (begin) = 1;
8324 
8325 	  /* Do the initialization itself.  */
8326 	  init = add_stmt_to_compound (begin, init);
8327 	  init = add_stmt_to_compound
8328 	    (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
8329 	  init = add_stmt_to_compound
8330 	    (init, build_call_n (release_fn, 1, guard_addr));
8331 	}
8332       else
8333 	init = add_stmt_to_compound (init, set_guard (guard));
8334 
8335       /* Use atexit to register a function for destroying this static
8336 	 variable.  */
8337       init = add_stmt_to_compound (init, register_dtor_fn (decl));
8338 
8339       finish_expr_stmt (init);
8340 
8341       if (thread_guard)
8342 	{
8343 	  finish_compound_stmt (inner_then_clause);
8344 	  finish_then_clause (inner_if_stmt);
8345 	  finish_if_stmt (inner_if_stmt);
8346 	}
8347 
8348       finish_compound_stmt (then_clause);
8349       finish_then_clause (if_stmt);
8350       finish_if_stmt (if_stmt);
8351     }
8352   else if (CP_DECL_THREAD_LOCAL_P (decl))
8353     tls_aggregates = tree_cons (init, decl, tls_aggregates);
8354   else
8355     static_aggregates = tree_cons (init, decl, static_aggregates);
8356 }
8357 
8358 
8359 /* Make TYPE a complete type based on INITIAL_VALUE.
8360    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8361    2 if there was no information (in which case assume 0 if DO_DEFAULT),
8362    3 if the initializer list is empty (in pedantic mode). */
8363 
8364 int
8365 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
8366 {
8367   int failure;
8368   tree type, elt_type;
8369 
8370   /* Don't get confused by a CONSTRUCTOR for some other type.  */
8371   if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
8372       && !BRACE_ENCLOSED_INITIALIZER_P (initial_value)
8373       && TREE_CODE (TREE_TYPE (initial_value)) != ARRAY_TYPE)
8374     return 1;
8375 
8376   if (initial_value)
8377     {
8378       unsigned HOST_WIDE_INT i;
8379       tree value;
8380 
8381       /* An array of character type can be initialized from a
8382 	 brace-enclosed string constant.
8383 
8384 	 FIXME: this code is duplicated from reshape_init. Probably
8385 	 we should just call reshape_init here?  */
8386       if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
8387 	  && TREE_CODE (initial_value) == CONSTRUCTOR
8388 	  && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
8389 	{
8390 	  vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
8391 	  tree value = (*v)[0].value;
8392 
8393 	  if (TREE_CODE (value) == STRING_CST
8394 	      && v->length () == 1)
8395 	    initial_value = value;
8396 	}
8397 
8398       /* If any of the elements are parameter packs, we can't actually
8399 	 complete this type now because the array size is dependent.  */
8400       if (TREE_CODE (initial_value) == CONSTRUCTOR)
8401 	{
8402 	  FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
8403 				      i, value)
8404 	    {
8405 	      if (PACK_EXPANSION_P (value))
8406 		return 0;
8407 	    }
8408 	}
8409     }
8410 
8411   failure = complete_array_type (ptype, initial_value, do_default);
8412 
8413   /* We can create the array before the element type is complete, which
8414      means that we didn't have these two bits set in the original type
8415      either.  In completing the type, we are expected to propagate these
8416      bits.  See also complete_type which does the same thing for arrays
8417      of fixed size.  */
8418   type = *ptype;
8419   if (type != error_mark_node && TYPE_DOMAIN (type))
8420     {
8421       elt_type = TREE_TYPE (type);
8422       TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
8423       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
8424 	= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
8425     }
8426 
8427   return failure;
8428 }
8429 
8430 /* As above, but either give an error or reject zero-size arrays, depending
8431    on COMPLAIN.  */
8432 
8433 int
8434 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
8435 				 bool do_default, tsubst_flags_t complain)
8436 {
8437   int failure;
8438   bool sfinae = !(complain & tf_error);
8439   /* In SFINAE context we can't be lenient about zero-size arrays.  */
8440   if (sfinae)
8441     ++pedantic;
8442   failure = cp_complete_array_type (ptype, initial_value, do_default);
8443   if (sfinae)
8444     --pedantic;
8445   if (failure)
8446     {
8447       if (sfinae)
8448 	/* Not an error.  */;
8449       else if (failure == 1)
8450 	error ("initializer fails to determine size of %qT", *ptype);
8451       else if (failure == 2)
8452 	{
8453 	  if (do_default)
8454 	    error ("array size missing in %qT", *ptype);
8455 	}
8456       else if (failure == 3)
8457 	error ("zero-size array %qT", *ptype);
8458       *ptype = error_mark_node;
8459     }
8460   return failure;
8461 }
8462 
8463 /* Return zero if something is declared to be a member of type
8464    CTYPE when in the context of CUR_TYPE.  STRING is the error
8465    message to print in that case.  Otherwise, quietly return 1.  */
8466 
8467 static int
8468 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
8469 {
8470   if (ctype && ctype != cur_type)
8471     {
8472       if (flags == DTOR_FLAG)
8473 	error ("destructor for alien class %qT cannot be a member", ctype);
8474       else
8475 	error ("constructor for alien class %qT cannot be a member", ctype);
8476       return 0;
8477     }
8478   return 1;
8479 }
8480 
8481 /* Subroutine of `grokdeclarator'.  */
8482 
8483 /* Generate errors possibly applicable for a given set of specifiers.
8484    This is for ARM $7.1.2.  */
8485 
8486 static void
8487 bad_specifiers (tree object,
8488 		enum bad_spec_place type,
8489 		int virtualp,
8490 		int quals,
8491 		int inlinep,
8492 		int friendp,
8493 		int raises)
8494 {
8495   switch (type)
8496     {
8497       case BSP_VAR:
8498 	if (virtualp)
8499 	  error ("%qD declared as a %<virtual%> variable", object);
8500 	if (quals)
8501 	  error ("%<const%> and %<volatile%> function specifiers on "
8502 	         "%qD invalid in variable declaration", object);
8503 	break;
8504       case BSP_PARM:
8505 	if (virtualp)
8506 	  error ("%qD declared as a %<virtual%> parameter", object);
8507 	if (inlinep)
8508 	  error ("%qD declared as an %<inline%> parameter", object);
8509 	if (quals)
8510 	  error ("%<const%> and %<volatile%> function specifiers on "
8511 	  	 "%qD invalid in parameter declaration", object);
8512 	break;
8513       case BSP_TYPE:
8514 	if (virtualp)
8515 	  error ("%qD declared as a %<virtual%> type", object);
8516 	if (inlinep)
8517 	  error ("%qD declared as an %<inline%> type", object);
8518 	if (quals)
8519 	  error ("%<const%> and %<volatile%> function specifiers on "
8520 	  	 "%qD invalid in type declaration", object);
8521 	break;
8522       case BSP_FIELD:
8523 	if (virtualp)
8524 	  error ("%qD declared as a %<virtual%> field", object);
8525 	if (inlinep)
8526 	  error ("%qD declared as an %<inline%> field", object);
8527 	if (quals)
8528 	  error ("%<const%> and %<volatile%> function specifiers on "
8529 	  	 "%qD invalid in field declaration", object);
8530 	break;
8531       default:
8532         gcc_unreachable();
8533     }
8534   if (friendp)
8535     error ("%q+D declared as a friend", object);
8536   if (raises
8537       && !flag_noexcept_type
8538       && (TREE_CODE (object) == TYPE_DECL
8539 	  || (!TYPE_PTRFN_P (TREE_TYPE (object))
8540 	      && !TYPE_REFFN_P (TREE_TYPE (object))
8541 	      && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
8542     error ("%q+D declared with an exception specification", object);
8543 }
8544 
8545 /* DECL is a member function or static data member and is presently
8546    being defined.  Check that the definition is taking place in a
8547    valid namespace.  */
8548 
8549 static void
8550 check_class_member_definition_namespace (tree decl)
8551 {
8552   /* These checks only apply to member functions and static data
8553      members.  */
8554   gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
8555   /* We check for problems with specializations in pt.c in
8556      check_specialization_namespace, where we can issue better
8557      diagnostics.  */
8558   if (processing_specialization)
8559     return;
8560   /* We check this in check_explicit_instantiation_namespace.  */
8561   if (processing_explicit_instantiation)
8562     return;
8563   /* [class.mfct]
8564 
8565      A member function definition that appears outside of the
8566      class definition shall appear in a namespace scope enclosing
8567      the class definition.
8568 
8569      [class.static.data]
8570 
8571      The definition for a static data member shall appear in a
8572      namespace scope enclosing the member's class definition.  */
8573   if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
8574     permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
8575 	       decl, DECL_CONTEXT (decl));
8576 }
8577 
8578 /* Build a PARM_DECL for the "this" parameter of FN.  TYPE is the
8579    METHOD_TYPE for a non-static member function; QUALS are the
8580    cv-qualifiers that apply to the function.  */
8581 
8582 tree
8583 build_this_parm (tree fn, tree type, cp_cv_quals quals)
8584 {
8585   tree this_type;
8586   tree qual_type;
8587   tree parm;
8588   cp_cv_quals this_quals;
8589 
8590   if (CLASS_TYPE_P (type))
8591     {
8592       this_type
8593 	= cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
8594       this_type = build_pointer_type (this_type);
8595     }
8596   else
8597     this_type = type_of_this_parm (type);
8598   /* The `this' parameter is implicitly `const'; it cannot be
8599      assigned to.  */
8600   this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
8601   qual_type = cp_build_qualified_type (this_type, this_quals);
8602   parm = build_artificial_parm (fn, this_identifier, qual_type);
8603   cp_apply_type_quals_to_decl (this_quals, parm);
8604   return parm;
8605 }
8606 
8607 /* DECL is a static member function.  Complain if it was declared
8608    with function-cv-quals.  */
8609 
8610 static void
8611 check_static_quals (tree decl, cp_cv_quals quals)
8612 {
8613   if (quals != TYPE_UNQUALIFIED)
8614     error ("static member function %q#D declared with type qualifiers",
8615 	   decl);
8616 }
8617 
8618 // Check that FN takes no arguments and returns bool.
8619 static void
8620 check_concept_fn (tree fn)
8621 {
8622   // A constraint is nullary.
8623   if (DECL_ARGUMENTS (fn))
8624     error ("concept %q#D declared with function parameters", fn);
8625 
8626   // The declared return type of the concept shall be bool, and
8627   // it shall not be deduced from it definition.
8628   tree type = TREE_TYPE (TREE_TYPE (fn));
8629   if (is_auto (type))
8630     error ("concept %q#D declared with a deduced return type", fn);
8631   else if (type != boolean_type_node)
8632     error ("concept %q#D with non-%<bool%> return type %qT", fn, type);
8633 }
8634 
8635 /* Helper function.  Replace the temporary this parameter injected
8636    during cp_finish_omp_declare_simd with the real this parameter.  */
8637 
8638 static tree
8639 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
8640 {
8641   tree this_parm = (tree) data;
8642   if (TREE_CODE (*tp) == PARM_DECL
8643       && DECL_NAME (*tp) == this_identifier
8644       && *tp != this_parm)
8645     *tp = this_parm;
8646   else if (TYPE_P (*tp))
8647     *walk_subtrees = 0;
8648   return NULL_TREE;
8649 }
8650 
8651 /* CTYPE is class type, or null if non-class.
8652    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8653    or METHOD_TYPE.
8654    DECLARATOR is the function's name.
8655    PARMS is a chain of PARM_DECLs for the function.
8656    VIRTUALP is truthvalue of whether the function is virtual or not.
8657    FLAGS are to be passed through to `grokclassfn'.
8658    QUALS are qualifiers indicating whether the function is `const'
8659    or `volatile'.
8660    RAISES is a list of exceptions that this function can raise.
8661    CHECK is 1 if we must find this method in CTYPE, 0 if we should
8662    not look, and -1 if we should not call `grokclassfn' at all.
8663 
8664    SFK is the kind of special function (if any) for the new function.
8665 
8666    Returns `NULL_TREE' if something goes wrong, after issuing
8667    applicable error messages.  */
8668 
8669 static tree
8670 grokfndecl (tree ctype,
8671 	    tree type,
8672 	    tree declarator,
8673 	    tree parms,
8674 	    tree orig_declarator,
8675 	    tree decl_reqs,
8676 	    int virtualp,
8677 	    enum overload_flags flags,
8678 	    cp_cv_quals quals,
8679 	    cp_ref_qualifier rqual,
8680 	    tree raises,
8681 	    int check,
8682 	    int friendp,
8683 	    int publicp,
8684 	    int inlinep,
8685 	    bool deletedp,
8686 	    special_function_kind sfk,
8687 	    bool funcdef_flag,
8688 	    int template_count,
8689 	    tree in_namespace,
8690 	    tree* attrlist,
8691 	    location_t location)
8692 {
8693   tree decl;
8694   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8695   tree t;
8696 
8697   // Was the concept specifier present?
8698   bool concept_p = inlinep & 4;
8699 
8700   // Concept declarations must have a corresponding definition.
8701   if (concept_p && !funcdef_flag)
8702     {
8703       error ("concept %qD has no definition", declarator);
8704       return NULL_TREE;
8705     }
8706 
8707   if (rqual)
8708     type = build_ref_qualified_type (type, rqual);
8709   if (raises)
8710     type = build_exception_variant (type, raises);
8711 
8712   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8713 
8714   /* Set the constraints on the declaration. */
8715   if (flag_concepts)
8716     {
8717       tree tmpl_reqs = NULL_TREE;
8718       if (processing_template_decl > template_class_depth (ctype))
8719         tmpl_reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
8720 
8721       /* Adjust the required expression into a constraint. */
8722       if (decl_reqs)
8723         decl_reqs = normalize_expression (decl_reqs);
8724 
8725       tree ci = build_constraints (tmpl_reqs, decl_reqs);
8726       set_constraints (decl, ci);
8727     }
8728 
8729   /* If we have an explicit location, use it, otherwise use whatever
8730      build_lang_decl used (probably input_location).  */
8731   if (location != UNKNOWN_LOCATION)
8732     DECL_SOURCE_LOCATION (decl) = location;
8733 
8734   if (TREE_CODE (type) == METHOD_TYPE)
8735     {
8736       tree parm = build_this_parm (decl, type, quals);
8737       DECL_CHAIN (parm) = parms;
8738       parms = parm;
8739 
8740       /* Allocate space to hold the vptr bit if needed.  */
8741       SET_DECL_ALIGN (decl, MINIMUM_METHOD_BOUNDARY);
8742     }
8743 
8744   DECL_ARGUMENTS (decl) = parms;
8745   for (t = parms; t; t = DECL_CHAIN (t))
8746     DECL_CONTEXT (t) = decl;
8747 
8748   /* Propagate volatile out from type to decl.  */
8749   if (TYPE_VOLATILE (type))
8750     TREE_THIS_VOLATILE (decl) = 1;
8751 
8752   /* Setup decl according to sfk.  */
8753   switch (sfk)
8754     {
8755     case sfk_constructor:
8756     case sfk_copy_constructor:
8757     case sfk_move_constructor:
8758       DECL_CXX_CONSTRUCTOR_P (decl) = 1;
8759       DECL_NAME (decl) = ctor_identifier;
8760       break;
8761     case sfk_destructor:
8762       DECL_CXX_DESTRUCTOR_P (decl) = 1;
8763       DECL_NAME (decl) = dtor_identifier;
8764       break;
8765     default:
8766       break;
8767     }
8768 
8769   if (friendp && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8770     {
8771       if (funcdef_flag)
8772 	error ("defining explicit specialization %qD in friend declaration",
8773 	       orig_declarator);
8774       else
8775 	{
8776 	  tree fns = TREE_OPERAND (orig_declarator, 0);
8777 	  tree args = TREE_OPERAND (orig_declarator, 1);
8778 
8779 	  if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8780 	    {
8781 	      /* Something like `template <class T> friend void f<T>()'.  */
8782 	      error ("invalid use of template-id %qD in declaration "
8783 		     "of primary template",
8784 		     orig_declarator);
8785 	      return NULL_TREE;
8786 	    }
8787 
8788 
8789 	  /* A friend declaration of the form friend void f<>().  Record
8790 	     the information in the TEMPLATE_ID_EXPR.  */
8791 	  SET_DECL_IMPLICIT_INSTANTIATION (decl);
8792 
8793 	  gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
8794 	  DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
8795 
8796 	  for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8797 	    if (TREE_PURPOSE (t)
8798 		&& TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8799 	    {
8800 	      error ("default arguments are not allowed in declaration "
8801 		     "of friend template specialization %qD",
8802 		     decl);
8803 	      return NULL_TREE;
8804 	    }
8805 
8806 	  if (inlinep & 1)
8807 	    {
8808 	      error ("%<inline%> is not allowed in declaration of friend "
8809 		     "template specialization %qD",
8810 		     decl);
8811 	      return NULL_TREE;
8812 	    }
8813 	}
8814     }
8815 
8816   /* If this decl has namespace scope, set that up.  */
8817   if (in_namespace)
8818     set_decl_namespace (decl, in_namespace, friendp);
8819   else if (!ctype)
8820     DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
8821 
8822   /* `main' and builtins have implicit 'C' linkage.  */
8823   if (ctype == NULL_TREE
8824       && DECL_FILE_SCOPE_P (decl)
8825       && current_lang_name == lang_name_cplusplus
8826       && (MAIN_NAME_P (declarator)
8827 	  || (IDENTIFIER_LENGTH (declarator) > 10
8828 	      && IDENTIFIER_POINTER (declarator)[0] == '_'
8829 	      && IDENTIFIER_POINTER (declarator)[1] == '_'
8830 	      && strncmp (IDENTIFIER_POINTER (declarator)+2,
8831 			  "builtin_", 8) == 0)
8832 	  || (targetcm.cxx_implicit_extern_c
8833 	      && (targetcm.cxx_implicit_extern_c
8834 		  (IDENTIFIER_POINTER (declarator))))))
8835     SET_DECL_LANGUAGE (decl, lang_c);
8836 
8837   /* Should probably propagate const out from type to decl I bet (mrs).  */
8838   if (staticp)
8839     {
8840       DECL_STATIC_FUNCTION_P (decl) = 1;
8841       DECL_CONTEXT (decl) = ctype;
8842     }
8843 
8844   if (deletedp)
8845     DECL_DELETED_FN (decl) = 1;
8846 
8847   if (ctype)
8848     {
8849       DECL_CONTEXT (decl) = ctype;
8850       if (funcdef_flag)
8851 	check_class_member_definition_namespace (decl);
8852     }
8853 
8854   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8855     {
8856       if (PROCESSING_REAL_TEMPLATE_DECL_P())
8857 	error ("cannot declare %<::main%> to be a template");
8858       if (inlinep & 1)
8859 	error ("cannot declare %<::main%> to be inline");
8860       if (inlinep & 2)
8861 	error ("cannot declare %<::main%> to be %<constexpr%>");
8862       if (!publicp)
8863 	error ("cannot declare %<::main%> to be static");
8864       inlinep = 0;
8865       publicp = 1;
8866     }
8867 
8868   /* Members of anonymous types and local classes have no linkage; make
8869      them internal.  If a typedef is made later, this will be changed.  */
8870   if (ctype && (!TREE_PUBLIC (TYPE_MAIN_DECL (ctype))
8871 		|| decl_function_context (TYPE_MAIN_DECL (ctype))))
8872     publicp = 0;
8873 
8874   if (publicp && cxx_dialect == cxx98)
8875     {
8876       /* [basic.link]: A name with no linkage (notably, the name of a class
8877 	 or enumeration declared in a local scope) shall not be used to
8878 	 declare an entity with linkage.
8879 
8880 	 DR 757 relaxes this restriction for C++0x.  */
8881       no_linkage_error (decl);
8882     }
8883 
8884   TREE_PUBLIC (decl) = publicp;
8885   if (! publicp)
8886     {
8887       DECL_INTERFACE_KNOWN (decl) = 1;
8888       DECL_NOT_REALLY_EXTERN (decl) = 1;
8889     }
8890 
8891   /* If the declaration was declared inline, mark it as such.  */
8892   if (inlinep)
8893     {
8894       DECL_DECLARED_INLINE_P (decl) = 1;
8895       if (publicp)
8896 	DECL_COMDAT (decl) = 1;
8897     }
8898   if (inlinep & 2)
8899     DECL_DECLARED_CONSTEXPR_P (decl) = true;
8900 
8901   // If the concept declaration specifier was found, check
8902   // that the declaration satisfies the necessary requirements.
8903   if (concept_p)
8904     {
8905       DECL_DECLARED_CONCEPT_P (decl) = true;
8906       check_concept_fn (decl);
8907     }
8908 
8909   DECL_EXTERNAL (decl) = 1;
8910   if (TREE_CODE (type) == FUNCTION_TYPE)
8911     {
8912       if (quals || rqual)
8913 	TREE_TYPE (decl) = apply_memfn_quals (TREE_TYPE (decl),
8914 					      TYPE_UNQUALIFIED,
8915 					      REF_QUAL_NONE);
8916 
8917       if (quals)
8918 	{
8919 	  error (ctype
8920 		 ? G_("static member function %qD cannot have cv-qualifier")
8921 		 : G_("non-member function %qD cannot have cv-qualifier"),
8922 		 decl);
8923 	  quals = TYPE_UNQUALIFIED;
8924 	}
8925 
8926       if (rqual)
8927 	{
8928 	  error (ctype
8929 		 ? G_("static member function %qD cannot have ref-qualifier")
8930 		 : G_("non-member function %qD cannot have ref-qualifier"),
8931 		 decl);
8932 	  rqual = REF_QUAL_NONE;
8933 	}
8934     }
8935 
8936   if (deduction_guide_p (decl))
8937     {
8938       if (!DECL_NAMESPACE_SCOPE_P (decl))
8939 	{
8940 	  error_at (location, "deduction guide %qD must be declared at "
8941 		    "namespace scope", decl);
8942 	  return NULL_TREE;
8943 	}
8944       if (funcdef_flag)
8945 	error_at (location,
8946 		  "deduction guide %qD must not have a function body", decl);
8947     }
8948   else if (IDENTIFIER_ANY_OP_P (DECL_NAME (decl))
8949 	   && !grok_op_properties (decl, /*complain=*/true))
8950     return NULL_TREE;
8951   else if (UDLIT_OPER_P (DECL_NAME (decl)))
8952     {
8953       bool long_long_unsigned_p;
8954       bool long_double_p;
8955       const char *suffix = NULL;
8956       /* [over.literal]/6: Literal operators shall not have C linkage. */
8957       if (DECL_LANGUAGE (decl) == lang_c)
8958 	{
8959 	  error ("literal operator with C linkage");
8960 	  maybe_show_extern_c_location ();
8961 	  return NULL_TREE;
8962 	}
8963 
8964       if (DECL_NAMESPACE_SCOPE_P (decl))
8965 	{
8966 	  if (!check_literal_operator_args (decl, &long_long_unsigned_p,
8967 					    &long_double_p))
8968 	    {
8969 	      error ("%qD has invalid argument list", decl);
8970 	      return NULL_TREE;
8971 	    }
8972 
8973 	  suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
8974 	  if (long_long_unsigned_p)
8975 	    {
8976 	      if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
8977 		warning (0, "integer suffix %qs"
8978 			    " shadowed by implementation", suffix);
8979 	    }
8980 	  else if (long_double_p)
8981 	    {
8982 	      if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
8983 		warning (0, "floating point suffix %qs"
8984 			    " shadowed by implementation", suffix);
8985 	    }
8986 	  /* 17.6.3.3.5  */
8987 	  if (suffix[0] != '_'
8988 	      && !in_system_header_at (DECL_SOURCE_LOCATION (decl))
8989 	      && !current_function_decl && !(friendp && !funcdef_flag))
8990 	    warning (OPT_Wliteral_suffix,
8991 		     "literal operator suffixes not preceded by %<_%>"
8992 		     " are reserved for future standardization");
8993 	}
8994       else
8995 	{
8996 	  error ("%qD must be a non-member function", decl);
8997 	  return NULL_TREE;
8998 	}
8999     }
9000 
9001   if (funcdef_flag)
9002     /* Make the init_value nonzero so pushdecl knows this is not
9003        tentative.  error_mark_node is replaced later with the BLOCK.  */
9004     DECL_INITIAL (decl) = error_mark_node;
9005 
9006   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
9007     TREE_NOTHROW (decl) = 1;
9008 
9009   if (flag_openmp || flag_openmp_simd)
9010     {
9011       /* Adjust "omp declare simd" attributes.  */
9012       tree ods = lookup_attribute ("omp declare simd", *attrlist);
9013       if (ods)
9014 	{
9015 	  tree attr;
9016 	  for (attr = ods; attr;
9017 	       attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
9018 	    {
9019 	      if (TREE_CODE (type) == METHOD_TYPE)
9020 		walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
9021 			   DECL_ARGUMENTS (decl), NULL);
9022 	      if (TREE_VALUE (attr) != NULL_TREE)
9023 		{
9024 		  tree cl = TREE_VALUE (TREE_VALUE (attr));
9025 		  cl = c_omp_declare_simd_clauses_to_numbers
9026 						(DECL_ARGUMENTS (decl), cl);
9027 		  if (cl)
9028 		    TREE_VALUE (TREE_VALUE (attr)) = cl;
9029 		  else
9030 		    TREE_VALUE (attr) = NULL_TREE;
9031 		}
9032 	    }
9033 	}
9034     }
9035 
9036   /* Caller will do the rest of this.  */
9037   if (check < 0)
9038     return decl;
9039 
9040   if (ctype != NULL_TREE)
9041     grokclassfn (ctype, decl, flags);
9042 
9043   /* 12.4/3  */
9044   if (cxx_dialect >= cxx11
9045       && DECL_DESTRUCTOR_P (decl)
9046       && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
9047       && !processing_template_decl)
9048     deduce_noexcept_on_destructor (decl);
9049 
9050   decl = check_explicit_specialization (orig_declarator, decl,
9051 					template_count,
9052 					2 * funcdef_flag +
9053 					4 * (friendp != 0) +
9054 	                                8 * concept_p,
9055 					*attrlist);
9056   if (decl == error_mark_node)
9057     return NULL_TREE;
9058 
9059   if (DECL_STATIC_FUNCTION_P (decl))
9060     check_static_quals (decl, quals);
9061 
9062   if (attrlist)
9063     {
9064       cplus_decl_attributes (&decl, *attrlist, 0);
9065       *attrlist = NULL_TREE;
9066     }
9067 
9068   /* Check main's type after attributes have been applied.  */
9069   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
9070     {
9071       if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
9072 			integer_type_node))
9073 	{
9074 	  tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
9075 	  tree newtype;
9076 	  error ("%<::main%> must return %<int%>");
9077 	  newtype = build_function_type (integer_type_node, oldtypeargs);
9078 	  TREE_TYPE (decl) = newtype;
9079 	}
9080       if (warn_main)
9081 	check_main_parameter_types (decl);
9082     }
9083 
9084   if (ctype != NULL_TREE && check)
9085     {
9086       tree old_decl = check_classfn (ctype, decl,
9087 				     (processing_template_decl
9088 				      > template_class_depth (ctype))
9089 				     ? current_template_parms
9090 				     : NULL_TREE);
9091 
9092       if (old_decl == error_mark_node)
9093 	return NULL_TREE;
9094 
9095       if (old_decl)
9096 	{
9097 	  tree ok;
9098 	  tree pushed_scope;
9099 
9100 	  if (TREE_CODE (old_decl) == TEMPLATE_DECL)
9101 	    /* Because grokfndecl is always supposed to return a
9102 	       FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
9103 	       here.  We depend on our callers to figure out that its
9104 	       really a template that's being returned.  */
9105 	    old_decl = DECL_TEMPLATE_RESULT (old_decl);
9106 
9107 	  if (DECL_STATIC_FUNCTION_P (old_decl)
9108 	      && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
9109 	    {
9110 	      /* Remove the `this' parm added by grokclassfn.  */
9111 	      revert_static_member_fn (decl);
9112 	      check_static_quals (decl, quals);
9113 	    }
9114 	  if (DECL_ARTIFICIAL (old_decl))
9115 	    {
9116 	      error ("definition of implicitly-declared %qD", old_decl);
9117 	      return NULL_TREE;
9118 	    }
9119 	  else if (DECL_DEFAULTED_FN (old_decl))
9120 	    {
9121 	      error ("definition of explicitly-defaulted %q+D", decl);
9122 	      inform (DECL_SOURCE_LOCATION (old_decl),
9123 		      "%q#D explicitly defaulted here", old_decl);
9124 	      return NULL_TREE;
9125 	    }
9126 
9127 	  /* Since we've smashed OLD_DECL to its
9128 	     DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
9129 	  if (TREE_CODE (decl) == TEMPLATE_DECL)
9130 	    decl = DECL_TEMPLATE_RESULT (decl);
9131 
9132 	  /* Attempt to merge the declarations.  This can fail, in
9133 	     the case of some invalid specialization declarations.  */
9134 	  pushed_scope = push_scope (ctype);
9135 	  ok = duplicate_decls (decl, old_decl, friendp);
9136 	  if (pushed_scope)
9137 	    pop_scope (pushed_scope);
9138 	  if (!ok)
9139 	    {
9140 	      error ("no %q#D member function declared in class %qT",
9141 		     decl, ctype);
9142 	      return NULL_TREE;
9143 	    }
9144 	  if (ok == error_mark_node)
9145 	    return NULL_TREE;
9146 	  return old_decl;
9147 	}
9148     }
9149 
9150   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
9151     return NULL_TREE;
9152 
9153   if (ctype == NULL_TREE || check)
9154     return decl;
9155 
9156   if (virtualp)
9157     DECL_VIRTUAL_P (decl) = 1;
9158 
9159   return decl;
9160 }
9161 
9162 /* decl is a FUNCTION_DECL.
9163    specifiers are the parsed virt-specifiers.
9164 
9165    Set flags to reflect the virt-specifiers.
9166 
9167    Returns decl.  */
9168 
9169 static tree
9170 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
9171 {
9172   if (decl == NULL_TREE)
9173     return decl;
9174   if (specifiers & VIRT_SPEC_OVERRIDE)
9175     DECL_OVERRIDE_P (decl) = 1;
9176   if (specifiers & VIRT_SPEC_FINAL)
9177     DECL_FINAL_P (decl) = 1;
9178   return decl;
9179 }
9180 
9181 /* DECL is a VAR_DECL for a static data member.  Set flags to reflect
9182    the linkage that DECL will receive in the object file.  */
9183 
9184 static void
9185 set_linkage_for_static_data_member (tree decl)
9186 {
9187   /* A static data member always has static storage duration and
9188      external linkage.  Note that static data members are forbidden in
9189      local classes -- the only situation in which a class has
9190      non-external linkage.  */
9191   TREE_PUBLIC (decl) = 1;
9192   TREE_STATIC (decl) = 1;
9193   /* For non-template classes, static data members are always put
9194      out in exactly those files where they are defined, just as
9195      with ordinary namespace-scope variables.  */
9196   if (!processing_template_decl)
9197     DECL_INTERFACE_KNOWN (decl) = 1;
9198 }
9199 
9200 /* Create a VAR_DECL named NAME with the indicated TYPE.
9201 
9202    If SCOPE is non-NULL, it is the class type or namespace containing
9203    the variable.  If SCOPE is NULL, the variable should is created in
9204    the innermost enclosing scope.  */
9205 
9206 static tree
9207 grokvardecl (tree type,
9208 	     tree name,
9209 	     tree orig_declarator,
9210 	     const cp_decl_specifier_seq *declspecs,
9211 	     int initialized,
9212 	     int type_quals,
9213 	     int inlinep,
9214 	     bool conceptp,
9215 	     int template_count,
9216 	     tree scope)
9217 {
9218   tree decl;
9219   tree explicit_scope;
9220 
9221   gcc_assert (!name || identifier_p (name));
9222 
9223   bool constp = (type_quals & TYPE_QUAL_CONST) != 0;
9224   bool volatilep = (type_quals & TYPE_QUAL_VOLATILE) != 0;
9225 
9226   /* Compute the scope in which to place the variable, but remember
9227      whether or not that scope was explicitly specified by the user.   */
9228   explicit_scope = scope;
9229   if (!scope)
9230     {
9231       /* An explicit "extern" specifier indicates a namespace-scope
9232 	 variable.  */
9233       if (declspecs->storage_class == sc_extern)
9234 	scope = current_decl_namespace ();
9235       else if (!at_function_scope_p ())
9236 	scope = current_scope ();
9237     }
9238 
9239   if (scope
9240       && (/* If the variable is a namespace-scope variable declared in a
9241 	     template, we need DECL_LANG_SPECIFIC.  */
9242 	  (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
9243 	  /* Similarly for namespace-scope variables with language linkage
9244 	     other than C++.  */
9245 	  || (TREE_CODE (scope) == NAMESPACE_DECL
9246 	      && current_lang_name != lang_name_cplusplus)
9247 	  /* Similarly for static data members.  */
9248 	  || TYPE_P (scope)
9249 	  /* Similarly for explicit specializations.  */
9250 	  || (orig_declarator
9251 	      && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
9252     decl = build_lang_decl (VAR_DECL, name, type);
9253   else
9254     decl = build_decl (input_location, VAR_DECL, name, type);
9255 
9256   if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
9257     set_decl_namespace (decl, explicit_scope, 0);
9258   else
9259     DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
9260 
9261   if (declspecs->storage_class == sc_extern)
9262     {
9263       DECL_THIS_EXTERN (decl) = 1;
9264       DECL_EXTERNAL (decl) = !initialized;
9265     }
9266 
9267   if (DECL_CLASS_SCOPE_P (decl))
9268     {
9269       set_linkage_for_static_data_member (decl);
9270       /* This function is only called with out-of-class definitions.  */
9271       DECL_EXTERNAL (decl) = 0;
9272       check_class_member_definition_namespace (decl);
9273     }
9274   /* At top level, either `static' or no s.c. makes a definition
9275      (perhaps tentative), and absence of `static' makes it public.  */
9276   else if (toplevel_bindings_p ())
9277     {
9278       TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
9279 			    && (DECL_THIS_EXTERN (decl)
9280 				|| ! constp
9281 				|| volatilep
9282 				|| inlinep));
9283       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9284     }
9285   /* Not at top level, only `static' makes a static definition.  */
9286   else
9287     {
9288       TREE_STATIC (decl) = declspecs->storage_class == sc_static;
9289       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9290     }
9291 
9292   if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
9293     {
9294       if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
9295 	{
9296 	  CP_DECL_THREAD_LOCAL_P (decl) = true;
9297 	  if (!processing_template_decl)
9298 	    set_decl_tls_model (decl, decl_default_tls_model (decl));
9299 	}
9300       if (declspecs->gnu_thread_keyword_p)
9301 	SET_DECL_GNU_TLS_P (decl);
9302     }
9303 
9304   /* If the type of the decl has no linkage, make sure that we'll
9305      notice that in mark_used.  */
9306   if (cxx_dialect > cxx98
9307       && decl_linkage (decl) != lk_none
9308       && DECL_LANG_SPECIFIC (decl) == NULL
9309       && !DECL_EXTERN_C_P (decl)
9310       && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
9311     retrofit_lang_decl (decl);
9312 
9313   if (TREE_PUBLIC (decl))
9314     {
9315       /* [basic.link]: A name with no linkage (notably, the name of a class
9316 	 or enumeration declared in a local scope) shall not be used to
9317 	 declare an entity with linkage.
9318 
9319 	 DR 757 relaxes this restriction for C++0x.  */
9320       if (cxx_dialect < cxx11)
9321 	no_linkage_error (decl);
9322     }
9323   else
9324     DECL_INTERFACE_KNOWN (decl) = 1;
9325 
9326   if (DECL_NAME (decl)
9327       && MAIN_NAME_P (DECL_NAME (decl))
9328       && scope == global_namespace)
9329     error ("cannot declare %<::main%> to be a global variable");
9330 
9331   /* Check that the variable can be safely declared as a concept.
9332      Note that this also forbids explicit specializations.  */
9333   if (conceptp)
9334     {
9335       if (!processing_template_decl)
9336         {
9337           error ("a non-template variable cannot be %<concept%>");
9338           return NULL_TREE;
9339         }
9340       else
9341         DECL_DECLARED_CONCEPT_P (decl) = true;
9342       if (!same_type_ignoring_top_level_qualifiers_p (type, boolean_type_node))
9343 	error_at (declspecs->locations[ds_type_spec],
9344 		  "concept must have type %<bool%>");
9345     }
9346   else if (flag_concepts
9347 	   && processing_template_decl > template_class_depth (scope))
9348     {
9349       tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
9350       tree ci = build_constraints (reqs, NULL_TREE);
9351       set_constraints (decl, ci);
9352     }
9353 
9354   // Handle explicit specializations and instantiations of variable templates.
9355   if (orig_declarator)
9356     decl = check_explicit_specialization (orig_declarator, decl,
9357 					  template_count, conceptp * 8);
9358 
9359   return decl != error_mark_node ? decl : NULL_TREE;
9360 }
9361 
9362 /* Create and return a canonical pointer to member function type, for
9363    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
9364 
9365 tree
9366 build_ptrmemfunc_type (tree type)
9367 {
9368   tree field, fields;
9369   tree t;
9370 
9371   if (type == error_mark_node)
9372     return type;
9373 
9374   /* Make sure that we always have the unqualified pointer-to-member
9375      type first.  */
9376   if (cp_cv_quals quals = cp_type_quals (type))
9377     {
9378       tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9379       return cp_build_qualified_type (unqual, quals);
9380     }
9381 
9382   /* If a canonical type already exists for this type, use it.  We use
9383      this method instead of type_hash_canon, because it only does a
9384      simple equality check on the list of field members.  */
9385 
9386   t = TYPE_PTRMEMFUNC_TYPE (type);
9387   if (t)
9388     return t;
9389 
9390   t = make_node (RECORD_TYPE);
9391 
9392   /* Let the front end know this is a pointer to member function.  */
9393   TYPE_PTRMEMFUNC_FLAG (t) = 1;
9394 
9395   field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
9396   fields = field;
9397 
9398   field = build_decl (input_location, FIELD_DECL, delta_identifier,
9399 		      delta_type_node);
9400   DECL_CHAIN (field) = fields;
9401   fields = field;
9402 
9403   finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
9404 
9405   /* Zap out the name so that the back end will give us the debugging
9406      information for this anonymous RECORD_TYPE.  */
9407   TYPE_NAME (t) = NULL_TREE;
9408 
9409   /* Cache this pointer-to-member type so that we can find it again
9410      later.  */
9411   TYPE_PTRMEMFUNC_TYPE (type) = t;
9412 
9413   if (TYPE_STRUCTURAL_EQUALITY_P (type))
9414     SET_TYPE_STRUCTURAL_EQUALITY (t);
9415   else if (TYPE_CANONICAL (type) != type)
9416     TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
9417 
9418   return t;
9419 }
9420 
9421 /* Create and return a pointer to data member type.  */
9422 
9423 tree
9424 build_ptrmem_type (tree class_type, tree member_type)
9425 {
9426   if (TREE_CODE (member_type) == METHOD_TYPE)
9427     {
9428       cp_cv_quals quals = type_memfn_quals (member_type);
9429       cp_ref_qualifier rqual = type_memfn_rqual (member_type);
9430       member_type = build_memfn_type (member_type, class_type, quals, rqual);
9431       return build_ptrmemfunc_type (build_pointer_type (member_type));
9432     }
9433   else
9434     {
9435       gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
9436       return build_offset_type (class_type, member_type);
9437     }
9438 }
9439 
9440 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9441    Check to see that the definition is valid.  Issue appropriate error
9442    messages.  Return 1 if the definition is particularly bad, or 0
9443    otherwise.  */
9444 
9445 static int
9446 check_static_variable_definition (tree decl, tree type)
9447 {
9448   /* Avoid redundant diagnostics on out-of-class definitions.  */
9449   if (!current_class_type || !TYPE_BEING_DEFINED (current_class_type))
9450     return 0;
9451   /* Can't check yet if we don't know the type.  */
9452   if (dependent_type_p (type))
9453     return 0;
9454   /* If DECL is declared constexpr, we'll do the appropriate checks
9455      in check_initializer.  Similarly for inline static data members.  */
9456   if (DECL_P (decl)
9457       && (DECL_DECLARED_CONSTEXPR_P (decl)
9458 	  || DECL_VAR_DECLARED_INLINE_P (decl)))
9459     return 0;
9460   else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9461     {
9462       if (!COMPLETE_TYPE_P (type))
9463 	error_at (DECL_SOURCE_LOCATION (decl),
9464 		  "in-class initialization of static data member %q#D of "
9465 		  "incomplete type", decl);
9466       else if (literal_type_p (type))
9467 	permerror (DECL_SOURCE_LOCATION (decl),
9468 		   "%<constexpr%> needed for in-class initialization of "
9469 		   "static data member %q#D of non-integral type", decl);
9470       else
9471 	error_at (DECL_SOURCE_LOCATION (decl),
9472 		  "in-class initialization of static data member %q#D of "
9473 		  "non-literal type", decl);
9474       return 1;
9475     }
9476 
9477   /* Motion 10 at San Diego: If a static const integral data member is
9478      initialized with an integral constant expression, the initializer
9479      may appear either in the declaration (within the class), or in
9480      the definition, but not both.  If it appears in the class, the
9481      member is a member constant.  The file-scope definition is always
9482      required.  */
9483   if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
9484     {
9485       error_at (DECL_SOURCE_LOCATION (decl),
9486 		"invalid in-class initialization of static data member "
9487 		"of non-integral type %qT",
9488 		type);
9489       return 1;
9490     }
9491   else if (!CP_TYPE_CONST_P (type))
9492     error_at (DECL_SOURCE_LOCATION (decl),
9493 	      "ISO C++ forbids in-class initialization of non-const "
9494 	      "static member %qD",
9495 	      decl);
9496   else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9497     pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
9498 	     "ISO C++ forbids initialization of member constant "
9499 	     "%qD of non-integral type %qT", decl, type);
9500 
9501   return 0;
9502 }
9503 
9504 /* *expr_p is part of the TYPE_SIZE of a variably-sized array.  If any
9505    SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
9506    expressions out into temporary variables so that walk_tree doesn't
9507    step into them (c++/15764).  */
9508 
9509 static tree
9510 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
9511 {
9512   hash_set<tree> *pset = (hash_set<tree> *)data;
9513   tree expr = *expr_p;
9514   if (TREE_CODE (expr) == SAVE_EXPR)
9515     {
9516       tree op = TREE_OPERAND (expr, 0);
9517       cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
9518       if (TREE_SIDE_EFFECTS (op))
9519 	TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
9520       *walk_subtrees = 0;
9521     }
9522   else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
9523     *walk_subtrees = 0;
9524   return NULL;
9525 }
9526 
9527 /* Entry point for the above.  */
9528 
9529 static void
9530 stabilize_vla_size (tree size)
9531 {
9532   hash_set<tree> pset;
9533   /* Break out any function calls into temporary variables.  */
9534   cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
9535 }
9536 
9537 /* Reduce a SIZEOF_EXPR to its value.  */
9538 
9539 tree
9540 fold_sizeof_expr (tree t)
9541 {
9542   tree r;
9543   if (SIZEOF_EXPR_TYPE_P (t))
9544     r = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (t, 0)),
9545 				    SIZEOF_EXPR, false, false);
9546   else if (TYPE_P (TREE_OPERAND (t, 0)))
9547     r = cxx_sizeof_or_alignof_type (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9548 				    false, false);
9549   else
9550     r = cxx_sizeof_or_alignof_expr (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9551 				    false);
9552   if (r == error_mark_node)
9553     r = size_one_node;
9554   return r;
9555 }
9556 
9557 /* Given the SIZE (i.e., number of elements) in an array, compute
9558    an appropriate index type for the array.  If non-NULL, NAME is
9559    the name of the entity being declared.  */
9560 
9561 tree
9562 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
9563 {
9564   tree itype;
9565   tree osize = size;
9566 
9567   if (error_operand_p (size))
9568     return error_mark_node;
9569 
9570   if (!type_dependent_expression_p (size))
9571     {
9572       osize = size = mark_rvalue_use (size);
9573 
9574       if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
9575 	  && TREE_SIDE_EFFECTS (size))
9576 	/* In C++98, we mark a non-constant array bound with a magic
9577 	   NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case.  */;
9578       else
9579 	{
9580 	  size = instantiate_non_dependent_expr_sfinae (size, complain);
9581 	  size = build_converted_constant_expr (size_type_node, size, complain);
9582 	  size = maybe_constant_value (size);
9583 
9584 	  if (!TREE_CONSTANT (size))
9585 	    size = osize;
9586 	}
9587 
9588       if (error_operand_p (size))
9589 	return error_mark_node;
9590 
9591       /* The array bound must be an integer type.  */
9592       tree type = TREE_TYPE (size);
9593       if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
9594 	{
9595 	  if (!(complain & tf_error))
9596 	    return error_mark_node;
9597 	  if (name)
9598 	    error ("size of array %qD has non-integral type %qT", name, type);
9599 	  else
9600 	    error ("size of array has non-integral type %qT", type);
9601 	  size = integer_one_node;
9602 	}
9603     }
9604 
9605   /* A type is dependent if it is...an array type constructed from any
9606      dependent type or whose size is specified by a constant expression
9607      that is value-dependent.  */
9608   /* We can only call value_dependent_expression_p on integral constant
9609      expressions; treat non-constant expressions as dependent, too.  */
9610   if (processing_template_decl
9611       && (type_dependent_expression_p (size)
9612 	  || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
9613     {
9614       /* We cannot do any checking for a SIZE that isn't known to be
9615 	 constant. Just build the index type and mark that it requires
9616 	 structural equality checks.  */
9617       itype = build_index_type (build_min (MINUS_EXPR, sizetype,
9618 					   size, size_one_node));
9619       TYPE_DEPENDENT_P (itype) = 1;
9620       TYPE_DEPENDENT_P_VALID (itype) = 1;
9621       SET_TYPE_STRUCTURAL_EQUALITY (itype);
9622       return itype;
9623     }
9624 
9625   if (TREE_CODE (size) != INTEGER_CST)
9626     {
9627       tree folded = cp_fully_fold (size);
9628       if (TREE_CODE (folded) == INTEGER_CST)
9629 	pedwarn (location_of (size), OPT_Wpedantic,
9630 		 "size of array is not an integral constant-expression");
9631       /* Use the folded result for VLAs, too; it will have resolved
9632 	 SIZEOF_EXPR.  */
9633       size = folded;
9634     }
9635 
9636   /* Normally, the array-bound will be a constant.  */
9637   if (TREE_CODE (size) == INTEGER_CST)
9638     {
9639       /* An array must have a positive number of elements.  */
9640       if (!valid_constant_size_p (size))
9641 	{
9642 	  if (!(complain & tf_error))
9643 	    return error_mark_node;
9644 
9645 	  if (name)
9646 	    error ("size of array %qD is negative", name);
9647 	  else
9648 	    error ("size of array is negative");
9649 	  size = integer_one_node;
9650 	}
9651       /* As an extension we allow zero-sized arrays.  */
9652       else if (integer_zerop (size))
9653 	{
9654 	  if (!(complain & tf_error))
9655 	    /* We must fail if performing argument deduction (as
9656 	       indicated by the state of complain), so that
9657 	       another substitution can be found.  */
9658 	    return error_mark_node;
9659 	  else if (in_system_header_at (input_location))
9660 	    /* Allow them in system headers because glibc uses them.  */;
9661 	  else if (name)
9662 	    pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
9663 	  else
9664 	    pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
9665 	}
9666     }
9667   else if (TREE_CONSTANT (size)
9668 	   /* We don't allow VLAs at non-function scopes, or during
9669 	      tentative template substitution.  */
9670 	   || !at_function_scope_p ()
9671 	   || !(complain & tf_error))
9672     {
9673       if (!(complain & tf_error))
9674 	return error_mark_node;
9675       /* `(int) &fn' is not a valid array bound.  */
9676       if (name)
9677 	error ("size of array %qD is not an integral constant-expression",
9678 	       name);
9679       else
9680 	error ("size of array is not an integral constant-expression");
9681       size = integer_one_node;
9682     }
9683   else if (pedantic && warn_vla != 0)
9684     {
9685       if (name)
9686 	pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
9687       else
9688 	pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
9689     }
9690   else if (warn_vla > 0)
9691     {
9692       if (name)
9693 	warning (OPT_Wvla,
9694                  "variable length array %qD is used", name);
9695       else
9696 	warning (OPT_Wvla,
9697                  "variable length array is used");
9698     }
9699 
9700   if (processing_template_decl && !TREE_CONSTANT (size))
9701     /* A variable sized array.  */
9702     itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
9703   else
9704     {
9705       /* Compute the index of the largest element in the array.  It is
9706 	 one less than the number of elements in the array.  We save
9707 	 and restore PROCESSING_TEMPLATE_DECL so that computations in
9708 	 cp_build_binary_op will be appropriately folded.  */
9709       {
9710 	processing_template_decl_sentinel s;
9711 	itype = cp_build_binary_op (input_location,
9712 				    MINUS_EXPR,
9713 				    cp_convert (ssizetype, size, complain),
9714 				    cp_convert (ssizetype, integer_one_node,
9715 						complain),
9716 				    complain);
9717 	itype = maybe_constant_value (itype);
9718       }
9719 
9720       if (!TREE_CONSTANT (itype))
9721 	{
9722 	  /* A variable sized array.  */
9723 	  itype = variable_size (itype);
9724 
9725 	  stabilize_vla_size (itype);
9726 
9727 	  if (sanitize_flags_p (SANITIZE_VLA)
9728 	      && current_function_decl != NULL_TREE)
9729 	    {
9730 	      /* We have to add 1 -- in the ubsan routine we generate
9731 		 LE_EXPR rather than LT_EXPR.  */
9732 	      tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
9733 				    build_one_cst (TREE_TYPE (itype)));
9734 	      t = ubsan_instrument_vla (input_location, t);
9735 	      finish_expr_stmt (t);
9736 	    }
9737 	}
9738       /* Make sure that there was no overflow when creating to a signed
9739 	 index type.  (For example, on a 32-bit machine, an array with
9740 	 size 2^32 - 1 is too big.)  */
9741       else if (TREE_CODE (itype) == INTEGER_CST
9742 	       && TREE_OVERFLOW (itype))
9743 	{
9744 	  if (!(complain & tf_error))
9745 	    return error_mark_node;
9746 	  error ("overflow in array dimension");
9747 	  TREE_OVERFLOW (itype) = 0;
9748 	}
9749     }
9750 
9751   /* Create and return the appropriate index type.  */
9752   itype = build_index_type (itype);
9753 
9754   /* If the index type were dependent, we would have returned early, so
9755      remember that it isn't.  */
9756   TYPE_DEPENDENT_P (itype) = 0;
9757   TYPE_DEPENDENT_P_VALID (itype) = 1;
9758   return itype;
9759 }
9760 
9761 /* Returns the scope (if any) in which the entity declared by
9762    DECLARATOR will be located.  If the entity was declared with an
9763    unqualified name, NULL_TREE is returned.  */
9764 
9765 tree
9766 get_scope_of_declarator (const cp_declarator *declarator)
9767 {
9768   while (declarator && declarator->kind != cdk_id)
9769     declarator = declarator->declarator;
9770 
9771   /* If the declarator-id is a SCOPE_REF, the scope in which the
9772      declaration occurs is the first operand.  */
9773   if (declarator
9774       && declarator->u.id.qualifying_scope)
9775     return declarator->u.id.qualifying_scope;
9776 
9777   /* Otherwise, the declarator is not a qualified name; the entity will
9778      be declared in the current scope.  */
9779   return NULL_TREE;
9780 }
9781 
9782 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
9783    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
9784    with this type.  */
9785 
9786 static tree
9787 create_array_type_for_decl (tree name, tree type, tree size)
9788 {
9789   tree itype = NULL_TREE;
9790 
9791   /* If things have already gone awry, bail now.  */
9792   if (type == error_mark_node || size == error_mark_node)
9793     return error_mark_node;
9794 
9795   /* 8.3.4/1: If the type of the identifier of D contains the auto
9796      type-specifier, the program is ill-formed.  */
9797   if (type_uses_auto (type))
9798     {
9799       error ("%qD declared as array of %qT", name, type);
9800       return error_mark_node;
9801     }
9802 
9803   /* If there are some types which cannot be array elements,
9804      issue an error-message and return.  */
9805   switch (TREE_CODE (type))
9806     {
9807     case VOID_TYPE:
9808       if (name)
9809         error ("declaration of %qD as array of void", name);
9810       else
9811         error ("creating array of void");
9812       return error_mark_node;
9813 
9814     case FUNCTION_TYPE:
9815       if (name)
9816         error ("declaration of %qD as array of functions", name);
9817       else
9818         error ("creating array of functions");
9819       return error_mark_node;
9820 
9821     case REFERENCE_TYPE:
9822       if (name)
9823         error ("declaration of %qD as array of references", name);
9824       else
9825         error ("creating array of references");
9826       return error_mark_node;
9827 
9828     case METHOD_TYPE:
9829       if (name)
9830         error ("declaration of %qD as array of function members", name);
9831       else
9832         error ("creating array of function members");
9833       return error_mark_node;
9834 
9835     default:
9836       break;
9837     }
9838 
9839   /* [dcl.array]
9840 
9841      The constant expressions that specify the bounds of the arrays
9842      can be omitted only for the first member of the sequence.  */
9843   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9844     {
9845       if (name)
9846 	error ("declaration of %qD as multidimensional array must "
9847 	       "have bounds for all dimensions except the first",
9848 	       name);
9849       else
9850 	error ("multidimensional array must have bounds for all "
9851 	       "dimensions except the first");
9852 
9853       return error_mark_node;
9854     }
9855 
9856   /* Figure out the index type for the array.  */
9857   if (size)
9858     itype = compute_array_index_type (name, size, tf_warning_or_error);
9859 
9860   /* [dcl.array]
9861      T is called the array element type; this type shall not be [...] an
9862      abstract class type.  */
9863   abstract_virtuals_error (name, type);
9864 
9865   return build_cplus_array_type (type, itype);
9866 }
9867 
9868 /* Returns the smallest location != UNKNOWN_LOCATION among the
9869    three stored in LOCATIONS[ds_const], LOCATIONS[ds_volatile],
9870    and LOCATIONS[ds_restrict].  */
9871 
9872 static location_t
9873 smallest_type_quals_location (int type_quals, const location_t* locations)
9874 {
9875   location_t loc = UNKNOWN_LOCATION;
9876 
9877   if (type_quals & TYPE_QUAL_CONST)
9878     loc = locations[ds_const];
9879 
9880   if ((type_quals & TYPE_QUAL_VOLATILE)
9881       && (loc == UNKNOWN_LOCATION || locations[ds_volatile] < loc))
9882     loc = locations[ds_volatile];
9883 
9884   if ((type_quals & TYPE_QUAL_RESTRICT)
9885       && (loc == UNKNOWN_LOCATION || locations[ds_restrict] < loc))
9886     loc = locations[ds_restrict];
9887 
9888   return loc;
9889 }
9890 
9891 /* Check that it's OK to declare a function with the indicated TYPE
9892    and TYPE_QUALS.  SFK indicates the kind of special function (if any)
9893    that this function is.  OPTYPE is the type given in a conversion
9894    operator declaration, or the class type for a constructor/destructor.
9895    Returns the actual return type of the function; that may be different
9896    than TYPE if an error occurs, or for certain special functions.  */
9897 
9898 static tree
9899 check_special_function_return_type (special_function_kind sfk,
9900 				    tree type,
9901 				    tree optype,
9902 				    int type_quals,
9903 				    const location_t* locations)
9904 {
9905   switch (sfk)
9906     {
9907     case sfk_constructor:
9908       if (type)
9909 	error ("return type specification for constructor invalid");
9910       else if (type_quals != TYPE_UNQUALIFIED)
9911 	error_at (smallest_type_quals_location (type_quals, locations),
9912 		  "qualifiers are not allowed on constructor declaration");
9913 
9914       if (targetm.cxx.cdtor_returns_this ())
9915 	type = build_pointer_type (optype);
9916       else
9917 	type = void_type_node;
9918       break;
9919 
9920     case sfk_destructor:
9921       if (type)
9922 	error ("return type specification for destructor invalid");
9923       else if (type_quals != TYPE_UNQUALIFIED)
9924 	error_at (smallest_type_quals_location (type_quals, locations),
9925 		  "qualifiers are not allowed on destructor declaration");
9926 
9927       /* We can't use the proper return type here because we run into
9928 	 problems with ambiguous bases and covariant returns.  */
9929       if (targetm.cxx.cdtor_returns_this ())
9930 	type = build_pointer_type (void_type_node);
9931       else
9932 	type = void_type_node;
9933       break;
9934 
9935     case sfk_conversion:
9936       if (type)
9937 	error ("return type specified for %<operator %T%>", optype);
9938       else if (type_quals != TYPE_UNQUALIFIED)
9939 	error_at (smallest_type_quals_location (type_quals, locations),
9940 		  "qualifiers are not allowed on declaration of "
9941 		  "%<operator %T%>", optype);
9942 
9943       type = optype;
9944       break;
9945 
9946     case sfk_deduction_guide:
9947       if (type)
9948 	error ("return type specified for deduction guide");
9949       else if (type_quals != TYPE_UNQUALIFIED)
9950 	error_at (smallest_type_quals_location (type_quals, locations),
9951 		  "qualifiers are not allowed on declaration of "
9952 		  "deduction guide");
9953       if (TREE_CODE (optype) == TEMPLATE_TEMPLATE_PARM)
9954 	{
9955 	  error ("template template parameter %qT in declaration of "
9956 		 "deduction guide", optype);
9957 	  type = error_mark_node;
9958 	}
9959       else
9960 	type = make_template_placeholder (CLASSTYPE_TI_TEMPLATE (optype));
9961       for (int i = 0; i < ds_last; ++i)
9962 	if (i != ds_explicit && locations[i])
9963 	  error_at (locations[i],
9964 		    "decl-specifier in declaration of deduction guide");
9965       break;
9966 
9967     default:
9968       gcc_unreachable ();
9969     }
9970 
9971   return type;
9972 }
9973 
9974 /* A variable or data member (whose unqualified name is IDENTIFIER)
9975    has been declared with the indicated TYPE.  If the TYPE is not
9976    acceptable, issue an error message and return a type to use for
9977    error-recovery purposes.  */
9978 
9979 tree
9980 check_var_type (tree identifier, tree type)
9981 {
9982   if (VOID_TYPE_P (type))
9983     {
9984       if (!identifier)
9985 	error ("unnamed variable or field declared void");
9986       else if (identifier_p (identifier))
9987 	{
9988 	  gcc_assert (!IDENTIFIER_ANY_OP_P (identifier));
9989 	  error ("variable or field %qE declared void", identifier);
9990 	}
9991       else
9992 	error ("variable or field declared void");
9993       type = error_mark_node;
9994     }
9995 
9996   return type;
9997 }
9998 
9999 /* Handle declaring DECL as an inline variable.  */
10000 
10001 static void
10002 mark_inline_variable (tree decl)
10003 {
10004   bool inlinep = true;
10005   if (! toplevel_bindings_p ())
10006     {
10007       error ("%<inline%> specifier invalid for variable "
10008 	     "%qD declared at block scope", decl);
10009       inlinep = false;
10010     }
10011   else if (cxx_dialect < cxx17)
10012     pedwarn (DECL_SOURCE_LOCATION (decl), 0,
10013 	     "inline variables are only available "
10014 	     "with -std=c++17 or -std=gnu++17");
10015   if (inlinep)
10016     {
10017       retrofit_lang_decl (decl);
10018       SET_DECL_VAR_DECLARED_INLINE_P (decl);
10019     }
10020 }
10021 
10022 
10023 /* Assign a typedef-given name to a class or enumeration type declared
10024    as anonymous at first.  This was split out of grokdeclarator
10025    because it is also used in libcc1.  */
10026 
10027 void
10028 name_unnamed_type (tree type, tree decl)
10029 {
10030   gcc_assert (TYPE_UNNAMED_P (type));
10031 
10032   /* Replace the anonymous name with the real name everywhere.  */
10033   for (tree t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10034     {
10035       if (anon_aggrname_p (TYPE_IDENTIFIER (t)))
10036 	/* We do not rename the debug info representing the
10037 	   unnamed tagged type because the standard says in
10038 	   [dcl.typedef] that the naming applies only for
10039 	   linkage purposes.  */
10040 	/*debug_hooks->set_name (t, decl);*/
10041 	TYPE_NAME (t) = decl;
10042     }
10043 
10044   if (TYPE_LANG_SPECIFIC (type))
10045     TYPE_WAS_UNNAMED (type) = 1;
10046 
10047   /* If this is a typedef within a template class, the nested
10048      type is a (non-primary) template.  The name for the
10049      template needs updating as well.  */
10050   if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10051     DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10052       = TYPE_IDENTIFIER (type);
10053 
10054   /* Adjust linkage now that we aren't unnamed anymore.  */
10055   reset_type_linkage (type);
10056 
10057   /* FIXME remangle member functions; member functions of a
10058      type with external linkage have external linkage.  */
10059 
10060   /* Check that our job is done, and that it would fail if we
10061      attempted to do it again.  */
10062   gcc_assert (!TYPE_UNNAMED_P (type));
10063 }
10064 
10065 /* Given declspecs and a declarator (abstract or otherwise), determine
10066    the name and type of the object declared and construct a DECL node
10067    for it.
10068 
10069    DECLSPECS points to the representation of declaration-specifier
10070    sequence that precedes declarator.
10071 
10072    DECL_CONTEXT says which syntactic context this declaration is in:
10073      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
10074      FUNCDEF for a function definition.  Like NORMAL but a few different
10075       error messages in each case.  Return value may be zero meaning
10076       this definition is too screwy to try to parse.
10077      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
10078       handle member functions (which have FIELD context).
10079       Return value may be zero meaning this definition is too screwy to
10080       try to parse.
10081      PARM for a parameter declaration (either within a function prototype
10082       or before a function body).  Make a PARM_DECL, or return void_type_node.
10083      TPARM for a template parameter declaration.
10084      CATCHPARM for a parameter declaration before a catch clause.
10085      TYPENAME if for a typename (in a cast or sizeof).
10086       Don't make a DECL node; just return the ..._TYPE node.
10087      FIELD for a struct or union field; make a FIELD_DECL.
10088      BITFIELD for a field with specified width.
10089 
10090    INITIALIZED is as for start_decl.
10091 
10092    ATTRLIST is a pointer to the list of attributes, which may be NULL
10093    if there are none; *ATTRLIST may be modified if attributes from inside
10094    the declarator should be applied to the declaration.
10095 
10096    When this function is called, scoping variables (such as
10097    CURRENT_CLASS_TYPE) should reflect the scope in which the
10098    declaration occurs, not the scope in which the new declaration will
10099    be placed.  For example, on:
10100 
10101      void S::f() { ... }
10102 
10103    when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
10104    should not be `S'.
10105 
10106    Returns a DECL (if a declarator is present), a TYPE (if there is no
10107    declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
10108    error occurs. */
10109 
10110 tree
10111 grokdeclarator (const cp_declarator *declarator,
10112 		cp_decl_specifier_seq *declspecs,
10113 		enum decl_context decl_context,
10114 		int initialized,
10115 		tree* attrlist)
10116 {
10117   tree type = NULL_TREE;
10118   int longlong = 0;
10119   int explicit_intN = 0;
10120   int virtualp, explicitp, friendp, inlinep, staticp;
10121   int explicit_int = 0;
10122   int explicit_char = 0;
10123   int defaulted_int = 0;
10124 
10125   tree typedef_decl = NULL_TREE;
10126   const char *name = NULL;
10127   tree typedef_type = NULL_TREE;
10128   /* True if this declarator is a function definition.  */
10129   bool funcdef_flag = false;
10130   cp_declarator_kind innermost_code = cdk_error;
10131   int bitfield = 0;
10132 #if 0
10133   /* See the code below that used this.  */
10134   tree decl_attr = NULL_TREE;
10135 #endif
10136 
10137   /* Keep track of what sort of function is being processed
10138      so that we can warn about default return values, or explicit
10139      return values which do not match prescribed defaults.  */
10140   special_function_kind sfk = sfk_none;
10141 
10142   tree dname = NULL_TREE;
10143   tree ctor_return_type = NULL_TREE;
10144   enum overload_flags flags = NO_SPECIAL;
10145   /* cv-qualifiers that apply to the declarator, for a declaration of
10146      a member function.  */
10147   cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
10148   /* virt-specifiers that apply to the declarator, for a declaration of
10149      a member function.  */
10150   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
10151   /* ref-qualifier that applies to the declarator, for a declaration of
10152      a member function.  */
10153   cp_ref_qualifier rqual = REF_QUAL_NONE;
10154   /* cv-qualifiers that apply to the type specified by the DECLSPECS.  */
10155   int type_quals = TYPE_UNQUALIFIED;
10156   tree raises = NULL_TREE;
10157   int template_count = 0;
10158   tree returned_attrs = NULL_TREE;
10159   tree parms = NULL_TREE;
10160   const cp_declarator *id_declarator;
10161   /* The unqualified name of the declarator; either an
10162      IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
10163   tree unqualified_id;
10164   /* The class type, if any, in which this entity is located,
10165      or NULL_TREE if none.  Note that this value may be different from
10166      the current class type; for example if an attempt is made to declare
10167      "A::f" inside "B", this value will be "A".  */
10168   tree ctype = current_class_type;
10169   /* The NAMESPACE_DECL for the namespace in which this entity is
10170      located.  If an unqualified name is used to declare the entity,
10171      this value will be NULL_TREE, even if the entity is located at
10172      namespace scope.  */
10173   tree in_namespace = NULL_TREE;
10174   cp_storage_class storage_class;
10175   bool unsigned_p, signed_p, short_p, long_p, thread_p;
10176   bool type_was_error_mark_node = false;
10177   bool parameter_pack_p = declarator ? declarator->parameter_pack_p : false;
10178   bool template_type_arg = false;
10179   bool template_parm_flag = false;
10180   bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
10181   bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
10182   bool late_return_type_p = false;
10183   bool array_parameter_p = false;
10184   source_location saved_loc = input_location;
10185   tree reqs = NULL_TREE;
10186 
10187   signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
10188   unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
10189   short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
10190   long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
10191   longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
10192   explicit_intN = declspecs->explicit_intN_p;
10193   thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
10194 
10195   // Was concept_p specified? Note that ds_concept
10196   // implies ds_constexpr!
10197   bool concept_p = decl_spec_seq_has_spec_p (declspecs, ds_concept);
10198   if (concept_p)
10199     constexpr_p = true;
10200 
10201   if (decl_spec_seq_has_spec_p (declspecs, ds_const))
10202     type_quals |= TYPE_QUAL_CONST;
10203   if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
10204     type_quals |= TYPE_QUAL_VOLATILE;
10205   if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
10206     type_quals |= TYPE_QUAL_RESTRICT;
10207 
10208   if (decl_context == FUNCDEF)
10209     funcdef_flag = true, decl_context = NORMAL;
10210   else if (decl_context == MEMFUNCDEF)
10211     funcdef_flag = true, decl_context = FIELD;
10212   else if (decl_context == BITFIELD)
10213     bitfield = 1, decl_context = FIELD;
10214   else if (decl_context == TEMPLATE_TYPE_ARG)
10215     template_type_arg = true, decl_context = TYPENAME;
10216   else if (decl_context == TPARM)
10217     template_parm_flag = true, decl_context = PARM;
10218 
10219   if (initialized > 1)
10220     funcdef_flag = true;
10221 
10222   location_t typespec_loc = smallest_type_quals_location (type_quals,
10223 						      declspecs->locations);
10224   if (typespec_loc == UNKNOWN_LOCATION)
10225     typespec_loc = declspecs->locations[ds_type_spec];
10226   if (typespec_loc == UNKNOWN_LOCATION)
10227     typespec_loc = input_location;
10228 
10229   /* Look inside a declarator for the name being declared
10230      and get it as a string, for an error message.  */
10231   for (id_declarator = declarator;
10232        id_declarator;
10233        id_declarator = id_declarator->declarator)
10234     {
10235       if (id_declarator->kind != cdk_id)
10236 	innermost_code = id_declarator->kind;
10237 
10238       switch (id_declarator->kind)
10239 	{
10240 	case cdk_function:
10241 	  if (id_declarator->declarator
10242 	      && id_declarator->declarator->kind == cdk_id)
10243 	    {
10244 	      sfk = id_declarator->declarator->u.id.sfk;
10245 	      if (sfk == sfk_destructor)
10246 		flags = DTOR_FLAG;
10247 	    }
10248 	  break;
10249 
10250 	case cdk_id:
10251 	  {
10252 	    tree qualifying_scope = id_declarator->u.id.qualifying_scope;
10253 	    tree decl = id_declarator->u.id.unqualified_name;
10254 	    if (!decl)
10255 	      break;
10256 	    if (qualifying_scope)
10257 	      {
10258 		if (at_function_scope_p ())
10259 		  {
10260 		    /* [dcl.meaning]
10261 
10262 		       A declarator-id shall not be qualified except
10263 		       for ...
10264 
10265 		       None of the cases are permitted in block
10266 		       scope.  */
10267 		    if (qualifying_scope == global_namespace)
10268 		      error ("invalid use of qualified-name %<::%D%>",
10269 			     decl);
10270 		    else if (TYPE_P (qualifying_scope))
10271 		      error ("invalid use of qualified-name %<%T::%D%>",
10272 			     qualifying_scope, decl);
10273 		    else
10274 		      error ("invalid use of qualified-name %<%D::%D%>",
10275 			     qualifying_scope, decl);
10276 		    return error_mark_node;
10277 		  }
10278 		else if (TYPE_P (qualifying_scope))
10279 		  {
10280 		    ctype = qualifying_scope;
10281 		    if (!MAYBE_CLASS_TYPE_P (ctype))
10282 		      {
10283 			error ("%q#T is not a class or a namespace", ctype);
10284 			ctype = NULL_TREE;
10285 		      }
10286 		    else if (innermost_code != cdk_function
10287 			     && current_class_type
10288 			     && !uniquely_derived_from_p (ctype,
10289 							  current_class_type))
10290 		      {
10291 			error ("invalid use of qualified-name %<%T::%D%>",
10292 			       qualifying_scope, decl);
10293 			return error_mark_node;
10294 		      }
10295 		  }
10296 		else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
10297 		  in_namespace = qualifying_scope;
10298 	      }
10299 	    switch (TREE_CODE (decl))
10300 	      {
10301 	      case BIT_NOT_EXPR:
10302 		{
10303 		  if (innermost_code != cdk_function)
10304 		    {
10305 		      error ("declaration of %qD as non-function", decl);
10306 		      return error_mark_node;
10307 		    }
10308 		  else if (!qualifying_scope
10309 			   && !(current_class_type && at_class_scope_p ()))
10310 		    {
10311 		      error ("declaration of %qD as non-member", decl);
10312 		      return error_mark_node;
10313 		    }
10314 
10315 		  tree type = TREE_OPERAND (decl, 0);
10316 		  if (TYPE_P (type))
10317 		    type = constructor_name (type);
10318 		  name = identifier_to_locale (IDENTIFIER_POINTER (type));
10319 		  dname = decl;
10320 		}
10321 		break;
10322 
10323 	      case TEMPLATE_ID_EXPR:
10324 		{
10325 		  tree fns = TREE_OPERAND (decl, 0);
10326 
10327 		  dname = fns;
10328 		  if (!identifier_p (dname))
10329 		    dname = OVL_NAME (dname);
10330 		}
10331 		/* Fall through.  */
10332 
10333 	      case IDENTIFIER_NODE:
10334 		if (identifier_p (decl))
10335 		  dname = decl;
10336 
10337 		if (IDENTIFIER_KEYWORD_P (dname))
10338 		  {
10339 		    error ("declarator-id missing; using reserved word %qD",
10340 			   dname);
10341 		    name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10342 		  }
10343 		else if (!IDENTIFIER_CONV_OP_P (dname))
10344 		  name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10345 		else
10346 		  {
10347 		    gcc_assert (flags == NO_SPECIAL);
10348 		    flags = TYPENAME_FLAG;
10349 		    sfk = sfk_conversion;
10350 		    tree glob = get_global_binding (dname);
10351 		    if (glob && TREE_CODE (glob) == TYPE_DECL)
10352 		      name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10353 		    else
10354 		      name = "<invalid operator>";
10355 		  }
10356 		break;
10357 
10358 	      default:
10359 		gcc_unreachable ();
10360 	      }
10361 	    break;
10362 	  }
10363 
10364 	case cdk_array:
10365 	case cdk_pointer:
10366 	case cdk_reference:
10367 	case cdk_ptrmem:
10368 	  break;
10369 
10370 	case cdk_decomp:
10371 	  name = "structured binding";
10372 	  break;
10373 
10374 	case cdk_error:
10375 	  return error_mark_node;
10376 
10377 	default:
10378 	  gcc_unreachable ();
10379 	}
10380       if (id_declarator->kind == cdk_id)
10381 	break;
10382     }
10383 
10384   /* [dcl.fct.edf]
10385 
10386      The declarator in a function-definition shall have the form
10387      D1 ( parameter-declaration-clause) ...  */
10388   if (funcdef_flag && innermost_code != cdk_function)
10389     {
10390       error ("function definition does not declare parameters");
10391       return error_mark_node;
10392     }
10393 
10394   if (flags == TYPENAME_FLAG
10395       && innermost_code != cdk_function
10396       && ! (ctype && !declspecs->any_specifiers_p))
10397     {
10398       error ("declaration of %qD as non-function", dname);
10399       return error_mark_node;
10400     }
10401 
10402   if (dname && identifier_p (dname))
10403     {
10404       if (UDLIT_OPER_P (dname)
10405 	  && innermost_code != cdk_function)
10406 	{
10407 	  error ("declaration of %qD as non-function", dname);
10408 	  return error_mark_node;
10409 	}
10410 
10411       if (IDENTIFIER_ANY_OP_P (dname))
10412 	{
10413 	  if (typedef_p)
10414 	    {
10415 	      error ("declaration of %qD as %<typedef%>", dname);
10416 	      return error_mark_node;
10417 	    }
10418 	  else if (decl_context == PARM || decl_context == CATCHPARM)
10419 	    {
10420 	      error ("declaration of %qD as parameter", dname);
10421 	      return error_mark_node;
10422 	    }
10423 	}
10424     }
10425 
10426   /* Anything declared one level down from the top level
10427      must be one of the parameters of a function
10428      (because the body is at least two levels down).  */
10429 
10430   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
10431      by not allowing C++ class definitions to specify their parameters
10432      with xdecls (must be spec.d in the parmlist).
10433 
10434      Since we now wait to push a class scope until we are sure that
10435      we are in a legitimate method context, we must set oldcname
10436      explicitly (since current_class_name is not yet alive).
10437 
10438      We also want to avoid calling this a PARM if it is in a namespace.  */
10439 
10440   if (decl_context == NORMAL && !toplevel_bindings_p ())
10441     {
10442       cp_binding_level *b = current_binding_level;
10443       current_binding_level = b->level_chain;
10444       if (current_binding_level != 0 && toplevel_bindings_p ())
10445 	decl_context = PARM;
10446       current_binding_level = b;
10447     }
10448 
10449   if (name == NULL)
10450     name = decl_context == PARM ? "parameter" : "type name";
10451 
10452   if (concept_p && typedef_p)
10453     {
10454       error ("%<concept%> cannot appear in a typedef declaration");
10455       return error_mark_node;
10456     }
10457 
10458   if (constexpr_p && typedef_p)
10459     {
10460       error ("%<constexpr%> cannot appear in a typedef declaration");
10461       return error_mark_node;
10462     }
10463 
10464   /* If there were multiple types specified in the decl-specifier-seq,
10465      issue an error message.  */
10466   if (declspecs->multiple_types_p)
10467     {
10468       error ("two or more data types in declaration of %qs", name);
10469       return error_mark_node;
10470     }
10471 
10472   if (declspecs->conflicting_specifiers_p)
10473     {
10474       error ("conflicting specifiers in declaration of %qs", name);
10475       return error_mark_node;
10476     }
10477 
10478   /* Extract the basic type from the decl-specifier-seq.  */
10479   type = declspecs->type;
10480   if (type == error_mark_node)
10481     {
10482       type = NULL_TREE;
10483       type_was_error_mark_node = true;
10484     }
10485   /* If the entire declaration is itself tagged as deprecated then
10486      suppress reports of deprecated items.  */
10487   if (type && TREE_DEPRECATED (type)
10488       && deprecated_state != DEPRECATED_SUPPRESS)
10489     cp_warn_deprecated_use (type);
10490   if (type && TREE_CODE (type) == TYPE_DECL)
10491     {
10492       typedef_decl = type;
10493       type = TREE_TYPE (typedef_decl);
10494       if (TREE_DEPRECATED (type)
10495 	  && DECL_ARTIFICIAL (typedef_decl)
10496 	  && deprecated_state != DEPRECATED_SUPPRESS)
10497 	cp_warn_deprecated_use (type);
10498     }
10499   /* No type at all: default to `int', and set DEFAULTED_INT
10500      because it was not a user-defined typedef.  */
10501   if (type == NULL_TREE)
10502     {
10503       if (signed_p || unsigned_p || long_p || short_p)
10504 	{
10505 	  /* These imply 'int'.  */
10506 	  type = integer_type_node;
10507 	  defaulted_int = 1;
10508 	}
10509       /* If we just have "complex", it is equivalent to "complex double".  */
10510       else if (!longlong && !explicit_intN
10511 	       && decl_spec_seq_has_spec_p (declspecs, ds_complex))
10512 	{
10513 	  type = double_type_node;
10514 	  pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
10515 		   "ISO C++ does not support plain %<complex%> meaning "
10516 		   "%<double complex%>");
10517 	}
10518     }
10519   /* Gather flags.  */
10520   explicit_int = declspecs->explicit_int_p;
10521   explicit_char = declspecs->explicit_char_p;
10522 
10523 #if 0
10524   /* See the code below that used this.  */
10525   if (typedef_decl)
10526     decl_attr = DECL_ATTRIBUTES (typedef_decl);
10527 #endif
10528   typedef_type = type;
10529 
10530   if (sfk == sfk_conversion || sfk == sfk_deduction_guide)
10531     ctor_return_type = TREE_TYPE (dname);
10532   else
10533     ctor_return_type = ctype;
10534 
10535   if (sfk != sfk_none)
10536     {
10537       type = check_special_function_return_type (sfk, type,
10538 						 ctor_return_type,
10539 						 type_quals,
10540 						 declspecs->locations);
10541       type_quals = TYPE_UNQUALIFIED;
10542     }
10543   else if (type == NULL_TREE)
10544     {
10545       int is_main;
10546 
10547       explicit_int = -1;
10548 
10549       /* We handle `main' specially here, because 'main () { }' is so
10550 	 common.  With no options, it is allowed.  With -Wreturn-type,
10551 	 it is a warning.  It is only an error with -pedantic-errors.  */
10552       is_main = (funcdef_flag
10553 		 && dname && identifier_p (dname)
10554 		 && MAIN_NAME_P (dname)
10555 		 && ctype == NULL_TREE
10556 		 && in_namespace == NULL_TREE
10557 		 && current_namespace == global_namespace);
10558 
10559       if (type_was_error_mark_node)
10560 	/* We've already issued an error, don't complain more.  */;
10561       else if (in_system_header_at (input_location) || flag_ms_extensions)
10562 	/* Allow it, sigh.  */;
10563       else if (! is_main)
10564 	permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
10565       else if (pedantic)
10566 	pedwarn (input_location, OPT_Wpedantic,
10567 		 "ISO C++ forbids declaration of %qs with no type", name);
10568       else
10569 	warning (OPT_Wreturn_type,
10570                  "ISO C++ forbids declaration of %qs with no type", name);
10571 
10572       if (type_was_error_mark_node && template_parm_flag)
10573 	/* FIXME we should be able to propagate the error_mark_node as is
10574 	   for other contexts too.  */
10575 	type = error_mark_node;
10576       else
10577 	type = integer_type_node;
10578     }
10579 
10580   ctype = NULL_TREE;
10581 
10582   if (explicit_intN)
10583     {
10584       if (! int_n_enabled_p[declspecs->int_n_idx])
10585 	{
10586 	  error ("%<__int%d%> is not supported by this target",
10587 		 int_n_data[declspecs->int_n_idx].bitsize);
10588 	  explicit_intN = false;
10589 	}
10590       else if (pedantic && ! in_system_header_at (input_location))
10591 	pedwarn (input_location, OPT_Wpedantic,
10592 		 "ISO C++ does not support %<__int%d%> for %qs",
10593 		 int_n_data[declspecs->int_n_idx].bitsize, name);
10594     }
10595 
10596   /* Now process the modifiers that were specified
10597      and check for invalid combinations.  */
10598 
10599   /* Long double is a special combination.  */
10600   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
10601     {
10602       long_p = false;
10603       type = cp_build_qualified_type (long_double_type_node,
10604 				      cp_type_quals (type));
10605     }
10606 
10607   /* Check all other uses of type modifiers.  */
10608 
10609   if (unsigned_p || signed_p || long_p || short_p)
10610     {
10611       int ok = 0;
10612 
10613       if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
10614 	error ("%<signed%> or %<unsigned%> invalid for %qs", name);
10615       else if (signed_p && unsigned_p)
10616 	error ("%<signed%> and %<unsigned%> specified together for %qs", name);
10617       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
10618 	error ("%<long long%> invalid for %qs", name);
10619       else if (long_p && TREE_CODE (type) == REAL_TYPE)
10620 	error ("%<long%> invalid for %qs", name);
10621       else if (short_p && TREE_CODE (type) == REAL_TYPE)
10622 	error ("%<short%> invalid for %qs", name);
10623       else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
10624 	error ("%<long%> or %<short%> invalid for %qs", name);
10625       else if ((long_p || short_p || explicit_char || explicit_int) && explicit_intN)
10626 	error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
10627       else if ((long_p || short_p) && explicit_char)
10628 	error ("%<long%> or %<short%> specified with char for %qs", name);
10629       else if (long_p && short_p)
10630 	error ("%<long%> and %<short%> specified together for %qs", name);
10631       else if (type == char16_type_node || type == char32_type_node)
10632 	{
10633 	  if (signed_p || unsigned_p)
10634 	    error ("%<signed%> or %<unsigned%> invalid for %qs", name);
10635 	  else if (short_p || long_p)
10636 	    error ("%<short%> or %<long%> invalid for %qs", name);
10637 	}
10638       else
10639 	{
10640 	  ok = 1;
10641 	  if (!explicit_int && !defaulted_int && !explicit_char && !explicit_intN && pedantic)
10642 	    {
10643 	      pedwarn (input_location, OPT_Wpedantic,
10644 		       "long, short, signed or unsigned used invalidly for %qs",
10645 		       name);
10646 	      if (flag_pedantic_errors)
10647 		ok = 0;
10648 	    }
10649 	}
10650 
10651       /* Discard the type modifiers if they are invalid.  */
10652       if (! ok)
10653 	{
10654 	  unsigned_p = false;
10655 	  signed_p = false;
10656 	  long_p = false;
10657 	  short_p = false;
10658 	  longlong = 0;
10659 	}
10660     }
10661 
10662   /* Decide whether an integer type is signed or not.
10663      Optionally treat bitfields as signed by default.  */
10664   if (unsigned_p
10665       /* [class.bit]
10666 
10667 	 It is implementation-defined whether a plain (neither
10668 	 explicitly signed or unsigned) char, short, int, or long
10669 	 bit-field is signed or unsigned.
10670 
10671 	 Naturally, we extend this to long long as well.  Note that
10672 	 this does not include wchar_t.  */
10673       || (bitfield && !flag_signed_bitfields
10674 	  && !signed_p
10675 	  /* A typedef for plain `int' without `signed' can be
10676 	     controlled just like plain `int', but a typedef for
10677 	     `signed int' cannot be so controlled.  */
10678 	  && !(typedef_decl
10679 	       && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
10680 	  && TREE_CODE (type) == INTEGER_TYPE
10681 	  && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
10682     {
10683       if (explicit_intN)
10684 	type = int_n_trees[declspecs->int_n_idx].unsigned_type;
10685       else if (longlong)
10686 	type = long_long_unsigned_type_node;
10687       else if (long_p)
10688 	type = long_unsigned_type_node;
10689       else if (short_p)
10690 	type = short_unsigned_type_node;
10691       else if (type == char_type_node)
10692 	type = unsigned_char_type_node;
10693       else if (typedef_decl)
10694 	type = unsigned_type_for (type);
10695       else
10696 	type = unsigned_type_node;
10697     }
10698   else if (signed_p && type == char_type_node)
10699     type = signed_char_type_node;
10700   else if (explicit_intN)
10701     type = int_n_trees[declspecs->int_n_idx].signed_type;
10702   else if (longlong)
10703     type = long_long_integer_type_node;
10704   else if (long_p)
10705     type = long_integer_type_node;
10706   else if (short_p)
10707     type = short_integer_type_node;
10708 
10709   if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
10710     {
10711       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10712 	error ("complex invalid for %qs", name);
10713       /* If a modifier is specified, the resulting complex is the complex
10714 	 form of TYPE.  E.g, "complex short" is "complex short int".  */
10715       else if (type == integer_type_node)
10716 	type = complex_integer_type_node;
10717       else if (type == float_type_node)
10718 	type = complex_float_type_node;
10719       else if (type == double_type_node)
10720 	type = complex_double_type_node;
10721       else if (type == long_double_type_node)
10722 	type = complex_long_double_type_node;
10723       else
10724 	type = build_complex_type (type);
10725     }
10726 
10727   /* If we're using the injected-class-name to form a compound type or a
10728      declaration, replace it with the underlying class so we don't get
10729      redundant typedefs in the debug output.  But if we are returning the
10730      type unchanged, leave it alone so that it's available to
10731      maybe_get_template_decl_from_type_decl.  */
10732   if (CLASS_TYPE_P (type)
10733       && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
10734       && type == TREE_TYPE (TYPE_NAME (type))
10735       && (declarator || type_quals))
10736     type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
10737 
10738   type_quals |= cp_type_quals (type);
10739   type = cp_build_qualified_type_real
10740     (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
10741 			  || declspecs->decltype_p)
10742 			 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
10743   /* We might have ignored or rejected some of the qualifiers.  */
10744   type_quals = cp_type_quals (type);
10745 
10746   if (cxx_dialect >= cxx17 && type && is_auto (type)
10747       && innermost_code != cdk_function
10748       && id_declarator && declarator != id_declarator)
10749     if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (type))
10750     {
10751       error_at (typespec_loc, "template placeholder type %qT must be followed "
10752 		"by a simple declarator-id", type);
10753       inform (DECL_SOURCE_LOCATION (tmpl), "%qD declared here", tmpl);
10754     }
10755 
10756   staticp = 0;
10757   inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
10758   virtualp =  decl_spec_seq_has_spec_p (declspecs, ds_virtual);
10759   explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
10760 
10761   storage_class = declspecs->storage_class;
10762   if (storage_class == sc_static)
10763     staticp = 1 + (decl_context == FIELD);
10764 
10765   if (virtualp)
10766     {
10767       if (staticp == 2)
10768 	{
10769 	  error ("member %qD cannot be declared both %<virtual%> "
10770 		 "and %<static%>", dname);
10771 	  storage_class = sc_none;
10772 	  staticp = 0;
10773 	}
10774       if (constexpr_p)
10775 	error ("member %qD cannot be declared both %<virtual%> "
10776 	       "and %<constexpr%>", dname);
10777     }
10778   friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
10779 
10780   /* Issue errors about use of storage classes for parameters.  */
10781   if (decl_context == PARM)
10782     {
10783       if (typedef_p)
10784 	{
10785 	  error ("typedef declaration invalid in parameter declaration");
10786 	  return error_mark_node;
10787 	}
10788       else if (template_parm_flag && storage_class != sc_none)
10789 	{
10790 	  error ("storage class specified for template parameter %qs", name);
10791 	  return error_mark_node;
10792 	}
10793       else if (storage_class == sc_static
10794 	       || storage_class == sc_extern
10795 	       || thread_p)
10796 	error ("storage class specifiers invalid in parameter declarations");
10797 
10798       /* Function parameters cannot be concept. */
10799       if (concept_p)
10800           error ("a parameter cannot be declared %<concept%>");
10801       /* Function parameters cannot be constexpr.  If we saw one, moan
10802          and pretend it wasn't there.  */
10803       else if (constexpr_p)
10804         {
10805           error ("a parameter cannot be declared %<constexpr%>");
10806           constexpr_p = 0;
10807         }
10808     }
10809 
10810   /* Give error if `virtual' is used outside of class declaration.  */
10811   if (virtualp
10812       && (current_class_name == NULL_TREE || decl_context != FIELD))
10813     {
10814       error_at (declspecs->locations[ds_virtual],
10815 		"%<virtual%> outside class declaration");
10816       virtualp = 0;
10817     }
10818 
10819   if (innermost_code == cdk_decomp)
10820     {
10821       location_t loc = (declarator->kind == cdk_reference
10822 			? declarator->declarator->id_loc : declarator->id_loc);
10823       if (inlinep)
10824 	error_at (declspecs->locations[ds_inline],
10825 		  "structured binding declaration cannot be %<inline%>");
10826       if (typedef_p)
10827 	error_at (declspecs->locations[ds_typedef],
10828 		  "structured binding declaration cannot be %<typedef%>");
10829       if (constexpr_p)
10830 	error_at (declspecs->locations[ds_constexpr], "structured "
10831 		  "binding declaration cannot be %<constexpr%>");
10832       if (thread_p)
10833 	error_at (declspecs->locations[ds_thread],
10834 		  "structured binding declaration cannot be %qs",
10835 		  declspecs->gnu_thread_keyword_p
10836 		  ? "__thread" : "thread_local");
10837       if (concept_p)
10838 	error_at (declspecs->locations[ds_concept],
10839 		  "structured binding declaration cannot be %<concept%>");
10840       switch (storage_class)
10841 	{
10842 	case sc_none:
10843 	  break;
10844 	case sc_register:
10845 	  error_at (loc, "structured binding declaration cannot be "
10846 		    "%<register%>");
10847 	  break;
10848 	case sc_static:
10849 	  error_at (loc, "structured binding declaration cannot be "
10850 		    "%<static%>");
10851 	  break;
10852 	case sc_extern:
10853 	  error_at (loc, "structured binding declaration cannot be "
10854 		    "%<extern%>");
10855 	  break;
10856 	case sc_mutable:
10857 	  error_at (loc, "structured binding declaration cannot be "
10858 		    "%<mutable%>");
10859 	  break;
10860 	case sc_auto:
10861 	  error_at (loc, "structured binding declaration cannot be "
10862 		    "C++98 %<auto%>");
10863 	  break;
10864 	default:
10865 	  gcc_unreachable ();
10866 	}
10867       if (TREE_CODE (type) != TEMPLATE_TYPE_PARM
10868 	  || TYPE_IDENTIFIER (type) != auto_identifier)
10869 	{
10870 	  if (type != error_mark_node)
10871 	    {
10872 	      error_at (loc, "structured binding declaration cannot have "
10873 			"type %qT", type);
10874 	      inform (loc,
10875 		      "type must be cv-qualified %<auto%> or reference to "
10876 		      "cv-qualified %<auto%>");
10877 	    }
10878 	  type = build_qualified_type (make_auto (), type_quals);
10879 	  declspecs->type = type;
10880 	}
10881       inlinep = 0;
10882       typedef_p = 0;
10883       constexpr_p = 0;
10884       thread_p = 0;
10885       concept_p = 0;
10886       storage_class = sc_none;
10887       staticp = 0;
10888       declspecs->storage_class = sc_none;
10889       declspecs->locations[ds_thread] = UNKNOWN_LOCATION;
10890     }
10891 
10892   /* Static anonymous unions are dealt with here.  */
10893   if (staticp && decl_context == TYPENAME
10894       && declspecs->type
10895       && ANON_AGGR_TYPE_P (declspecs->type))
10896     decl_context = FIELD;
10897 
10898   /* Warn about storage classes that are invalid for certain
10899      kinds of declarations (parameters, typenames, etc.).  */
10900   if (thread_p
10901       && ((storage_class
10902 	   && storage_class != sc_extern
10903 	   && storage_class != sc_static)
10904 	  || typedef_p))
10905     {
10906       error ("multiple storage classes in declaration of %qs", name);
10907       thread_p = false;
10908     }
10909   if (decl_context != NORMAL
10910       && ((storage_class != sc_none
10911 	   && storage_class != sc_mutable)
10912 	  || thread_p))
10913     {
10914       if ((decl_context == PARM || decl_context == CATCHPARM)
10915 	  && (storage_class == sc_register
10916 	      || storage_class == sc_auto))
10917 	;
10918       else if (typedef_p)
10919 	;
10920       else if (decl_context == FIELD
10921 	       /* C++ allows static class elements.  */
10922 	       && storage_class == sc_static)
10923 	/* C++ also allows inlines and signed and unsigned elements,
10924 	   but in those cases we don't come in here.  */
10925 	;
10926       else
10927 	{
10928 	  if (decl_context == FIELD)
10929 	    error ("storage class specified for %qs", name);
10930 	  else
10931 	    {
10932 	      if (decl_context == PARM || decl_context == CATCHPARM)
10933 		error ("storage class specified for parameter %qs", name);
10934 	      else
10935 		error ("storage class specified for typename");
10936 	    }
10937 	  if (storage_class == sc_register
10938 	      || storage_class == sc_auto
10939 	      || storage_class == sc_extern
10940 	      || thread_p)
10941 	    storage_class = sc_none;
10942 	}
10943     }
10944   else if (storage_class == sc_extern && funcdef_flag
10945 	   && ! toplevel_bindings_p ())
10946     error ("nested function %qs declared %<extern%>", name);
10947   else if (toplevel_bindings_p ())
10948     {
10949       if (storage_class == sc_auto)
10950 	error ("top-level declaration of %qs specifies %<auto%>", name);
10951     }
10952   else if (thread_p
10953 	   && storage_class != sc_extern
10954 	   && storage_class != sc_static)
10955     {
10956       if (declspecs->gnu_thread_keyword_p)
10957 	pedwarn (input_location, 0, "function-scope %qs implicitly auto and "
10958 		 "declared %<__thread%>", name);
10959 
10960       /* When thread_local is applied to a variable of block scope the
10961 	 storage-class-specifier static is implied if it does not appear
10962 	 explicitly.  */
10963       storage_class = declspecs->storage_class = sc_static;
10964       staticp = 1;
10965     }
10966 
10967   if (storage_class && friendp)
10968     {
10969       error ("storage class specifiers invalid in friend function declarations");
10970       storage_class = sc_none;
10971       staticp = 0;
10972     }
10973 
10974   if (!id_declarator)
10975     unqualified_id = NULL_TREE;
10976   else
10977     {
10978       unqualified_id = id_declarator->u.id.unqualified_name;
10979       switch (TREE_CODE (unqualified_id))
10980 	{
10981 	case BIT_NOT_EXPR:
10982 	  unqualified_id = TREE_OPERAND (unqualified_id, 0);
10983 	  if (TYPE_P (unqualified_id))
10984 	    unqualified_id = constructor_name (unqualified_id);
10985 	  break;
10986 
10987 	case IDENTIFIER_NODE:
10988 	case TEMPLATE_ID_EXPR:
10989 	  break;
10990 
10991 	default:
10992 	  gcc_unreachable ();
10993 	}
10994     }
10995 
10996   if (declspecs->std_attributes)
10997     {
10998       location_t attr_loc = declspecs->locations[ds_std_attribute];
10999       if (warning_at (attr_loc, OPT_Wattributes, "attribute ignored"))
11000 	inform (attr_loc, "an attribute that appertains to a type-specifier "
11001 		"is ignored");
11002     }
11003 
11004   /* Determine the type of the entity declared by recurring on the
11005      declarator.  */
11006   for (; declarator; declarator = declarator->declarator)
11007     {
11008       const cp_declarator *inner_declarator;
11009       tree attrs;
11010 
11011       if (type == error_mark_node)
11012 	return error_mark_node;
11013 
11014       attrs = declarator->attributes;
11015       if (attrs)
11016 	{
11017 	  int attr_flags;
11018 
11019 	  attr_flags = 0;
11020 	  if (declarator == NULL || declarator->kind == cdk_id)
11021 	    attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
11022 	  if (declarator->kind == cdk_function)
11023 	    attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
11024 	  if (declarator->kind == cdk_array)
11025 	    attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
11026 	  returned_attrs = decl_attributes (&type,
11027 					    chainon (returned_attrs, attrs),
11028 					    attr_flags);
11029 	}
11030 
11031       inner_declarator = declarator->declarator;
11032 
11033       /* We don't want to warn in parameter context because we don't
11034 	 yet know if the parse will succeed, and this might turn out
11035 	 to be a constructor call.  */
11036       if (decl_context != PARM
11037 	  && decl_context != TYPENAME
11038 	  && !typedef_p
11039 	  && declarator->parenthesized != UNKNOWN_LOCATION
11040 	  /* If the type is class-like and the inner name used a
11041 	     global namespace qualifier, we need the parens.
11042 	     Unfortunately all we can tell is whether a qualified name
11043 	     was used or not.  */
11044 	  && !(inner_declarator
11045 	       && inner_declarator->kind == cdk_id
11046 	       && inner_declarator->u.id.qualifying_scope
11047 	       && (MAYBE_CLASS_TYPE_P (type)
11048 		   || TREE_CODE (type) == ENUMERAL_TYPE)))
11049 	warning_at (declarator->parenthesized, OPT_Wparentheses,
11050 		    "unnecessary parentheses in declaration of %qs", name);
11051       if (declarator->kind == cdk_id || declarator->kind == cdk_decomp)
11052 	break;
11053 
11054       switch (declarator->kind)
11055 	{
11056 	case cdk_array:
11057 	  type = create_array_type_for_decl (dname, type,
11058 					     declarator->u.array.bounds);
11059 	  if (!valid_array_size_p (input_location, type, dname))
11060 	    type = error_mark_node;
11061 
11062 	  if (declarator->std_attributes)
11063 	    /* [dcl.array]/1:
11064 
11065 	       The optional attribute-specifier-seq appertains to the
11066 	       array.  */
11067 	    returned_attrs = chainon (returned_attrs,
11068 				      declarator->std_attributes);
11069 	  break;
11070 
11071 	case cdk_function:
11072 	  {
11073 	    tree arg_types;
11074 	    int funcdecl_p;
11075 
11076 	    /* Declaring a function type.  */
11077 
11078 	    input_location = declspecs->locations[ds_type_spec];
11079 	    abstract_virtuals_error (ACU_RETURN, type);
11080 	    input_location = saved_loc;
11081 
11082 	    /* Pick up type qualifiers which should be applied to `this'.  */
11083 	    memfn_quals = declarator->u.function.qualifiers;
11084 	    /* Pick up virt-specifiers.  */
11085             virt_specifiers = declarator->u.function.virt_specifiers;
11086 	    /* And ref-qualifier, too */
11087 	    rqual = declarator->u.function.ref_qualifier;
11088 	    /* And tx-qualifier.  */
11089 	    tree tx_qual = declarator->u.function.tx_qualifier;
11090 	    /* Pick up the exception specifications.  */
11091 	    raises = declarator->u.function.exception_specification;
11092 	    /* If the exception-specification is ill-formed, let's pretend
11093 	       there wasn't one.  */
11094 	    if (raises == error_mark_node)
11095 	      raises = NULL_TREE;
11096 
11097 	    if (reqs)
11098 	      error_at (location_of (reqs), "requires-clause on return type");
11099 	    reqs = declarator->u.function.requires_clause;
11100 
11101 	    /* Say it's a definition only for the CALL_EXPR
11102 	       closest to the identifier.  */
11103 	    funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
11104 
11105 	    /* Handle a late-specified return type.  */
11106 	    tree late_return_type = declarator->u.function.late_return_type;
11107 	    if (funcdecl_p)
11108 	      {
11109 		if (tree auto_node = type_uses_auto (type))
11110 		  {
11111 		    if (!late_return_type)
11112 		      {
11113 			if (current_class_type
11114 			    && LAMBDA_TYPE_P (current_class_type))
11115 			  /* OK for C++11 lambdas.  */;
11116 			else if (cxx_dialect < cxx14)
11117 			  {
11118 			    error ("%qs function uses "
11119 				   "%<auto%> type specifier without trailing "
11120 				   "return type", name);
11121 			    inform (input_location, "deduced return type "
11122 				    "only available with -std=c++14 or "
11123 				    "-std=gnu++14");
11124 			  }
11125 			else if (virtualp)
11126 			  {
11127 			    error ("virtual function cannot "
11128 				   "have deduced return type");
11129 			    virtualp = false;
11130 			  }
11131 		      }
11132 		    else if (!is_auto (type) && sfk != sfk_conversion)
11133 		      {
11134 			error ("%qs function with trailing return type has"
11135 			       " %qT as its type rather than plain %<auto%>",
11136 			       name, type);
11137 			return error_mark_node;
11138 		      }
11139 		    tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node);
11140 		    if (!tmpl)
11141 		      if (tree late_auto = type_uses_auto (late_return_type))
11142 			tmpl = CLASS_PLACEHOLDER_TEMPLATE (late_auto);
11143 		    if (tmpl)
11144 		      {
11145 			if (!dguide_name_p (unqualified_id))
11146 			  {
11147 			    error_at (declarator->id_loc, "deduced class "
11148 				      "type %qD in function return type",
11149 				      DECL_NAME (tmpl));
11150 			    inform (DECL_SOURCE_LOCATION (tmpl),
11151 				    "%qD declared here", tmpl);
11152 			    return error_mark_node;
11153 			  }
11154 			else if (!late_return_type)
11155 			  {
11156 			    error_at (declarator->id_loc, "deduction guide "
11157 				      "for %qT must have trailing return "
11158 				      "type", TREE_TYPE (tmpl));
11159 			    inform (DECL_SOURCE_LOCATION (tmpl),
11160 				    "%qD declared here", tmpl);
11161 			    return error_mark_node;
11162 			  }
11163 			else if (CLASS_TYPE_P (late_return_type)
11164 				 && CLASSTYPE_TEMPLATE_INFO (late_return_type)
11165 				 && (CLASSTYPE_TI_TEMPLATE (late_return_type)
11166 				     == tmpl))
11167 			  /* OK */;
11168 			else
11169 			  error ("trailing return type %qT of deduction guide "
11170 				 "is not a specialization of %qT",
11171 				 late_return_type, TREE_TYPE (tmpl));
11172 		      }
11173 		  }
11174 		else if (late_return_type
11175 			 && sfk != sfk_conversion)
11176 		  {
11177 		    if (cxx_dialect < cxx11)
11178 		      /* Not using maybe_warn_cpp0x because this should
11179 			 always be an error.  */
11180 		      error ("trailing return type only available with "
11181 			     "-std=c++11 or -std=gnu++11");
11182 		    else
11183 		      error ("%qs function with trailing return type not "
11184 			     "declared with %<auto%> type specifier", name);
11185 		    return error_mark_node;
11186 		  }
11187 	      }
11188 	    type = splice_late_return_type (type, late_return_type);
11189 	    if (type == error_mark_node)
11190 	      return error_mark_node;
11191 
11192 	    if (late_return_type)
11193 	      {
11194 		late_return_type_p = true;
11195 		type_quals = cp_type_quals (type);
11196 	      }
11197 
11198 	    if (type_quals != TYPE_UNQUALIFIED)
11199 	      {
11200 		if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
11201 		  warning_at (typespec_loc, OPT_Wignored_qualifiers, "type "
11202 			      "qualifiers ignored on function return type");
11203 		/* We now know that the TYPE_QUALS don't apply to the
11204 		   decl, but to its return type.  */
11205 		type_quals = TYPE_UNQUALIFIED;
11206 	      }
11207 
11208 	    /* Error about some types functions can't return.  */
11209 
11210 	    if (TREE_CODE (type) == FUNCTION_TYPE)
11211 	      {
11212 		error_at (typespec_loc, "%qs declared as function returning "
11213 			  "a function", name);
11214 		return error_mark_node;
11215 	      }
11216 	    if (TREE_CODE (type) == ARRAY_TYPE)
11217 	      {
11218 		error_at (typespec_loc, "%qs declared as function returning "
11219 			  "an array", name);
11220 		return error_mark_node;
11221 	      }
11222 
11223 	    if (ctype == NULL_TREE
11224 		&& decl_context == FIELD
11225 		&& funcdecl_p
11226 		&& friendp == 0)
11227 	      ctype = current_class_type;
11228 
11229 	    if (ctype && (sfk == sfk_constructor
11230 			  || sfk == sfk_destructor))
11231 	      {
11232 		/* We are within a class's scope. If our declarator name
11233 		   is the same as the class name, and we are defining
11234 		   a function, then it is a constructor/destructor, and
11235 		   therefore returns a void type.  */
11236 
11237 		/* ISO C++ 12.4/2.  A destructor may not be declared
11238 		   const or volatile.  A destructor may not be static.
11239 		   A destructor may not be declared with ref-qualifier.
11240 
11241 		   ISO C++ 12.1.  A constructor may not be declared
11242 		   const or volatile.  A constructor may not be
11243 		   virtual.  A constructor may not be static.
11244 		   A constructor may not be declared with ref-qualifier. */
11245 		if (staticp == 2)
11246 		  error ((flags == DTOR_FLAG)
11247 			 ? G_("destructor cannot be static member function")
11248 			 : G_("constructor cannot be static member function"));
11249 		if (memfn_quals)
11250 		  {
11251 		    error ((flags == DTOR_FLAG)
11252 			   ? G_("destructors may not be cv-qualified")
11253 			   : G_("constructors may not be cv-qualified"));
11254 		    memfn_quals = TYPE_UNQUALIFIED;
11255 		  }
11256 
11257 		if (rqual)
11258 		  {
11259 		    maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
11260 		    error ((flags == DTOR_FLAG)
11261 			   ? G_("destructors may not be ref-qualified")
11262 			   : G_("constructors may not be ref-qualified"));
11263 		    rqual = REF_QUAL_NONE;
11264 		  }
11265 
11266 		if (decl_context == FIELD
11267 		    && !member_function_or_else (ctype,
11268 						 current_class_type,
11269 						 flags))
11270 		  return error_mark_node;
11271 
11272 		if (flags != DTOR_FLAG)
11273 		  {
11274 		    /* It's a constructor.  */
11275 		    if (explicitp == 1)
11276 		      explicitp = 2;
11277 		    if (virtualp)
11278 		      {
11279 			permerror (input_location,
11280 				   "constructors cannot be declared %<virtual%>");
11281 			virtualp = 0;
11282 		      }
11283 		    if (decl_context == FIELD
11284 			&& sfk != sfk_constructor)
11285 		      return error_mark_node;
11286 		  }
11287 		if (decl_context == FIELD)
11288 		  staticp = 0;
11289 	      }
11290 	    else if (friendp)
11291 	      {
11292 		if (virtualp)
11293 		  {
11294 		    /* Cannot be both friend and virtual.  */
11295 		    error ("virtual functions cannot be friends");
11296 		    friendp = 0;
11297 		  }
11298 		if (decl_context == NORMAL)
11299 		  error ("friend declaration not in class definition");
11300 		if (current_function_decl && funcdef_flag)
11301 		  error ("can%'t define friend function %qs in a local "
11302 			 "class definition",
11303 			 name);
11304 	      }
11305 	    else if (ctype && sfk == sfk_conversion)
11306 	      {
11307 		if (explicitp == 1)
11308 		  {
11309 		    maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
11310 		    explicitp = 2;
11311 		  }
11312 		if (late_return_type_p)
11313 		  error ("a conversion function cannot have a trailing return type");
11314 	      }
11315 	    else if (sfk == sfk_deduction_guide)
11316 	      {
11317 		if (explicitp == 1)
11318 		  explicitp = 2;
11319 	      }
11320 
11321 	    tree pushed_scope = NULL_TREE;
11322 	    if (funcdecl_p
11323 		&& decl_context != FIELD
11324 		&& inner_declarator->u.id.qualifying_scope
11325 		&& CLASS_TYPE_P (inner_declarator->u.id.qualifying_scope))
11326 	      pushed_scope
11327 		= push_scope (inner_declarator->u.id.qualifying_scope);
11328 
11329 	    arg_types = grokparms (declarator->u.function.parameters, &parms);
11330 
11331 	    if (pushed_scope)
11332 	      pop_scope (pushed_scope);
11333 
11334 	    if (inner_declarator
11335 		&& inner_declarator->kind == cdk_id
11336 		&& inner_declarator->u.id.sfk == sfk_destructor
11337 		&& arg_types != void_list_node)
11338 	      {
11339 		error ("destructors may not have parameters");
11340 		arg_types = void_list_node;
11341 		parms = NULL_TREE;
11342 	      }
11343 
11344 	    type = build_function_type (type, arg_types);
11345 
11346 	    tree attrs = declarator->std_attributes;
11347 	    if (tx_qual)
11348 	      {
11349 		tree att = build_tree_list (tx_qual, NULL_TREE);
11350 		/* transaction_safe applies to the type, but
11351 		   transaction_safe_dynamic applies to the function.  */
11352 		if (is_attribute_p ("transaction_safe", tx_qual))
11353 		  attrs = chainon (attrs, att);
11354 		else
11355 		  returned_attrs = chainon (returned_attrs, att);
11356 	      }
11357 	    if (attrs)
11358 	      /* [dcl.fct]/2:
11359 
11360 		 The optional attribute-specifier-seq appertains to
11361 		 the function type.  */
11362 	      decl_attributes (&type, attrs, 0);
11363 
11364 	    if (raises)
11365 	      type = build_exception_variant (type, raises);
11366 	  }
11367 	  break;
11368 
11369 	case cdk_pointer:
11370 	case cdk_reference:
11371 	case cdk_ptrmem:
11372 	  /* Filter out pointers-to-references and references-to-references.
11373 	     We can get these if a TYPE_DECL is used.  */
11374 
11375 	  if (TREE_CODE (type) == REFERENCE_TYPE)
11376 	    {
11377 	      if (declarator->kind != cdk_reference)
11378 		{
11379 		  error ("cannot declare pointer to %q#T", type);
11380 		  type = TREE_TYPE (type);
11381 		}
11382 
11383 	      /* In C++0x, we allow reference to reference declarations
11384 		 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
11385 		 and template type arguments [14.3.1/4 temp.arg.type]. The
11386 		 check for direct reference to reference declarations, which
11387 		 are still forbidden, occurs below. Reasoning behind the change
11388 		 can be found in DR106, DR540, and the rvalue reference
11389 		 proposals. */
11390 	      else if (cxx_dialect == cxx98)
11391 		{
11392 		  error ("cannot declare reference to %q#T", type);
11393 		  type = TREE_TYPE (type);
11394 		}
11395 	    }
11396 	  else if (VOID_TYPE_P (type))
11397 	    {
11398 	      if (declarator->kind == cdk_reference)
11399 		error ("cannot declare reference to %q#T", type);
11400 	      else if (declarator->kind == cdk_ptrmem)
11401 		error ("cannot declare pointer to %q#T member", type);
11402 	    }
11403 
11404 	  /* We now know that the TYPE_QUALS don't apply to the decl,
11405 	     but to the target of the pointer.  */
11406 	  type_quals = TYPE_UNQUALIFIED;
11407 
11408 	  /* This code used to handle METHOD_TYPE, but I don't think it's
11409 	     possible to get it here anymore.  */
11410 	  gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11411 	  if (declarator->kind == cdk_ptrmem
11412 	      && TREE_CODE (type) == FUNCTION_TYPE)
11413 	    {
11414 	      memfn_quals |= type_memfn_quals (type);
11415 	      type = build_memfn_type (type,
11416 				       declarator->u.pointer.class_type,
11417 				       memfn_quals,
11418 				       rqual);
11419 	      if (type == error_mark_node)
11420 		return error_mark_node;
11421 
11422 	      rqual = REF_QUAL_NONE;
11423 	      memfn_quals = TYPE_UNQUALIFIED;
11424 	    }
11425 
11426 	  if (TREE_CODE (type) == FUNCTION_TYPE
11427 	      && (type_memfn_quals (type) != TYPE_UNQUALIFIED
11428 		  || type_memfn_rqual (type) != REF_QUAL_NONE))
11429             error (declarator->kind == cdk_reference
11430                    ? G_("cannot declare reference to qualified function type %qT")
11431                    : G_("cannot declare pointer to qualified function type %qT"),
11432 		   type);
11433 
11434 	  /* When the pointed-to type involves components of variable size,
11435 	     care must be taken to ensure that the size evaluation code is
11436 	     emitted early enough to dominate all the possible later uses
11437 	     and late enough for the variables on which it depends to have
11438 	     been assigned.
11439 
11440 	     This is expected to happen automatically when the pointed-to
11441 	     type has a name/declaration of it's own, but special attention
11442 	     is required if the type is anonymous.
11443 
11444 	     We handle the NORMAL and FIELD contexts here by inserting a
11445 	     dummy statement that just evaluates the size at a safe point
11446 	     and ensures it is not deferred until e.g. within a deeper
11447 	     conditional context (c++/43555).
11448 
11449 	     We expect nothing to be needed here for PARM or TYPENAME.
11450 	     Evaluating the size at this point for TYPENAME would
11451 	     actually be incorrect, as we might be in the middle of an
11452 	     expression with side effects on the pointed-to type size
11453 	     "arguments" prior to the pointer declaration point and the
11454 	     size evaluation could end up prior to the side effects.  */
11455 
11456 	  if (!TYPE_NAME (type)
11457 	      && (decl_context == NORMAL || decl_context == FIELD)
11458 	      && at_function_scope_p ()
11459 	      && variably_modified_type_p (type, NULL_TREE))
11460 	    {
11461 	      TYPE_NAME (type) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
11462 					     NULL_TREE, type);
11463 	      add_decl_expr (TYPE_NAME (type));
11464 	    }
11465 
11466 	  if (declarator->kind == cdk_reference)
11467 	    {
11468 	      /* In C++0x, the type we are creating a reference to might be
11469 		 a typedef which is itself a reference type. In that case,
11470 		 we follow the reference collapsing rules in
11471 		 [7.1.3/8 dcl.typedef] to create the final reference type:
11472 
11473 		 "If a typedef TD names a type that is a reference to a type
11474 		 T, an attempt to create the type 'lvalue reference to cv TD'
11475 		 creates the type 'lvalue reference to T,' while an attempt
11476 		 to create the type "rvalue reference to cv TD' creates the
11477 		 type TD."
11478               */
11479 	      if (VOID_TYPE_P (type))
11480 		/* We already gave an error.  */;
11481 	      else if (TREE_CODE (type) == REFERENCE_TYPE)
11482 		{
11483 		  if (declarator->u.reference.rvalue_ref)
11484 		    /* Leave type alone.  */;
11485 		  else
11486 		    type = cp_build_reference_type (TREE_TYPE (type), false);
11487 		}
11488 	      else
11489 		type = cp_build_reference_type
11490 		  (type, declarator->u.reference.rvalue_ref);
11491 
11492 	      /* In C++0x, we need this check for direct reference to
11493 		 reference declarations, which are forbidden by
11494 		 [8.3.2/5 dcl.ref]. Reference to reference declarations
11495 		 are only allowed indirectly through typedefs and template
11496 		 type arguments. Example:
11497 
11498 		   void foo(int & &);      // invalid ref-to-ref decl
11499 
11500 		   typedef int & int_ref;
11501 		   void foo(int_ref &);    // valid ref-to-ref decl
11502 	      */
11503 	      if (inner_declarator && inner_declarator->kind == cdk_reference)
11504 		error ("cannot declare reference to %q#T, which is not "
11505 		       "a typedef or a template type argument", type);
11506 	    }
11507 	  else if (TREE_CODE (type) == METHOD_TYPE)
11508 	    type = build_ptrmemfunc_type (build_pointer_type (type));
11509 	  else if (declarator->kind == cdk_ptrmem)
11510 	    {
11511 	      gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
11512 			  != NAMESPACE_DECL);
11513 	      if (declarator->u.pointer.class_type == error_mark_node)
11514 		/* We will already have complained.  */
11515 		type = error_mark_node;
11516 	      else
11517 		type = build_ptrmem_type (declarator->u.pointer.class_type,
11518 					  type);
11519 	    }
11520 	  else
11521 	    type = build_pointer_type (type);
11522 
11523 	  /* Process a list of type modifier keywords (such as
11524 	     const or volatile) that were given inside the `*' or `&'.  */
11525 
11526 	  if (declarator->u.pointer.qualifiers)
11527 	    {
11528 	      type
11529 		= cp_build_qualified_type (type,
11530 					   declarator->u.pointer.qualifiers);
11531 	      type_quals = cp_type_quals (type);
11532 	    }
11533 
11534 	  /* Apply C++11 attributes to the pointer, and not to the
11535 	     type pointed to.  This is unlike what is done for GNU
11536 	     attributes above.  It is to comply with [dcl.ptr]/1:
11537 
11538 		 [the optional attribute-specifier-seq (7.6.1) appertains
11539 		  to the pointer and not to the object pointed to].  */
11540 	  if (declarator->std_attributes)
11541 	    decl_attributes (&type, declarator->std_attributes,
11542 			     0);
11543 
11544 	  ctype = NULL_TREE;
11545 	  break;
11546 
11547 	case cdk_error:
11548 	  break;
11549 
11550 	default:
11551 	  gcc_unreachable ();
11552 	}
11553     }
11554 
11555   /* A `constexpr' specifier used in an object declaration declares
11556      the object as `const'.  */
11557   if (constexpr_p && innermost_code != cdk_function)
11558     {
11559       /* DR1688 says that a `constexpr' specifier in combination with
11560 	 `volatile' is valid.  */
11561 
11562       if (TREE_CODE (type) != REFERENCE_TYPE)
11563 	{
11564 	  type_quals |= TYPE_QUAL_CONST;
11565 	  type = cp_build_qualified_type (type, type_quals);
11566 	}
11567     }
11568 
11569   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
11570       && TREE_CODE (type) != FUNCTION_TYPE
11571       && TREE_CODE (type) != METHOD_TYPE
11572       && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
11573     {
11574       error ("template-id %qD used as a declarator",
11575 	     unqualified_id);
11576       unqualified_id = dname;
11577     }
11578 
11579   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
11580      qualified with a class-name, turn it into a METHOD_TYPE, unless
11581      we know that the function is static.  We take advantage of this
11582      opportunity to do other processing that pertains to entities
11583      explicitly declared to be class members.  Note that if DECLARATOR
11584      is non-NULL, we know it is a cdk_id declarator; otherwise, we
11585      would not have exited the loop above.  */
11586   if (declarator
11587       && declarator->kind == cdk_id
11588       && declarator->u.id.qualifying_scope
11589       && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
11590     {
11591       ctype = declarator->u.id.qualifying_scope;
11592       ctype = TYPE_MAIN_VARIANT (ctype);
11593       template_count = num_template_headers_for_class (ctype);
11594 
11595       if (ctype == current_class_type)
11596 	{
11597 	  if (friendp)
11598 	    {
11599 	      permerror (input_location, "member functions are implicitly "
11600 					 "friends of their class");
11601 	      friendp = 0;
11602 	    }
11603 	  else
11604 	    permerror (declarator->id_loc,
11605 		       "extra qualification %<%T::%> on member %qs",
11606 		       ctype, name);
11607 	}
11608       else if (/* If the qualifying type is already complete, then we
11609 		  can skip the following checks.  */
11610 	       !COMPLETE_TYPE_P (ctype)
11611 	       && (/* If the function is being defined, then
11612 		      qualifying type must certainly be complete.  */
11613 		   funcdef_flag
11614 		   /* A friend declaration of "T::f" is OK, even if
11615 		      "T" is a template parameter.  But, if this
11616 		      function is not a friend, the qualifying type
11617 		      must be a class.  */
11618 		   || (!friendp && !CLASS_TYPE_P (ctype))
11619 		   /* For a declaration, the type need not be
11620 		      complete, if either it is dependent (since there
11621 		      is no meaningful definition of complete in that
11622 		      case) or the qualifying class is currently being
11623 		      defined.  */
11624 		   || !(dependent_type_p (ctype)
11625 			|| currently_open_class (ctype)))
11626 	       /* Check that the qualifying type is complete.  */
11627 	       && !complete_type_or_else (ctype, NULL_TREE))
11628 	return error_mark_node;
11629       else if (TREE_CODE (type) == FUNCTION_TYPE)
11630 	{
11631 	  if (current_class_type
11632 	      && (!friendp || funcdef_flag || initialized))
11633 	    {
11634 	      error (funcdef_flag || initialized
11635 		     ? G_("cannot define member function %<%T::%s%> "
11636 			  "within %qT")
11637 		     : G_("cannot declare member function %<%T::%s%> "
11638 			  "within %qT"),
11639 		     ctype, name, current_class_type);
11640 	      return error_mark_node;
11641 	    }
11642 	}
11643       else if (typedef_p && current_class_type)
11644 	{
11645 	  error ("cannot declare member %<%T::%s%> within %qT",
11646 		 ctype, name, current_class_type);
11647 	  return error_mark_node;
11648 	}
11649     }
11650 
11651   if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
11652     ctype = current_class_type;
11653 
11654   /* Now TYPE has the actual type.  */
11655 
11656   if (returned_attrs)
11657     {
11658       if (attrlist)
11659 	*attrlist = chainon (returned_attrs, *attrlist);
11660       else
11661 	attrlist = &returned_attrs;
11662     }
11663 
11664   if (declarator
11665       && declarator->kind == cdk_id
11666       && declarator->std_attributes
11667       && attrlist != NULL)
11668     {
11669       /* [dcl.meaning]/1: The optional attribute-specifier-seq following
11670 	 a declarator-id appertains to the entity that is declared.  */
11671       if (declarator->std_attributes != error_mark_node)
11672 	*attrlist = chainon (*attrlist, declarator->std_attributes);
11673       else
11674 	/* We should have already diagnosed the issue (c++/78344).  */
11675 	gcc_assert (seen_error ());
11676     }
11677 
11678   /* Handle parameter packs. */
11679   if (parameter_pack_p)
11680     {
11681       if (decl_context == PARM)
11682         /* Turn the type into a pack expansion.*/
11683         type = make_pack_expansion (type);
11684       else
11685         error ("non-parameter %qs cannot be a parameter pack", name);
11686     }
11687 
11688   if ((decl_context == FIELD || decl_context == PARM)
11689       && !processing_template_decl
11690       && variably_modified_type_p (type, NULL_TREE))
11691     {
11692       if (decl_context == FIELD)
11693 	error ("data member may not have variably modified type %qT", type);
11694       else
11695 	error ("parameter may not have variably modified type %qT", type);
11696       type = error_mark_node;
11697     }
11698 
11699   if (explicitp == 1 || (explicitp && friendp))
11700     {
11701       /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
11702 	 in the declaration of a constructor or conversion function within
11703 	 a class definition.  */
11704       if (!current_class_type)
11705 	error_at (declspecs->locations[ds_explicit],
11706 		  "%<explicit%> outside class declaration");
11707       else if (friendp)
11708 	error_at (declspecs->locations[ds_explicit],
11709 		  "%<explicit%> in friend declaration");
11710       else
11711 	error_at (declspecs->locations[ds_explicit],
11712 		  "only declarations of constructors and conversion operators "
11713 		  "can be %<explicit%>");
11714       explicitp = 0;
11715     }
11716 
11717   if (storage_class == sc_mutable)
11718     {
11719       if (decl_context != FIELD || friendp)
11720 	{
11721 	  error ("non-member %qs cannot be declared %<mutable%>", name);
11722 	  storage_class = sc_none;
11723 	}
11724       else if (decl_context == TYPENAME || typedef_p)
11725 	{
11726 	  error ("non-object member %qs cannot be declared %<mutable%>", name);
11727 	  storage_class = sc_none;
11728 	}
11729       else if (TREE_CODE (type) == FUNCTION_TYPE
11730 	       || TREE_CODE (type) == METHOD_TYPE)
11731 	{
11732 	  error ("function %qs cannot be declared %<mutable%>", name);
11733 	  storage_class = sc_none;
11734 	}
11735       else if (staticp)
11736 	{
11737 	  error ("static %qs cannot be declared %<mutable%>", name);
11738 	  storage_class = sc_none;
11739 	}
11740       else if (type_quals & TYPE_QUAL_CONST)
11741 	{
11742 	  error ("const %qs cannot be declared %<mutable%>", name);
11743 	  storage_class = sc_none;
11744 	}
11745       else if (TREE_CODE (type) == REFERENCE_TYPE)
11746 	{
11747 	  permerror (input_location, "reference %qs cannot be declared "
11748 	             "%<mutable%>", name);
11749 	  storage_class = sc_none;
11750 	}
11751     }
11752 
11753   /* If this is declaring a typedef name, return a TYPE_DECL.  */
11754   if (typedef_p && decl_context != TYPENAME)
11755     {
11756       tree decl;
11757 
11758       /* This declaration:
11759 
11760 	   typedef void f(int) const;
11761 
11762 	 declares a function type which is not a member of any
11763 	 particular class, but which is cv-qualified; for
11764 	 example "f S::*" declares a pointer to a const-qualified
11765 	 member function of S.  We record the cv-qualification in the
11766 	 function type.  */
11767       if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
11768         {
11769           type = apply_memfn_quals (type, memfn_quals, rqual);
11770 
11771           /* We have now dealt with these qualifiers.  */
11772           memfn_quals = TYPE_UNQUALIFIED;
11773 	  rqual = REF_QUAL_NONE;
11774         }
11775 
11776       if (type_uses_auto (type))
11777 	{
11778 	  error ("typedef declared %<auto%>");
11779 	  type = error_mark_node;
11780 	}
11781 
11782       if (reqs)
11783 	error_at (location_of (reqs), "requires-clause on typedef");
11784 
11785       if (id_declarator && declarator->u.id.qualifying_scope)
11786 	{
11787 	  error ("typedef name may not be a nested-name-specifier");
11788 	  type = error_mark_node;
11789 	}
11790 
11791       if (decl_context == FIELD)
11792 	decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
11793       else
11794 	decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
11795 
11796       if (decl_context != FIELD)
11797 	{
11798 	  if (!current_function_decl)
11799 	    DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
11800 	  else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
11801 		   || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
11802 		       (current_function_decl)))
11803 	    /* The TYPE_DECL is "abstract" because there will be
11804 	       clones of this constructor/destructor, and there will
11805 	       be copies of this TYPE_DECL generated in those
11806 	       clones.  The decloning optimization (for space) may
11807                revert this subsequently if it determines that
11808                the clones should share a common implementation.  */
11809 	    DECL_ABSTRACT_P (decl) = true;
11810 	}
11811       else if (current_class_type
11812 	       && constructor_name_p (unqualified_id, current_class_type))
11813 	permerror (input_location, "ISO C++ forbids nested type %qD with same name "
11814 		   "as enclosing class",
11815 		   unqualified_id);
11816 
11817       /* If the user declares "typedef struct {...} foo" then the
11818 	 struct will have an anonymous name.  Fill that name in now.
11819 	 Nothing can refer to it, so nothing needs know about the name
11820 	 change.  */
11821       if (type != error_mark_node
11822 	  && unqualified_id
11823 	  && TYPE_NAME (type)
11824 	  && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11825 	  && TYPE_UNNAMED_P (type)
11826 	  && declspecs->type_definition_p
11827 	  && attributes_naming_typedef_ok (*attrlist)
11828 	  && cp_type_quals (type) == TYPE_UNQUALIFIED)
11829 	name_unnamed_type (type, decl);
11830 
11831       if (signed_p
11832 	  || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11833 	C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11834 
11835       bad_specifiers (decl, BSP_TYPE, virtualp,
11836 		      memfn_quals != TYPE_UNQUALIFIED,
11837 		      inlinep, friendp, raises != NULL_TREE);
11838 
11839       if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
11840 	/* Acknowledge that this was written:
11841 	     `using analias = atype;'.  */
11842 	TYPE_DECL_ALIAS_P (decl) = 1;
11843 
11844       return decl;
11845     }
11846 
11847   /* Detect the case of an array type of unspecified size
11848      which came, as such, direct from a typedef name.
11849      We must copy the type, so that the array's domain can be
11850      individually set by the object's initializer.  */
11851 
11852   if (type && typedef_type
11853       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
11854       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
11855     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
11856 
11857   /* Detect where we're using a typedef of function type to declare a
11858      function. PARMS will not be set, so we must create it now.  */
11859 
11860   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
11861     {
11862       tree decls = NULL_TREE;
11863       tree args;
11864 
11865       for (args = TYPE_ARG_TYPES (type);
11866 	   args && args != void_list_node;
11867 	   args = TREE_CHAIN (args))
11868 	{
11869 	  tree decl = cp_build_parm_decl (NULL_TREE, NULL_TREE,
11870 					  TREE_VALUE (args));
11871 
11872 	  DECL_CHAIN (decl) = decls;
11873 	  decls = decl;
11874 	}
11875 
11876       parms = nreverse (decls);
11877 
11878       if (decl_context != TYPENAME)
11879 	{
11880 	  /* The qualifiers on the function type become the qualifiers on
11881 	     the non-static member function. */
11882 	  memfn_quals |= type_memfn_quals (type);
11883 	  rqual = type_memfn_rqual (type);
11884 	  type_quals = TYPE_UNQUALIFIED;
11885 	}
11886     }
11887 
11888   /* If this is a type name (such as, in a cast or sizeof),
11889      compute the type and return it now.  */
11890 
11891   if (decl_context == TYPENAME)
11892     {
11893       /* Note that here we don't care about type_quals.  */
11894 
11895       /* Special case: "friend class foo" looks like a TYPENAME context.  */
11896       if (friendp)
11897 	{
11898 	  if (inlinep)
11899 	    {
11900 	      error ("%<inline%> specified for friend class declaration");
11901 	      inlinep = 0;
11902 	    }
11903 
11904 	  if (!current_aggr)
11905 	    {
11906 	      /* Don't allow friend declaration without a class-key.  */
11907 	      if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11908 		permerror (input_location, "template parameters cannot be friends");
11909 	      else if (TREE_CODE (type) == TYPENAME_TYPE)
11910 		permerror (input_location, "friend declaration requires class-key, "
11911 			   "i.e. %<friend class %T::%D%>",
11912 			   TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
11913 	      else
11914 		permerror (input_location, "friend declaration requires class-key, "
11915 			   "i.e. %<friend %#T%>",
11916 			   type);
11917 	    }
11918 
11919 	  /* Only try to do this stuff if we didn't already give up.  */
11920 	  if (type != integer_type_node)
11921 	    {
11922 	      /* A friendly class?  */
11923 	      if (current_class_type)
11924 		make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
11925 				   /*complain=*/true);
11926 	      else
11927 		error ("trying to make class %qT a friend of global scope",
11928 		       type);
11929 
11930 	      type = void_type_node;
11931 	    }
11932 	}
11933       else if (memfn_quals || rqual)
11934 	{
11935 	  if (ctype == NULL_TREE
11936 	      && TREE_CODE (type) == METHOD_TYPE)
11937 	    ctype = TYPE_METHOD_BASETYPE (type);
11938 
11939 	  if (ctype)
11940 	    type = build_memfn_type (type, ctype, memfn_quals, rqual);
11941 	  /* Core issue #547: need to allow this in template type args.
11942 	     Allow it in general in C++11 for alias-declarations.  */
11943 	  else if ((template_type_arg || cxx_dialect >= cxx11)
11944 		   && TREE_CODE (type) == FUNCTION_TYPE)
11945 	    type = apply_memfn_quals (type, memfn_quals, rqual);
11946 	  else
11947 	    error ("invalid qualifiers on non-member function type");
11948 	}
11949 
11950       if (reqs)
11951 	error_at (location_of (reqs), "requires-clause on type-id");
11952 
11953       return type;
11954     }
11955   else if (unqualified_id == NULL_TREE && decl_context != PARM
11956 	   && decl_context != CATCHPARM
11957 	   && TREE_CODE (type) != UNION_TYPE
11958 	   && ! bitfield
11959 	   && innermost_code != cdk_decomp)
11960     {
11961       error ("abstract declarator %qT used as declaration", type);
11962       return error_mark_node;
11963     }
11964 
11965   if (!FUNC_OR_METHOD_TYPE_P (type))
11966     {
11967       /* Only functions may be declared using an operator-function-id.  */
11968       if (dname && IDENTIFIER_ANY_OP_P (dname))
11969 	{
11970 	  error ("declaration of %qD as non-function", dname);
11971 	  return error_mark_node;
11972 	}
11973 
11974       if (reqs)
11975 	error_at (location_of (reqs),
11976 		  "requires-clause on declaration of non-function type %qT",
11977 		  type);
11978     }
11979 
11980   /* We don't check parameter types here because we can emit a better
11981      error message later.  */
11982   if (decl_context != PARM)
11983     {
11984       type = check_var_type (unqualified_id, type);
11985       if (type == error_mark_node)
11986         return error_mark_node;
11987     }
11988 
11989   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11990      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
11991 
11992   if (decl_context == PARM || decl_context == CATCHPARM)
11993     {
11994       if (ctype || in_namespace)
11995 	error ("cannot use %<::%> in parameter declaration");
11996 
11997       if (type_uses_auto (type)
11998 	  && !(cxx_dialect >= cxx17 && template_parm_flag))
11999 	{
12000 	  if (cxx_dialect >= cxx14)
12001 	    error ("%<auto%> parameter not permitted in this context");
12002 	  else
12003 	    error ("parameter declared %<auto%>");
12004 	  type = error_mark_node;
12005 	}
12006 
12007       /* A parameter declared as an array of T is really a pointer to T.
12008 	 One declared as a function is really a pointer to a function.
12009 	 One declared as a member is really a pointer to member.  */
12010 
12011       if (TREE_CODE (type) == ARRAY_TYPE)
12012 	{
12013 	  /* Transfer const-ness of array into that of type pointed to.  */
12014 	  type = build_pointer_type (TREE_TYPE (type));
12015 	  type_quals = TYPE_UNQUALIFIED;
12016 	  array_parameter_p = true;
12017 	}
12018       else if (TREE_CODE (type) == FUNCTION_TYPE)
12019 	type = build_pointer_type (type);
12020     }
12021 
12022   if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
12023       && !(identifier_p (unqualified_id)
12024 	   && IDENTIFIER_NEWDEL_OP_P (unqualified_id)))
12025     {
12026       cp_cv_quals real_quals = memfn_quals;
12027       if (cxx_dialect < cxx14 && constexpr_p
12028 	  && sfk != sfk_constructor && sfk != sfk_destructor)
12029 	real_quals |= TYPE_QUAL_CONST;
12030       type = build_memfn_type (type, ctype, real_quals, rqual);
12031     }
12032 
12033   {
12034     tree decl = NULL_TREE;
12035 
12036     if (decl_context == PARM)
12037       {
12038 	decl = cp_build_parm_decl (NULL_TREE, unqualified_id, type);
12039 	DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
12040 
12041 	bad_specifiers (decl, BSP_PARM, virtualp,
12042 			memfn_quals != TYPE_UNQUALIFIED,
12043 			inlinep, friendp, raises != NULL_TREE);
12044       }
12045     else if (decl_context == FIELD)
12046       {
12047 	if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE)
12048 	  if (tree auto_node = type_uses_auto (type))
12049 	    {
12050 	      location_t loc = declspecs->locations[ds_type_spec];
12051 	      if (CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12052 		error_at (loc, "invalid use of template-name %qE without an "
12053 			  "argument list",
12054 			  CLASS_PLACEHOLDER_TEMPLATE (auto_node));
12055 	      else
12056 		error_at (loc, "non-static data member declared with "
12057 			  "placeholder %qT", auto_node);
12058 	      type = error_mark_node;
12059 	    }
12060 
12061 	/* The C99 flexible array extension.  */
12062 	if (!staticp && TREE_CODE (type) == ARRAY_TYPE
12063 	    && TYPE_DOMAIN (type) == NULL_TREE)
12064 	  {
12065 	    if (ctype
12066 		&& (TREE_CODE (ctype) == UNION_TYPE
12067 		    || TREE_CODE (ctype) == QUAL_UNION_TYPE))
12068 	      {
12069 		error ("flexible array member in union");
12070 		type = error_mark_node;
12071 	      }
12072 	    else
12073 	      {
12074 		/* Array is a flexible member.  */
12075 		if (in_system_header_at (input_location))
12076 		  /* Do not warn on flexible array members in system
12077 		     headers because glibc uses them.  */;
12078 		else if (name)
12079 		  pedwarn (input_location, OPT_Wpedantic,
12080 			   "ISO C++ forbids flexible array member %qs", name);
12081 		else
12082 		  pedwarn (input_location, OPT_Wpedantic,
12083 			   "ISO C++ forbids flexible array members");
12084 
12085 		/* Flexible array member has a null domain.  */
12086 		type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
12087 	      }
12088 	  }
12089 
12090 	if (type == error_mark_node)
12091 	  {
12092 	    /* Happens when declaring arrays of sizes which
12093 	       are error_mark_node, for example.  */
12094 	    decl = NULL_TREE;
12095 	  }
12096 	else if (in_namespace && !friendp)
12097 	  {
12098 	    /* Something like struct S { int N::j; };  */
12099 	    error ("invalid use of %<::%>");
12100 	    return error_mark_node;
12101 	  }
12102 	else if (TREE_CODE (type) == FUNCTION_TYPE
12103 		 || TREE_CODE (type) == METHOD_TYPE)
12104 	  {
12105 	    int publicp = 0;
12106 	    tree function_context;
12107 
12108 	    if (friendp == 0)
12109 	      {
12110 		/* This should never happen in pure C++ (the check
12111 		   could be an assert).  It could happen in
12112 		   Objective-C++ if someone writes invalid code that
12113 		   uses a function declaration for an instance
12114 		   variable or property (instance variables and
12115 		   properties are parsed as FIELD_DECLs, but they are
12116 		   part of an Objective-C class, not a C++ class).
12117 		   That code is invalid and is caught by this
12118 		   check.  */
12119 		if (!ctype)
12120 		  {
12121 		    error ("declaration of function %qD in invalid context",
12122 			   unqualified_id);
12123 		    return error_mark_node;
12124 		  }
12125 
12126 		/* ``A union may [ ... ] not [ have ] virtual functions.''
12127 		   ARM 9.5 */
12128 		if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
12129 		  {
12130 		    error ("function %qD declared %<virtual%> inside a union",
12131 			   unqualified_id);
12132 		    return error_mark_node;
12133 		  }
12134 
12135 		if (virtualp
12136 		    && identifier_p (unqualified_id)
12137 		    && IDENTIFIER_NEWDEL_OP_P (unqualified_id))
12138 		  {
12139 		    error ("%qD cannot be declared %<virtual%>, since it "
12140 			   "is always static", unqualified_id);
12141 		    virtualp = 0;
12142 		  }
12143 	      }
12144 
12145 	    /* Check that the name used for a destructor makes sense.  */
12146 	    if (sfk == sfk_destructor)
12147 	      {
12148 		tree uqname = id_declarator->u.id.unqualified_name;
12149 
12150 		if (!ctype)
12151 		  {
12152 		    gcc_assert (friendp);
12153 		    error ("expected qualified name in friend declaration "
12154 			   "for destructor %qD", uqname);
12155 		    return error_mark_node;
12156 		  }
12157 
12158 		if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
12159 		  {
12160 		    error ("declaration of %qD as member of %qT",
12161 			   uqname, ctype);
12162 		    return error_mark_node;
12163 		  }
12164                 if (concept_p)
12165                   {
12166                     error ("a destructor cannot be %<concept%>");
12167                     return error_mark_node;
12168                   }
12169                 if (constexpr_p)
12170                   {
12171                     error ("a destructor cannot be %<constexpr%>");
12172                     return error_mark_node;
12173                   }
12174 	      }
12175 	    else if (sfk == sfk_constructor && friendp && !ctype)
12176 	      {
12177 		error ("expected qualified name in friend declaration "
12178 		       "for constructor %qD",
12179 		       id_declarator->u.id.unqualified_name);
12180 		return error_mark_node;
12181 	      }
12182 	    if (sfk == sfk_constructor)
12183 	      if (concept_p)
12184 		{
12185 		  error ("a constructor cannot be %<concept%>");
12186 		  return error_mark_node;
12187 		}
12188 	    if (concept_p)
12189 	      {
12190 		error ("a concept cannot be a member function");
12191 		concept_p = false;
12192 	      }
12193 
12194 	    if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12195 	      {
12196 		tree tmpl = TREE_OPERAND (unqualified_id, 0);
12197 		if (variable_template_p (tmpl))
12198 		  {
12199 		    error ("specialization of variable template %qD "
12200 			   "declared as function", tmpl);
12201 		    inform (DECL_SOURCE_LOCATION (tmpl),
12202 			    "variable template declared here");
12203 		    return error_mark_node;
12204 		  }
12205 	      }
12206 
12207 	    /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
12208 	    function_context = (ctype != NULL_TREE) ?
12209 	      decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
12210 	    publicp = (! friendp || ! staticp)
12211 	      && function_context == NULL_TREE;
12212 
12213 	    if (late_return_type_p)
12214 	      TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
12215 
12216 	    decl = grokfndecl (ctype, type,
12217 			       TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
12218 			       ? unqualified_id : dname,
12219 			       parms,
12220 			       unqualified_id,
12221 			       reqs,
12222 			       virtualp, flags, memfn_quals, rqual, raises,
12223 			       friendp ? -1 : 0, friendp, publicp,
12224                                inlinep | (2 * constexpr_p) | (4 * concept_p),
12225 			       initialized == SD_DELETED, sfk,
12226 			       funcdef_flag, template_count, in_namespace,
12227 			       attrlist, declarator->id_loc);
12228             decl = set_virt_specifiers (decl, virt_specifiers);
12229 	    if (decl == NULL_TREE)
12230 	      return error_mark_node;
12231 #if 0
12232 	    /* This clobbers the attrs stored in `decl' from `attrlist'.  */
12233 	    /* The decl and setting of decl_attr is also turned off.  */
12234 	    decl = build_decl_attribute_variant (decl, decl_attr);
12235 #endif
12236 
12237 	    /* [class.conv.ctor]
12238 
12239 	       A constructor declared without the function-specifier
12240 	       explicit that can be called with a single parameter
12241 	       specifies a conversion from the type of its first
12242 	       parameter to the type of its class.  Such a constructor
12243 	       is called a converting constructor.  */
12244 	    if (explicitp == 2)
12245 	      DECL_NONCONVERTING_P (decl) = 1;
12246 	  }
12247 	else if (!staticp && !dependent_type_p (type)
12248 		 && !COMPLETE_TYPE_P (complete_type (type))
12249 		 && (!complete_or_array_type_p (type)
12250 		     || initialized == 0))
12251 	  {
12252 	    if (TREE_CODE (type) != ARRAY_TYPE
12253 		|| !COMPLETE_TYPE_P (TREE_TYPE (type)))
12254 	      {
12255 		if (unqualified_id)
12256 		  {
12257 		    error ("field %qD has incomplete type %qT",
12258 			   unqualified_id, type);
12259 		    cxx_incomplete_type_inform (strip_array_types (type));
12260 		  }
12261 		else
12262 		  error ("name %qT has incomplete type", type);
12263 
12264 		type = error_mark_node;
12265 		decl = NULL_TREE;
12266 	      }
12267 	  }
12268 	else
12269 	  {
12270 	    if (friendp)
12271 	      {
12272 		error ("%qE is neither function nor member function; "
12273 		       "cannot be declared friend", unqualified_id);
12274 		return error_mark_node;
12275 	      }
12276 	    decl = NULL_TREE;
12277 	  }
12278 
12279 	if (friendp)
12280 	  {
12281 	    /* Friends are treated specially.  */
12282 	    if (ctype == current_class_type)
12283 	      ;  /* We already issued a permerror.  */
12284 	    else if (decl && DECL_NAME (decl))
12285 	      {
12286 		if (template_class_depth (current_class_type) == 0)
12287 		  {
12288 		    decl = check_explicit_specialization
12289 		      (unqualified_id, decl, template_count,
12290 		       2 * funcdef_flag + 4);
12291 		    if (decl == error_mark_node)
12292 		      return error_mark_node;
12293 		  }
12294 
12295 		decl = do_friend (ctype, unqualified_id, decl,
12296 				  *attrlist, flags,
12297 				  funcdef_flag);
12298 		return decl;
12299 	      }
12300 	    else
12301 	      return error_mark_node;
12302 	  }
12303 
12304 	/* Structure field.  It may not be a function, except for C++.  */
12305 
12306 	if (decl == NULL_TREE)
12307 	  {
12308 	    if (staticp)
12309 	      {
12310 		/* C++ allows static class members.  All other work
12311 		   for this is done by grokfield.  */
12312 		decl = build_lang_decl_loc (declarator
12313 					    ? declarator->id_loc
12314 					    : input_location,
12315 					    VAR_DECL, unqualified_id, type);
12316 		set_linkage_for_static_data_member (decl);
12317 		if (concept_p)
12318 		    error ("static data member %qE declared %<concept%>",
12319 			   unqualified_id);
12320 		else if (constexpr_p && !initialized)
12321 		  {
12322 		    error ("%<constexpr%> static data member %qD must have an "
12323 			   "initializer", decl);
12324 		    constexpr_p = false;
12325 		  }
12326 
12327 		if (inlinep)
12328 		  mark_inline_variable (decl);
12329 
12330 		if (!DECL_VAR_DECLARED_INLINE_P (decl)
12331 		    && !(cxx_dialect >= cxx17 && constexpr_p))
12332 		  /* Even if there is an in-class initialization, DECL
12333 		     is considered undefined until an out-of-class
12334 		     definition is provided, unless this is an inline
12335 		     variable.  */
12336 		  DECL_EXTERNAL (decl) = 1;
12337 
12338 		if (thread_p)
12339 		  {
12340 		    CP_DECL_THREAD_LOCAL_P (decl) = true;
12341 		    if (!processing_template_decl)
12342 		      set_decl_tls_model (decl, decl_default_tls_model (decl));
12343 		    if (declspecs->gnu_thread_keyword_p)
12344 		      SET_DECL_GNU_TLS_P (decl);
12345 		  }
12346 	      }
12347 	    else
12348 	      {
12349 		if (concept_p)
12350 		  error ("non-static data member %qE declared %<concept%>",
12351 			 unqualified_id);
12352                 else if (constexpr_p)
12353 		  {
12354 		    error ("non-static data member %qE declared %<constexpr%>",
12355 			   unqualified_id);
12356 		    constexpr_p = false;
12357 		  }
12358 		decl = build_decl (input_location,
12359 				   FIELD_DECL, unqualified_id, type);
12360 		DECL_NONADDRESSABLE_P (decl) = bitfield;
12361 		if (bitfield && !unqualified_id)
12362 		  {
12363 		    TREE_NO_WARNING (decl) = 1;
12364 		    DECL_PADDING_P (decl) = 1;
12365 		  }
12366 
12367 		if (storage_class == sc_mutable)
12368 		  {
12369 		    DECL_MUTABLE_P (decl) = 1;
12370 		    storage_class = sc_none;
12371 		  }
12372 
12373 		if (initialized)
12374 		  {
12375 		    /* An attempt is being made to initialize a non-static
12376 		       member.  This is new in C++11.  */
12377 		    maybe_warn_cpp0x (CPP0X_NSDMI);
12378 
12379 		    /* If this has been parsed with static storage class, but
12380 		       errors forced staticp to be cleared, ensure NSDMI is
12381 		       not present.  */
12382 		    if (declspecs->storage_class == sc_static)
12383 		      DECL_INITIAL (decl) = error_mark_node;
12384 		  }
12385 	      }
12386 
12387 	    bad_specifiers (decl, BSP_FIELD, virtualp,
12388 			    memfn_quals != TYPE_UNQUALIFIED,
12389 			    staticp ? false : inlinep, friendp,
12390 			    raises != NULL_TREE);
12391 	  }
12392       }
12393     else if (TREE_CODE (type) == FUNCTION_TYPE
12394 	     || TREE_CODE (type) == METHOD_TYPE)
12395       {
12396 	tree original_name;
12397 	int publicp = 0;
12398 
12399 	if (!unqualified_id)
12400 	  return error_mark_node;
12401 
12402 	if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12403 	  original_name = dname;
12404 	else
12405 	  original_name = unqualified_id;
12406 	// FIXME:gcc_assert (original_name == dname);
12407 
12408 	if (storage_class == sc_auto)
12409 	  error ("storage class %<auto%> invalid for function %qs", name);
12410 	else if (storage_class == sc_register)
12411 	  error ("storage class %<register%> invalid for function %qs", name);
12412 	else if (thread_p)
12413 	  {
12414 	    if (declspecs->gnu_thread_keyword_p)
12415 	      error ("storage class %<__thread%> invalid for function %qs",
12416 		     name);
12417 	    else
12418 	      error ("storage class %<thread_local%> invalid for function %qs",
12419 		     name);
12420 	  }
12421 
12422         if (virt_specifiers)
12423           error ("virt-specifiers in %qs not allowed outside a class definition", name);
12424 	/* Function declaration not at top level.
12425 	   Storage classes other than `extern' are not allowed
12426 	   and `extern' makes no difference.  */
12427 	if (! toplevel_bindings_p ()
12428 	    && (storage_class == sc_static
12429 		|| decl_spec_seq_has_spec_p (declspecs, ds_inline))
12430 	    && pedantic)
12431 	  {
12432 	    if (storage_class == sc_static)
12433 	      pedwarn (input_location, OPT_Wpedantic,
12434 		       "%<static%> specifier invalid for function %qs "
12435 		       "declared out of global scope", name);
12436 	    else
12437 	      pedwarn (input_location, OPT_Wpedantic,
12438 		       "%<inline%> specifier invalid for function %qs "
12439 		       "declared out of global scope", name);
12440 	  }
12441 
12442 	if (ctype == NULL_TREE)
12443 	  {
12444 	    if (virtualp)
12445 	      {
12446 		error ("virtual non-class function %qs", name);
12447 		virtualp = 0;
12448 	      }
12449 	    else if (sfk == sfk_constructor
12450 		     || sfk == sfk_destructor)
12451 	      {
12452 		error (funcdef_flag
12453 		       ? G_("%qs defined in a non-class scope")
12454 		       : G_("%qs declared in a non-class scope"), name);
12455 		sfk = sfk_none;
12456 	      }
12457 	  }
12458 
12459 	/* Record whether the function is public.  */
12460 	publicp = (ctype != NULL_TREE
12461 		   || storage_class != sc_static);
12462 
12463 	if (late_return_type_p)
12464 	  TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
12465 
12466 	decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
12467                            reqs, virtualp, flags, memfn_quals, rqual, raises,
12468 			   1, friendp,
12469 			   publicp,
12470                            inlinep | (2 * constexpr_p) | (4 * concept_p),
12471 			   initialized == SD_DELETED,
12472                            sfk,
12473                            funcdef_flag,
12474 			   template_count, in_namespace, attrlist,
12475 			   declarator->id_loc);
12476 	if (decl == NULL_TREE)
12477 	  return error_mark_node;
12478 
12479 	if (explicitp == 2)
12480 	  DECL_NONCONVERTING_P (decl) = 1;
12481 	if (staticp == 1)
12482 	  {
12483 	    int invalid_static = 0;
12484 
12485 	    /* Don't allow a static member function in a class, and forbid
12486 	       declaring main to be static.  */
12487 	    if (TREE_CODE (type) == METHOD_TYPE)
12488 	      {
12489 		permerror (input_location, "cannot declare member function %qD to have "
12490 			   "static linkage", decl);
12491 		invalid_static = 1;
12492 	      }
12493 	    else if (current_function_decl)
12494 	      {
12495 		/* 7.1.1: There can be no static function declarations within a
12496 		   block.  */
12497 		error ("cannot declare static function inside another function");
12498 		invalid_static = 1;
12499 	      }
12500 
12501 	    if (invalid_static)
12502 	      {
12503 		staticp = 0;
12504 		storage_class = sc_none;
12505 	      }
12506 	  }
12507       }
12508     else
12509       {
12510 	/* It's a variable.  */
12511 
12512 	/* An uninitialized decl with `extern' is a reference.  */
12513 	decl = grokvardecl (type, dname, unqualified_id,
12514 			    declspecs,
12515 			    initialized,
12516 			    type_quals,
12517 			    inlinep,
12518 			    concept_p,
12519 			    template_count,
12520 			    ctype ? ctype : in_namespace);
12521 	if (decl == NULL_TREE)
12522 	  return error_mark_node;
12523 
12524 	bad_specifiers (decl, BSP_VAR, virtualp,
12525 			memfn_quals != TYPE_UNQUALIFIED,
12526 			inlinep, friendp, raises != NULL_TREE);
12527 
12528 	if (ctype)
12529 	  {
12530 	    DECL_CONTEXT (decl) = ctype;
12531 	    if (staticp == 1)
12532 	      {
12533 		permerror (input_location, "%<static%> may not be used when defining "
12534 			   "(as opposed to declaring) a static data member");
12535 		staticp = 0;
12536 		storage_class = sc_none;
12537 	      }
12538 	    if (storage_class == sc_register && TREE_STATIC (decl))
12539 	      {
12540 		error ("static member %qD declared %<register%>", decl);
12541 		storage_class = sc_none;
12542 	      }
12543 	    if (storage_class == sc_extern && pedantic)
12544 	      {
12545 		pedwarn (input_location, OPT_Wpedantic,
12546 			 "cannot explicitly declare member %q#D to have "
12547 			 "extern linkage", decl);
12548 		storage_class = sc_none;
12549 	      }
12550 	  }
12551 	else if (constexpr_p && DECL_EXTERNAL (decl))
12552 	  {
12553 	    error ("declaration of %<constexpr%> variable %qD "
12554 		   "is not a definition", decl);
12555 	    constexpr_p = false;
12556 	  }
12557 
12558 	if (inlinep)
12559 	  mark_inline_variable (decl);
12560 	if (innermost_code == cdk_decomp)
12561 	  {
12562 	    gcc_assert (declarator && declarator->kind == cdk_decomp);
12563 	    DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
12564 	    DECL_ARTIFICIAL (decl) = 1;
12565 	    fit_decomposition_lang_decl (decl, NULL_TREE);
12566 	  }
12567       }
12568 
12569     if (VAR_P (decl) && !initialized)
12570       if (tree auto_node = type_uses_auto (type))
12571 	if (!CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12572 	  {
12573 	    location_t loc = declspecs->locations[ds_type_spec];
12574 	    error_at (loc, "declaration of %q#D has no initializer", decl);
12575 	    TREE_TYPE (decl) = error_mark_node;
12576 	  }
12577 
12578     if (storage_class == sc_extern && initialized && !funcdef_flag)
12579       {
12580 	if (toplevel_bindings_p ())
12581 	  {
12582 	    /* It's common practice (and completely valid) to have a const
12583 	       be initialized and declared extern.  */
12584 	    if (!(type_quals & TYPE_QUAL_CONST))
12585 	      warning (0, "%qs initialized and declared %<extern%>", name);
12586 	  }
12587 	else
12588 	  {
12589 	    error ("%qs has both %<extern%> and initializer", name);
12590 	    return error_mark_node;
12591 	  }
12592       }
12593 
12594     /* Record `register' declaration for warnings on &
12595        and in case doing stupid register allocation.  */
12596 
12597     if (storage_class == sc_register)
12598       {
12599 	DECL_REGISTER (decl) = 1;
12600 	/* Warn about register storage specifiers on PARM_DECLs.  */
12601 	if (TREE_CODE (decl) == PARM_DECL)
12602 	  {
12603 	    if (cxx_dialect >= cxx17)
12604 	      pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12605 		       "ISO C++17 does not allow %<register%> storage "
12606 		       "class specifier");
12607 	    else
12608 	      warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12609 			  "%<register%> storage class specifier used");
12610 	  }
12611       }
12612     else if (storage_class == sc_extern)
12613       DECL_THIS_EXTERN (decl) = 1;
12614     else if (storage_class == sc_static)
12615       DECL_THIS_STATIC (decl) = 1;
12616 
12617     /* Set constexpr flag on vars (functions got it in grokfndecl).  */
12618     if (constexpr_p && VAR_P (decl))
12619       DECL_DECLARED_CONSTEXPR_P (decl) = true;
12620 
12621     /* Record constancy and volatility on the DECL itself .  There's
12622        no need to do this when processing a template; we'll do this
12623        for the instantiated declaration based on the type of DECL.  */
12624     if (!processing_template_decl)
12625       cp_apply_type_quals_to_decl (type_quals, decl);
12626 
12627     return decl;
12628   }
12629 }
12630 
12631 /* Subroutine of start_function.  Ensure that each of the parameter
12632    types (as listed in PARMS) is complete, as is required for a
12633    function definition.  */
12634 
12635 static void
12636 require_complete_types_for_parms (tree parms)
12637 {
12638   for (; parms; parms = DECL_CHAIN (parms))
12639     {
12640       if (dependent_type_p (TREE_TYPE (parms)))
12641 	continue;
12642       if (!VOID_TYPE_P (TREE_TYPE (parms))
12643 	  && complete_type_or_else (TREE_TYPE (parms), parms))
12644 	{
12645 	  relayout_decl (parms);
12646 	  DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
12647 
12648 	  maybe_warn_parm_abi (TREE_TYPE (parms),
12649 			       DECL_SOURCE_LOCATION (parms));
12650 	}
12651       else
12652 	/* grokparms or complete_type_or_else will have already issued
12653 	   an error.  */
12654 	TREE_TYPE (parms) = error_mark_node;
12655     }
12656 }
12657 
12658 /* Returns nonzero if T is a local variable.  */
12659 
12660 int
12661 local_variable_p (const_tree t)
12662 {
12663   if ((VAR_P (t)
12664        /* A VAR_DECL with a context that is a _TYPE is a static data
12665 	  member.  */
12666        && !TYPE_P (CP_DECL_CONTEXT (t))
12667        /* Any other non-local variable must be at namespace scope.  */
12668        && !DECL_NAMESPACE_SCOPE_P (t))
12669       || (TREE_CODE (t) == PARM_DECL))
12670     return 1;
12671 
12672   return 0;
12673 }
12674 
12675 /* Like local_variable_p, but suitable for use as a tree-walking
12676    function.  */
12677 
12678 static tree
12679 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
12680 			 void * /*data*/)
12681 {
12682   if (local_variable_p (*tp)
12683       && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
12684     return *tp;
12685   else if (TYPE_P (*tp))
12686     *walk_subtrees = 0;
12687 
12688   return NULL_TREE;
12689 }
12690 
12691 /* Check that ARG, which is a default-argument expression for a
12692    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
12693    something goes wrong.  DECL may also be a _TYPE node, rather than a
12694    DECL, if there is no DECL available.  */
12695 
12696 tree
12697 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
12698 {
12699   tree var;
12700   tree decl_type;
12701 
12702   if (TREE_CODE (arg) == DEFAULT_ARG)
12703     /* We get a DEFAULT_ARG when looking at an in-class declaration
12704        with a default argument.  Ignore the argument for now; we'll
12705        deal with it after the class is complete.  */
12706     return arg;
12707 
12708   if (TYPE_P (decl))
12709     {
12710       decl_type = decl;
12711       decl = NULL_TREE;
12712     }
12713   else
12714     decl_type = TREE_TYPE (decl);
12715 
12716   if (arg == error_mark_node
12717       || decl == error_mark_node
12718       || TREE_TYPE (arg) == error_mark_node
12719       || decl_type == error_mark_node)
12720     /* Something already went wrong.  There's no need to check
12721        further.  */
12722     return error_mark_node;
12723 
12724   /* [dcl.fct.default]
12725 
12726      A default argument expression is implicitly converted to the
12727      parameter type.  */
12728   ++cp_unevaluated_operand;
12729   /* Avoid digest_init clobbering the initializer.  */
12730   tree carg = BRACE_ENCLOSED_INITIALIZER_P (arg) ? unshare_expr (arg): arg;
12731   perform_implicit_conversion_flags (decl_type, carg, complain,
12732 				     LOOKUP_IMPLICIT);
12733   --cp_unevaluated_operand;
12734 
12735   /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
12736      the call sites.  */
12737   if (TYPE_PTR_OR_PTRMEM_P (decl_type)
12738       && null_ptr_cst_p (arg))
12739     return nullptr_node;
12740 
12741   /* [dcl.fct.default]
12742 
12743      Local variables shall not be used in default argument
12744      expressions.
12745 
12746      The keyword `this' shall not be used in a default argument of a
12747      member function.  */
12748   var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
12749   if (var)
12750     {
12751       if (complain & tf_warning_or_error)
12752 	{
12753 	  if (DECL_NAME (var) == this_identifier)
12754 	    permerror (input_location, "default argument %qE uses %qD",
12755 		       arg, var);
12756 	  else
12757 	    error ("default argument %qE uses local variable %qD", arg, var);
12758 	}
12759       return error_mark_node;
12760     }
12761 
12762   /* All is well.  */
12763   return arg;
12764 }
12765 
12766 /* Returns a deprecated type used within TYPE, or NULL_TREE if none.  */
12767 
12768 static tree
12769 type_is_deprecated (tree type)
12770 {
12771   enum tree_code code;
12772   if (TREE_DEPRECATED (type))
12773     return type;
12774   if (TYPE_NAME (type))
12775     {
12776       if (TREE_DEPRECATED (TYPE_NAME (type)))
12777 	return type;
12778       else
12779 	return NULL_TREE;
12780     }
12781 
12782   /* Do warn about using typedefs to a deprecated class.  */
12783   if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
12784     return type_is_deprecated (TYPE_MAIN_VARIANT (type));
12785 
12786   code = TREE_CODE (type);
12787 
12788   if (code == POINTER_TYPE || code == REFERENCE_TYPE
12789       || code == OFFSET_TYPE || code == FUNCTION_TYPE
12790       || code == METHOD_TYPE || code == ARRAY_TYPE)
12791     return type_is_deprecated (TREE_TYPE (type));
12792 
12793   if (TYPE_PTRMEMFUNC_P (type))
12794     return type_is_deprecated
12795       (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
12796 
12797   return NULL_TREE;
12798 }
12799 
12800 /* Decode the list of parameter types for a function type.
12801    Given the list of things declared inside the parens,
12802    return a list of types.
12803 
12804    If this parameter does not end with an ellipsis, we append
12805    void_list_node.
12806 
12807    *PARMS is set to the chain of PARM_DECLs created.  */
12808 
12809 tree
12810 grokparms (tree parmlist, tree *parms)
12811 {
12812   tree result = NULL_TREE;
12813   tree decls = NULL_TREE;
12814   tree parm;
12815   int any_error = 0;
12816 
12817   for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
12818     {
12819       tree type = NULL_TREE;
12820       tree init = TREE_PURPOSE (parm);
12821       tree decl = TREE_VALUE (parm);
12822 
12823       if (parm == void_list_node)
12824 	break;
12825 
12826       if (! decl || TREE_TYPE (decl) == error_mark_node)
12827 	continue;
12828 
12829       type = TREE_TYPE (decl);
12830       if (VOID_TYPE_P (type))
12831 	{
12832 	  if (same_type_p (type, void_type_node)
12833 	      && !init
12834 	      && !DECL_NAME (decl) && !result
12835 	      && TREE_CHAIN (parm) == void_list_node)
12836 	    /* DR 577: A parameter list consisting of a single
12837 	       unnamed parameter of non-dependent type 'void'.  */
12838 	    break;
12839 	  else if (cv_qualified_p (type))
12840 	    error_at (DECL_SOURCE_LOCATION (decl),
12841 		      "invalid use of cv-qualified type %qT in "
12842 		      "parameter declaration", type);
12843 	  else
12844 	    error_at (DECL_SOURCE_LOCATION (decl),
12845 		      "invalid use of type %<void%> in parameter "
12846 		      "declaration");
12847 	  /* It's not a good idea to actually create parameters of
12848 	     type `void'; other parts of the compiler assume that a
12849 	     void type terminates the parameter list.  */
12850 	  type = error_mark_node;
12851 	  TREE_TYPE (decl) = error_mark_node;
12852 	}
12853 
12854       if (type != error_mark_node)
12855 	{
12856 	  if (deprecated_state != DEPRECATED_SUPPRESS)
12857 	    {
12858 	      tree deptype = type_is_deprecated (type);
12859 	      if (deptype)
12860 		cp_warn_deprecated_use (deptype);
12861 	    }
12862 
12863 	  /* Top-level qualifiers on the parameters are
12864 	     ignored for function types.  */
12865 	  type = cp_build_qualified_type (type, 0);
12866 	  if (TREE_CODE (type) == METHOD_TYPE)
12867 	    {
12868 	      error ("parameter %qD invalidly declared method type", decl);
12869 	      type = build_pointer_type (type);
12870 	      TREE_TYPE (decl) = type;
12871 	    }
12872 	  else if (abstract_virtuals_error (decl, type))
12873 	    any_error = 1;  /* Seems like a good idea.  */
12874 	  else if (cxx_dialect < cxx17 && POINTER_TYPE_P (type))
12875 	    {
12876 	      /* Before C++17 DR 393:
12877 		 [dcl.fct]/6, parameter types cannot contain pointers
12878 		 (references) to arrays of unknown bound.  */
12879 	      tree t = TREE_TYPE (type);
12880 	      int ptr = TYPE_PTR_P (type);
12881 
12882 	      while (1)
12883 		{
12884 		  if (TYPE_PTR_P (t))
12885 		    ptr = 1;
12886 		  else if (TREE_CODE (t) != ARRAY_TYPE)
12887 		    break;
12888 		  else if (!TYPE_DOMAIN (t))
12889 		    break;
12890 		  t = TREE_TYPE (t);
12891 		}
12892 	      if (TREE_CODE (t) == ARRAY_TYPE)
12893 		pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
12894 			 ptr
12895 			 ? G_("parameter %qD includes pointer to array of "
12896 			      "unknown bound %qT")
12897 			 : G_("parameter %qD includes reference to array of "
12898 			      "unknown bound %qT"),
12899 			 decl, t);
12900 	    }
12901 
12902 	  if (any_error)
12903 	    init = NULL_TREE;
12904 	  else if (init && !processing_template_decl)
12905 	    init = check_default_argument (decl, init, tf_warning_or_error);
12906 	}
12907 
12908       DECL_CHAIN (decl) = decls;
12909       decls = decl;
12910       result = tree_cons (init, type, result);
12911     }
12912   decls = nreverse (decls);
12913   result = nreverse (result);
12914   if (parm)
12915     result = chainon (result, void_list_node);
12916   *parms = decls;
12917 
12918   return result;
12919 }
12920 
12921 
12922 /* D is a constructor or overloaded `operator='.
12923 
12924    Let T be the class in which D is declared. Then, this function
12925    returns:
12926 
12927    -1 if D's is an ill-formed constructor or copy assignment operator
12928       whose first parameter is of type `T'.
12929    0  if D is not a copy constructor or copy assignment
12930       operator.
12931    1  if D is a copy constructor or copy assignment operator whose
12932       first parameter is a reference to non-const qualified T.
12933    2  if D is a copy constructor or copy assignment operator whose
12934       first parameter is a reference to const qualified T.
12935 
12936    This function can be used as a predicate. Positive values indicate
12937    a copy constructor and nonzero values indicate a copy assignment
12938    operator.  */
12939 
12940 int
12941 copy_fn_p (const_tree d)
12942 {
12943   tree args;
12944   tree arg_type;
12945   int result = 1;
12946 
12947   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
12948 
12949   if (TREE_CODE (d) == TEMPLATE_DECL
12950       || (DECL_TEMPLATE_INFO (d)
12951 	  && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
12952     /* Instantiations of template member functions are never copy
12953        functions.  Note that member functions of templated classes are
12954        represented as template functions internally, and we must
12955        accept those as copy functions.  */
12956     return 0;
12957 
12958   args = FUNCTION_FIRST_USER_PARMTYPE (d);
12959   if (!args)
12960     return 0;
12961 
12962   arg_type = TREE_VALUE (args);
12963   if (arg_type == error_mark_node)
12964     return 0;
12965 
12966   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
12967     {
12968       /* Pass by value copy assignment operator.  */
12969       result = -1;
12970     }
12971   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
12972 	   && !TYPE_REF_IS_RVALUE (arg_type)
12973 	   && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
12974     {
12975       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
12976 	result = 2;
12977     }
12978   else
12979     return 0;
12980 
12981   args = TREE_CHAIN (args);
12982 
12983   if (args && args != void_list_node && !TREE_PURPOSE (args))
12984     /* There are more non-optional args.  */
12985     return 0;
12986 
12987   return result;
12988 }
12989 
12990 /* D is a constructor or overloaded `operator='.
12991 
12992    Let T be the class in which D is declared. Then, this function
12993    returns true when D is a move constructor or move assignment
12994    operator, false otherwise.  */
12995 
12996 bool
12997 move_fn_p (const_tree d)
12998 {
12999   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
13000 
13001   if (cxx_dialect == cxx98)
13002     /* There are no move constructors if we are in C++98 mode.  */
13003     return false;
13004 
13005   if (TREE_CODE (d) == TEMPLATE_DECL
13006       || (DECL_TEMPLATE_INFO (d)
13007          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
13008     /* Instantiations of template member functions are never move
13009        functions.  Note that member functions of templated classes are
13010        represented as template functions internally, and we must
13011        accept those as move functions.  */
13012     return 0;
13013 
13014   return move_signature_fn_p (d);
13015 }
13016 
13017 /* D is a constructor or overloaded `operator='.
13018 
13019    Then, this function returns true when D has the same signature as a move
13020    constructor or move assignment operator (because either it is such a
13021    ctor/op= or it is a template specialization with the same signature),
13022    false otherwise.  */
13023 
13024 bool
13025 move_signature_fn_p (const_tree d)
13026 {
13027   tree args;
13028   tree arg_type;
13029   bool result = false;
13030 
13031   args = FUNCTION_FIRST_USER_PARMTYPE (d);
13032   if (!args)
13033     return 0;
13034 
13035   arg_type = TREE_VALUE (args);
13036   if (arg_type == error_mark_node)
13037     return 0;
13038 
13039   if (TREE_CODE (arg_type) == REFERENCE_TYPE
13040       && TYPE_REF_IS_RVALUE (arg_type)
13041       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
13042                       DECL_CONTEXT (d)))
13043     result = true;
13044 
13045   args = TREE_CHAIN (args);
13046 
13047   if (args && args != void_list_node && !TREE_PURPOSE (args))
13048     /* There are more non-optional args.  */
13049     return false;
13050 
13051   return result;
13052 }
13053 
13054 /* Remember any special properties of member function DECL.  */
13055 
13056 void
13057 grok_special_member_properties (tree decl)
13058 {
13059   tree class_type;
13060 
13061   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
13062     return;
13063 
13064   class_type = DECL_CONTEXT (decl);
13065   if (IDENTIFIER_CTOR_P (DECL_NAME (decl)))
13066     {
13067       int ctor = copy_fn_p (decl);
13068 
13069       if (!DECL_ARTIFICIAL (decl))
13070 	TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
13071 
13072       if (ctor > 0)
13073 	{
13074 	  /* [class.copy]
13075 
13076 	     A non-template constructor for class X is a copy
13077 	     constructor if its first parameter is of type X&, const
13078 	     X&, volatile X& or const volatile X&, and either there
13079 	     are no other parameters or else all other parameters have
13080 	     default arguments.  */
13081 	  TYPE_HAS_COPY_CTOR (class_type) = 1;
13082 	  if (user_provided_p (decl))
13083 	    TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
13084 	  if (ctor > 1)
13085 	    TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
13086 	}
13087       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
13088 	TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
13089       else if (move_fn_p (decl) && user_provided_p (decl))
13090 	TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
13091       else if (is_list_ctor (decl))
13092 	TYPE_HAS_LIST_CTOR (class_type) = 1;
13093 
13094       if (DECL_DECLARED_CONSTEXPR_P (decl)
13095 	  && !ctor && !move_fn_p (decl))
13096 	TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
13097     }
13098   else if (DECL_NAME (decl) == assign_op_identifier)
13099     {
13100       /* [class.copy]
13101 
13102 	 A non-template assignment operator for class X is a copy
13103 	 assignment operator if its parameter is of type X, X&, const
13104 	 X&, volatile X& or const volatile X&.  */
13105 
13106       int assop = copy_fn_p (decl);
13107 
13108       if (assop)
13109 	{
13110 	  TYPE_HAS_COPY_ASSIGN (class_type) = 1;
13111 	  if (user_provided_p (decl))
13112 	    TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
13113 	  if (assop != 1)
13114 	    TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
13115 	}
13116       else if (move_fn_p (decl) && user_provided_p (decl))
13117 	TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
13118     }
13119   else if (IDENTIFIER_CONV_OP_P (DECL_NAME (decl)))
13120     TYPE_HAS_CONVERSION (class_type) = true;
13121 
13122   /* Destructors are handled in check_methods.  */
13123 }
13124 
13125 /* Check a constructor DECL has the correct form.  Complains
13126    if the class has a constructor of the form X(X).  */
13127 
13128 bool
13129 grok_ctor_properties (const_tree ctype, const_tree decl)
13130 {
13131   int ctor_parm = copy_fn_p (decl);
13132 
13133   if (ctor_parm < 0)
13134     {
13135       /* [class.copy]
13136 
13137 	 A declaration of a constructor for a class X is ill-formed if
13138 	 its first parameter is of type (optionally cv-qualified) X
13139 	 and either there are no other parameters or else all other
13140 	 parameters have default arguments.
13141 
13142 	 We *don't* complain about member template instantiations that
13143 	 have this form, though; they can occur as we try to decide
13144 	 what constructor to use during overload resolution.  Since
13145 	 overload resolution will never prefer such a constructor to
13146 	 the non-template copy constructor (which is either explicitly
13147 	 or implicitly defined), there's no need to worry about their
13148 	 existence.  Theoretically, they should never even be
13149 	 instantiated, but that's hard to forestall.  */
13150       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
13151 		ctype, ctype);
13152       return false;
13153     }
13154 
13155   return true;
13156 }
13157 
13158 /* DECL is a declaration for an overloaded or conversion operator.  If
13159    COMPLAIN is true, errors are issued for invalid declarations.  */
13160 
13161 bool
13162 grok_op_properties (tree decl, bool complain)
13163 {
13164   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
13165   bool methodp = TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE;
13166   tree name = DECL_NAME (decl);
13167 
13168   tree class_type = DECL_CONTEXT (decl);
13169   if (class_type && !CLASS_TYPE_P (class_type))
13170     class_type = NULL_TREE;
13171 
13172   tree_code operator_code;
13173   unsigned op_flags;
13174   if (IDENTIFIER_CONV_OP_P (name))
13175     {
13176       /* Conversion operators are TYPE_EXPR for the purposes of this
13177 	 function.  */
13178       operator_code = TYPE_EXPR;
13179       op_flags = OVL_OP_FLAG_UNARY;
13180     }
13181   else
13182     {
13183       const ovl_op_info_t *ovl_op = IDENTIFIER_OVL_OP_INFO (name);
13184 
13185       operator_code = ovl_op->tree_code;
13186       op_flags = ovl_op->flags;
13187       gcc_checking_assert (operator_code != ERROR_MARK);
13188       DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13189     }
13190 
13191   if (op_flags & OVL_OP_FLAG_ALLOC)
13192     {
13193       /* operator new and operator delete are quite special.  */
13194       if (class_type)
13195 	switch (op_flags)
13196 	  {
13197 	  case OVL_OP_FLAG_ALLOC:
13198 	    TYPE_HAS_NEW_OPERATOR (class_type) = 1;
13199 	    break;
13200 
13201 	  case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE:
13202 	    TYPE_GETS_DELETE (class_type) |= 1;
13203 	    break;
13204 
13205 	  case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_VEC:
13206 	    TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
13207 	    break;
13208 
13209 	  case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE | OVL_OP_FLAG_VEC:
13210 	    TYPE_GETS_DELETE (class_type) |= 2;
13211 	    break;
13212 
13213 	  default:
13214 	    gcc_unreachable ();
13215 	  }
13216 
13217       /* [basic.std.dynamic.allocation]/1:
13218 
13219 	 A program is ill-formed if an allocation function is declared
13220 	 in a namespace scope other than global scope or declared
13221 	 static in global scope.
13222 
13223 	 The same also holds true for deallocation functions.  */
13224       if (DECL_NAMESPACE_SCOPE_P (decl))
13225 	{
13226 	  if (CP_DECL_CONTEXT (decl) != global_namespace)
13227 	    {
13228 	      error ("%qD may not be declared within a namespace", decl);
13229 	      return false;
13230 	    }
13231 
13232 	  if (!TREE_PUBLIC (decl))
13233 	    {
13234 	      error ("%qD may not be declared as static", decl);
13235 	      return false;
13236 	    }
13237 	}
13238 
13239       if (op_flags & OVL_OP_FLAG_DELETE)
13240 	TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
13241       else
13242 	{
13243 	  DECL_IS_OPERATOR_NEW (decl) = 1;
13244 	  TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
13245 	}
13246 
13247       return true;
13248     }
13249 
13250   /* An operator function must either be a non-static member function
13251      or have at least one parameter of a class, a reference to a class,
13252      an enumeration, or a reference to an enumeration.  13.4.0.6 */
13253   if (! methodp || DECL_STATIC_FUNCTION_P (decl))
13254     {
13255       if (operator_code == TYPE_EXPR
13256 	  || operator_code == CALL_EXPR
13257 	  || operator_code == COMPONENT_REF
13258 	  || operator_code == ARRAY_REF
13259 	  || operator_code == NOP_EXPR)
13260 	{
13261 	  error ("%qD must be a nonstatic member function", decl);
13262 	  return false;
13263 	}
13264 
13265       if (DECL_STATIC_FUNCTION_P (decl))
13266 	{
13267 	  error ("%qD must be either a non-static member "
13268 		 "function or a non-member function", decl);
13269 	  return false;
13270 	}
13271 
13272       for (tree arg = argtypes; ; arg = TREE_CHAIN (arg))
13273 	{
13274 	  if (!arg || arg == void_list_node)
13275 	    {
13276 	      if (complain)
13277 		error ("%qD must have an argument of class or "
13278 		       "enumerated type", decl);
13279 	      return false;
13280 	    }
13281 
13282 	  tree type = non_reference (TREE_VALUE (arg));
13283 	  if (type == error_mark_node)
13284 	    return false;
13285 
13286 	  /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
13287 	     because these checks are performed even on template
13288 	     functions.  */
13289 	  if (MAYBE_CLASS_TYPE_P (type)
13290 	      || TREE_CODE (type) == ENUMERAL_TYPE)
13291 	    break;
13292 	}
13293     }
13294 
13295   if (operator_code == CALL_EXPR)
13296     /* There are no further restrictions on the arguments to an overloaded
13297        "operator ()".  */
13298     return true;
13299 
13300   if (operator_code == COND_EXPR)
13301     {
13302       /* 13.4.0.3 */
13303       error ("ISO C++ prohibits overloading operator ?:");
13304       return false;
13305     }
13306 
13307   /* Count the number of arguments and check for ellipsis.  */
13308   int arity = 0;
13309   for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13310     {
13311       if (!arg)
13312 	{
13313 	  /* Variadic.  */
13314 	  error ("%qD must not have variable number of arguments", decl);
13315 	  return false;
13316 	}
13317       ++arity;
13318     }
13319 
13320   /* Verify correct number of arguments.  */
13321   switch (op_flags)
13322     {
13323     case OVL_OP_FLAG_AMBIARY:
13324       if (arity == 1)
13325 	{
13326 	  /* We have a unary instance of an ambi-ary op.  Remap to the
13327 	     unary one.  */
13328 	  unsigned alt = ovl_op_alternate[ovl_op_mapping [operator_code]];
13329 	  const ovl_op_info_t *ovl_op = &ovl_op_info[false][alt];
13330 	  gcc_checking_assert (ovl_op->flags == OVL_OP_FLAG_UNARY);
13331 	  operator_code = ovl_op->tree_code;
13332 	  DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13333 	}
13334       else if (arity != 2)
13335 	{
13336 	  /* This was an ambiguous operator but is invalid. */
13337 	  error (methodp
13338 		 ? G_("%qD must have either zero or one argument")
13339 		 : G_("%qD must have either one or two arguments"), decl);
13340 	  return false;
13341 	}
13342       else if ((operator_code == POSTINCREMENT_EXPR
13343 		|| operator_code == POSTDECREMENT_EXPR)
13344 	       && ! processing_template_decl
13345 	       /* x++ and x--'s second argument must be an int.  */
13346 	       && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)),
13347 				 integer_type_node))
13348 	{
13349 	  error (methodp
13350 		 ? G_("postfix %qD must have %<int%> as its argument")
13351 		 : G_("postfix %qD must have %<int%> as its second argument"),
13352 		 decl);
13353 	  return false;
13354 	}
13355       break;
13356 
13357     case OVL_OP_FLAG_UNARY:
13358       if (arity != 1)
13359 	{
13360 	  error (methodp
13361 		 ? G_("%qD must have no arguments")
13362 		 : G_("%qD must have exactly one argument"), decl);
13363 	  return false;
13364 	}
13365       break;
13366 
13367     case OVL_OP_FLAG_BINARY:
13368       if (arity != 2)
13369 	{
13370 	  error (methodp
13371 		 ? G_("%qD must have exactly one argument")
13372 		 : G_("%qD must have exactly two arguments"), decl);
13373 	  return false;
13374 	}
13375       break;
13376 
13377     default:
13378       gcc_unreachable ();
13379     }
13380 
13381   /* There can be no default arguments.  */
13382   for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13383     if (TREE_PURPOSE (arg))
13384       {
13385 	TREE_PURPOSE (arg) = NULL_TREE;
13386 	if (operator_code == POSTINCREMENT_EXPR
13387 	    || operator_code == POSTDECREMENT_EXPR)
13388 	  pedwarn (input_location, OPT_Wpedantic,
13389 		   "%qD cannot have default arguments", decl);
13390 	else
13391 	  {
13392 	    error ("%qD cannot have default arguments", decl);
13393 	    return false;
13394 	  }
13395       }
13396 
13397   /* At this point the declaration is well-formed.  It may not be
13398      sensible though.  */
13399 
13400   /* Check member function warnings only on the in-class declaration.
13401      There's no point warning on an out-of-class definition.  */
13402   if (class_type && class_type != current_class_type)
13403     return true;
13404 
13405   /* Warn about conversion operators that will never be used.  */
13406   if (IDENTIFIER_CONV_OP_P (name)
13407       && ! DECL_TEMPLATE_INFO (decl)
13408       && warn_conversion)
13409     {
13410       tree t = TREE_TYPE (name);
13411       int ref = (TREE_CODE (t) == REFERENCE_TYPE);
13412 
13413       if (ref)
13414 	t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
13415 
13416       if (VOID_TYPE_P (t))
13417 	warning (OPT_Wconversion,
13418 		 ref
13419 		 ? G_("conversion to a reference to void "
13420 		      "will never use a type conversion operator")
13421 		 : G_("conversion to void "
13422 		      "will never use a type conversion operator"));
13423       else if (class_type)
13424 	{
13425 	  if (t == class_type)
13426 	    warning (OPT_Wconversion,
13427                      ref
13428                      ? G_("conversion to a reference to the same type "
13429                           "will never use a type conversion operator")
13430                      : G_("conversion to the same type "
13431                           "will never use a type conversion operator"));
13432 	  /* Don't force t to be complete here.  */
13433 	  else if (MAYBE_CLASS_TYPE_P (t)
13434 		   && COMPLETE_TYPE_P (t)
13435 		   && DERIVED_FROM_P (t, class_type))
13436 	    warning (OPT_Wconversion,
13437 		     ref
13438 		     ? G_("conversion to a reference to a base class "
13439 			  "will never use a type conversion operator")
13440 		     : G_("conversion to a base class "
13441 			  "will never use a type conversion operator"));
13442 	}
13443     }
13444 
13445   if (!warn_ecpp)
13446     return true;
13447 
13448   /* Effective C++ rules below.  */
13449 
13450   /* More Effective C++ rule 7.  */
13451   if (operator_code == TRUTH_ANDIF_EXPR
13452       || operator_code == TRUTH_ORIF_EXPR
13453       || operator_code == COMPOUND_EXPR)
13454     warning (OPT_Weffc__,
13455 	     "user-defined %qD always evaluates both arguments", decl);
13456 
13457   /* More Effective C++ rule 6.  */
13458   if (operator_code == POSTINCREMENT_EXPR
13459       || operator_code == POSTDECREMENT_EXPR
13460       || operator_code == PREINCREMENT_EXPR
13461       || operator_code == PREDECREMENT_EXPR)
13462     {
13463       tree arg = TREE_VALUE (argtypes);
13464       tree ret = TREE_TYPE (TREE_TYPE (decl));
13465       if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
13466 	arg = TREE_TYPE (arg);
13467       arg = TYPE_MAIN_VARIANT (arg);
13468 
13469       if (operator_code == PREINCREMENT_EXPR
13470 	  || operator_code == PREDECREMENT_EXPR)
13471 	{
13472 	  if (TREE_CODE (ret) != REFERENCE_TYPE
13473 	      || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)), arg))
13474 	    warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
13475 		     build_reference_type (arg));
13476 	}
13477       else
13478 	{
13479 	  if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
13480 	    warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
13481 	}
13482     }
13483 
13484   /* Effective C++ rule 23.  */
13485   if (!DECL_ASSIGNMENT_OPERATOR_P (decl)
13486       && (operator_code == PLUS_EXPR
13487 	  || operator_code == MINUS_EXPR
13488 	  || operator_code == TRUNC_DIV_EXPR
13489 	  || operator_code == MULT_EXPR
13490 	  || operator_code == TRUNC_MOD_EXPR)
13491       && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
13492     warning (OPT_Weffc__, "%qD should return by value", decl);
13493 
13494   return true;
13495 }
13496 
13497 /* Return a string giving the keyword associate with CODE.  */
13498 
13499 static const char *
13500 tag_name (enum tag_types code)
13501 {
13502   switch (code)
13503     {
13504     case record_type:
13505       return "struct";
13506     case class_type:
13507       return "class";
13508     case union_type:
13509       return "union";
13510     case enum_type:
13511       return "enum";
13512     case typename_type:
13513       return "typename";
13514     default:
13515       gcc_unreachable ();
13516     }
13517 }
13518 
13519 /* Name lookup in an elaborated-type-specifier (after the keyword
13520    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
13521    elaborated-type-specifier is invalid, issue a diagnostic and return
13522    error_mark_node; otherwise, return the *_TYPE to which it referred.
13523    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
13524 
13525 tree
13526 check_elaborated_type_specifier (enum tag_types tag_code,
13527 				 tree decl,
13528 				 bool allow_template_p)
13529 {
13530   tree type;
13531 
13532   /* In the case of:
13533 
13534        struct S { struct S *p; };
13535 
13536      name lookup will find the TYPE_DECL for the implicit "S::S"
13537      typedef.  Adjust for that here.  */
13538   if (DECL_SELF_REFERENCE_P (decl))
13539     decl = TYPE_NAME (TREE_TYPE (decl));
13540 
13541   type = TREE_TYPE (decl);
13542 
13543   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
13544      is false for this case as well.  */
13545   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
13546     {
13547       error ("using template type parameter %qT after %qs",
13548 	     type, tag_name (tag_code));
13549       return error_mark_node;
13550     }
13551   /* Accept template template parameters.  */
13552   else if (allow_template_p
13553 	   && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
13554 	       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
13555     ;
13556   /*   [dcl.type.elab]
13557 
13558        If the identifier resolves to a typedef-name or the
13559        simple-template-id resolves to an alias template
13560        specialization, the elaborated-type-specifier is ill-formed.
13561 
13562      In other words, the only legitimate declaration to use in the
13563      elaborated type specifier is the implicit typedef created when
13564      the type is declared.  */
13565   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
13566 	   && !DECL_SELF_REFERENCE_P (decl)
13567 	   && tag_code != typename_type)
13568     {
13569       if (alias_template_specialization_p (type))
13570 	error ("using alias template specialization %qT after %qs",
13571 	       type, tag_name (tag_code));
13572       else
13573 	error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
13574       inform (DECL_SOURCE_LOCATION (decl),
13575 	      "%qD has a previous declaration here", decl);
13576       return error_mark_node;
13577     }
13578   else if (TREE_CODE (type) != RECORD_TYPE
13579 	   && TREE_CODE (type) != UNION_TYPE
13580 	   && tag_code != enum_type
13581 	   && tag_code != typename_type)
13582     {
13583       error ("%qT referred to as %qs", type, tag_name (tag_code));
13584       inform (location_of (type), "%qT has a previous declaration here", type);
13585       return error_mark_node;
13586     }
13587   else if (TREE_CODE (type) != ENUMERAL_TYPE
13588 	   && tag_code == enum_type)
13589     {
13590       error ("%qT referred to as enum", type);
13591       inform (location_of (type), "%qT has a previous declaration here", type);
13592       return error_mark_node;
13593     }
13594   else if (!allow_template_p
13595 	   && TREE_CODE (type) == RECORD_TYPE
13596 	   && CLASSTYPE_IS_TEMPLATE (type))
13597     {
13598       /* If a class template appears as elaborated type specifier
13599 	 without a template header such as:
13600 
13601 	   template <class T> class C {};
13602 	   void f(class C);		// No template header here
13603 
13604 	 then the required template argument is missing.  */
13605       error ("template argument required for %<%s %T%>",
13606 	     tag_name (tag_code),
13607 	     DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
13608       return error_mark_node;
13609     }
13610 
13611   return type;
13612 }
13613 
13614 /* Lookup NAME in elaborate type specifier in scope according to
13615    SCOPE and issue diagnostics if necessary.
13616    Return *_TYPE node upon success, NULL_TREE when the NAME is not
13617    found, and ERROR_MARK_NODE for type error.  */
13618 
13619 static tree
13620 lookup_and_check_tag (enum tag_types tag_code, tree name,
13621 		      tag_scope scope, bool template_header_p)
13622 {
13623   tree t;
13624   tree decl;
13625   if (scope == ts_global)
13626     {
13627       /* First try ordinary name lookup, ignoring hidden class name
13628 	 injected via friend declaration.  */
13629       decl = lookup_name_prefer_type (name, 2);
13630       decl = strip_using_decl (decl);
13631       /* If that fails, the name will be placed in the smallest
13632 	 non-class, non-function-prototype scope according to 3.3.1/5.
13633 	 We may already have a hidden name declared as friend in this
13634 	 scope.  So lookup again but not ignoring hidden names.
13635 	 If we find one, that name will be made visible rather than
13636 	 creating a new tag.  */
13637       if (!decl)
13638 	decl = lookup_type_scope (name, ts_within_enclosing_non_class);
13639     }
13640   else
13641     decl = lookup_type_scope (name, scope);
13642 
13643   if (decl
13644       && (DECL_CLASS_TEMPLATE_P (decl)
13645 	  /* If scope is ts_current we're defining a class, so ignore a
13646 	     template template parameter.  */
13647 	  || (scope != ts_current
13648 	      && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
13649     decl = DECL_TEMPLATE_RESULT (decl);
13650 
13651   if (decl && TREE_CODE (decl) == TYPE_DECL)
13652     {
13653       /* Look for invalid nested type:
13654 	   class C {
13655 	     class C {};
13656 	   };  */
13657       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
13658 	{
13659 	  error ("%qD has the same name as the class in which it is "
13660 		 "declared",
13661 		 decl);
13662 	  return error_mark_node;
13663 	}
13664 
13665       /* Two cases we need to consider when deciding if a class
13666 	 template is allowed as an elaborated type specifier:
13667 	 1. It is a self reference to its own class.
13668 	 2. It comes with a template header.
13669 
13670 	 For example:
13671 
13672 	   template <class T> class C {
13673 	     class C *c1;		// DECL_SELF_REFERENCE_P is true
13674 	     class D;
13675 	   };
13676 	   template <class U> class C; // template_header_p is true
13677 	   template <class T> class C<T>::D {
13678 	     class C *c2;		// DECL_SELF_REFERENCE_P is true
13679 	   };  */
13680 
13681       t = check_elaborated_type_specifier (tag_code,
13682 					   decl,
13683 					   template_header_p
13684 					   | DECL_SELF_REFERENCE_P (decl));
13685       if (template_header_p && t && CLASS_TYPE_P (t)
13686 	  && (!CLASSTYPE_TEMPLATE_INFO (t)
13687 	      || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))))
13688 	{
13689 	  error ("%qT is not a template", t);
13690 	  inform (location_of (t), "previous declaration here");
13691 	  if (TYPE_CLASS_SCOPE_P (t)
13692 	      && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t)))
13693 	    inform (input_location,
13694 		    "perhaps you want to explicitly add %<%T::%>",
13695 		    TYPE_CONTEXT (t));
13696 	  t = error_mark_node;
13697 	}
13698 
13699       return t;
13700     }
13701   else if (decl && TREE_CODE (decl) == TREE_LIST)
13702     {
13703       error ("reference to %qD is ambiguous", name);
13704       print_candidates (decl);
13705       return error_mark_node;
13706     }
13707   else
13708     return NULL_TREE;
13709 }
13710 
13711 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
13712    Define the tag as a forward-reference if it is not defined.
13713 
13714    If a declaration is given, process it here, and report an error if
13715    multiple declarations are not identical.
13716 
13717    SCOPE is TS_CURRENT when this is also a definition.  Only look in
13718    the current frame for the name (since C++ allows new names in any
13719    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
13720    declaration.  Only look beginning from the current scope outward up
13721    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
13722 
13723    TEMPLATE_HEADER_P is true when this declaration is preceded by
13724    a set of template parameters.  */
13725 
13726 static tree
13727 xref_tag_1 (enum tag_types tag_code, tree name,
13728             tag_scope scope, bool template_header_p)
13729 {
13730   enum tree_code code;
13731   tree context = NULL_TREE;
13732 
13733   gcc_assert (identifier_p (name));
13734 
13735   switch (tag_code)
13736     {
13737     case record_type:
13738     case class_type:
13739       code = RECORD_TYPE;
13740       break;
13741     case union_type:
13742       code = UNION_TYPE;
13743       break;
13744     case enum_type:
13745       code = ENUMERAL_TYPE;
13746       break;
13747     default:
13748       gcc_unreachable ();
13749     }
13750 
13751   /* In case of anonymous name, xref_tag is only called to
13752      make type node and push name.  Name lookup is not required.  */
13753   tree t = NULL_TREE;
13754   if (scope != ts_lambda && !anon_aggrname_p (name))
13755     t = lookup_and_check_tag  (tag_code, name, scope, template_header_p);
13756 
13757   if (t == error_mark_node)
13758     return error_mark_node;
13759 
13760   if (scope != ts_current && t && current_class_type
13761       && template_class_depth (current_class_type)
13762       && template_header_p)
13763     {
13764       if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
13765 	return t;
13766 
13767       /* Since SCOPE is not TS_CURRENT, we are not looking at a
13768 	 definition of this tag.  Since, in addition, we are currently
13769 	 processing a (member) template declaration of a template
13770 	 class, we must be very careful; consider:
13771 
13772 	   template <class X> struct S1
13773 
13774 	   template <class U> struct S2
13775 	   {
13776 	     template <class V> friend struct S1;
13777 	   };
13778 
13779 	 Here, the S2::S1 declaration should not be confused with the
13780 	 outer declaration.  In particular, the inner version should
13781 	 have a template parameter of level 2, not level 1.
13782 
13783 	 On the other hand, when presented with:
13784 
13785 	   template <class T> struct S1
13786 	   {
13787 	     template <class U> struct S2 {};
13788 	     template <class U> friend struct S2;
13789 	   };
13790 
13791 	 the friend must find S1::S2 eventually.  We accomplish this
13792 	 by making sure that the new type we create to represent this
13793 	 declaration has the right TYPE_CONTEXT.  */
13794       context = TYPE_CONTEXT (t);
13795       t = NULL_TREE;
13796     }
13797 
13798   if (! t)
13799     {
13800       /* If no such tag is yet defined, create a forward-reference node
13801 	 and record it as the "definition".
13802 	 When a real declaration of this type is found,
13803 	 the forward-reference will be altered into a real type.  */
13804       if (code == ENUMERAL_TYPE)
13805 	{
13806 	  error ("use of enum %q#D without previous declaration", name);
13807 	  return error_mark_node;
13808 	}
13809       else
13810 	{
13811 	  t = make_class_type (code);
13812 	  TYPE_CONTEXT (t) = context;
13813 	  if (scope == ts_lambda)
13814 	    {
13815 	      /* Mark it as a lambda type.  */
13816 	      CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
13817 	      /* And push it into current scope.  */
13818 	      scope = ts_current;
13819 	    }
13820 	  t = pushtag (name, t, scope);
13821 	}
13822     }
13823   else
13824     {
13825       if (template_header_p && MAYBE_CLASS_TYPE_P (t))
13826         {
13827           /* Check that we aren't trying to overload a class with different
13828              constraints.  */
13829           tree constr = NULL_TREE;
13830           if (current_template_parms)
13831             {
13832               tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
13833               constr = build_constraints (reqs, NULL_TREE);
13834             }
13835 	  if (!redeclare_class_template (t, current_template_parms, constr))
13836 	    return error_mark_node;
13837         }
13838       else if (!processing_template_decl
13839 	       && CLASS_TYPE_P (t)
13840 	       && CLASSTYPE_IS_TEMPLATE (t))
13841 	{
13842 	  error ("redeclaration of %qT as a non-template", t);
13843 	  inform (location_of (t), "previous declaration %qD", t);
13844 	  return error_mark_node;
13845 	}
13846 
13847       if (scope != ts_within_enclosing_non_class && TYPE_HIDDEN_P (t))
13848 	{
13849 	  /* This is no longer an invisible friend.  Make it
13850 	     visible.  */
13851 	  tree decl = TYPE_NAME (t);
13852 
13853 	  DECL_ANTICIPATED (decl) = false;
13854 	  DECL_FRIEND_P (decl) = false;
13855 
13856 	  if (TYPE_TEMPLATE_INFO (t))
13857 	    {
13858 	      tree tmpl = TYPE_TI_TEMPLATE (t);
13859 	      DECL_ANTICIPATED (tmpl) = false;
13860 	      DECL_FRIEND_P (tmpl) = false;
13861 	    }
13862 	}
13863     }
13864 
13865   return t;
13866 }
13867 
13868 /* Wrapper for xref_tag_1.  */
13869 
13870 tree
13871 xref_tag (enum tag_types tag_code, tree name,
13872           tag_scope scope, bool template_header_p)
13873 {
13874   tree ret;
13875   bool subtime;
13876   subtime = timevar_cond_start (TV_NAME_LOOKUP);
13877   ret = xref_tag_1 (tag_code, name, scope, template_header_p);
13878   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
13879   return ret;
13880 }
13881 
13882 
13883 tree
13884 xref_tag_from_type (tree old, tree id, tag_scope scope)
13885 {
13886   enum tag_types tag_kind;
13887 
13888   if (TREE_CODE (old) == RECORD_TYPE)
13889     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
13890   else
13891     tag_kind  = union_type;
13892 
13893   if (id == NULL_TREE)
13894     id = TYPE_IDENTIFIER (old);
13895 
13896   return xref_tag (tag_kind, id, scope, false);
13897 }
13898 
13899 /* Create the binfo hierarchy for REF with (possibly NULL) base list
13900    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
13901    access_* node, and the TREE_VALUE is the type of the base-class.
13902    Non-NULL TREE_TYPE indicates virtual inheritance.  */
13903 
13904 void
13905 xref_basetypes (tree ref, tree base_list)
13906 {
13907   tree *basep;
13908   tree binfo, base_binfo;
13909   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
13910   unsigned max_bases = 0;  /* Maximum direct bases.  */
13911   unsigned max_dvbases = 0; /* Maximum direct virtual bases.  */
13912   int i;
13913   tree default_access;
13914   tree igo_prev; /* Track Inheritance Graph Order.  */
13915 
13916   if (ref == error_mark_node)
13917     return;
13918 
13919   /* The base of a derived class is private by default, all others are
13920      public.  */
13921   default_access = (TREE_CODE (ref) == RECORD_TYPE
13922 		    && CLASSTYPE_DECLARED_CLASS (ref)
13923 		    ? access_private_node : access_public_node);
13924 
13925   /* First, make sure that any templates in base-classes are
13926      instantiated.  This ensures that if we call ourselves recursively
13927      we do not get confused about which classes are marked and which
13928      are not.  */
13929   basep = &base_list;
13930   while (*basep)
13931     {
13932       tree basetype = TREE_VALUE (*basep);
13933 
13934       /* The dependent_type_p call below should really be dependent_scope_p
13935 	 so that we give a hard error about using an incomplete type as a
13936 	 base, but we allow it with a pedwarn for backward
13937 	 compatibility.  */
13938       if (processing_template_decl
13939 	  && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
13940 	cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
13941       if (!dependent_type_p (basetype)
13942 	  && !complete_type_or_else (basetype, NULL))
13943 	/* An incomplete type.  Remove it from the list.  */
13944 	*basep = TREE_CHAIN (*basep);
13945       else
13946 	{
13947 	  max_bases++;
13948 	  if (TREE_TYPE (*basep))
13949 	    max_dvbases++;
13950 	  if (CLASS_TYPE_P (basetype))
13951 	    max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
13952 	  basep = &TREE_CHAIN (*basep);
13953 	}
13954     }
13955   max_vbases += max_dvbases;
13956 
13957   TYPE_MARKED_P (ref) = 1;
13958 
13959   /* The binfo slot should be empty, unless this is an (ill-formed)
13960      redefinition.  */
13961   gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
13962 
13963   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
13964 
13965   binfo = make_tree_binfo (max_bases);
13966 
13967   TYPE_BINFO (ref) = binfo;
13968   BINFO_OFFSET (binfo) = size_zero_node;
13969   BINFO_TYPE (binfo) = ref;
13970 
13971   /* Apply base-class info set up to the variants of this type.  */
13972   fixup_type_variants (ref);
13973 
13974   if (max_bases)
13975     {
13976       vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
13977       /* A C++98 POD cannot have base classes.  */
13978       CLASSTYPE_NON_LAYOUT_POD_P (ref) = true;
13979 
13980       if (TREE_CODE (ref) == UNION_TYPE)
13981 	{
13982 	  error ("derived union %qT invalid", ref);
13983 	  return;
13984 	}
13985     }
13986 
13987   if (max_bases > 1)
13988     warning (OPT_Wmultiple_inheritance,
13989 	     "%qT defined with multiple direct bases", ref);
13990 
13991   if (max_vbases)
13992     {
13993       /* An aggregate can't have virtual base classes.  */
13994       CLASSTYPE_NON_AGGREGATE (ref) = true;
13995 
13996       vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
13997 
13998       if (max_dvbases)
13999 	warning (OPT_Wvirtual_inheritance,
14000 		 "%qT defined with direct virtual base", ref);
14001     }
14002 
14003   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
14004     {
14005       tree access = TREE_PURPOSE (base_list);
14006       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
14007       tree basetype = TREE_VALUE (base_list);
14008 
14009       if (access == access_default_node)
14010 	access = default_access;
14011 
14012       /* Before C++17, an aggregate cannot have base classes.  In C++17, an
14013 	 aggregate can't have virtual, private, or protected base classes.  */
14014       if (cxx_dialect < cxx17
14015 	  || access != access_public_node
14016 	  || via_virtual)
14017 	CLASSTYPE_NON_AGGREGATE (ref) = true;
14018 
14019       if (PACK_EXPANSION_P (basetype))
14020         basetype = PACK_EXPANSION_PATTERN (basetype);
14021       if (TREE_CODE (basetype) == TYPE_DECL)
14022 	basetype = TREE_TYPE (basetype);
14023       if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
14024 	{
14025 	  error ("base type %qT fails to be a struct or class type",
14026 		 basetype);
14027 	  goto dropped_base;
14028 	}
14029 
14030       base_binfo = NULL_TREE;
14031       if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
14032 	{
14033 	  base_binfo = TYPE_BINFO (basetype);
14034 	  /* The original basetype could have been a typedef'd type.  */
14035 	  basetype = BINFO_TYPE (base_binfo);
14036 
14037 	  /* Inherit flags from the base.  */
14038 	  TYPE_HAS_NEW_OPERATOR (ref)
14039 	    |= TYPE_HAS_NEW_OPERATOR (basetype);
14040 	  TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
14041 	    |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
14042 	  TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
14043 	  TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
14044 	  CLASSTYPE_DIAMOND_SHAPED_P (ref)
14045 	    |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
14046 	  CLASSTYPE_REPEATED_BASE_P (ref)
14047 	    |= CLASSTYPE_REPEATED_BASE_P (basetype);
14048 	}
14049 
14050       /* We must do this test after we've seen through a typedef
14051 	 type.  */
14052       if (TYPE_MARKED_P (basetype))
14053 	{
14054 	  if (basetype == ref)
14055 	    error ("recursive type %qT undefined", basetype);
14056 	  else
14057 	    error ("duplicate base type %qT invalid", basetype);
14058 	  goto dropped_base;
14059 	}
14060 
14061       if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
14062         /* Regenerate the pack expansion for the bases. */
14063         basetype = make_pack_expansion (basetype);
14064 
14065       TYPE_MARKED_P (basetype) = 1;
14066 
14067       base_binfo = copy_binfo (base_binfo, basetype, ref,
14068 			       &igo_prev, via_virtual);
14069       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
14070 	BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
14071 
14072       BINFO_BASE_APPEND (binfo, base_binfo);
14073       BINFO_BASE_ACCESS_APPEND (binfo, access);
14074       continue;
14075 
14076     dropped_base:
14077       /* Update max_vbases to reflect the reality that we are dropping
14078 	 this base:  if it reaches zero we want to undo the vec_alloc
14079 	 above to avoid inconsistencies during error-recovery: eg, in
14080 	 build_special_member_call, CLASSTYPE_VBASECLASSES non null
14081 	 and vtt null (c++/27952).  */
14082       if (via_virtual)
14083 	max_vbases--;
14084       if (CLASS_TYPE_P (basetype))
14085 	max_vbases
14086 	  -= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
14087     }
14088 
14089   if (CLASSTYPE_VBASECLASSES (ref)
14090       && max_vbases == 0)
14091     vec_free (CLASSTYPE_VBASECLASSES (ref));
14092 
14093   if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
14094     /* If we didn't get max_vbases vbases, we must have shared at
14095        least one of them, and are therefore diamond shaped.  */
14096     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
14097 
14098   /* Unmark all the types.  */
14099   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
14100     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
14101   TYPE_MARKED_P (ref) = 0;
14102 
14103   /* Now see if we have a repeated base type.  */
14104   if (!CLASSTYPE_REPEATED_BASE_P (ref))
14105     {
14106       for (base_binfo = binfo; base_binfo;
14107 	   base_binfo = TREE_CHAIN (base_binfo))
14108 	{
14109 	  if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
14110 	    {
14111 	      CLASSTYPE_REPEATED_BASE_P (ref) = 1;
14112 	      break;
14113 	    }
14114 	  TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
14115 	}
14116       for (base_binfo = binfo; base_binfo;
14117 	   base_binfo = TREE_CHAIN (base_binfo))
14118 	if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
14119 	  TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
14120 	else
14121 	  break;
14122     }
14123 }
14124 
14125 
14126 /* Copies the enum-related properties from type SRC to type DST.
14127    Used with the underlying type of an enum and the enum itself.  */
14128 static void
14129 copy_type_enum (tree dst, tree src)
14130 {
14131   tree t;
14132   for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
14133     {
14134       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
14135       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
14136       TYPE_SIZE (t) = TYPE_SIZE (src);
14137       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
14138       SET_TYPE_MODE (dst, TYPE_MODE (src));
14139       TYPE_PRECISION (t) = TYPE_PRECISION (src);
14140       unsigned valign = TYPE_ALIGN (src);
14141       if (TYPE_USER_ALIGN (t))
14142 	valign = MAX (valign, TYPE_ALIGN (t));
14143       else
14144 	TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
14145       SET_TYPE_ALIGN (t, valign);
14146       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
14147     }
14148 }
14149 
14150 /* Begin compiling the definition of an enumeration type.
14151    NAME is its name,
14152 
14153    if ENUMTYPE is not NULL_TREE then the type has alredy been found.
14154 
14155    UNDERLYING_TYPE is the type that will be used as the storage for
14156    the enumeration type. This should be NULL_TREE if no storage type
14157    was specified.
14158 
14159    ATTRIBUTES are any attributes specified after the enum-key.
14160 
14161    SCOPED_ENUM_P is true if this is a scoped enumeration type.
14162 
14163    if IS_NEW is not NULL, gets TRUE iff a new type is created.
14164 
14165    Returns the type object, as yet incomplete.
14166    Also records info about it so that build_enumerator
14167    may be used to declare the individual values as they are read.  */
14168 
14169 tree
14170 start_enum (tree name, tree enumtype, tree underlying_type,
14171 	    tree attributes, bool scoped_enum_p, bool *is_new)
14172 {
14173   tree prevtype = NULL_TREE;
14174   gcc_assert (identifier_p (name));
14175 
14176   if (is_new)
14177     *is_new = false;
14178   /* [C++0x dcl.enum]p5:
14179 
14180     If not explicitly specified, the underlying type of a scoped
14181     enumeration type is int.  */
14182   if (!underlying_type && scoped_enum_p)
14183     underlying_type = integer_type_node;
14184 
14185   if (underlying_type)
14186     underlying_type = cv_unqualified (underlying_type);
14187 
14188   /* If this is the real definition for a previous forward reference,
14189      fill in the contents in the same object that used to be the
14190      forward reference.  */
14191   if (!enumtype)
14192     enumtype = lookup_and_check_tag (enum_type, name,
14193 				     /*tag_scope=*/ts_current,
14194 				     /*template_header_p=*/false);
14195 
14196   /* In case of a template_decl, the only check that should be deferred
14197      to instantiation time is the comparison of underlying types.  */
14198   if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
14199     {
14200       if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
14201 	{
14202 	  error_at (input_location, "scoped/unscoped mismatch "
14203 		    "in enum %q#T", enumtype);
14204 	  inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14205 		  "previous definition here");
14206 	  enumtype = error_mark_node;
14207 	}
14208       else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
14209 	{
14210 	  error_at (input_location, "underlying type mismatch "
14211 		    "in enum %q#T", enumtype);
14212 	  inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14213 		  "previous definition here");
14214 	  enumtype = error_mark_node;
14215 	}
14216       else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
14217 	       && !dependent_type_p (underlying_type)
14218 	       && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
14219 	       && !same_type_p (underlying_type,
14220 				ENUM_UNDERLYING_TYPE (enumtype)))
14221 	{
14222 	  error_at (input_location, "different underlying type "
14223 		    "in enum %q#T", enumtype);
14224 	  inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14225 		  "previous definition here");
14226 	  underlying_type = NULL_TREE;
14227 	}
14228     }
14229 
14230   if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
14231       || processing_template_decl)
14232     {
14233       /* In case of error, make a dummy enum to allow parsing to
14234 	 continue.  */
14235       if (enumtype == error_mark_node)
14236 	{
14237 	  name = make_anon_name ();
14238 	  enumtype = NULL_TREE;
14239 	}
14240 
14241       /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
14242          of an opaque enum, or an opaque enum of an already defined
14243 	 enumeration (C++0x only).
14244 	 In any other case, it'll be NULL_TREE. */
14245       if (!enumtype)
14246 	{
14247 	  if (is_new)
14248 	    *is_new = true;
14249 	}
14250       prevtype = enumtype;
14251 
14252       /* Do not push the decl more than once, unless we need to
14253 	 compare underlying types at instantiation time */
14254       if (!enumtype
14255 	  || TREE_CODE (enumtype) != ENUMERAL_TYPE
14256 	  || (underlying_type
14257 	      && dependent_type_p (underlying_type))
14258 	  || (ENUM_UNDERLYING_TYPE (enumtype)
14259 	      && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
14260 	{
14261 	  enumtype = cxx_make_type (ENUMERAL_TYPE);
14262 	  enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
14263 
14264 	  /* std::byte aliases anything.  */
14265 	  if (enumtype != error_mark_node
14266 	      && TYPE_CONTEXT (enumtype) == std_node
14267 	      && !strcmp ("byte", TYPE_NAME_STRING (enumtype)))
14268 	    TYPE_ALIAS_SET (enumtype) = 0;
14269 	}
14270       else
14271 	  enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
14272 			       false);
14273 
14274       if (enumtype == error_mark_node)
14275 	return error_mark_node;
14276 
14277       /* The enum is considered opaque until the opening '{' of the
14278 	 enumerator list.  */
14279       SET_OPAQUE_ENUM_P (enumtype, true);
14280       ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
14281     }
14282 
14283   SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
14284 
14285   cplus_decl_attributes (&enumtype, attributes, (int)ATTR_FLAG_TYPE_IN_PLACE);
14286 
14287   if (underlying_type)
14288     {
14289       if (ENUM_UNDERLYING_TYPE (enumtype))
14290 	/* We already checked that it matches, don't change it to a different
14291 	   typedef variant.  */;
14292       else if (CP_INTEGRAL_TYPE_P (underlying_type))
14293         {
14294 	  copy_type_enum (enumtype, underlying_type);
14295           ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14296         }
14297       else if (dependent_type_p (underlying_type))
14298 	ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14299       else
14300         error ("underlying type %qT of %qT must be an integral type",
14301                underlying_type, enumtype);
14302     }
14303 
14304   /* If into a template class, the returned enum is always the first
14305      declaration (opaque or not) seen. This way all the references to
14306      this type will be to the same declaration. The following ones are used
14307      only to check for definition errors.  */
14308   if (prevtype && processing_template_decl)
14309     return prevtype;
14310   else
14311     return enumtype;
14312 }
14313 
14314 /* After processing and defining all the values of an enumeration type,
14315    install their decls in the enumeration type.
14316    ENUMTYPE is the type object.  */
14317 
14318 void
14319 finish_enum_value_list (tree enumtype)
14320 {
14321   tree values;
14322   tree underlying_type;
14323   tree decl;
14324   tree value;
14325   tree minnode, maxnode;
14326   tree t;
14327 
14328   bool fixed_underlying_type_p
14329     = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
14330 
14331   /* We built up the VALUES in reverse order.  */
14332   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
14333 
14334   /* For an enum defined in a template, just set the type of the values;
14335      all further processing is postponed until the template is
14336      instantiated.  We need to set the type so that tsubst of a CONST_DECL
14337      works.  */
14338   if (processing_template_decl)
14339     {
14340       for (values = TYPE_VALUES (enumtype);
14341 	   values;
14342 	   values = TREE_CHAIN (values))
14343 	TREE_TYPE (TREE_VALUE (values)) = enumtype;
14344       return;
14345     }
14346 
14347   /* Determine the minimum and maximum values of the enumerators.  */
14348   if (TYPE_VALUES (enumtype))
14349     {
14350       minnode = maxnode = NULL_TREE;
14351 
14352       for (values = TYPE_VALUES (enumtype);
14353 	   values;
14354 	   values = TREE_CHAIN (values))
14355 	{
14356 	  decl = TREE_VALUE (values);
14357 
14358 	  /* [dcl.enum]: Following the closing brace of an enum-specifier,
14359 	     each enumerator has the type of its enumeration.  Prior to the
14360 	     closing brace, the type of each enumerator is the type of its
14361 	     initializing value.  */
14362 	  TREE_TYPE (decl) = enumtype;
14363 
14364 	  /* Update the minimum and maximum values, if appropriate.  */
14365 	  value = DECL_INITIAL (decl);
14366 	  if (value == error_mark_node)
14367 	    value = integer_zero_node;
14368 	  /* Figure out what the minimum and maximum values of the
14369 	     enumerators are.  */
14370 	  if (!minnode)
14371 	    minnode = maxnode = value;
14372 	  else if (tree_int_cst_lt (maxnode, value))
14373 	    maxnode = value;
14374 	  else if (tree_int_cst_lt (value, minnode))
14375 	    minnode = value;
14376 	}
14377     }
14378   else
14379     /* [dcl.enum]
14380 
14381        If the enumerator-list is empty, the underlying type is as if
14382        the enumeration had a single enumerator with value 0.  */
14383     minnode = maxnode = integer_zero_node;
14384 
14385   if (!fixed_underlying_type_p)
14386     {
14387       /* Compute the number of bits require to represent all values of the
14388 	 enumeration.  We must do this before the type of MINNODE and
14389 	 MAXNODE are transformed, since tree_int_cst_min_precision relies
14390 	 on the TREE_TYPE of the value it is passed.  */
14391       signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
14392       int lowprec = tree_int_cst_min_precision (minnode, sgn);
14393       int highprec = tree_int_cst_min_precision (maxnode, sgn);
14394       int precision = MAX (lowprec, highprec);
14395       unsigned int itk;
14396       bool use_short_enum;
14397 
14398       /* Determine the underlying type of the enumeration.
14399 
14400          [dcl.enum]
14401 
14402          The underlying type of an enumeration is an integral type that
14403          can represent all the enumerator values defined in the
14404          enumeration.  It is implementation-defined which integral type is
14405          used as the underlying type for an enumeration except that the
14406          underlying type shall not be larger than int unless the value of
14407          an enumerator cannot fit in an int or unsigned int.
14408 
14409          We use "int" or an "unsigned int" as the underlying type, even if
14410          a smaller integral type would work, unless the user has
14411          explicitly requested that we use the smallest possible type.  The
14412          user can request that for all enumerations with a command line
14413          flag, or for just one enumeration with an attribute.  */
14414 
14415       use_short_enum = flag_short_enums
14416         || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
14417 
14418       /* If the precision of the type was specified with an attribute and it
14419 	 was too small, give an error.  Otherwise, use it.  */
14420       if (TYPE_PRECISION (enumtype))
14421 	{
14422 	  if (precision > TYPE_PRECISION (enumtype))
14423 	    error ("specified mode too small for enumeral values");
14424 	  else
14425 	    {
14426 	      use_short_enum = true;
14427 	      precision = TYPE_PRECISION (enumtype);
14428 	    }
14429 	}
14430 
14431       for (itk = (use_short_enum ? itk_char : itk_int);
14432            itk != itk_none;
14433            itk++)
14434         {
14435           underlying_type = integer_types[itk];
14436           if (underlying_type != NULL_TREE
14437 	      && TYPE_PRECISION (underlying_type) >= precision
14438               && TYPE_SIGN (underlying_type) == sgn)
14439             break;
14440         }
14441       if (itk == itk_none)
14442         {
14443           /* DR 377
14444 
14445              IF no integral type can represent all the enumerator values, the
14446              enumeration is ill-formed.  */
14447           error ("no integral type can represent all of the enumerator values "
14448                  "for %qT", enumtype);
14449           precision = TYPE_PRECISION (long_long_integer_type_node);
14450           underlying_type = integer_types[itk_unsigned_long_long];
14451         }
14452 
14453       /* [dcl.enum]
14454 
14455          The value of sizeof() applied to an enumeration type, an object
14456          of an enumeration type, or an enumerator, is the value of sizeof()
14457          applied to the underlying type.  */
14458       copy_type_enum (enumtype, underlying_type);
14459 
14460       /* Compute the minimum and maximum values for the type.
14461 
14462 	 [dcl.enum]
14463 
14464 	 For an enumeration where emin is the smallest enumerator and emax
14465 	 is the largest, the values of the enumeration are the values of the
14466 	 underlying type in the range bmin to bmax, where bmin and bmax are,
14467 	 respectively, the smallest and largest values of the smallest bit-
14468 	 field that can store emin and emax.  */
14469 
14470       /* The middle-end currently assumes that types with TYPE_PRECISION
14471 	 narrower than their underlying type are suitably zero or sign
14472 	 extended to fill their mode.  Similarly, it assumes that the front
14473 	 end assures that a value of a particular type must be within
14474 	 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
14475 
14476 	 We used to set these fields based on bmin and bmax, but that led
14477 	 to invalid assumptions like optimizing away bounds checking.  So
14478 	 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
14479 	 TYPE_MAX_VALUE to the values for the mode above and only restrict
14480 	 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics.  */
14481       ENUM_UNDERLYING_TYPE (enumtype)
14482 	= build_distinct_type_copy (underlying_type);
14483       TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
14484       set_min_and_max_values_for_integral_type
14485         (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
14486 
14487       /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE.  */
14488       if (flag_strict_enums)
14489 	set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
14490     }
14491   else
14492     underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
14493 
14494   /* Convert each of the enumerators to the type of the underlying
14495      type of the enumeration.  */
14496   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
14497     {
14498       location_t saved_location;
14499 
14500       decl = TREE_VALUE (values);
14501       saved_location = input_location;
14502       input_location = DECL_SOURCE_LOCATION (decl);
14503       if (fixed_underlying_type_p)
14504         /* If the enumeration type has a fixed underlying type, we
14505            already checked all of the enumerator values.  */
14506         value = DECL_INITIAL (decl);
14507       else
14508         value = perform_implicit_conversion (underlying_type,
14509                                              DECL_INITIAL (decl),
14510                                              tf_warning_or_error);
14511       input_location = saved_location;
14512 
14513       /* Do not clobber shared ints.  */
14514       if (value != error_mark_node)
14515 	{
14516 	  value = copy_node (value);
14517 
14518 	  TREE_TYPE (value) = enumtype;
14519 	}
14520       DECL_INITIAL (decl) = value;
14521     }
14522 
14523   /* Fix up all variant types of this enum type.  */
14524   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
14525     TYPE_VALUES (t) = TYPE_VALUES (enumtype);
14526 
14527   if (at_class_scope_p ()
14528       && COMPLETE_TYPE_P (current_class_type)
14529       && UNSCOPED_ENUM_P (enumtype))
14530     {
14531       insert_late_enum_def_bindings (current_class_type, enumtype);
14532       /* TYPE_FIELDS needs fixup.  */
14533       fixup_type_variants (current_class_type);
14534     }
14535 
14536   /* Finish debugging output for this type.  */
14537   rest_of_type_compilation (enumtype, namespace_bindings_p ());
14538 
14539   /* Each enumerator now has the type of its enumeration.  Clear the cache
14540      so that this change in types doesn't confuse us later on.  */
14541   clear_cv_and_fold_caches ();
14542 }
14543 
14544 /* Finishes the enum type. This is called only the first time an
14545    enumeration is seen, be it opaque or odinary.
14546    ENUMTYPE is the type object.  */
14547 
14548 void
14549 finish_enum (tree enumtype)
14550 {
14551   if (processing_template_decl)
14552     {
14553       if (at_function_scope_p ())
14554 	add_stmt (build_min (TAG_DEFN, enumtype));
14555       return;
14556     }
14557 
14558   /* If this is a forward declaration, there should not be any variants,
14559      though we can get a variant in the middle of an enum-specifier with
14560      wacky code like 'enum E { e = sizeof(const E*) };'  */
14561   gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
14562 	      && (TYPE_VALUES (enumtype)
14563 		  || !TYPE_NEXT_VARIANT (enumtype)));
14564 }
14565 
14566 /* Build and install a CONST_DECL for an enumeration constant of the
14567    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
14568    Apply ATTRIBUTES if available.  LOC is the location of NAME.
14569    Assignment of sequential values by default is handled here.  */
14570 
14571 void
14572 build_enumerator (tree name, tree value, tree enumtype, tree attributes,
14573 		  location_t loc)
14574 {
14575   tree decl;
14576   tree context;
14577   tree type;
14578 
14579   /* scalar_constant_value will pull out this expression, so make sure
14580      it's folded as appropriate.  */
14581   if (processing_template_decl)
14582     value = fold_non_dependent_expr (value);
14583 
14584   /* If the VALUE was erroneous, pretend it wasn't there; that will
14585      result in the enum being assigned the next value in sequence.  */
14586   if (value == error_mark_node)
14587     value = NULL_TREE;
14588 
14589   /* Remove no-op casts from the value.  */
14590   if (value)
14591     STRIP_TYPE_NOPS (value);
14592 
14593   if (! processing_template_decl)
14594     {
14595       /* Validate and default VALUE.  */
14596       if (value != NULL_TREE)
14597 	{
14598 	  if (!ENUM_UNDERLYING_TYPE (enumtype))
14599 	    {
14600 	      tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
14601 							   value, true);
14602 	      if (tmp_value)
14603 		value = tmp_value;
14604 	    }
14605 	  else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14606 		   (TREE_TYPE (value)))
14607 	    value = perform_implicit_conversion_flags
14608 	      (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
14609 	       LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
14610 
14611 	  if (value == error_mark_node)
14612 	    value = NULL_TREE;
14613 
14614 	  if (value != NULL_TREE)
14615 	    {
14616 	      if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14617 		  (TREE_TYPE (value)))
14618 		{
14619 		  error ("enumerator value for %qD must have integral or "
14620 			 "unscoped enumeration type", name);
14621 		  value = NULL_TREE;
14622 		}
14623 	      else
14624 		{
14625 		  value = cxx_constant_value (value);
14626 
14627 		  if (TREE_CODE (value) != INTEGER_CST)
14628 		    {
14629 		      error ("enumerator value for %qD is not an integer "
14630 			     "constant", name);
14631 		      value = NULL_TREE;
14632 		    }
14633 		}
14634 	    }
14635 	}
14636 
14637       /* Default based on previous value.  */
14638       if (value == NULL_TREE)
14639 	{
14640 	  if (TYPE_VALUES (enumtype))
14641 	    {
14642 	      tree prev_value;
14643 	      bool overflowed;
14644 
14645 	      /* C++03 7.2/4: If no initializer is specified for the first
14646 		 enumerator, the type is an unspecified integral
14647 		 type. Otherwise the type is the same as the type of the
14648 		 initializing value of the preceding enumerator unless the
14649 		 incremented value is not representable in that type, in
14650 		 which case the type is an unspecified integral type
14651 		 sufficient to contain the incremented value.  */
14652 	      prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
14653 	      if (error_operand_p (prev_value))
14654 		value = error_mark_node;
14655 	      else
14656 		{
14657 		  tree type = TREE_TYPE (prev_value);
14658 		  signop sgn = TYPE_SIGN (type);
14659 		  widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
14660 					   &overflowed);
14661 		  if (!overflowed)
14662 		    {
14663 		      bool pos = !wi::neg_p (wi, sgn);
14664 		      if (!wi::fits_to_tree_p (wi, type))
14665 			{
14666 			  unsigned int itk;
14667 			  for (itk = itk_int; itk != itk_none; itk++)
14668 			    {
14669 			      type = integer_types[itk];
14670 			      if (type != NULL_TREE
14671 				  && (pos || !TYPE_UNSIGNED (type))
14672 				  && wi::fits_to_tree_p (wi, type))
14673 				break;
14674 			    }
14675 			  if (type && cxx_dialect < cxx11
14676 			      && itk > itk_unsigned_long)
14677 			    pedwarn (input_location, OPT_Wlong_long,
14678 				     pos ? G_("\
14679 incremented enumerator value is too large for %<unsigned long%>") : G_("\
14680 incremented enumerator value is too large for %<long%>"));
14681 			}
14682 		      if (type == NULL_TREE)
14683 			overflowed = true;
14684 		      else
14685 			value = wide_int_to_tree (type, wi);
14686 		    }
14687 
14688 		  if (overflowed)
14689 		    {
14690 		      error ("overflow in enumeration values at %qD", name);
14691 		      value = error_mark_node;
14692 		    }
14693 		}
14694 	    }
14695 	  else
14696 	    value = integer_zero_node;
14697 	}
14698 
14699       /* Remove no-op casts from the value.  */
14700       STRIP_TYPE_NOPS (value);
14701 
14702       /* If the underlying type of the enum is fixed, check whether
14703          the enumerator values fits in the underlying type.  If it
14704          does not fit, the program is ill-formed [C++0x dcl.enum].  */
14705       if (ENUM_UNDERLYING_TYPE (enumtype)
14706           && value
14707           && TREE_CODE (value) == INTEGER_CST)
14708         {
14709 	  if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
14710 	    error ("enumerator value %qE is outside the range of underlying "
14711 		   "type %qT", value, ENUM_UNDERLYING_TYPE (enumtype));
14712 
14713           /* Convert the value to the appropriate type.  */
14714           value = fold_convert (ENUM_UNDERLYING_TYPE (enumtype), value);
14715         }
14716     }
14717 
14718   /* C++ associates enums with global, function, or class declarations.  */
14719   context = current_scope ();
14720 
14721   /* Build the actual enumeration constant.  Note that the enumeration
14722      constants have the underlying type of the enum (if it is fixed)
14723      or the type of their initializer (if the underlying type of the
14724      enum is not fixed):
14725 
14726       [ C++0x dcl.enum ]
14727 
14728         If the underlying type is fixed, the type of each enumerator
14729         prior to the closing brace is the underlying type; if the
14730         initializing value of an enumerator cannot be represented by
14731         the underlying type, the program is ill-formed. If the
14732         underlying type is not fixed, the type of each enumerator is
14733         the type of its initializing value.
14734 
14735     If the underlying type is not fixed, it will be computed by
14736     finish_enum and we will reset the type of this enumerator.  Of
14737     course, if we're processing a template, there may be no value.  */
14738   type = value ? TREE_TYPE (value) : NULL_TREE;
14739 
14740   decl = build_decl (loc, CONST_DECL, name, type);
14741 
14742   DECL_CONTEXT (decl) = enumtype;
14743   TREE_CONSTANT (decl) = 1;
14744   TREE_READONLY (decl) = 1;
14745   DECL_INITIAL (decl) = value;
14746 
14747   if (attributes)
14748     cplus_decl_attributes (&decl, attributes, 0);
14749 
14750   if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
14751     {
14752       /* In something like `struct S { enum E { i = 7 }; };' we put `i'
14753 	 on the TYPE_FIELDS list for `S'.  (That's so that you can say
14754 	 things like `S::i' later.)  */
14755 
14756       /* The enumerator may be getting declared outside of its enclosing
14757 	 class, like so:
14758 
14759 	   class S { public: enum E : int; }; enum S::E : int { i = 7; };
14760 
14761 	 For which case we need to make sure that the access of `S::i'
14762 	 matches the access of `S::E'.  */
14763       tree saved_cas = current_access_specifier;
14764       if (TREE_PRIVATE (TYPE_NAME (enumtype)))
14765 	current_access_specifier = access_private_node;
14766       else if (TREE_PROTECTED (TYPE_NAME (enumtype)))
14767 	current_access_specifier = access_protected_node;
14768       else
14769 	current_access_specifier = access_public_node;
14770 
14771       finish_member_declaration (decl);
14772 
14773       current_access_specifier = saved_cas;
14774     }
14775   else
14776     pushdecl (decl);
14777 
14778   /* Add this enumeration constant to the list for this type.  */
14779   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
14780 }
14781 
14782 /* Look for an enumerator with the given NAME within the enumeration
14783    type ENUMTYPE.  This routine is used primarily for qualified name
14784    lookup into an enumerator in C++0x, e.g.,
14785 
14786      enum class Color { Red, Green, Blue };
14787 
14788      Color color = Color::Red;
14789 
14790    Returns the value corresponding to the enumerator, or
14791    NULL_TREE if no such enumerator was found.  */
14792 tree
14793 lookup_enumerator (tree enumtype, tree name)
14794 {
14795   tree e;
14796   gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
14797 
14798   e = purpose_member (name, TYPE_VALUES (enumtype));
14799   return e? TREE_VALUE (e) : NULL_TREE;
14800 }
14801 
14802 
14803 /* We're defining DECL.  Make sure that its type is OK.  */
14804 
14805 static void
14806 check_function_type (tree decl, tree current_function_parms)
14807 {
14808   tree fntype = TREE_TYPE (decl);
14809   tree return_type = complete_type (TREE_TYPE (fntype));
14810 
14811   /* In a function definition, arg types must be complete.  */
14812   require_complete_types_for_parms (current_function_parms);
14813 
14814   if (dependent_type_p (return_type)
14815       || type_uses_auto (return_type))
14816     return;
14817   if (!COMPLETE_OR_VOID_TYPE_P (return_type))
14818     {
14819       tree args = TYPE_ARG_TYPES (fntype);
14820 
14821       error ("return type %q#T is incomplete", return_type);
14822 
14823       /* Make it return void instead.  */
14824       if (TREE_CODE (fntype) == METHOD_TYPE)
14825 	fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
14826 					     void_type_node,
14827 					     TREE_CHAIN (args));
14828       else
14829 	fntype = build_function_type (void_type_node, args);
14830       fntype
14831 	= build_exception_variant (fntype,
14832 				   TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
14833       fntype = (cp_build_type_attribute_variant
14834 		(fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
14835       TREE_TYPE (decl) = fntype;
14836     }
14837   else
14838     {
14839       abstract_virtuals_error (decl, TREE_TYPE (fntype));
14840       maybe_warn_parm_abi (TREE_TYPE (fntype),
14841 			   DECL_SOURCE_LOCATION (decl));
14842     }
14843 }
14844 
14845 /* True iff FN is an implicitly-defined default constructor.  */
14846 
14847 static bool
14848 implicit_default_ctor_p (tree fn)
14849 {
14850   return (DECL_CONSTRUCTOR_P (fn)
14851 	  && !user_provided_p (fn)
14852 	  && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)));
14853 }
14854 
14855 /* Clobber the contents of *this to let the back end know that the object
14856    storage is dead when we enter the constructor or leave the destructor.  */
14857 
14858 static tree
14859 build_clobber_this ()
14860 {
14861   /* Clobbering an empty base is pointless, and harmful if its one byte
14862      TYPE_SIZE overlays real data.  */
14863   if (is_empty_class (current_class_type))
14864     return void_node;
14865 
14866   /* If we have virtual bases, clobber the whole object, but only if we're in
14867      charge.  If we don't have virtual bases, clobber the as-base type so we
14868      don't mess with tail padding.  */
14869   bool vbases = CLASSTYPE_VBASECLASSES (current_class_type);
14870 
14871   tree ctype = current_class_type;
14872   if (!vbases)
14873     ctype = CLASSTYPE_AS_BASE (ctype);
14874 
14875   tree clobber = build_constructor (ctype, NULL);
14876   TREE_THIS_VOLATILE (clobber) = true;
14877 
14878   tree thisref = current_class_ref;
14879   if (ctype != current_class_type)
14880     {
14881       thisref = build_nop (build_reference_type (ctype), current_class_ptr);
14882       thisref = convert_from_reference (thisref);
14883     }
14884 
14885   tree exprstmt = build2 (MODIFY_EXPR, void_type_node, thisref, clobber);
14886   if (vbases)
14887     exprstmt = build_if_in_charge (exprstmt);
14888 
14889   return exprstmt;
14890 }
14891 
14892 /* Create the FUNCTION_DECL for a function definition.
14893    DECLSPECS and DECLARATOR are the parts of the declaration;
14894    they describe the function's name and the type it returns,
14895    but twisted together in a fashion that parallels the syntax of C.
14896 
14897    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
14898    DECLARATOR is really the DECL for the function we are about to
14899    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
14900    indicating that the function is an inline defined in-class.
14901 
14902    This function creates a binding context for the function body
14903    as well as setting up the FUNCTION_DECL in current_function_decl.
14904 
14905    For C++, we must first check whether that datum makes any sense.
14906    For example, "class A local_a(1,2);" means that variable local_a
14907    is an aggregate of type A, which should have a constructor
14908    applied to it with the argument list [1, 2].
14909 
14910    On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
14911    or may be a BLOCK if the function has been defined previously
14912    in this translation unit.  On exit, DECL_INITIAL (decl1) will be
14913    error_mark_node if the function has never been defined, or
14914    a BLOCK if the function has been defined somewhere.  */
14915 
14916 bool
14917 start_preparsed_function (tree decl1, tree attrs, int flags)
14918 {
14919   tree ctype = NULL_TREE;
14920   tree fntype;
14921   tree restype;
14922   int doing_friend = 0;
14923   cp_binding_level *bl;
14924   tree current_function_parms;
14925   struct c_fileinfo *finfo
14926     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
14927   bool honor_interface;
14928 
14929   /* Sanity check.  */
14930   gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
14931   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
14932 
14933   fntype = TREE_TYPE (decl1);
14934   if (TREE_CODE (fntype) == METHOD_TYPE)
14935     ctype = TYPE_METHOD_BASETYPE (fntype);
14936 
14937   /* ISO C++ 11.4/5.  A friend function defined in a class is in
14938      the (lexical) scope of the class in which it is defined.  */
14939   if (!ctype && DECL_FRIEND_P (decl1))
14940     {
14941       ctype = DECL_FRIEND_CONTEXT (decl1);
14942 
14943       /* CTYPE could be null here if we're dealing with a template;
14944 	 for example, `inline friend float foo()' inside a template
14945 	 will have no CTYPE set.  */
14946       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
14947 	ctype = NULL_TREE;
14948       else
14949 	doing_friend = 1;
14950     }
14951 
14952   if (DECL_DECLARED_INLINE_P (decl1)
14953       && lookup_attribute ("noinline", attrs))
14954     warning_at (DECL_SOURCE_LOCATION (decl1), 0,
14955 		"inline function %qD given attribute noinline", decl1);
14956 
14957   /* Handle gnu_inline attribute.  */
14958   if (GNU_INLINE_P (decl1))
14959     {
14960       DECL_EXTERNAL (decl1) = 1;
14961       DECL_NOT_REALLY_EXTERN (decl1) = 0;
14962       DECL_INTERFACE_KNOWN (decl1) = 1;
14963       DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
14964     }
14965 
14966   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
14967     /* This is a constructor, we must ensure that any default args
14968        introduced by this definition are propagated to the clones
14969        now. The clones are used directly in overload resolution.  */
14970     adjust_clone_args (decl1);
14971 
14972   /* Sometimes we don't notice that a function is a static member, and
14973      build a METHOD_TYPE for it.  Fix that up now.  */
14974   gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
14975 		&& TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
14976 
14977   /* Set up current_class_type, and enter the scope of the class, if
14978      appropriate.  */
14979   if (ctype)
14980     push_nested_class (ctype);
14981   else if (DECL_STATIC_FUNCTION_P (decl1))
14982     push_nested_class (DECL_CONTEXT (decl1));
14983 
14984   /* Now that we have entered the scope of the class, we must restore
14985      the bindings for any template parameters surrounding DECL1, if it
14986      is an inline member template.  (Order is important; consider the
14987      case where a template parameter has the same name as a field of
14988      the class.)  It is not until after this point that
14989      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
14990   if (flags & SF_INCLASS_INLINE)
14991     maybe_begin_member_template_processing (decl1);
14992 
14993   /* Effective C++ rule 15.  */
14994   if (warn_ecpp
14995       && DECL_ASSIGNMENT_OPERATOR_P (decl1)
14996       && DECL_OVERLOADED_OPERATOR_IS (decl1, NOP_EXPR)
14997       && VOID_TYPE_P (TREE_TYPE (fntype)))
14998     warning (OPT_Weffc__,
14999 	     "%<operator=%> should return a reference to %<*this%>");
15000 
15001   /* Make the init_value nonzero so pushdecl knows this is not tentative.
15002      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
15003   if (!DECL_INITIAL (decl1))
15004     DECL_INITIAL (decl1) = error_mark_node;
15005 
15006   /* This function exists in static storage.
15007      (This does not mean `static' in the C sense!)  */
15008   TREE_STATIC (decl1) = 1;
15009 
15010   /* We must call push_template_decl after current_class_type is set
15011      up.  (If we are processing inline definitions after exiting a
15012      class scope, current_class_type will be NULL_TREE until set above
15013      by push_nested_class.)  */
15014   if (processing_template_decl)
15015     {
15016       tree newdecl1 = push_template_decl (decl1);
15017       if (newdecl1 == error_mark_node)
15018 	{
15019 	  if (ctype || DECL_STATIC_FUNCTION_P (decl1))
15020 	    pop_nested_class ();
15021 	  return false;
15022 	}
15023       decl1 = newdecl1;
15024     }
15025 
15026   /* Make sure the parameter and return types are reasonable.  When
15027      you declare a function, these types can be incomplete, but they
15028      must be complete when you define the function.  */
15029   check_function_type (decl1, DECL_ARGUMENTS (decl1));
15030 
15031   /* Build the return declaration for the function.  */
15032   restype = TREE_TYPE (fntype);
15033 
15034   if (DECL_RESULT (decl1) == NULL_TREE)
15035     {
15036       tree resdecl;
15037 
15038       resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
15039       DECL_ARTIFICIAL (resdecl) = 1;
15040       DECL_IGNORED_P (resdecl) = 1;
15041       DECL_RESULT (decl1) = resdecl;
15042 
15043       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
15044     }
15045 
15046   /* Record the decl so that the function name is defined.
15047      If we already have a decl for this name, and it is a FUNCTION_DECL,
15048      use the old decl.  */
15049   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
15050     {
15051       /* A specialization is not used to guide overload resolution.  */
15052       if (!DECL_FUNCTION_MEMBER_P (decl1)
15053 	  && !(DECL_USE_TEMPLATE (decl1) &&
15054 	       PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
15055 	{
15056 	  tree olddecl = pushdecl (decl1);
15057 
15058 	  if (olddecl == error_mark_node)
15059 	    /* If something went wrong when registering the declaration,
15060 	       use DECL1; we have to have a FUNCTION_DECL to use when
15061 	       parsing the body of the function.  */
15062 	    ;
15063 	  else
15064 	    {
15065 	      /* Otherwise, OLDDECL is either a previous declaration
15066 		 of the same function or DECL1 itself.  */
15067 
15068 	      if (warn_missing_declarations
15069 		  && olddecl == decl1
15070 		  && !DECL_MAIN_P (decl1)
15071 		  && TREE_PUBLIC (decl1)
15072 		  && !DECL_DECLARED_INLINE_P (decl1))
15073 		{
15074 		  tree context;
15075 
15076 		  /* Check whether DECL1 is in an anonymous
15077 		     namespace.  */
15078 		  for (context = DECL_CONTEXT (decl1);
15079 		       context;
15080 		       context = DECL_CONTEXT (context))
15081 		    {
15082 		      if (TREE_CODE (context) == NAMESPACE_DECL
15083 			  && DECL_NAME (context) == NULL_TREE)
15084 			break;
15085 		    }
15086 
15087 		  if (context == NULL)
15088 		    warning_at (DECL_SOURCE_LOCATION (decl1),
15089 				OPT_Wmissing_declarations,
15090 				"no previous declaration for %qD", decl1);
15091 		}
15092 
15093 	      decl1 = olddecl;
15094 	    }
15095 	}
15096       else
15097 	{
15098 	  /* We need to set the DECL_CONTEXT.  */
15099 	  if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
15100 	    DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
15101 	}
15102       fntype = TREE_TYPE (decl1);
15103       restype = TREE_TYPE (fntype);
15104 
15105       /* If #pragma weak applies, mark the decl appropriately now.
15106 	 The pragma only applies to global functions.  Because
15107 	 determining whether or not the #pragma applies involves
15108 	 computing the mangled name for the declaration, we cannot
15109 	 apply the pragma until after we have merged this declaration
15110 	 with any previous declarations; if the original declaration
15111 	 has a linkage specification, that specification applies to
15112 	 the definition as well, and may affect the mangled name.  */
15113       if (DECL_FILE_SCOPE_P (decl1))
15114 	maybe_apply_pragma_weak (decl1);
15115     }
15116 
15117   /* We are now in the scope of the function being defined.  */
15118   current_function_decl = decl1;
15119 
15120   /* Save the parm names or decls from this function's declarator
15121      where store_parm_decls will find them.  */
15122   current_function_parms = DECL_ARGUMENTS (decl1);
15123 
15124   /* Let the user know we're compiling this function.  */
15125   announce_function (decl1);
15126 
15127   gcc_assert (DECL_INITIAL (decl1));
15128 
15129   /* This function may already have been parsed, in which case just
15130      return; our caller will skip over the body without parsing.  */
15131   if (DECL_INITIAL (decl1) != error_mark_node)
15132     return true;
15133 
15134   /* Initialize RTL machinery.  We cannot do this until
15135      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
15136      even when processing a template; this is how we get
15137      CFUN set up, and our per-function variables initialized.
15138      FIXME factor out the non-RTL stuff.  */
15139   bl = current_binding_level;
15140   allocate_struct_function (decl1, processing_template_decl);
15141 
15142   /* Initialize the language data structures.  Whenever we start
15143      a new function, we destroy temporaries in the usual way.  */
15144   cfun->language = ggc_cleared_alloc<language_function> ();
15145   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
15146   current_binding_level = bl;
15147 
15148   if (!processing_template_decl && type_uses_auto (restype))
15149     {
15150       FNDECL_USED_AUTO (decl1) = true;
15151       current_function_auto_return_pattern = restype;
15152     }
15153 
15154   /* Start the statement-tree, start the tree now.  */
15155   DECL_SAVED_TREE (decl1) = push_stmt_list ();
15156 
15157   /* If we are (erroneously) defining a function that we have already
15158      defined before, wipe out what we knew before.  */
15159   if (!DECL_PENDING_INLINE_P (decl1))
15160     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
15161 
15162   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
15163     {
15164       /* We know that this was set up by `grokclassfn'.  We do not
15165 	 wait until `store_parm_decls', since evil parse errors may
15166 	 never get us to that point.  Here we keep the consistency
15167 	 between `current_class_type' and `current_class_ptr'.  */
15168       tree t = DECL_ARGUMENTS (decl1);
15169 
15170       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
15171       gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
15172 
15173       cp_function_chain->x_current_class_ref
15174 	= cp_build_fold_indirect_ref (t);
15175       /* Set this second to avoid shortcut in cp_build_indirect_ref.  */
15176       cp_function_chain->x_current_class_ptr = t;
15177 
15178       /* Constructors and destructors need to know whether they're "in
15179 	 charge" of initializing virtual base classes.  */
15180       t = DECL_CHAIN (t);
15181       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
15182 	{
15183 	  current_in_charge_parm = t;
15184 	  t = DECL_CHAIN (t);
15185 	}
15186       if (DECL_HAS_VTT_PARM_P (decl1))
15187 	{
15188 	  gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
15189 	  current_vtt_parm = t;
15190 	}
15191     }
15192 
15193   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
15194 		     /* Implicitly-defined methods (like the
15195 			destructor for a class in which no destructor
15196 			is explicitly declared) must not be defined
15197 			until their definition is needed.  So, we
15198 			ignore interface specifications for
15199 			compiler-generated functions.  */
15200 		     && !DECL_ARTIFICIAL (decl1));
15201 
15202   if (processing_template_decl)
15203     /* Don't mess with interface flags.  */;
15204   else if (DECL_INTERFACE_KNOWN (decl1))
15205     {
15206       tree ctx = decl_function_context (decl1);
15207 
15208       if (DECL_NOT_REALLY_EXTERN (decl1))
15209 	DECL_EXTERNAL (decl1) = 0;
15210 
15211       if (ctx != NULL_TREE && vague_linkage_p (ctx))
15212 	/* This is a function in a local class in an extern inline
15213 	   or template function.  */
15214 	comdat_linkage (decl1);
15215     }
15216   /* If this function belongs to an interface, it is public.
15217      If it belongs to someone else's interface, it is also external.
15218      This only affects inlines and template instantiations.  */
15219   else if (!finfo->interface_unknown && honor_interface)
15220     {
15221       if (DECL_DECLARED_INLINE_P (decl1)
15222 	  || DECL_TEMPLATE_INSTANTIATION (decl1))
15223 	{
15224 	  DECL_EXTERNAL (decl1)
15225 	    = (finfo->interface_only
15226 	       || (DECL_DECLARED_INLINE_P (decl1)
15227 		   && ! flag_implement_inlines
15228 		   && !DECL_VINDEX (decl1)));
15229 
15230 	  /* For WIN32 we also want to put these in linkonce sections.  */
15231 	  maybe_make_one_only (decl1);
15232 	}
15233       else
15234 	DECL_EXTERNAL (decl1) = 0;
15235       DECL_INTERFACE_KNOWN (decl1) = 1;
15236       /* If this function is in an interface implemented in this file,
15237 	 make sure that the back end knows to emit this function
15238 	 here.  */
15239       if (!DECL_EXTERNAL (decl1))
15240 	mark_needed (decl1);
15241     }
15242   else if (finfo->interface_unknown && finfo->interface_only
15243 	   && honor_interface)
15244     {
15245       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
15246 	 interface, we will have both finfo->interface_unknown and
15247 	 finfo->interface_only set.  In that case, we don't want to
15248 	 use the normal heuristics because someone will supply a
15249 	 #pragma implementation elsewhere, and deducing it here would
15250 	 produce a conflict.  */
15251       comdat_linkage (decl1);
15252       DECL_EXTERNAL (decl1) = 0;
15253       DECL_INTERFACE_KNOWN (decl1) = 1;
15254       DECL_DEFER_OUTPUT (decl1) = 1;
15255     }
15256   else
15257     {
15258       /* This is a definition, not a reference.
15259 	 So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
15260       if (!GNU_INLINE_P (decl1))
15261 	DECL_EXTERNAL (decl1) = 0;
15262 
15263       if ((DECL_DECLARED_INLINE_P (decl1)
15264 	   || DECL_TEMPLATE_INSTANTIATION (decl1))
15265 	  && ! DECL_INTERFACE_KNOWN (decl1))
15266 	DECL_DEFER_OUTPUT (decl1) = 1;
15267       else
15268 	DECL_INTERFACE_KNOWN (decl1) = 1;
15269     }
15270 
15271   /* Determine the ELF visibility attribute for the function.  We must not
15272      do this before calling "pushdecl", as we must allow "duplicate_decls"
15273      to merge any attributes appropriately.  We also need to wait until
15274      linkage is set.  */
15275   if (!DECL_CLONED_FUNCTION_P (decl1))
15276     determine_visibility (decl1);
15277 
15278   if (!processing_template_decl)
15279     maybe_instantiate_noexcept (decl1);
15280 
15281   begin_scope (sk_function_parms, decl1);
15282 
15283   ++function_depth;
15284 
15285   if (DECL_DESTRUCTOR_P (decl1)
15286       || (DECL_CONSTRUCTOR_P (decl1)
15287 	  && targetm.cxx.cdtor_returns_this ()))
15288     {
15289       cdtor_label = create_artificial_label (input_location);
15290       LABEL_DECL_CDTOR (cdtor_label) = true;
15291     }
15292 
15293   start_fname_decls ();
15294 
15295   store_parm_decls (current_function_parms);
15296 
15297   if (!processing_template_decl
15298       && (flag_lifetime_dse > 1)
15299       && DECL_CONSTRUCTOR_P (decl1)
15300       && !DECL_CLONED_FUNCTION_P (decl1)
15301       /* Clobbering an empty base is harmful if it overlays real data.  */
15302       && !is_empty_class (current_class_type)
15303       /* We can't clobber safely for an implicitly-defined default constructor
15304 	 because part of the initialization might happen before we enter the
15305 	 constructor, via AGGR_INIT_ZERO_FIRST (c++/68006).  */
15306       && !implicit_default_ctor_p (decl1))
15307     finish_expr_stmt (build_clobber_this ());
15308 
15309   if (!processing_template_decl
15310       && DECL_CONSTRUCTOR_P (decl1)
15311       && sanitize_flags_p (SANITIZE_VPTR)
15312       && !DECL_CLONED_FUNCTION_P (decl1)
15313       && !implicit_default_ctor_p (decl1))
15314     cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr);
15315 
15316   start_lambda_scope (decl1);
15317 
15318   return true;
15319 }
15320 
15321 
15322 /* Like start_preparsed_function, except that instead of a
15323    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
15324 
15325    Returns true on success.  If the DECLARATOR is not suitable
15326    for a function, we return false, which tells the parser to
15327    skip the entire function.  */
15328 
15329 bool
15330 start_function (cp_decl_specifier_seq *declspecs,
15331 		const cp_declarator *declarator,
15332 		tree attrs)
15333 {
15334   tree decl1;
15335 
15336   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
15337   invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION, decl1);
15338   if (decl1 == error_mark_node)
15339     return false;
15340   /* If the declarator is not suitable for a function definition,
15341      cause a syntax error.  */
15342   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
15343     {
15344       error ("invalid function declaration");
15345       return false;
15346     }
15347 
15348   if (DECL_MAIN_P (decl1))
15349     /* main must return int.  grokfndecl should have corrected it
15350        (and issued a diagnostic) if the user got it wrong.  */
15351     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
15352 			     integer_type_node));
15353 
15354   return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
15355 }
15356 
15357 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
15358    FN.  */
15359 
15360 static bool
15361 use_eh_spec_block (tree fn)
15362 {
15363   return (flag_exceptions && flag_enforce_eh_specs
15364 	  && !processing_template_decl
15365 	  && !type_throw_all_p (TREE_TYPE (fn))
15366 	  /* We insert the EH_SPEC_BLOCK only in the original
15367 	     function; then, it is copied automatically to the
15368 	     clones.  */
15369 	  && !DECL_CLONED_FUNCTION_P (fn)
15370 	  /* Implicitly-generated constructors and destructors have
15371 	     exception specifications.  However, those specifications
15372 	     are the union of the possible exceptions specified by the
15373 	     constructors/destructors for bases and members, so no
15374 	     unallowed exception will ever reach this function.  By
15375 	     not creating the EH_SPEC_BLOCK we save a little memory,
15376 	     and we avoid spurious warnings about unreachable
15377 	     code.  */
15378 	  && !DECL_DEFAULTED_FN (fn));
15379 }
15380 
15381 /* Store the parameter declarations into the current function declaration.
15382    This is called after parsing the parameter declarations, before
15383    digesting the body of the function.
15384 
15385    Also install to binding contour return value identifier, if any.  */
15386 
15387 static void
15388 store_parm_decls (tree current_function_parms)
15389 {
15390   tree fndecl = current_function_decl;
15391   tree parm;
15392 
15393   /* This is a chain of any other decls that came in among the parm
15394      declarations.  If a parm is declared with  enum {foo, bar} x;
15395      then CONST_DECLs for foo and bar are put here.  */
15396   tree nonparms = NULL_TREE;
15397 
15398   if (current_function_parms)
15399     {
15400       /* This case is when the function was defined with an ANSI prototype.
15401 	 The parms already have decls, so we need not do anything here
15402 	 except record them as in effect
15403 	 and complain if any redundant old-style parm decls were written.  */
15404 
15405       tree specparms = current_function_parms;
15406       tree next;
15407 
15408       /* Must clear this because it might contain TYPE_DECLs declared
15409 	     at class level.  */
15410       current_binding_level->names = NULL;
15411 
15412       /* If we're doing semantic analysis, then we'll call pushdecl
15413 	     for each of these.  We must do them in reverse order so that
15414 	     they end in the correct forward order.  */
15415       specparms = nreverse (specparms);
15416 
15417       for (parm = specparms; parm; parm = next)
15418 	{
15419 	  next = DECL_CHAIN (parm);
15420 	  if (TREE_CODE (parm) == PARM_DECL)
15421 	    pushdecl (parm);
15422 	  else
15423 	    {
15424 	      /* If we find an enum constant or a type tag,
15425 		 put it aside for the moment.  */
15426 	      TREE_CHAIN (parm) = NULL_TREE;
15427 	      nonparms = chainon (nonparms, parm);
15428 	    }
15429 	}
15430 
15431       /* Get the decls in their original chain order and record in the
15432 	 function.  This is all and only the PARM_DECLs that were
15433 	 pushed into scope by the loop above.  */
15434       DECL_ARGUMENTS (fndecl) = get_local_decls ();
15435     }
15436   else
15437     DECL_ARGUMENTS (fndecl) = NULL_TREE;
15438 
15439   /* Now store the final chain of decls for the arguments
15440      as the decl-chain of the current lexical scope.
15441      Put the enumerators in as well, at the front so that
15442      DECL_ARGUMENTS is not modified.  */
15443   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
15444 
15445   if (use_eh_spec_block (current_function_decl))
15446     current_eh_spec_block = begin_eh_spec_block ();
15447 }
15448 
15449 
15450 /* We have finished doing semantic analysis on DECL, but have not yet
15451    generated RTL for its body.  Save away our current state, so that
15452    when we want to generate RTL later we know what to do.  */
15453 
15454 static void
15455 save_function_data (tree decl)
15456 {
15457   struct language_function *f;
15458 
15459   /* Save the language-specific per-function data so that we can
15460      get it back when we really expand this function.  */
15461   gcc_assert (!DECL_PENDING_INLINE_P (decl));
15462 
15463   /* Make a copy.  */
15464   f = ggc_alloc<language_function> ();
15465   memcpy (f, cp_function_chain, sizeof (struct language_function));
15466   DECL_SAVED_FUNCTION_DATA (decl) = f;
15467 
15468   /* Clear out the bits we don't need.  */
15469   f->base.x_stmt_tree.x_cur_stmt_list = NULL;
15470   f->bindings = NULL;
15471   f->x_local_names = NULL;
15472   f->base.local_typedefs = NULL;
15473 }
15474 
15475 
15476 /* Set the return value of the constructor (if present).  */
15477 
15478 static void
15479 finish_constructor_body (void)
15480 {
15481   tree val;
15482   tree exprstmt;
15483 
15484   if (targetm.cxx.cdtor_returns_this ())
15485     {
15486       /* Any return from a constructor will end up here.  */
15487       add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15488 
15489       val = DECL_ARGUMENTS (current_function_decl);
15490       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15491 		    DECL_RESULT (current_function_decl), val);
15492       /* Return the address of the object.  */
15493       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15494       add_stmt (exprstmt);
15495     }
15496 }
15497 
15498 /* Do all the processing for the beginning of a destructor; set up the
15499    vtable pointers and cleanups for bases and members.  */
15500 
15501 static void
15502 begin_destructor_body (void)
15503 {
15504   tree compound_stmt;
15505 
15506   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
15507      issued an error message.  We still want to try to process the
15508      body of the function, but initialize_vtbl_ptrs will crash if
15509      TYPE_BINFO is NULL.  */
15510   if (COMPLETE_TYPE_P (current_class_type))
15511     {
15512       compound_stmt = begin_compound_stmt (0);
15513       /* Make all virtual function table pointers in non-virtual base
15514 	 classes point to CURRENT_CLASS_TYPE's virtual function
15515 	 tables.  */
15516       initialize_vtbl_ptrs (current_class_ptr);
15517       finish_compound_stmt (compound_stmt);
15518 
15519       if (flag_lifetime_dse
15520 	  /* Clobbering an empty base is harmful if it overlays real data.  */
15521 	  && !is_empty_class (current_class_type))
15522       {
15523 	if (sanitize_flags_p (SANITIZE_VPTR)
15524 	    && (flag_sanitize_recover & SANITIZE_VPTR) == 0
15525 	    && TYPE_CONTAINS_VPTR_P (current_class_type))
15526 	  {
15527 	    tree binfo = TYPE_BINFO (current_class_type);
15528 	    tree ref
15529 	      = cp_build_fold_indirect_ref (current_class_ptr);
15530 
15531 	    tree vtbl_ptr = build_vfield_ref (ref, TREE_TYPE (binfo));
15532 	    tree vtbl = build_zero_cst (TREE_TYPE (vtbl_ptr));
15533 	    tree stmt = cp_build_modify_expr (input_location, vtbl_ptr,
15534 					      NOP_EXPR, vtbl,
15535 					      tf_warning_or_error);
15536 	    finish_decl_cleanup (NULL_TREE, stmt);
15537 	  }
15538 	else
15539 	  finish_decl_cleanup (NULL_TREE, build_clobber_this ());
15540       }
15541 
15542       /* And insert cleanups for our bases and members so that they
15543 	 will be properly destroyed if we throw.  */
15544       push_base_cleanups ();
15545     }
15546 }
15547 
15548 /* At the end of every destructor we generate code to delete the object if
15549    necessary.  Do that now.  */
15550 
15551 static void
15552 finish_destructor_body (void)
15553 {
15554   tree exprstmt;
15555 
15556   /* Any return from a destructor will end up here; that way all base
15557      and member cleanups will be run when the function returns.  */
15558   add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15559 
15560   if (targetm.cxx.cdtor_returns_this ())
15561     {
15562       tree val;
15563 
15564       val = DECL_ARGUMENTS (current_function_decl);
15565       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15566 		    DECL_RESULT (current_function_decl), val);
15567       /* Return the address of the object.  */
15568       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15569       add_stmt (exprstmt);
15570     }
15571 }
15572 
15573 /* Do the necessary processing for the beginning of a function body, which
15574    in this case includes member-initializers, but not the catch clauses of
15575    a function-try-block.  Currently, this means opening a binding level
15576    for the member-initializers (in a ctor), member cleanups (in a dtor),
15577    and capture proxies (in a lambda operator()).  */
15578 
15579 tree
15580 begin_function_body (void)
15581 {
15582   tree stmt;
15583 
15584   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
15585     return NULL_TREE;
15586 
15587   if (processing_template_decl)
15588     /* Do nothing now.  */;
15589   else
15590     /* Always keep the BLOCK node associated with the outermost pair of
15591        curly braces of a function.  These are needed for correct
15592        operation of dwarfout.c.  */
15593     keep_next_level (true);
15594 
15595   stmt = begin_compound_stmt (BCS_FN_BODY);
15596 
15597   if (processing_template_decl)
15598     /* Do nothing now.  */;
15599   else if (DECL_DESTRUCTOR_P (current_function_decl))
15600     begin_destructor_body ();
15601 
15602   return stmt;
15603 }
15604 
15605 /* Do the processing for the end of a function body.  Currently, this means
15606    closing out the cleanups for fully-constructed bases and members, and in
15607    the case of the destructor, deleting the object if desired.  Again, this
15608    is only meaningful for [cd]tors, since they are the only functions where
15609    there is a significant distinction between the main body and any
15610    function catch clauses.  Handling, say, main() return semantics here
15611    would be wrong, as flowing off the end of a function catch clause for
15612    main() would also need to return 0.  */
15613 
15614 void
15615 finish_function_body (tree compstmt)
15616 {
15617   if (compstmt == NULL_TREE)
15618     return;
15619 
15620   /* Close the block.  */
15621   finish_compound_stmt (compstmt);
15622 
15623   if (processing_template_decl)
15624     /* Do nothing now.  */;
15625   else if (DECL_CONSTRUCTOR_P (current_function_decl))
15626     finish_constructor_body ();
15627   else if (DECL_DESTRUCTOR_P (current_function_decl))
15628     finish_destructor_body ();
15629 }
15630 
15631 /* Given a function, returns the BLOCK corresponding to the outermost level
15632    of curly braces, skipping the artificial block created for constructor
15633    initializers.  */
15634 
15635 tree
15636 outer_curly_brace_block (tree fndecl)
15637 {
15638   tree block = DECL_INITIAL (fndecl);
15639   if (BLOCK_OUTER_CURLY_BRACE_P (block))
15640     return block;
15641   block = BLOCK_SUBBLOCKS (block);
15642   if (BLOCK_OUTER_CURLY_BRACE_P (block))
15643     return block;
15644   block = BLOCK_SUBBLOCKS (block);
15645   gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
15646   return block;
15647 }
15648 
15649 /* If FNDECL is a class's key method, add the class to the list of
15650    keyed classes that should be emitted.  */
15651 
15652 static void
15653 record_key_method_defined (tree fndecl)
15654 {
15655   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
15656       && DECL_VIRTUAL_P (fndecl)
15657       && !processing_template_decl)
15658     {
15659       tree fnclass = DECL_CONTEXT (fndecl);
15660       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
15661 	vec_safe_push (keyed_classes, fnclass);
15662     }
15663 }
15664 
15665 /* Subroutine of finish_function.
15666    Save the body of constexpr functions for possible
15667    future compile time evaluation.  */
15668 
15669 static void
15670 maybe_save_function_definition (tree fun)
15671 {
15672   if (!processing_template_decl
15673       && DECL_DECLARED_CONSTEXPR_P (fun)
15674       && !cp_function_chain->invalid_constexpr
15675       && !DECL_CLONED_FUNCTION_P (fun))
15676     register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
15677 }
15678 
15679 /* Finish up a function declaration and compile that function
15680    all the way to assembler language output.  The free the storage
15681    for the function definition. INLINE_P is TRUE if we just
15682    finished processing the body of an in-class inline function
15683    definition.  (This processing will have taken place after the
15684    class definition is complete.)  */
15685 
15686 tree
15687 finish_function (bool inline_p)
15688 {
15689   tree fndecl = current_function_decl;
15690   tree fntype, ctype = NULL_TREE;
15691 
15692   /* When we get some parse errors, we can end up without a
15693      current_function_decl, so cope.  */
15694   if (fndecl == NULL_TREE)
15695     return error_mark_node;
15696 
15697   finish_lambda_scope ();
15698 
15699   if (c_dialect_objc ())
15700     objc_finish_function ();
15701 
15702   record_key_method_defined (fndecl);
15703 
15704   fntype = TREE_TYPE (fndecl);
15705 
15706   /*  TREE_READONLY (fndecl) = 1;
15707       This caused &foo to be of type ptr-to-const-function
15708       which then got a warning when stored in a ptr-to-function variable.  */
15709 
15710   gcc_assert (building_stmt_list_p ());
15711   /* The current function is being defined, so its DECL_INITIAL should
15712      be set, and unless there's a multiple definition, it should be
15713      error_mark_node.  */
15714   gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
15715 
15716   /* For a cloned function, we've already got all the code we need;
15717      there's no need to add any extra bits.  */
15718   if (!DECL_CLONED_FUNCTION_P (fndecl))
15719     {
15720       /* Make it so that `main' always returns 0 by default.  */
15721       if (DECL_MAIN_P (current_function_decl))
15722 	finish_return_stmt (integer_zero_node);
15723 
15724       if (use_eh_spec_block (current_function_decl))
15725 	finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
15726 			      (TREE_TYPE (current_function_decl)),
15727 			      current_eh_spec_block);
15728     }
15729 
15730   /* If we're saving up tree structure, tie off the function now.  */
15731   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
15732 
15733   finish_fname_decls ();
15734 
15735   /* If this function can't throw any exceptions, remember that.  */
15736   if (!processing_template_decl
15737       && !cp_function_chain->can_throw
15738       && !flag_non_call_exceptions
15739       && !decl_replaceable_p (fndecl))
15740     TREE_NOTHROW (fndecl) = 1;
15741 
15742   /* This must come after expand_function_end because cleanups might
15743      have declarations (from inline functions) that need to go into
15744      this function's blocks.  */
15745 
15746   /* If the current binding level isn't the outermost binding level
15747      for this function, either there is a bug, or we have experienced
15748      syntax errors and the statement tree is malformed.  */
15749   if (current_binding_level->kind != sk_function_parms)
15750     {
15751       /* Make sure we have already experienced errors.  */
15752       gcc_assert (errorcount);
15753 
15754       /* Throw away the broken statement tree and extra binding
15755 	 levels.  */
15756       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
15757 
15758       while (current_binding_level->kind != sk_function_parms)
15759 	{
15760 	  if (current_binding_level->kind == sk_class)
15761 	    pop_nested_class ();
15762 	  else
15763 	    poplevel (0, 0, 0);
15764 	}
15765     }
15766   poplevel (1, 0, 1);
15767 
15768   /* Statements should always be full-expressions at the outermost set
15769      of curly braces for a function.  */
15770   gcc_assert (stmts_are_full_exprs_p ());
15771 
15772   /* If there are no return statements in a function with auto return type,
15773      the return type is void.  But if the declared type is something like
15774      auto*, this is an error.  */
15775   if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
15776       && TREE_TYPE (fntype) == current_function_auto_return_pattern)
15777     {
15778       if (is_auto (current_function_auto_return_pattern))
15779 	{
15780 	  apply_deduced_return_type (fndecl, void_type_node);
15781 	  fntype = TREE_TYPE (fndecl);
15782 	}
15783       else if (!current_function_returns_value
15784 	       && !current_function_returns_null)
15785 	{
15786 	  error ("no return statements in function returning %qT",
15787 		 current_function_auto_return_pattern);
15788 	  inform (input_location, "only plain %<auto%> return type can be "
15789 		  "deduced to %<void%>");
15790 	}
15791     }
15792 
15793   // If this is a concept, check that the definition is reasonable.
15794   if (DECL_DECLARED_CONCEPT_P (fndecl))
15795     check_function_concept (fndecl);
15796 
15797   /* Lambda closure members are implicitly constexpr if possible.  */
15798   if (cxx_dialect >= cxx17
15799       && LAMBDA_TYPE_P (CP_DECL_CONTEXT (fndecl)))
15800     DECL_DECLARED_CONSTEXPR_P (fndecl)
15801       = ((processing_template_decl
15802 	  || is_valid_constexpr_fn (fndecl, /*complain*/false))
15803 	 && potential_constant_expression (DECL_SAVED_TREE (fndecl)));
15804 
15805   /* Save constexpr function body before it gets munged by
15806      the NRV transformation.   */
15807   maybe_save_function_definition (fndecl);
15808 
15809   /* Invoke the pre-genericize plugin before we start munging things.  */
15810   if (!processing_template_decl)
15811     invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
15812 
15813   /* Perform delayed folding before NRV transformation.  */
15814   if (!processing_template_decl)
15815     cp_fold_function (fndecl);
15816 
15817   /* Set up the named return value optimization, if we can.  Candidate
15818      variables are selected in check_return_expr.  */
15819   if (current_function_return_value)
15820     {
15821       tree r = current_function_return_value;
15822       tree outer;
15823 
15824       if (r != error_mark_node
15825 	  /* This is only worth doing for fns that return in memory--and
15826 	     simpler, since we don't have to worry about promoted modes.  */
15827 	  && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
15828 	  /* Only allow this for variables declared in the outer scope of
15829 	     the function so we know that their lifetime always ends with a
15830 	     return; see g++.dg/opt/nrv6.C.  We could be more flexible if
15831 	     we were to do this optimization in tree-ssa.  */
15832 	  && (outer = outer_curly_brace_block (fndecl))
15833 	  && chain_member (r, BLOCK_VARS (outer)))
15834 	finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
15835 
15836       current_function_return_value = NULL_TREE;
15837     }
15838 
15839   /* Remember that we were in class scope.  */
15840   if (current_class_name)
15841     ctype = current_class_type;
15842 
15843   /* Must mark the RESULT_DECL as being in this function.  */
15844   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
15845 
15846   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
15847      to the FUNCTION_DECL node itself.  */
15848   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
15849 
15850   /* Save away current state, if appropriate.  */
15851   if (!processing_template_decl)
15852     save_function_data (fndecl);
15853 
15854   /* Complain if there's just no return statement.  */
15855   if (warn_return_type
15856       && !VOID_TYPE_P (TREE_TYPE (fntype))
15857       && !dependent_type_p (TREE_TYPE (fntype))
15858       && !current_function_returns_value && !current_function_returns_null
15859       /* Don't complain if we abort or throw.  */
15860       && !current_function_returns_abnormally
15861       /* Don't complain if there's an infinite loop.  */
15862       && !current_function_infinite_loop
15863       /* Don't complain if we are declared noreturn.  */
15864       && !TREE_THIS_VOLATILE (fndecl)
15865       && !DECL_NAME (DECL_RESULT (fndecl))
15866       && !TREE_NO_WARNING (fndecl)
15867       /* Structor return values (if any) are set by the compiler.  */
15868       && !DECL_CONSTRUCTOR_P (fndecl)
15869       && !DECL_DESTRUCTOR_P (fndecl)
15870       && targetm.warn_func_return (fndecl))
15871     {
15872       warning (OPT_Wreturn_type,
15873  	       "no return statement in function returning non-void");
15874       TREE_NO_WARNING (fndecl) = 1;
15875     }
15876 
15877   /* Store the end of the function, so that we get good line number
15878      info for the epilogue.  */
15879   cfun->function_end_locus = input_location;
15880 
15881   /* Complain about parameters that are only set, but never otherwise used.  */
15882   if (warn_unused_but_set_parameter
15883       && !processing_template_decl
15884       && errorcount == unused_but_set_errorcount
15885       && !DECL_CLONED_FUNCTION_P (fndecl))
15886     {
15887       tree decl;
15888 
15889       for (decl = DECL_ARGUMENTS (fndecl);
15890 	   decl;
15891 	   decl = DECL_CHAIN (decl))
15892 	if (TREE_USED (decl)
15893 	    && TREE_CODE (decl) == PARM_DECL
15894 	    && !DECL_READ_P (decl)
15895 	    && DECL_NAME (decl)
15896 	    && !DECL_ARTIFICIAL (decl)
15897 	    && !TREE_NO_WARNING (decl)
15898 	    && !DECL_IN_SYSTEM_HEADER (decl)
15899 	    && TREE_TYPE (decl) != error_mark_node
15900 	    && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
15901 	    && (!CLASS_TYPE_P (TREE_TYPE (decl))
15902 	        || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
15903 	  warning_at (DECL_SOURCE_LOCATION (decl),
15904 		      OPT_Wunused_but_set_parameter,
15905 		      "parameter %qD set but not used", decl);
15906       unused_but_set_errorcount = errorcount;
15907     }
15908 
15909   /* Complain about locally defined typedefs that are not used in this
15910      function.  */
15911   maybe_warn_unused_local_typedefs ();
15912 
15913   /* Possibly warn about unused parameters.  */
15914   if (warn_unused_parameter
15915       && !processing_template_decl
15916       && !DECL_CLONED_FUNCTION_P (fndecl))
15917     do_warn_unused_parameter (fndecl);
15918 
15919   /* Genericize before inlining.  */
15920   if (!processing_template_decl)
15921     {
15922       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
15923       cp_genericize (fndecl);
15924       /* Clear out the bits we don't need.  */
15925       f->x_current_class_ptr = NULL;
15926       f->x_current_class_ref = NULL;
15927       f->x_eh_spec_block = NULL;
15928       f->x_in_charge_parm = NULL;
15929       f->x_vtt_parm = NULL;
15930       f->x_return_value = NULL;
15931       f->bindings = NULL;
15932       f->extern_decl_map = NULL;
15933       f->infinite_loops = NULL;
15934     }
15935   /* Clear out the bits we don't need.  */
15936   local_names = NULL;
15937 
15938   /* We're leaving the context of this function, so zap cfun.  It's still in
15939      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
15940   set_cfun (NULL);
15941   current_function_decl = NULL;
15942 
15943   /* If this is an in-class inline definition, we may have to pop the
15944      bindings for the template parameters that we added in
15945      maybe_begin_member_template_processing when start_function was
15946      called.  */
15947   if (inline_p)
15948     maybe_end_member_template_processing ();
15949 
15950   /* Leave the scope of the class.  */
15951   if (ctype)
15952     pop_nested_class ();
15953 
15954   --function_depth;
15955 
15956   /* Clean up.  */
15957   current_function_decl = NULL_TREE;
15958 
15959   invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
15960   return fndecl;
15961 }
15962 
15963 /* Create the FUNCTION_DECL for a function definition.
15964    DECLSPECS and DECLARATOR are the parts of the declaration;
15965    they describe the return type and the name of the function,
15966    but twisted together in a fashion that parallels the syntax of C.
15967 
15968    This function creates a binding context for the function body
15969    as well as setting up the FUNCTION_DECL in current_function_decl.
15970 
15971    Returns a FUNCTION_DECL on success.
15972 
15973    If the DECLARATOR is not suitable for a function (it defines a datum
15974    instead), we return 0, which tells yyparse to report a parse error.
15975 
15976    May return void_type_node indicating that this method is actually
15977    a friend.  See grokfield for more details.
15978 
15979    Came here with a `.pushlevel' .
15980 
15981    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
15982    CHANGES TO CODE IN `grokfield'.  */
15983 
15984 tree
15985 grokmethod (cp_decl_specifier_seq *declspecs,
15986 	    const cp_declarator *declarator, tree attrlist)
15987 {
15988   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
15989 				&attrlist);
15990 
15991   if (fndecl == error_mark_node)
15992     return error_mark_node;
15993 
15994   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
15995     {
15996       error ("invalid member function declaration");
15997       return error_mark_node;
15998     }
15999 
16000   if (attrlist)
16001     cplus_decl_attributes (&fndecl, attrlist, 0);
16002 
16003   /* Pass friends other than inline friend functions back.  */
16004   if (fndecl == void_type_node)
16005     return fndecl;
16006 
16007   if (DECL_IN_AGGR_P (fndecl))
16008     {
16009       if (DECL_CLASS_SCOPE_P (fndecl))
16010 	error ("%qD is already defined in class %qT", fndecl,
16011 	       DECL_CONTEXT (fndecl));
16012       return error_mark_node;
16013     }
16014 
16015   check_template_shadow (fndecl);
16016 
16017   if (TREE_PUBLIC (fndecl))
16018     DECL_COMDAT (fndecl) = 1;
16019   DECL_DECLARED_INLINE_P (fndecl) = 1;
16020   DECL_NO_INLINE_WARNING_P (fndecl) = 1;
16021 
16022   /* We process method specializations in finish_struct_1.  */
16023   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
16024     {
16025       fndecl = push_template_decl (fndecl);
16026       if (fndecl == error_mark_node)
16027 	return fndecl;
16028     }
16029 
16030   if (! DECL_FRIEND_P (fndecl))
16031     {
16032       if (DECL_CHAIN (fndecl))
16033 	{
16034 	  fndecl = copy_node (fndecl);
16035 	  TREE_CHAIN (fndecl) = NULL_TREE;
16036 	}
16037     }
16038 
16039   cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
16040 
16041   DECL_IN_AGGR_P (fndecl) = 1;
16042   return fndecl;
16043 }
16044 
16045 
16046 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
16047    we can lay it out later, when and if its type becomes complete.
16048 
16049    Also handle constexpr variables where the initializer involves
16050    an unlowered PTRMEM_CST because the class isn't complete yet.  */
16051 
16052 void
16053 maybe_register_incomplete_var (tree var)
16054 {
16055   gcc_assert (VAR_P (var));
16056 
16057   /* Keep track of variables with incomplete types.  */
16058   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
16059       && DECL_EXTERNAL (var))
16060     {
16061       tree inner_type = TREE_TYPE (var);
16062 
16063       while (TREE_CODE (inner_type) == ARRAY_TYPE)
16064 	inner_type = TREE_TYPE (inner_type);
16065       inner_type = TYPE_MAIN_VARIANT (inner_type);
16066 
16067       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
16068 	  /* RTTI TD entries are created while defining the type_info.  */
16069 	  || (TYPE_LANG_SPECIFIC (inner_type)
16070 	      && TYPE_BEING_DEFINED (inner_type)))
16071 	{
16072 	  incomplete_var iv = {var, inner_type};
16073 	  vec_safe_push (incomplete_vars, iv);
16074 	}
16075       else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
16076 	       && decl_constant_var_p (var)
16077 	       && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
16078 	{
16079 	  /* When the outermost open class is complete we can resolve any
16080 	     pointers-to-members.  */
16081 	  tree context = outermost_open_class ();
16082 	  incomplete_var iv = {var, context};
16083 	  vec_safe_push (incomplete_vars, iv);
16084 	}
16085     }
16086 }
16087 
16088 /* Called when a class type (given by TYPE) is defined.  If there are
16089    any existing VAR_DECLs whose type has been completed by this
16090    declaration, update them now.  */
16091 
16092 void
16093 complete_vars (tree type)
16094 {
16095   unsigned ix;
16096   incomplete_var *iv;
16097 
16098   for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
16099     {
16100       if (same_type_p (type, iv->incomplete_type))
16101 	{
16102 	  tree var = iv->decl;
16103 	  tree type = TREE_TYPE (var);
16104 
16105 	  if (type != error_mark_node
16106 	      && (TYPE_MAIN_VARIANT (strip_array_types (type))
16107 		  == iv->incomplete_type))
16108 	    {
16109 	      /* Complete the type of the variable.  The VAR_DECL itself
16110 		 will be laid out in expand_expr.  */
16111 	      complete_type (type);
16112 	      cp_apply_type_quals_to_decl (cp_type_quals (type), var);
16113 	    }
16114 
16115 	  /* Remove this entry from the list.  */
16116 	  incomplete_vars->unordered_remove (ix);
16117 	}
16118       else
16119 	ix++;
16120     }
16121 
16122   /* Check for pending declarations which may have abstract type.  */
16123   complete_type_check_abstract (type);
16124 }
16125 
16126 /* If DECL is of a type which needs a cleanup, build and return an
16127    expression to perform that cleanup here.  Return NULL_TREE if no
16128    cleanup need be done.  DECL can also be a _REF when called from
16129    split_nonconstant_init_1.  */
16130 
16131 tree
16132 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
16133 {
16134   tree type;
16135   tree attr;
16136   tree cleanup;
16137 
16138   /* Assume no cleanup is required.  */
16139   cleanup = NULL_TREE;
16140 
16141   if (error_operand_p (decl))
16142     return cleanup;
16143 
16144   /* Handle "__attribute__((cleanup))".  We run the cleanup function
16145      before the destructor since the destructor is what actually
16146      terminates the lifetime of the object.  */
16147   if (DECL_P (decl))
16148     attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
16149   else
16150     attr = NULL_TREE;
16151   if (attr)
16152     {
16153       tree id;
16154       tree fn;
16155       tree arg;
16156 
16157       /* Get the name specified by the user for the cleanup function.  */
16158       id = TREE_VALUE (TREE_VALUE (attr));
16159       /* Look up the name to find the cleanup function to call.  It is
16160 	 important to use lookup_name here because that is what is
16161 	 used in c-common.c:handle_cleanup_attribute when performing
16162 	 initial checks on the attribute.  Note that those checks
16163 	 include ensuring that the function found is not an overloaded
16164 	 function, or an object with an overloaded call operator,
16165 	 etc.; we can rely on the fact that the function found is an
16166 	 ordinary FUNCTION_DECL.  */
16167       fn = lookup_name (id);
16168       arg = build_address (decl);
16169       if (!mark_used (decl, complain) && !(complain & tf_error))
16170 	return error_mark_node;
16171       cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
16172       if (cleanup == error_mark_node)
16173 	return error_mark_node;
16174     }
16175   /* Handle ordinary C++ destructors.  */
16176   type = TREE_TYPE (decl);
16177   if (type_build_dtor_call (type))
16178     {
16179       int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
16180       tree addr;
16181       tree call;
16182 
16183       if (TREE_CODE (type) == ARRAY_TYPE)
16184 	addr = decl;
16185       else
16186 	addr = build_address (decl);
16187 
16188       call = build_delete (TREE_TYPE (addr), addr,
16189 			   sfk_complete_destructor, flags, 0, complain);
16190       if (call == error_mark_node)
16191 	cleanup = error_mark_node;
16192       else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
16193 	/* Discard the call.  */;
16194       else if (cleanup)
16195 	cleanup = cp_build_compound_expr (cleanup, call, complain);
16196       else
16197 	cleanup = call;
16198     }
16199 
16200   /* build_delete sets the location of the destructor call to the
16201      current location, even though the destructor is going to be
16202      called later, at the end of the current scope.  This can lead to
16203      a "jumpy" behavior for users of debuggers when they step around
16204      the end of the block.  So let's unset the location of the
16205      destructor call instead.  */
16206   protected_set_expr_location (cleanup, UNKNOWN_LOCATION);
16207 
16208   if (cleanup
16209       && DECL_P (decl)
16210       && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl)))
16211       /* Treat objects with destructors as used; the destructor may do
16212 	 something substantive.  */
16213       && !mark_used (decl, complain) && !(complain & tf_error))
16214     return error_mark_node;
16215 
16216   return cleanup;
16217 }
16218 
16219 
16220 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
16221    FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
16222    METHOD_TYPE or FUNCTION_TYPE, or pointer to member function.  */
16223 
16224 tree
16225 static_fn_type (tree memfntype)
16226 {
16227   tree fntype;
16228   tree args;
16229 
16230   if (TYPE_PTRMEMFUNC_P (memfntype))
16231     memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
16232   if (POINTER_TYPE_P (memfntype)
16233       || TREE_CODE (memfntype) == FUNCTION_DECL)
16234     memfntype = TREE_TYPE (memfntype);
16235   if (TREE_CODE (memfntype) == FUNCTION_TYPE)
16236     return memfntype;
16237   gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
16238   args = TYPE_ARG_TYPES (memfntype);
16239   cp_ref_qualifier rqual = type_memfn_rqual (memfntype);
16240   fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
16241   fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype), rqual);
16242   fntype = (cp_build_type_attribute_variant
16243 	    (fntype, TYPE_ATTRIBUTES (memfntype)));
16244   fntype = (build_exception_variant
16245 	    (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
16246   if (TYPE_HAS_LATE_RETURN_TYPE (memfntype))
16247     TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
16248   return fntype;
16249 }
16250 
16251 /* DECL was originally constructed as a non-static member function,
16252    but turned out to be static.  Update it accordingly.  */
16253 
16254 void
16255 revert_static_member_fn (tree decl)
16256 {
16257   tree stype = static_fn_type (decl);
16258   cp_cv_quals quals = type_memfn_quals (stype);
16259   cp_ref_qualifier rqual = type_memfn_rqual (stype);
16260 
16261   if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
16262     stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
16263 
16264   TREE_TYPE (decl) = stype;
16265 
16266   if (DECL_ARGUMENTS (decl))
16267     DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
16268   DECL_STATIC_FUNCTION_P (decl) = 1;
16269 }
16270 
16271 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
16272    one of the language-independent trees.  */
16273 
16274 enum cp_tree_node_structure_enum
16275 cp_tree_node_structure (union lang_tree_node * t)
16276 {
16277   switch (TREE_CODE (&t->generic))
16278     {
16279     case DEFAULT_ARG:		return TS_CP_DEFAULT_ARG;
16280     case DEFERRED_NOEXCEPT:	return TS_CP_DEFERRED_NOEXCEPT;
16281     case IDENTIFIER_NODE:	return TS_CP_IDENTIFIER;
16282     case OVERLOAD:		return TS_CP_OVERLOAD;
16283     case TEMPLATE_PARM_INDEX:	return TS_CP_TPI;
16284     case PTRMEM_CST:		return TS_CP_PTRMEM;
16285     case BASELINK:		return TS_CP_BASELINK;
16286     case TEMPLATE_DECL:		return TS_CP_TEMPLATE_DECL;
16287     case STATIC_ASSERT:		return TS_CP_STATIC_ASSERT;
16288     case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
16289     case TRAIT_EXPR:		return TS_CP_TRAIT_EXPR;
16290     case LAMBDA_EXPR:		return TS_CP_LAMBDA_EXPR;
16291     case TEMPLATE_INFO:		return TS_CP_TEMPLATE_INFO;
16292     case CONSTRAINT_INFO:       return TS_CP_CONSTRAINT_INFO;
16293     case USERDEF_LITERAL:	return TS_CP_USERDEF_LITERAL;
16294     default:			return TS_CP_GENERIC;
16295     }
16296 }
16297 
16298 /* Build the void_list_node (void_type_node having been created).  */
16299 tree
16300 build_void_list_node (void)
16301 {
16302   tree t = build_tree_list (NULL_TREE, void_type_node);
16303   return t;
16304 }
16305 
16306 bool
16307 cp_missing_noreturn_ok_p (tree decl)
16308 {
16309   /* A missing noreturn is ok for the `main' function.  */
16310   return DECL_MAIN_P (decl);
16311 }
16312 
16313 /* Return the decl used to identify the COMDAT group into which DECL should
16314    be placed.  */
16315 
16316 tree
16317 cxx_comdat_group (tree decl)
16318 {
16319   /* Virtual tables, construction virtual tables, and virtual table
16320      tables all go in a single COMDAT group, named after the primary
16321      virtual table.  */
16322   if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
16323     decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
16324   /* For all other DECLs, the COMDAT group is the mangled name of the
16325      declaration itself.  */
16326   else
16327     {
16328       while (DECL_THUNK_P (decl))
16329 	{
16330 	  /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
16331 	     into the same section as the target function.  In that case
16332 	     we must return target's name.  */
16333 	  tree target = THUNK_TARGET (decl);
16334 	  if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
16335 	      && DECL_SECTION_NAME (target) != NULL
16336 	      && DECL_ONE_ONLY (target))
16337 	    decl = target;
16338 	  else
16339 	    break;
16340 	}
16341     }
16342 
16343   return decl;
16344 }
16345 
16346 /* Returns the return type for FN as written by the user, which may include
16347    a placeholder for a deduced return type.  */
16348 
16349 tree
16350 fndecl_declared_return_type (tree fn)
16351 {
16352   fn = STRIP_TEMPLATE (fn);
16353   if (FNDECL_USED_AUTO (fn))
16354     {
16355       struct language_function *f = NULL;
16356       if (DECL_STRUCT_FUNCTION (fn))
16357 	f = DECL_STRUCT_FUNCTION (fn)->language;
16358       if (f == NULL)
16359 	f = DECL_SAVED_FUNCTION_DATA (fn);
16360       return f->x_auto_return_pattern;
16361     }
16362   return TREE_TYPE (TREE_TYPE (fn));
16363 }
16364 
16365 /* Returns true iff DECL is a variable or function declared with an auto type
16366    that has not yet been deduced to a real type.  */
16367 
16368 bool
16369 undeduced_auto_decl (tree decl)
16370 {
16371   if (cxx_dialect < cxx11)
16372     return false;
16373   return ((VAR_OR_FUNCTION_DECL_P (decl)
16374 	   || TREE_CODE (decl) == TEMPLATE_DECL)
16375 	  && type_uses_auto (TREE_TYPE (decl)));
16376 }
16377 
16378 /* Complain if DECL has an undeduced return type.  */
16379 
16380 bool
16381 require_deduced_type (tree decl, tsubst_flags_t complain)
16382 {
16383   if (undeduced_auto_decl (decl))
16384     {
16385       if (complain & tf_error)
16386 	error ("use of %qD before deduction of %<auto%>", decl);
16387       return false;
16388     }
16389   return true;
16390 }
16391 
16392 #include "gt-cp-decl.h"
16393