xref: /dragonfly/contrib/gcc-8.0/gcc/cp/decl.c (revision abf903a5)
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 	  tree init_type = TREE_TYPE (init);
6138 	  if (init_type && TYPE_PTRMEMFUNC_P (init_type))
6139 	    /* There is no need to call reshape_init for pointer-to-member
6140 	       function initializers, as they are always constructed correctly
6141 	       by the front end.  Here we have e.g. {.__pfn=0B, .__delta=0},
6142 	       which is missing outermost braces.  We should warn below, and
6143 	       one of the routines below will wrap it in additional { }.  */;
6144 	  /* For a nested compound literal, there is no need to reshape since
6145 	     we called reshape_init in finish_compound_literal, before calling
6146 	     digest_init.  */
6147 	  else if (COMPOUND_LITERAL_P (init)
6148 		   /* Similarly, a CONSTRUCTOR of the target's type is a
6149 		      previously digested initializer.  */
6150 		   || same_type_ignoring_top_level_qualifiers_p (type,
6151 								 init_type))
6152 	    {
6153 	      ++d->cur;
6154 	      gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
6155 	      return init;
6156 	    }
6157 	  else
6158 	    {
6159 	      /* Something that hasn't been reshaped yet.  */
6160 	      ++d->cur;
6161 	      gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6162 	      return reshape_init (type, init, complain);
6163 	    }
6164 	}
6165 
6166       if (complain & tf_warning)
6167 	warning (OPT_Wmissing_braces,
6168 		 "missing braces around initializer for %qT",
6169 		 type);
6170     }
6171 
6172   /* Dispatch to specialized routines.  */
6173   if (CLASS_TYPE_P (type))
6174     return reshape_init_class (type, d, first_initializer_p, complain);
6175   else if (TREE_CODE (type) == ARRAY_TYPE)
6176     return reshape_init_array (type, d, complain);
6177   else if (VECTOR_TYPE_P (type))
6178     return reshape_init_vector (type, d, complain);
6179   else
6180     gcc_unreachable();
6181 }
6182 
6183 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
6184    brace-enclosed aggregate initializer.
6185 
6186    INIT is the CONSTRUCTOR containing the list of initializers describing
6187    a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
6188    It may not presently match the shape of the TYPE; for example:
6189 
6190      struct S { int a; int b; };
6191      struct S a[] = { 1, 2, 3, 4 };
6192 
6193    Here INIT will hold a vector of four elements, rather than a
6194    vector of two elements, each itself a vector of two elements.  This
6195    routine transforms INIT from the former form into the latter.  The
6196    revised CONSTRUCTOR node is returned.  */
6197 
6198 tree
6199 reshape_init (tree type, tree init, tsubst_flags_t complain)
6200 {
6201   vec<constructor_elt, va_gc> *v;
6202   reshape_iter d;
6203   tree new_init;
6204 
6205   gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6206 
6207   v = CONSTRUCTOR_ELTS (init);
6208 
6209   /* An empty constructor does not need reshaping, and it is always a valid
6210      initializer.  */
6211   if (vec_safe_is_empty (v))
6212     return init;
6213 
6214   /* Handle [dcl.init.list] direct-list-initialization from
6215      single element of enumeration with a fixed underlying type.  */
6216   if (is_direct_enum_init (type, init))
6217     {
6218       tree elt = CONSTRUCTOR_ELT (init, 0)->value;
6219       type = cv_unqualified (type);
6220       if (check_narrowing (ENUM_UNDERLYING_TYPE (type), elt, complain))
6221 	{
6222 	  warning_sentinel w (warn_useless_cast);
6223 	  warning_sentinel w2 (warn_ignored_qualifiers);
6224 	  return cp_build_c_cast (type, elt, tf_warning_or_error);
6225 	}
6226       else
6227 	return error_mark_node;
6228     }
6229 
6230   /* Recurse on this CONSTRUCTOR.  */
6231   d.cur = &(*v)[0];
6232   d.end = d.cur + v->length ();
6233 
6234   new_init = reshape_init_r (type, &d, true, complain);
6235   if (new_init == error_mark_node)
6236     return error_mark_node;
6237 
6238   /* Make sure all the element of the constructor were used. Otherwise,
6239      issue an error about exceeding initializers.  */
6240   if (d.cur != d.end)
6241     {
6242       if (complain & tf_error)
6243 	error ("too many initializers for %qT", type);
6244       return error_mark_node;
6245     }
6246 
6247   if (CONSTRUCTOR_IS_DIRECT_INIT (init)
6248       && BRACE_ENCLOSED_INITIALIZER_P (new_init))
6249     CONSTRUCTOR_IS_DIRECT_INIT (new_init) = true;
6250 
6251   return new_init;
6252 }
6253 
6254 /* Verify array initializer.  Returns true if errors have been reported.  */
6255 
6256 bool
6257 check_array_initializer (tree decl, tree type, tree init)
6258 {
6259   tree element_type = TREE_TYPE (type);
6260 
6261   /* The array type itself need not be complete, because the
6262      initializer may tell us how many elements are in the array.
6263      But, the elements of the array must be complete.  */
6264   if (!COMPLETE_TYPE_P (complete_type (element_type)))
6265     {
6266       if (decl)
6267 	error_at (DECL_SOURCE_LOCATION (decl),
6268 		  "elements of array %q#D have incomplete type", decl);
6269       else
6270 	error ("elements of array %q#T have incomplete type", type);
6271       return true;
6272     }
6273   /* A compound literal can't have variable size.  */
6274   if (init && !decl
6275       && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
6276 	  || !TREE_CONSTANT (TYPE_SIZE (element_type))))
6277     {
6278       error ("variable-sized compound literal");
6279       return true;
6280     }
6281   return false;
6282 }
6283 
6284 /* Subroutine of check_initializer; args are passed down from that function.
6285    Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init.  */
6286 
6287 static tree
6288 build_aggr_init_full_exprs (tree decl, tree init, int flags)
6289 
6290 {
6291   gcc_assert (stmts_are_full_exprs_p ());
6292   return build_aggr_init (decl, init, flags, tf_warning_or_error);
6293 }
6294 
6295 /* Verify INIT (the initializer for DECL), and record the
6296    initialization in DECL_INITIAL, if appropriate.  CLEANUP is as for
6297    grok_reference_init.
6298 
6299    If the return value is non-NULL, it is an expression that must be
6300    evaluated dynamically to initialize DECL.  */
6301 
6302 static tree
6303 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
6304 {
6305   tree type = TREE_TYPE (decl);
6306   tree init_code = NULL;
6307   tree core_type;
6308 
6309   /* Things that are going to be initialized need to have complete
6310      type.  */
6311   TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
6312 
6313   if (DECL_HAS_VALUE_EXPR_P (decl))
6314     {
6315       /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
6316 	 it doesn't have storage to be initialized.  */
6317       gcc_assert (init == NULL_TREE);
6318       return NULL_TREE;
6319     }
6320 
6321   if (type == error_mark_node)
6322     /* We will have already complained.  */
6323     return NULL_TREE;
6324 
6325   if (TREE_CODE (type) == ARRAY_TYPE)
6326     {
6327       if (check_array_initializer (decl, type, init))
6328 	return NULL_TREE;
6329     }
6330   else if (!COMPLETE_TYPE_P (type))
6331     {
6332       error_at (DECL_SOURCE_LOCATION (decl),
6333 		"%q#D has incomplete type", decl);
6334       TREE_TYPE (decl) = error_mark_node;
6335       return NULL_TREE;
6336     }
6337   else
6338     /* There is no way to make a variable-sized class type in GNU C++.  */
6339     gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
6340 
6341   if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
6342     {
6343       int init_len = CONSTRUCTOR_NELTS (init);
6344       if (SCALAR_TYPE_P (type))
6345 	{
6346 	  if (init_len == 0)
6347 	    {
6348 	      maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6349 	      init = build_zero_init (type, NULL_TREE, false);
6350 	    }
6351 	  else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
6352 	    {
6353 	      error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)),
6354 			"scalar object %qD requires one element in "
6355 			"initializer", decl);
6356 	      TREE_TYPE (decl) = error_mark_node;
6357 	      return NULL_TREE;
6358 	    }
6359 	}
6360     }
6361 
6362   if (TREE_CODE (decl) == CONST_DECL)
6363     {
6364       gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
6365 
6366       DECL_INITIAL (decl) = init;
6367 
6368       gcc_assert (init != NULL_TREE);
6369       init = NULL_TREE;
6370     }
6371   else if (!init && DECL_REALLY_EXTERN (decl))
6372     ;
6373   else if (init || type_build_ctor_call (type)
6374 	   || TREE_CODE (type) == REFERENCE_TYPE)
6375     {
6376       if (TREE_CODE (type) == REFERENCE_TYPE)
6377 	{
6378 	  init = grok_reference_init (decl, type, init, flags);
6379 	  flags |= LOOKUP_ALREADY_DIGESTED;
6380 	}
6381       else if (!init)
6382 	check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
6383 					   tf_warning_or_error);
6384       /* Do not reshape constructors of vectors (they don't need to be
6385 	 reshaped.  */
6386       else if (BRACE_ENCLOSED_INITIALIZER_P (init))
6387 	{
6388 	  if (is_std_init_list (type))
6389 	    {
6390 	      init = perform_implicit_conversion (type, init,
6391 						  tf_warning_or_error);
6392 	      flags |= LOOKUP_ALREADY_DIGESTED;
6393 	    }
6394 	  else if (TYPE_NON_AGGREGATE_CLASS (type))
6395 	    {
6396 	      /* Don't reshape if the class has constructors.  */
6397 	      if (cxx_dialect == cxx98)
6398 		error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)),
6399 			  "in C++98 %qD must be initialized by "
6400 			  "constructor, not by %<{...}%>",
6401 			  decl);
6402 	    }
6403 	  else if (VECTOR_TYPE_P (type) && TYPE_VECTOR_OPAQUE (type))
6404 	    {
6405 	      error ("opaque vector types cannot be initialized");
6406 	      init = error_mark_node;
6407 	    }
6408 	  else
6409 	    {
6410 	      init = reshape_init (type, init, tf_warning_or_error);
6411 	      flags |= LOOKUP_NO_NARROWING;
6412 	    }
6413 	}
6414       else if (TREE_CODE (init) == TREE_LIST
6415 	       && TREE_TYPE (init) != unknown_type_node
6416 	       && !MAYBE_CLASS_TYPE_P (type))
6417 	{
6418 	  gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6419 
6420 	  /* We get here with code like `int a (2);' */
6421 	  init = build_x_compound_expr_from_list (init, ELK_INIT,
6422 						  tf_warning_or_error);
6423 	}
6424 
6425       /* If DECL has an array type without a specific bound, deduce the
6426 	 array size from the initializer.  */
6427       maybe_deduce_size_from_array_init (decl, init);
6428       type = TREE_TYPE (decl);
6429       if (type == error_mark_node)
6430 	return NULL_TREE;
6431 
6432       if (((type_build_ctor_call (type) || CLASS_TYPE_P (type))
6433 	   && !(flags & LOOKUP_ALREADY_DIGESTED)
6434 	   && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
6435 		&& CP_AGGREGATE_TYPE_P (type)
6436 		&& (CLASS_TYPE_P (type)
6437 		    || !TYPE_NEEDS_CONSTRUCTING (type)
6438 		    || type_has_extended_temps (type))))
6439 	  || (DECL_DECOMPOSITION_P (decl) && TREE_CODE (type) == ARRAY_TYPE))
6440 	{
6441 	  init_code = build_aggr_init_full_exprs (decl, init, flags);
6442 
6443 	  /* A constructor call is a non-trivial initializer even if
6444 	     it isn't explicitly written.  */
6445 	  if (TREE_SIDE_EFFECTS (init_code))
6446 	    DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
6447 
6448 	  /* If this is a constexpr initializer, expand_default_init will
6449 	     have returned an INIT_EXPR rather than a CALL_EXPR.  In that
6450 	     case, pull the initializer back out and pass it down into
6451 	     store_init_value.  */
6452 	  while (TREE_CODE (init_code) == EXPR_STMT
6453 		 || TREE_CODE (init_code) == CONVERT_EXPR)
6454 	    init_code = TREE_OPERAND (init_code, 0);
6455 	  if (TREE_CODE (init_code) == INIT_EXPR)
6456 	    {
6457 	      init = TREE_OPERAND (init_code, 1);
6458 	      init_code = NULL_TREE;
6459 	      /* Don't call digest_init; it's unnecessary and will complain
6460 		 about aggregate initialization of non-aggregate classes.  */
6461 	      flags |= LOOKUP_ALREADY_DIGESTED;
6462 	    }
6463 	  else if (DECL_DECLARED_CONSTEXPR_P (decl))
6464 	    {
6465 	      /* Declared constexpr, but no suitable initializer; massage
6466 		 init appropriately so we can pass it into store_init_value
6467 		 for the error.  */
6468 	      if (CLASS_TYPE_P (type)
6469 		  && (!init || TREE_CODE (init) == TREE_LIST))
6470 		{
6471 		  init = build_functional_cast (type, init, tf_none);
6472 		  if (TREE_CODE (init) == TARGET_EXPR)
6473 		    TARGET_EXPR_DIRECT_INIT_P (init) = true;
6474 		}
6475 	      init_code = NULL_TREE;
6476 	    }
6477 	  else
6478 	    init = NULL_TREE;
6479 	}
6480 
6481       if (init && TREE_CODE (init) != TREE_VEC)
6482 	{
6483 	  /* In aggregate initialization of a variable, each element
6484 	     initialization is a full-expression because there is no
6485 	     enclosing expression.  */
6486 	  gcc_assert (stmts_are_full_exprs_p ());
6487 
6488 	  init_code = store_init_value (decl, init, cleanups, flags);
6489 
6490 	  if (pedantic && TREE_CODE (type) == ARRAY_TYPE
6491 	      && DECL_INITIAL (decl)
6492 	      && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
6493 	      && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
6494 	    warning_at (EXPR_LOC_OR_LOC (DECL_INITIAL (decl),
6495 					 DECL_SOURCE_LOCATION (decl)),
6496 			0, "array %qD initialized by parenthesized "
6497 			"string literal %qE",
6498 			decl, DECL_INITIAL (decl));
6499 	  init = NULL;
6500 	}
6501     }
6502   else
6503     {
6504       if (CLASS_TYPE_P (core_type = strip_array_types (type))
6505 	  && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
6506 	      || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
6507 	diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
6508 						  /*complain=*/true);
6509 
6510       check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
6511 					 tf_warning_or_error);
6512     }
6513 
6514   if (init && init != error_mark_node)
6515     init_code = build2 (INIT_EXPR, type, decl, init);
6516 
6517   if (init_code)
6518     {
6519       /* We might have set these in cp_finish_decl.  */
6520       DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
6521       TREE_CONSTANT (decl) = false;
6522     }
6523 
6524   if (init_code
6525       && (DECL_IN_AGGR_P (decl)
6526 	  && DECL_INITIALIZED_IN_CLASS_P (decl)
6527 	  && !DECL_VAR_DECLARED_INLINE_P (decl)))
6528     {
6529       static int explained = 0;
6530 
6531       if (cxx_dialect < cxx11)
6532 	error ("initializer invalid for static member with constructor");
6533       else if (cxx_dialect < cxx17)
6534 	error ("non-constant in-class initialization invalid for static "
6535 	       "member %qD", decl);
6536       else
6537 	error ("non-constant in-class initialization invalid for non-inline "
6538 	       "static member %qD", decl);
6539       if (!explained)
6540 	{
6541 	  inform (input_location,
6542 		  "(an out of class initialization is required)");
6543 	  explained = 1;
6544 	}
6545       return NULL_TREE;
6546     }
6547 
6548   return init_code;
6549 }
6550 
6551 /* If DECL is not a local variable, give it RTL.  */
6552 
6553 static void
6554 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
6555 {
6556   int toplev = toplevel_bindings_p ();
6557   int defer_p;
6558 
6559   /* Set the DECL_ASSEMBLER_NAME for the object.  */
6560   if (asmspec)
6561     {
6562       /* The `register' keyword, when used together with an
6563 	 asm-specification, indicates that the variable should be
6564 	 placed in a particular register.  */
6565       if (VAR_P (decl) && DECL_REGISTER (decl))
6566 	{
6567 	  set_user_assembler_name (decl, asmspec);
6568 	  DECL_HARD_REGISTER (decl) = 1;
6569 	}
6570       else
6571 	{
6572 	  if (TREE_CODE (decl) == FUNCTION_DECL
6573 	      && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
6574 	    set_builtin_user_assembler_name (decl, asmspec);
6575 	  set_user_assembler_name (decl, asmspec);
6576 	}
6577     }
6578 
6579   /* Handle non-variables up front.  */
6580   if (!VAR_P (decl))
6581     {
6582       rest_of_decl_compilation (decl, toplev, at_eof);
6583       return;
6584     }
6585 
6586   /* If we see a class member here, it should be a static data
6587      member.  */
6588   if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
6589     {
6590       gcc_assert (TREE_STATIC (decl));
6591       /* An in-class declaration of a static data member should be
6592 	 external; it is only a declaration, and not a definition.  */
6593       if (init == NULL_TREE)
6594 	gcc_assert (DECL_EXTERNAL (decl)
6595 		    || !TREE_PUBLIC (decl)
6596 		    || DECL_INLINE_VAR_P (decl));
6597     }
6598 
6599   /* We don't create any RTL for local variables.  */
6600   if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6601     return;
6602 
6603   /* We defer emission of local statics until the corresponding
6604      DECL_EXPR is expanded.  But with constexpr its function might never
6605      be expanded, so go ahead and tell cgraph about the variable now.  */
6606   defer_p = ((DECL_FUNCTION_SCOPE_P (decl)
6607 	      && !var_in_maybe_constexpr_fn (decl))
6608 	     || DECL_VIRTUAL_P (decl));
6609 
6610   /* Defer template instantiations.  */
6611   if (DECL_LANG_SPECIFIC (decl)
6612       && DECL_IMPLICIT_INSTANTIATION (decl))
6613     defer_p = 1;
6614 
6615   /* If we're not deferring, go ahead and assemble the variable.  */
6616   if (!defer_p)
6617     rest_of_decl_compilation (decl, toplev, at_eof);
6618 }
6619 
6620 /* walk_tree helper for wrap_temporary_cleanups, below.  */
6621 
6622 static tree
6623 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
6624 {
6625   /* Stop at types or full-expression boundaries.  */
6626   if (TYPE_P (*stmt_p)
6627       || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
6628     {
6629       *walk_subtrees = 0;
6630       return NULL_TREE;
6631     }
6632 
6633   if (TREE_CODE (*stmt_p) == TARGET_EXPR)
6634     {
6635       tree guard = (tree)data;
6636       tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
6637 
6638       tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
6639       /* Tell honor_protect_cleanup_actions to handle this as a separate
6640 	 cleanup.  */
6641       TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
6642 
6643       TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
6644     }
6645 
6646   return NULL_TREE;
6647 }
6648 
6649 /* We're initializing a local variable which has a cleanup GUARD.  If there
6650    are any temporaries used in the initializer INIT of this variable, we
6651    need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6652    variable will be cleaned up properly if one of them throws.
6653 
6654    Unfortunately, there's no way to express this properly in terms of
6655    nesting, as the regions for the temporaries overlap the region for the
6656    variable itself; if there are two temporaries, the variable needs to be
6657    the first thing destroyed if either of them throws.  However, we only
6658    want to run the variable's cleanup if it actually got constructed.  So
6659    we need to guard the temporary cleanups with the variable's cleanup if
6660    they are run on the normal path, but not if they are run on the
6661    exceptional path.  We implement this by telling
6662    honor_protect_cleanup_actions to strip the variable cleanup from the
6663    exceptional path.  */
6664 
6665 static void
6666 wrap_temporary_cleanups (tree init, tree guard)
6667 {
6668   cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6669 }
6670 
6671 /* Generate code to initialize DECL (a local variable).  */
6672 
6673 static void
6674 initialize_local_var (tree decl, tree init)
6675 {
6676   tree type = TREE_TYPE (decl);
6677   tree cleanup;
6678   int already_used;
6679 
6680   gcc_assert (VAR_P (decl)
6681 	      || TREE_CODE (decl) == RESULT_DECL);
6682   gcc_assert (!TREE_STATIC (decl));
6683 
6684   if (DECL_SIZE (decl) == NULL_TREE)
6685     {
6686       /* If we used it already as memory, it must stay in memory.  */
6687       DECL_INITIAL (decl) = NULL_TREE;
6688       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6689       return;
6690     }
6691 
6692   if (type == error_mark_node)
6693     return;
6694 
6695   /* Compute and store the initial value.  */
6696   already_used = TREE_USED (decl) || TREE_USED (type);
6697   if (TREE_USED (type))
6698     DECL_READ_P (decl) = 1;
6699 
6700   /* Generate a cleanup, if necessary.  */
6701   cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6702 
6703   /* Perform the initialization.  */
6704   if (init)
6705     {
6706       tree rinit = (TREE_CODE (init) == INIT_EXPR
6707 		    ? TREE_OPERAND (init, 1) : NULL_TREE);
6708       if (rinit && !TREE_SIDE_EFFECTS (rinit))
6709 	{
6710 	  /* Stick simple initializers in DECL_INITIAL so that
6711 	     -Wno-init-self works (c++/34772).  */
6712 	  gcc_assert (TREE_OPERAND (init, 0) == decl);
6713 	  DECL_INITIAL (decl) = rinit;
6714 
6715 	  if (warn_init_self && TREE_CODE (type) == REFERENCE_TYPE)
6716 	    {
6717 	      STRIP_NOPS (rinit);
6718 	      if (rinit == decl)
6719 		warning_at (DECL_SOURCE_LOCATION (decl),
6720 			    OPT_Winit_self,
6721 			    "reference %qD is initialized with itself", decl);
6722 	    }
6723 	}
6724       else
6725 	{
6726 	  int saved_stmts_are_full_exprs_p;
6727 
6728 	  /* If we're only initializing a single object, guard the
6729 	     destructors of any temporaries used in its initializer with
6730 	     its destructor.  This isn't right for arrays because each
6731 	     element initialization is a full-expression.  */
6732 	  if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6733 	    wrap_temporary_cleanups (init, cleanup);
6734 
6735 	  gcc_assert (building_stmt_list_p ());
6736 	  saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6737 	  current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6738 	  finish_expr_stmt (init);
6739 	  current_stmt_tree ()->stmts_are_full_exprs_p =
6740 	    saved_stmts_are_full_exprs_p;
6741 	}
6742     }
6743 
6744   /* Set this to 0 so we can tell whether an aggregate which was
6745      initialized was ever used.  Don't do this if it has a
6746      destructor, so we don't complain about the 'resource
6747      allocation is initialization' idiom.  Now set
6748      attribute((unused)) on types so decls of that type will be
6749      marked used. (see TREE_USED, above.)  */
6750   if (TYPE_NEEDS_CONSTRUCTING (type)
6751       && ! already_used
6752       && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6753       && DECL_NAME (decl))
6754     TREE_USED (decl) = 0;
6755   else if (already_used)
6756     TREE_USED (decl) = 1;
6757 
6758   if (cleanup)
6759     finish_decl_cleanup (decl, cleanup);
6760 }
6761 
6762 /* DECL is a VAR_DECL for a compiler-generated variable with static
6763    storage duration (like a virtual table) whose initializer is a
6764    compile-time constant.  Initialize the variable and provide it to the
6765    back end.  */
6766 
6767 void
6768 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6769 {
6770   tree init;
6771   gcc_assert (DECL_ARTIFICIAL (decl));
6772   init = build_constructor (TREE_TYPE (decl), v);
6773   gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6774   DECL_INITIAL (decl) = init;
6775   DECL_INITIALIZED_P (decl) = 1;
6776   determine_visibility (decl);
6777   layout_var_decl (decl);
6778   maybe_commonize_var (decl);
6779   make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6780 }
6781 
6782 /* INIT is the initializer for a variable, as represented by the
6783    parser.  Returns true iff INIT is value-dependent.  */
6784 
6785 static bool
6786 value_dependent_init_p (tree init)
6787 {
6788   if (TREE_CODE (init) == TREE_LIST)
6789     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6790     return any_value_dependent_elements_p (init);
6791   else if (TREE_CODE (init) == CONSTRUCTOR)
6792   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6793     {
6794       if (dependent_type_p (TREE_TYPE (init)))
6795 	return true;
6796 
6797       vec<constructor_elt, va_gc> *elts;
6798       size_t nelts;
6799       size_t i;
6800 
6801       elts = CONSTRUCTOR_ELTS (init);
6802       nelts = vec_safe_length (elts);
6803       for (i = 0; i < nelts; ++i)
6804 	if (value_dependent_init_p ((*elts)[i].value))
6805 	  return true;
6806     }
6807   else
6808     /* It must be a simple expression, e.g., int i = 3;  */
6809     return value_dependent_expression_p (init);
6810 
6811   return false;
6812 }
6813 
6814 // Returns true if a DECL is VAR_DECL with the concept specifier.
6815 static inline bool
6816 is_concept_var (tree decl)
6817 {
6818   return (VAR_P (decl)
6819 	  // Not all variables have DECL_LANG_SPECIFIC.
6820           && DECL_LANG_SPECIFIC (decl)
6821           && DECL_DECLARED_CONCEPT_P (decl));
6822 }
6823 
6824 /* A helper function to be called via walk_tree.  If any label exists
6825    under *TP, it is (going to be) forced.  Set has_forced_label_in_static.  */
6826 
6827 static tree
6828 notice_forced_label_r (tree *tp, int *walk_subtrees, void *)
6829 {
6830   if (TYPE_P (*tp))
6831     *walk_subtrees = 0;
6832   if (TREE_CODE (*tp) == LABEL_DECL)
6833     cfun->has_forced_label_in_static = 1;
6834   return NULL_TREE;
6835 }
6836 
6837 /* Finish processing of a declaration;
6838    install its line number and initial value.
6839    If the length of an array type is not known before,
6840    it must be determined now, from the initial value, or it is an error.
6841 
6842    INIT is the initializer (if any) for DECL.  If INIT_CONST_EXPR_P is
6843    true, then INIT is an integral constant expression.
6844 
6845    FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6846    if the (init) syntax was used.  */
6847 
6848 void
6849 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6850 		tree asmspec_tree, int flags)
6851 {
6852   tree type;
6853   vec<tree, va_gc> *cleanups = NULL;
6854   const char *asmspec = NULL;
6855   int was_readonly = 0;
6856   bool var_definition_p = false;
6857   tree auto_node;
6858 
6859   if (decl == error_mark_node)
6860     return;
6861   else if (! decl)
6862     {
6863       if (init)
6864 	error ("assignment (not initialization) in declaration");
6865       return;
6866     }
6867 
6868   gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6869   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
6870   gcc_assert (TREE_CODE (decl) != PARM_DECL);
6871 
6872   type = TREE_TYPE (decl);
6873   if (type == error_mark_node)
6874     return;
6875 
6876   /* Warn about register storage specifiers except when in GNU global
6877      or local register variable extension.  */
6878   if (VAR_P (decl) && DECL_REGISTER (decl) && asmspec_tree == NULL_TREE)
6879     {
6880       if (cxx_dialect >= cxx17)
6881 	pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6882 		 "ISO C++17 does not allow %<register%> storage "
6883 		 "class specifier");
6884       else
6885 	warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6886 		    "%<register%> storage class specifier used");
6887     }
6888 
6889   /* If a name was specified, get the string.  */
6890   if (at_namespace_scope_p ())
6891     asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6892   if (asmspec_tree && asmspec_tree != error_mark_node)
6893     asmspec = TREE_STRING_POINTER (asmspec_tree);
6894 
6895   if (current_class_type
6896       && CP_DECL_CONTEXT (decl) == current_class_type
6897       && TYPE_BEING_DEFINED (current_class_type)
6898       && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6899       && (DECL_INITIAL (decl) || init))
6900     DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6901 
6902   if (TREE_CODE (decl) != FUNCTION_DECL
6903       && (auto_node = type_uses_auto (type)))
6904     {
6905       tree d_init;
6906       if (init == NULL_TREE)
6907 	{
6908 	  if (DECL_LANG_SPECIFIC (decl)
6909 	      && DECL_TEMPLATE_INSTANTIATION (decl)
6910 	      && !DECL_TEMPLATE_INSTANTIATED (decl))
6911 	    {
6912 	      /* init is null because we're deferring instantiating the
6913 		 initializer until we need it.  Well, we need it now.  */
6914 	      instantiate_decl (decl, /*defer_ok*/true, /*expl*/false);
6915 	      return;
6916 	    }
6917 
6918 	  gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (auto_node));
6919 	}
6920       d_init = init;
6921       if (d_init)
6922 	{
6923 	  if (TREE_CODE (d_init) == TREE_LIST
6924 	      && !CLASS_PLACEHOLDER_TEMPLATE (auto_node))
6925 	    d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6926 						      tf_warning_or_error);
6927 	  d_init = resolve_nondeduced_context (d_init, tf_warning_or_error);
6928 	}
6929       enum auto_deduction_context adc = adc_variable_type;
6930       if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
6931 	adc = adc_decomp_type;
6932       type = TREE_TYPE (decl) = do_auto_deduction (type, d_init, auto_node,
6933 						   tf_warning_or_error, adc,
6934 						   NULL_TREE, flags);
6935       if (type == error_mark_node)
6936 	return;
6937       if (TREE_CODE (type) == FUNCTION_TYPE)
6938 	{
6939 	  error ("initializer for %<decltype(auto) %D%> has function type "
6940 		 "(did you forget the %<()%> ?)", decl);
6941 	  TREE_TYPE (decl) = error_mark_node;
6942 	  return;
6943 	}
6944       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6945     }
6946 
6947   if (ensure_literal_type_for_constexpr_object (decl) == error_mark_node)
6948     {
6949       DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6950       if (VAR_P (decl) && DECL_CLASS_SCOPE_P (decl))
6951 	{
6952 	  init = NULL_TREE;
6953 	  DECL_EXTERNAL (decl) = 1;
6954 	}
6955     }
6956 
6957   if (VAR_P (decl)
6958       && DECL_CLASS_SCOPE_P (decl)
6959       && DECL_INITIALIZED_IN_CLASS_P (decl))
6960     check_static_variable_definition (decl, type);
6961 
6962   if (init && TREE_CODE (decl) == FUNCTION_DECL)
6963     {
6964       tree clone;
6965       if (init == ridpointers[(int)RID_DELETE])
6966 	{
6967 	  /* FIXME check this is 1st decl.  */
6968 	  DECL_DELETED_FN (decl) = 1;
6969 	  DECL_DECLARED_INLINE_P (decl) = 1;
6970 	  DECL_INITIAL (decl) = error_mark_node;
6971 	  FOR_EACH_CLONE (clone, decl)
6972 	    {
6973 	      DECL_DELETED_FN (clone) = 1;
6974 	      DECL_DECLARED_INLINE_P (clone) = 1;
6975 	      DECL_INITIAL (clone) = error_mark_node;
6976 	    }
6977 	  init = NULL_TREE;
6978 	}
6979       else if (init == ridpointers[(int)RID_DEFAULT])
6980 	{
6981 	  if (defaultable_fn_check (decl))
6982 	    DECL_DEFAULTED_FN (decl) = 1;
6983 	  else
6984 	    DECL_INITIAL (decl) = NULL_TREE;
6985 	}
6986     }
6987 
6988   if (init && VAR_P (decl))
6989     {
6990       DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6991       /* If DECL is a reference, then we want to know whether init is a
6992 	 reference constant; init_const_expr_p as passed tells us whether
6993 	 it's an rvalue constant.  */
6994       if (TREE_CODE (type) == REFERENCE_TYPE)
6995 	init_const_expr_p = potential_constant_expression (init);
6996       if (init_const_expr_p)
6997 	{
6998 	  /* Set these flags now for templates.  We'll update the flags in
6999 	     store_init_value for instantiations.  */
7000 	  DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
7001 	  if (decl_maybe_constant_var_p (decl)
7002 	      /* FIXME setting TREE_CONSTANT on refs breaks the back end.  */
7003 	      && TREE_CODE (type) != REFERENCE_TYPE)
7004 	    TREE_CONSTANT (decl) = 1;
7005 	}
7006     }
7007 
7008   if (processing_template_decl)
7009     {
7010       bool type_dependent_p;
7011 
7012       /* Add this declaration to the statement-tree.  */
7013       if (at_function_scope_p ())
7014 	add_decl_expr (decl);
7015 
7016       type_dependent_p = dependent_type_p (type);
7017 
7018       if (check_for_bare_parameter_packs (init))
7019 	{
7020 	  init = NULL_TREE;
7021 	  DECL_INITIAL (decl) = NULL_TREE;
7022 	}
7023 
7024       /* Generally, initializers in templates are expanded when the
7025 	 template is instantiated.  But, if DECL is a variable constant
7026 	 then it can be used in future constant expressions, so its value
7027 	 must be available. */
7028 
7029       bool dep_init = false;
7030 
7031       if (!VAR_P (decl) || type_dependent_p)
7032 	/* We can't do anything if the decl has dependent type.  */;
7033       else if (!init && is_concept_var (decl))
7034 	{
7035 	  error ("variable concept has no initializer");
7036 	  init = boolean_true_node;
7037 	}
7038       else if (init
7039 	       && init_const_expr_p
7040 	       && TREE_CODE (type) != REFERENCE_TYPE
7041 	       && decl_maybe_constant_var_p (decl)
7042 	       && !(dep_init = value_dependent_init_p (init)))
7043 	{
7044 	  /* This variable seems to be a non-dependent constant, so process
7045 	     its initializer.  If check_initializer returns non-null the
7046 	     initialization wasn't constant after all.  */
7047 	  tree init_code;
7048 	  cleanups = make_tree_vector ();
7049 	  init_code = check_initializer (decl, init, flags, &cleanups);
7050 	  if (init_code == NULL_TREE)
7051 	    init = NULL_TREE;
7052 	  release_tree_vector (cleanups);
7053 	}
7054       else if (!DECL_PRETTY_FUNCTION_P (decl))
7055 	{
7056 	  /* Deduce array size even if the initializer is dependent.  */
7057 	  maybe_deduce_size_from_array_init (decl, init);
7058 	  /* And complain about multiple initializers.  */
7059 	  if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
7060 	      && !MAYBE_CLASS_TYPE_P (type))
7061 	    init = build_x_compound_expr_from_list (init, ELK_INIT,
7062 						    tf_warning_or_error);
7063 	}
7064 
7065       if (init)
7066 	{
7067 	  if (TREE_CODE (init) == TREE_LIST)
7068 	    lookup_list_keep (init, true);
7069 	  DECL_INITIAL (decl) = init;
7070 	}
7071       if (dep_init)
7072 	{
7073 	  retrofit_lang_decl (decl);
7074 	  SET_DECL_DEPENDENT_INIT_P (decl, true);
7075 	}
7076       return;
7077     }
7078 
7079   /* Just store non-static data member initializers for later.  */
7080   if (init && TREE_CODE (decl) == FIELD_DECL)
7081     DECL_INITIAL (decl) = init;
7082 
7083   /* Take care of TYPE_DECLs up front.  */
7084   if (TREE_CODE (decl) == TYPE_DECL)
7085     {
7086       if (type != error_mark_node
7087 	  && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
7088 	{
7089 	  if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7090 	    warning (0, "shadowing previous type declaration of %q#D", decl);
7091 	  set_identifier_type_value (DECL_NAME (decl), decl);
7092 	}
7093 
7094       /* If we have installed this as the canonical typedef for this
7095 	 type, and that type has not been defined yet, delay emitting
7096 	 the debug information for it, as we will emit it later.  */
7097       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7098 	  && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
7099 	TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7100 
7101       rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
7102 				at_eof);
7103       return;
7104     }
7105 
7106   /* A reference will be modified here, as it is initialized.  */
7107   if (! DECL_EXTERNAL (decl)
7108       && TREE_READONLY (decl)
7109       && TREE_CODE (type) == REFERENCE_TYPE)
7110     {
7111       was_readonly = 1;
7112       TREE_READONLY (decl) = 0;
7113     }
7114 
7115   if (VAR_P (decl))
7116     {
7117       /* If this is a local variable that will need a mangled name,
7118 	 register it now.  We must do this before processing the
7119 	 initializer for the variable, since the initialization might
7120 	 require a guard variable, and since the mangled name of the
7121 	 guard variable will depend on the mangled name of this
7122 	 variable.  */
7123       if (DECL_FUNCTION_SCOPE_P (decl)
7124 	  && TREE_STATIC (decl)
7125 	  && !DECL_ARTIFICIAL (decl))
7126 	{
7127 	  push_local_name (decl);
7128 	  /* Normally has_forced_label_in_static is set during GIMPLE
7129 	     lowering, but [cd]tors are never actually compiled directly.
7130 	     We need to set this early so we can deal with the label
7131 	     address extension.  */
7132 	  if ((DECL_CONSTRUCTOR_P (current_function_decl)
7133 	       || DECL_DESTRUCTOR_P (current_function_decl))
7134 	      && init)
7135 	    {
7136 	      walk_tree (&init, notice_forced_label_r, NULL, NULL);
7137 	      add_local_decl (cfun, decl);
7138 	    }
7139 	  /* And make sure it's in the symbol table for
7140 	     c_parse_final_cleanups to find.  */
7141 	  varpool_node::get_create (decl);
7142 	}
7143 
7144       /* Convert the initializer to the type of DECL, if we have not
7145 	 already initialized DECL.  */
7146       if (!DECL_INITIALIZED_P (decl)
7147 	  /* If !DECL_EXTERNAL then DECL is being defined.  In the
7148 	     case of a static data member initialized inside the
7149 	     class-specifier, there can be an initializer even if DECL
7150 	     is *not* defined.  */
7151 	  && (!DECL_EXTERNAL (decl) || init))
7152 	{
7153 	  cleanups = make_tree_vector ();
7154 	  init = check_initializer (decl, init, flags, &cleanups);
7155 
7156 	  /* Handle:
7157 
7158 	     [dcl.init]
7159 
7160 	     The memory occupied by any object of static storage
7161 	     duration is zero-initialized at program startup before
7162 	     any other initialization takes place.
7163 
7164 	     We cannot create an appropriate initializer until after
7165 	     the type of DECL is finalized.  If DECL_INITIAL is set,
7166 	     then the DECL is statically initialized, and any
7167 	     necessary zero-initialization has already been performed.  */
7168 	  if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
7169 	    DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
7170 						   /*nelts=*/NULL_TREE,
7171 						   /*static_storage_p=*/true);
7172 	  /* Remember that the initialization for this variable has
7173 	     taken place.  */
7174 	  DECL_INITIALIZED_P (decl) = 1;
7175 	  /* This declaration is the definition of this variable,
7176 	     unless we are initializing a static data member within
7177 	     the class specifier.  */
7178 	  if (!DECL_EXTERNAL (decl))
7179 	    var_definition_p = true;
7180 	}
7181       /* If the variable has an array type, lay out the type, even if
7182 	 there is no initializer.  It is valid to index through the
7183 	 array, and we must get TYPE_ALIGN set correctly on the array
7184 	 type.  */
7185       else if (TREE_CODE (type) == ARRAY_TYPE)
7186 	layout_type (type);
7187 
7188       if (TREE_STATIC (decl)
7189 	  && !at_function_scope_p ()
7190 	  && current_function_decl == NULL)
7191 	/* So decl is a global variable or a static member of a
7192 	   non local class. Record the types it uses
7193 	   so that we can decide later to emit debug info for them.  */
7194 	record_types_used_by_current_var_decl (decl);
7195     }
7196 
7197   /* Add this declaration to the statement-tree.  This needs to happen
7198      after the call to check_initializer so that the DECL_EXPR for a
7199      reference temp is added before the DECL_EXPR for the reference itself.  */
7200   if (DECL_FUNCTION_SCOPE_P (decl))
7201     {
7202       /* If we're building a variable sized type, and we might be
7203 	 reachable other than via the top of the current binding
7204 	 level, then create a new BIND_EXPR so that we deallocate
7205 	 the object at the right time.  */
7206       if (VAR_P (decl)
7207 	  && DECL_SIZE (decl)
7208 	  && !TREE_CONSTANT (DECL_SIZE (decl))
7209 	  && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
7210 	{
7211 	  tree bind;
7212 	  bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
7213 	  TREE_SIDE_EFFECTS (bind) = 1;
7214 	  add_stmt (bind);
7215 	  BIND_EXPR_BODY (bind) = push_stmt_list ();
7216 	}
7217       add_decl_expr (decl);
7218     }
7219 
7220   /* Let the middle end know about variables and functions -- but not
7221      static data members in uninstantiated class templates.  */
7222   if (VAR_OR_FUNCTION_DECL_P (decl))
7223     {
7224       if (VAR_P (decl))
7225 	{
7226 	  layout_var_decl (decl);
7227 	  maybe_commonize_var (decl);
7228 	}
7229 
7230       /* This needs to happen after the linkage is set. */
7231       determine_visibility (decl);
7232 
7233       if (var_definition_p && TREE_STATIC (decl))
7234 	{
7235 	  /* If a TREE_READONLY variable needs initialization
7236 	     at runtime, it is no longer readonly and we need to
7237 	     avoid MEM_READONLY_P being set on RTL created for it.  */
7238 	  if (init)
7239 	    {
7240 	      if (TREE_READONLY (decl))
7241 		TREE_READONLY (decl) = 0;
7242 	      was_readonly = 0;
7243 	    }
7244 	  else if (was_readonly)
7245 	    TREE_READONLY (decl) = 1;
7246 
7247 	  /* Likewise if it needs destruction.  */
7248 	  if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7249 	    TREE_READONLY (decl) = 0;
7250 	}
7251 
7252       make_rtl_for_nonlocal_decl (decl, init, asmspec);
7253 
7254       /* Check for abstractness of the type. Notice that there is no
7255 	 need to strip array types here since the check for those types
7256 	 is already done within create_array_type_for_decl.  */
7257       abstract_virtuals_error (decl, type);
7258 
7259       if (TREE_TYPE (decl) == error_mark_node)
7260 	/* No initialization required.  */
7261 	;
7262       else if (TREE_CODE (decl) == FUNCTION_DECL)
7263 	{
7264 	  if (init)
7265 	    {
7266 	      if (init == ridpointers[(int)RID_DEFAULT])
7267 		{
7268 		  /* An out-of-class default definition is defined at
7269 		     the point where it is explicitly defaulted.  */
7270 		  if (DECL_DELETED_FN (decl))
7271 		    maybe_explain_implicit_delete (decl);
7272 		  else if (DECL_INITIAL (decl) == error_mark_node)
7273 		    synthesize_method (decl);
7274 		}
7275 	      else
7276 		error ("function %q#D is initialized like a variable", decl);
7277 	    }
7278 	  /* else no initialization required.  */
7279 	}
7280       else if (DECL_EXTERNAL (decl)
7281 	       && ! (DECL_LANG_SPECIFIC (decl)
7282 		     && DECL_NOT_REALLY_EXTERN (decl)))
7283 	{
7284 	  if (init)
7285 	    DECL_INITIAL (decl) = init;
7286 	}
7287       /* A variable definition.  */
7288       else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
7289 	/* Initialize the local variable.  */
7290 	initialize_local_var (decl, init);
7291 
7292       /* If a variable is defined, and then a subsequent
7293 	 definition with external linkage is encountered, we will
7294 	 get here twice for the same variable.  We want to avoid
7295 	 calling expand_static_init more than once.  For variables
7296 	 that are not static data members, we can call
7297 	 expand_static_init only when we actually process the
7298 	 initializer.  It is not legal to redeclare a static data
7299 	 member, so this issue does not arise in that case.  */
7300       else if (var_definition_p && TREE_STATIC (decl))
7301 	expand_static_init (decl, init);
7302     }
7303 
7304   /* If a CLEANUP_STMT was created to destroy a temporary bound to a
7305      reference, insert it in the statement-tree now.  */
7306   if (cleanups)
7307     {
7308       unsigned i; tree t;
7309       FOR_EACH_VEC_ELT (*cleanups, i, t)
7310 	push_cleanup (decl, t, false);
7311       release_tree_vector (cleanups);
7312     }
7313 
7314   if (was_readonly)
7315     TREE_READONLY (decl) = 1;
7316 
7317   if (flag_openmp
7318       && VAR_P (decl)
7319       && lookup_attribute ("omp declare target implicit",
7320 			   DECL_ATTRIBUTES (decl)))
7321     {
7322       DECL_ATTRIBUTES (decl)
7323 	= remove_attribute ("omp declare target implicit",
7324 			    DECL_ATTRIBUTES (decl));
7325       complete_type (TREE_TYPE (decl));
7326       if (!cp_omp_mappable_type (TREE_TYPE (decl)))
7327 	error ("%q+D in declare target directive does not have mappable type",
7328 	       decl);
7329       else if (!lookup_attribute ("omp declare target",
7330 				  DECL_ATTRIBUTES (decl))
7331 	       && !lookup_attribute ("omp declare target link",
7332 				     DECL_ATTRIBUTES (decl)))
7333 	DECL_ATTRIBUTES (decl)
7334 	  = tree_cons (get_identifier ("omp declare target"),
7335 		       NULL_TREE, DECL_ATTRIBUTES (decl));
7336     }
7337 
7338   invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
7339 }
7340 
7341 /* For class TYPE return itself or some its bases that contain
7342    any direct non-static data members.  Return error_mark_node if an
7343    error has been diagnosed.  */
7344 
7345 static tree
7346 find_decomp_class_base (location_t loc, tree type, tree ret)
7347 {
7348   bool member_seen = false;
7349   for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
7350     if (TREE_CODE (field) != FIELD_DECL
7351 	|| DECL_ARTIFICIAL (field)
7352 	|| DECL_UNNAMED_BIT_FIELD (field))
7353       continue;
7354     else if (ret)
7355       return type;
7356     else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
7357       {
7358 	if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
7359 	  error_at (loc, "cannot decompose class type %qT because it has an "
7360 			 "anonymous struct member", type);
7361 	else
7362 	  error_at (loc, "cannot decompose class type %qT because it has an "
7363 			 "anonymous union member", type);
7364 	inform (DECL_SOURCE_LOCATION (field), "declared here");
7365 	return error_mark_node;
7366       }
7367     else if (!accessible_p (type, field, true))
7368       {
7369 	error_at (loc, "cannot decompose inaccessible member %qD of %qT",
7370 		  field, type);
7371 	inform (DECL_SOURCE_LOCATION (field),
7372 		TREE_PRIVATE (field)
7373 		? G_("declared private here")
7374 		: G_("declared protected here"));
7375 	return error_mark_node;
7376       }
7377     else
7378       member_seen = true;
7379 
7380   tree base_binfo, binfo;
7381   tree orig_ret = ret;
7382   int i;
7383   if (member_seen)
7384     ret = type;
7385   for (binfo = TYPE_BINFO (type), i = 0;
7386        BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
7387     {
7388       tree t = find_decomp_class_base (loc, TREE_TYPE (base_binfo), ret);
7389       if (t == error_mark_node)
7390 	return error_mark_node;
7391       if (t != NULL_TREE && t != ret)
7392 	{
7393 	  if (ret == type)
7394 	    {
7395 	      error_at (loc, "cannot decompose class type %qT: both it and "
7396 			     "its base class %qT have non-static data members",
7397 			type, t);
7398 	      return error_mark_node;
7399 	    }
7400 	  else if (orig_ret != NULL_TREE)
7401 	    return t;
7402 	  else if (ret != NULL_TREE)
7403 	    {
7404 	      error_at (loc, "cannot decompose class type %qT: its base "
7405 			     "classes %qT and %qT have non-static data "
7406 			     "members", type, ret, t);
7407 	      return error_mark_node;
7408 	    }
7409 	  else
7410 	    ret = t;
7411 	}
7412     }
7413   return ret;
7414 }
7415 
7416 /* Return std::tuple_size<TYPE>::value.  */
7417 
7418 static tree
7419 get_tuple_size (tree type)
7420 {
7421   tree args = make_tree_vec (1);
7422   TREE_VEC_ELT (args, 0) = type;
7423   tree inst = lookup_template_class (get_identifier ("tuple_size"), args,
7424 				     /*in_decl*/NULL_TREE,
7425 				     /*context*/std_node,
7426 				     /*entering_scope*/false, tf_none);
7427   inst = complete_type (inst);
7428   if (inst == error_mark_node || !COMPLETE_TYPE_P (inst))
7429     return NULL_TREE;
7430   tree val = lookup_qualified_name (inst, get_identifier ("value"),
7431 				    /*type*/false, /*complain*/false);
7432   if (TREE_CODE (val) == VAR_DECL || TREE_CODE (val) == CONST_DECL)
7433     val = maybe_constant_value (val);
7434   if (TREE_CODE (val) == INTEGER_CST)
7435     return val;
7436   else
7437     return error_mark_node;
7438 }
7439 
7440 /* Return std::tuple_element<I,TYPE>::type.  */
7441 
7442 static tree
7443 get_tuple_element_type (tree type, unsigned i)
7444 {
7445   tree args = make_tree_vec (2);
7446   TREE_VEC_ELT (args, 0) = build_int_cst (integer_type_node, i);
7447   TREE_VEC_ELT (args, 1) = type;
7448   tree inst = lookup_template_class (get_identifier ("tuple_element"), args,
7449 				     /*in_decl*/NULL_TREE,
7450 				     /*context*/std_node,
7451 				     /*entering_scope*/false,
7452 				     tf_warning_or_error);
7453   return make_typename_type (inst, get_identifier ("type"),
7454 			     none_type, tf_warning_or_error);
7455 }
7456 
7457 /* Return e.get<i>() or get<i>(e).  */
7458 
7459 static tree
7460 get_tuple_decomp_init (tree decl, unsigned i)
7461 {
7462   tree get_id = get_identifier ("get");
7463   tree targs = make_tree_vec (1);
7464   TREE_VEC_ELT (targs, 0) = build_int_cst (integer_type_node, i);
7465 
7466   tree etype = TREE_TYPE (decl);
7467   tree e = convert_from_reference (decl);
7468 
7469   /* [The id-expression] e is an lvalue if the type of the entity e is an
7470      lvalue reference and an xvalue otherwise.  */
7471   if (TREE_CODE (etype) != REFERENCE_TYPE
7472       || TYPE_REF_IS_RVALUE (etype))
7473     e = move (e);
7474 
7475   tree fns = lookup_qualified_name (TREE_TYPE (e), get_id,
7476 				    /*type*/false, /*complain*/false);
7477   bool use_member_get = false;
7478 
7479   /* To use a member get, member lookup must find at least one
7480      declaration that is a function template
7481      whose first template parameter is a non-type parameter.  */
7482   for (lkp_iterator iter (MAYBE_BASELINK_FUNCTIONS (fns)); iter; ++iter)
7483     {
7484       tree fn = *iter;
7485       if (TREE_CODE (fn) == TEMPLATE_DECL)
7486 	{
7487 	  tree tparms = DECL_TEMPLATE_PARMS (fn);
7488 	  tree parm = TREE_VEC_ELT (INNERMOST_TEMPLATE_PARMS (tparms), 0);
7489 	  if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
7490 	    {
7491 	      use_member_get = true;
7492 	      break;
7493 	    }
7494 	}
7495     }
7496 
7497   if (use_member_get)
7498     {
7499       fns = lookup_template_function (fns, targs);
7500       return build_new_method_call (e, fns, /*args*/NULL,
7501 				    /*path*/NULL_TREE, LOOKUP_NORMAL,
7502 				    /*fn_p*/NULL, tf_warning_or_error);
7503     }
7504   else
7505     {
7506       vec<tree,va_gc> *args = make_tree_vector_single (e);
7507       fns = lookup_template_function (get_id, targs);
7508       fns = perform_koenig_lookup (fns, args, tf_warning_or_error);
7509       return finish_call_expr (fns, &args, /*novirt*/false,
7510 			       /*koenig*/true, tf_warning_or_error);
7511     }
7512 }
7513 
7514 /* It's impossible to recover the decltype of a tuple decomposition variable
7515    based on the actual type of the variable, so store it in a hash table.  */
7516 
7517 static GTY((cache)) tree_cache_map *decomp_type_table;
7518 static void
7519 store_decomp_type (tree v, tree t)
7520 {
7521   if (!decomp_type_table)
7522     decomp_type_table = tree_cache_map::create_ggc (13);
7523   decomp_type_table->put (v, t);
7524 }
7525 
7526 tree
7527 lookup_decomp_type (tree v)
7528 {
7529   return *decomp_type_table->get (v);
7530 }
7531 
7532 /* Mangle a decomposition declaration if needed.  Arguments like
7533    in cp_finish_decomp.  */
7534 
7535 void
7536 cp_maybe_mangle_decomp (tree decl, tree first, unsigned int count)
7537 {
7538   if (!processing_template_decl
7539       && !error_operand_p (decl)
7540       && DECL_NAMESPACE_SCOPE_P (decl))
7541     {
7542       auto_vec<tree, 16> v;
7543       v.safe_grow (count);
7544       tree d = first;
7545       for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7546 	v[count - i - 1] = d;
7547       SET_DECL_ASSEMBLER_NAME (decl, mangle_decomp (decl, v));
7548       maybe_apply_pragma_weak (decl);
7549     }
7550 }
7551 
7552 /* Finish a decomposition declaration.  DECL is the underlying declaration
7553    "e", FIRST is the head of a chain of decls for the individual identifiers
7554    chained through DECL_CHAIN in reverse order and COUNT is the number of
7555    those decls.  */
7556 
7557 void
7558 cp_finish_decomp (tree decl, tree first, unsigned int count)
7559 {
7560   if (error_operand_p (decl))
7561     {
7562      error_out:
7563       while (count--)
7564 	{
7565 	  TREE_TYPE (first) = error_mark_node;
7566 	  if (DECL_HAS_VALUE_EXPR_P (first))
7567 	    {
7568 	      SET_DECL_VALUE_EXPR (first, NULL_TREE);
7569 	      DECL_HAS_VALUE_EXPR_P (first) = 0;
7570 	    }
7571 	  first = DECL_CHAIN (first);
7572 	}
7573       if (DECL_P (decl) && DECL_NAMESPACE_SCOPE_P (decl))
7574 	SET_DECL_ASSEMBLER_NAME (decl, get_identifier ("<decomp>"));
7575       return;
7576     }
7577 
7578   location_t loc = DECL_SOURCE_LOCATION (decl);
7579   if (type_dependent_expression_p (decl)
7580       /* This happens for range for when not in templates.
7581 	 Still add the DECL_VALUE_EXPRs for later processing.  */
7582       || (!processing_template_decl
7583 	  && type_uses_auto (TREE_TYPE (decl))))
7584     {
7585       for (unsigned int i = 0; i < count; i++)
7586 	{
7587 	  if (!DECL_HAS_VALUE_EXPR_P (first))
7588 	    {
7589 	      tree v = build_nt (ARRAY_REF, decl,
7590 				 size_int (count - i - 1),
7591 				 NULL_TREE, NULL_TREE);
7592 	      SET_DECL_VALUE_EXPR (first, v);
7593 	      DECL_HAS_VALUE_EXPR_P (first) = 1;
7594 	    }
7595 	  if (processing_template_decl)
7596 	    fit_decomposition_lang_decl (first, decl);
7597 	  first = DECL_CHAIN (first);
7598 	}
7599       return;
7600     }
7601 
7602   auto_vec<tree, 16> v;
7603   v.safe_grow (count);
7604   tree d = first;
7605   for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7606     {
7607       v[count - i - 1] = d;
7608       fit_decomposition_lang_decl (d, decl);
7609     }
7610 
7611   tree type = TREE_TYPE (decl);
7612   tree dexp = decl;
7613 
7614   if (TREE_CODE (type) == REFERENCE_TYPE)
7615     {
7616       dexp = convert_from_reference (dexp);
7617       type = complete_type (TREE_TYPE (type));
7618       if (type == error_mark_node)
7619 	goto error_out;
7620       if (!COMPLETE_TYPE_P (type))
7621 	{
7622 	  error_at (loc, "structured binding refers to incomplete type %qT",
7623 		    type);
7624 	  goto error_out;
7625 	}
7626     }
7627 
7628   tree eltype = NULL_TREE;
7629   unsigned HOST_WIDE_INT eltscnt = 0;
7630   if (TREE_CODE (type) == ARRAY_TYPE)
7631     {
7632       tree nelts;
7633       nelts = array_type_nelts_top (type);
7634       if (nelts == error_mark_node)
7635 	goto error_out;
7636       if (!tree_fits_uhwi_p (nelts))
7637 	{
7638 	  error_at (loc, "cannot decompose variable length array %qT", type);
7639 	  goto error_out;
7640 	}
7641       eltscnt = tree_to_uhwi (nelts);
7642       if (count != eltscnt)
7643 	{
7644        cnt_mismatch:
7645 	  if (count > eltscnt)
7646 	    error_n (loc, count,
7647 		     "%u name provided for structured binding",
7648 		     "%u names provided for structured binding", count);
7649 	  else
7650 	    error_n (loc, count,
7651 		     "only %u name provided for structured binding",
7652 		     "only %u names provided for structured binding", count);
7653 	  inform_n (loc, eltscnt,
7654 		    "while %qT decomposes into %wu element",
7655 		    "while %qT decomposes into %wu elements",
7656 		    type, eltscnt);
7657 	  goto error_out;
7658 	}
7659       eltype = TREE_TYPE (type);
7660       for (unsigned int i = 0; i < count; i++)
7661 	{
7662 	  TREE_TYPE (v[i]) = eltype;
7663 	  layout_decl (v[i], 0);
7664 	  if (processing_template_decl)
7665 	    continue;
7666 	  tree t = unshare_expr (dexp);
7667 	  t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7668 			  eltype, t, size_int (i), NULL_TREE,
7669 			  NULL_TREE);
7670 	  SET_DECL_VALUE_EXPR (v[i], t);
7671 	  DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7672 	}
7673     }
7674   /* 2 GNU extensions.  */
7675   else if (TREE_CODE (type) == COMPLEX_TYPE)
7676     {
7677       eltscnt = 2;
7678       if (count != eltscnt)
7679 	goto cnt_mismatch;
7680       eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7681       for (unsigned int i = 0; i < count; i++)
7682 	{
7683 	  TREE_TYPE (v[i]) = eltype;
7684 	  layout_decl (v[i], 0);
7685 	  if (processing_template_decl)
7686 	    continue;
7687 	  tree t = unshare_expr (dexp);
7688 	  t = build1_loc (DECL_SOURCE_LOCATION (v[i]),
7689 			  i ? IMAGPART_EXPR : REALPART_EXPR, eltype,
7690 			  t);
7691 	  SET_DECL_VALUE_EXPR (v[i], t);
7692 	  DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7693 	}
7694     }
7695   else if (TREE_CODE (type) == VECTOR_TYPE)
7696     {
7697       if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&eltscnt))
7698 	{
7699 	  error_at (loc, "cannot decompose variable length vector %qT", type);
7700 	  goto error_out;
7701 	}
7702       if (count != eltscnt)
7703 	goto cnt_mismatch;
7704       eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7705       for (unsigned int i = 0; i < count; i++)
7706 	{
7707 	  TREE_TYPE (v[i]) = eltype;
7708 	  layout_decl (v[i], 0);
7709 	  if (processing_template_decl)
7710 	    continue;
7711 	  tree t = unshare_expr (dexp);
7712 	  convert_vector_to_array_for_subscript (DECL_SOURCE_LOCATION (v[i]),
7713 						 &t, size_int (i));
7714 	  t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7715 			  eltype, t, size_int (i), NULL_TREE,
7716 			  NULL_TREE);
7717 	  SET_DECL_VALUE_EXPR (v[i], t);
7718 	  DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7719 	}
7720     }
7721   else if (tree tsize = get_tuple_size (type))
7722     {
7723       if (tsize == error_mark_node)
7724 	{
7725 	  error_at (loc, "%<std::tuple_size<%T>::value%> is not an integral "
7726 			 "constant expression", type);
7727 	  goto error_out;
7728 	}
7729       if (!tree_fits_uhwi_p (tsize))
7730 	{
7731 	  error_n (loc, count,
7732 		   "%u name provided for structured binding",
7733 		   "%u names provided for structured binding", count);
7734 	  inform (loc, "while %qT decomposes into %E elements",
7735 		  type, tsize);
7736 	  goto error_out;
7737 	}
7738       eltscnt = tree_to_uhwi (tsize);
7739       if (count != eltscnt)
7740 	goto cnt_mismatch;
7741       int save_read = DECL_READ_P (decl);
7742       for (unsigned i = 0; i < count; ++i)
7743 	{
7744 	  location_t sloc = input_location;
7745 	  location_t dloc = DECL_SOURCE_LOCATION (v[i]);
7746 
7747 	  input_location = dloc;
7748 	  tree init = get_tuple_decomp_init (decl, i);
7749 	  tree eltype = (init == error_mark_node ? error_mark_node
7750 			 : get_tuple_element_type (type, i));
7751 	  input_location = sloc;
7752 
7753 	  if (init == error_mark_node || eltype == error_mark_node)
7754 	    {
7755 	      inform (dloc, "in initialization of structured binding "
7756 		      "variable %qD", v[i]);
7757 	      goto error_out;
7758 	    }
7759 	  /* Save the decltype away before reference collapse.  */
7760 	  store_decomp_type (v[i], eltype);
7761 	  eltype = cp_build_reference_type (eltype, !lvalue_p (init));
7762 	  TREE_TYPE (v[i]) = eltype;
7763 	  layout_decl (v[i], 0);
7764 	  if (DECL_HAS_VALUE_EXPR_P (v[i]))
7765 	    {
7766 	      /* In this case the names are variables, not just proxies.  */
7767 	      SET_DECL_VALUE_EXPR (v[i], NULL_TREE);
7768 	      DECL_HAS_VALUE_EXPR_P (v[i]) = 0;
7769 	    }
7770 	  if (!processing_template_decl)
7771 	    cp_finish_decl (v[i], init, /*constexpr*/false,
7772 			    /*asm*/NULL_TREE, LOOKUP_NORMAL);
7773 	}
7774       /* Ignore reads from the underlying decl performed during initialization
7775 	 of the individual variables.  If those will be read, we'll mark
7776 	 the underlying decl as read at that point.  */
7777       DECL_READ_P (decl) = save_read;
7778     }
7779   else if (TREE_CODE (type) == UNION_TYPE)
7780     {
7781       error_at (loc, "cannot decompose union type %qT", type);
7782       goto error_out;
7783     }
7784   else if (!CLASS_TYPE_P (type))
7785     {
7786       error_at (loc, "cannot decompose non-array non-class type %qT", type);
7787       goto error_out;
7788     }
7789   else if (LAMBDA_TYPE_P (type))
7790     {
7791       error_at (loc, "cannot decompose lambda closure type %qT", type);
7792       goto error_out;
7793     }
7794   else if (processing_template_decl && !COMPLETE_TYPE_P (type))
7795     pedwarn (loc, 0, "structured binding refers to incomplete class type %qT",
7796 	     type);
7797   else
7798     {
7799       tree btype = find_decomp_class_base (loc, type, NULL_TREE);
7800       if (btype == error_mark_node)
7801 	goto error_out;
7802       else if (btype == NULL_TREE)
7803 	{
7804 	  error_at (loc, "cannot decompose class type %qT without non-static "
7805 			 "data members", type);
7806 	  goto error_out;
7807 	}
7808       for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7809 	if (TREE_CODE (field) != FIELD_DECL
7810 	    || DECL_ARTIFICIAL (field)
7811 	    || DECL_UNNAMED_BIT_FIELD (field))
7812 	  continue;
7813 	else
7814 	  eltscnt++;
7815       if (count != eltscnt)
7816 	goto cnt_mismatch;
7817       tree t = dexp;
7818       if (type != btype)
7819 	{
7820 	  t = convert_to_base (t, btype, /*check_access*/true,
7821 			       /*nonnull*/false, tf_warning_or_error);
7822 	  type = btype;
7823 	}
7824       unsigned int i = 0;
7825       for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7826 	if (TREE_CODE (field) != FIELD_DECL
7827 	    || DECL_ARTIFICIAL (field)
7828 	    || DECL_UNNAMED_BIT_FIELD (field))
7829 	  continue;
7830 	else
7831 	  {
7832 	    tree tt = finish_non_static_data_member (field, unshare_expr (t),
7833 						     NULL_TREE);
7834 	    if (REFERENCE_REF_P (tt))
7835 	      tt = TREE_OPERAND (tt, 0);
7836 	    TREE_TYPE (v[i]) = TREE_TYPE (tt);
7837 	    layout_decl (v[i], 0);
7838 	    if (!processing_template_decl)
7839 	      {
7840 		SET_DECL_VALUE_EXPR (v[i], tt);
7841 		DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7842 	      }
7843 	    i++;
7844 	  }
7845     }
7846   if (processing_template_decl)
7847     {
7848       for (unsigned int i = 0; i < count; i++)
7849 	if (!DECL_HAS_VALUE_EXPR_P (v[i]))
7850 	  {
7851 	    tree a = build_nt (ARRAY_REF, decl, size_int (i),
7852 			       NULL_TREE, NULL_TREE);
7853 	    SET_DECL_VALUE_EXPR (v[i], a);
7854 	    DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7855 	  }
7856     }
7857 }
7858 
7859 /* Returns a declaration for a VAR_DECL as if:
7860 
7861      extern "C" TYPE NAME;
7862 
7863    had been seen.  Used to create compiler-generated global
7864    variables.  */
7865 
7866 static tree
7867 declare_global_var (tree name, tree type)
7868 {
7869   tree decl;
7870 
7871   push_to_top_level ();
7872   decl = build_decl (input_location, VAR_DECL, name, type);
7873   TREE_PUBLIC (decl) = 1;
7874   DECL_EXTERNAL (decl) = 1;
7875   DECL_ARTIFICIAL (decl) = 1;
7876   DECL_CONTEXT (decl) = FROB_CONTEXT (global_namespace);
7877   /* If the user has explicitly declared this variable (perhaps
7878      because the code we are compiling is part of a low-level runtime
7879      library), then it is possible that our declaration will be merged
7880      with theirs by pushdecl.  */
7881   decl = pushdecl (decl);
7882   cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
7883   pop_from_top_level ();
7884 
7885   return decl;
7886 }
7887 
7888 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
7889    if "__cxa_atexit" is not being used) corresponding to the function
7890    to be called when the program exits.  */
7891 
7892 static tree
7893 get_atexit_fn_ptr_type (void)
7894 {
7895   tree fn_type;
7896 
7897   if (!atexit_fn_ptr_type_node)
7898     {
7899       tree arg_type;
7900       if (flag_use_cxa_atexit
7901 	  && !targetm.cxx.use_atexit_for_cxa_atexit ())
7902 	/* The parameter to "__cxa_atexit" is "void (*)(void *)".  */
7903 	arg_type = ptr_type_node;
7904       else
7905 	/* The parameter to "atexit" is "void (*)(void)".  */
7906 	arg_type = NULL_TREE;
7907 
7908       fn_type = build_function_type_list (void_type_node,
7909 					  arg_type, NULL_TREE);
7910       atexit_fn_ptr_type_node = build_pointer_type (fn_type);
7911     }
7912 
7913   return atexit_fn_ptr_type_node;
7914 }
7915 
7916 /* Returns a pointer to the `atexit' function.  Note that if
7917    FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
7918    `__cxa_atexit' function specified in the IA64 C++ ABI.  */
7919 
7920 static tree
7921 get_atexit_node (void)
7922 {
7923   tree atexit_fndecl;
7924   tree fn_type;
7925   tree fn_ptr_type;
7926   const char *name;
7927   bool use_aeabi_atexit;
7928 
7929   if (atexit_node)
7930     return atexit_node;
7931 
7932   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
7933     {
7934       /* The declaration for `__cxa_atexit' is:
7935 
7936 	   int __cxa_atexit (void (*)(void *), void *, void *)
7937 
7938 	 We build up the argument types and then the function type
7939 	 itself.  */
7940       tree argtype0, argtype1, argtype2;
7941 
7942       use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
7943       /* First, build the pointer-to-function type for the first
7944 	 argument.  */
7945       fn_ptr_type = get_atexit_fn_ptr_type ();
7946       /* Then, build the rest of the argument types.  */
7947       argtype2 = ptr_type_node;
7948       if (use_aeabi_atexit)
7949 	{
7950 	  argtype1 = fn_ptr_type;
7951 	  argtype0 = ptr_type_node;
7952 	}
7953       else
7954 	{
7955 	  argtype1 = ptr_type_node;
7956 	  argtype0 = fn_ptr_type;
7957 	}
7958       /* And the final __cxa_atexit type.  */
7959       fn_type = build_function_type_list (integer_type_node,
7960 					  argtype0, argtype1, argtype2,
7961 					  NULL_TREE);
7962       if (use_aeabi_atexit)
7963 	name = "__aeabi_atexit";
7964       else
7965 	name = "__cxa_atexit";
7966     }
7967   else
7968     {
7969       /* The declaration for `atexit' is:
7970 
7971 	   int atexit (void (*)());
7972 
7973 	 We build up the argument types and then the function type
7974 	 itself.  */
7975       fn_ptr_type = get_atexit_fn_ptr_type ();
7976       /* Build the final atexit type.  */
7977       fn_type = build_function_type_list (integer_type_node,
7978 					  fn_ptr_type, NULL_TREE);
7979       name = "atexit";
7980     }
7981 
7982   /* Now, build the function declaration.  */
7983   push_lang_context (lang_name_c);
7984   atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
7985   mark_used (atexit_fndecl);
7986   pop_lang_context ();
7987   atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
7988 
7989   return atexit_node;
7990 }
7991 
7992 /* Like get_atexit_node, but for thread-local cleanups.  */
7993 
7994 static tree
7995 get_thread_atexit_node (void)
7996 {
7997   /* The declaration for `__cxa_thread_atexit' is:
7998 
7999      int __cxa_thread_atexit (void (*)(void *), void *, void *) */
8000   tree fn_type = build_function_type_list (integer_type_node,
8001 					   get_atexit_fn_ptr_type (),
8002 					   ptr_type_node, ptr_type_node,
8003 					   NULL_TREE);
8004 
8005   /* Now, build the function declaration.  */
8006   tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
8007 					     ECF_LEAF | ECF_NOTHROW);
8008   return decay_conversion (atexit_fndecl, tf_warning_or_error);
8009 }
8010 
8011 /* Returns the __dso_handle VAR_DECL.  */
8012 
8013 static tree
8014 get_dso_handle_node (void)
8015 {
8016   if (dso_handle_node)
8017     return dso_handle_node;
8018 
8019   /* Declare the variable.  */
8020   dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
8021 					ptr_type_node);
8022 
8023 #ifdef HAVE_GAS_HIDDEN
8024   if (dso_handle_node != error_mark_node)
8025     {
8026       DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
8027       DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
8028     }
8029 #endif
8030 
8031   return dso_handle_node;
8032 }
8033 
8034 /* Begin a new function with internal linkage whose job will be simply
8035    to destroy some particular variable.  */
8036 
8037 static GTY(()) int start_cleanup_cnt;
8038 
8039 static tree
8040 start_cleanup_fn (void)
8041 {
8042   char name[32];
8043   tree fntype;
8044   tree fndecl;
8045   bool use_cxa_atexit = flag_use_cxa_atexit
8046 			&& !targetm.cxx.use_atexit_for_cxa_atexit ();
8047 
8048   push_to_top_level ();
8049 
8050   /* No need to mangle this.  */
8051   push_lang_context (lang_name_c);
8052 
8053   /* Build the name of the function.  */
8054   sprintf (name, "__tcf_%d", start_cleanup_cnt++);
8055   /* Build the function declaration.  */
8056   fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
8057   fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
8058   /* It's a function with internal linkage, generated by the
8059      compiler.  */
8060   TREE_PUBLIC (fndecl) = 0;
8061   DECL_ARTIFICIAL (fndecl) = 1;
8062   /* Make the function `inline' so that it is only emitted if it is
8063      actually needed.  It is unlikely that it will be inlined, since
8064      it is only called via a function pointer, but we avoid unnecessary
8065      emissions this way.  */
8066   DECL_DECLARED_INLINE_P (fndecl) = 1;
8067   DECL_INTERFACE_KNOWN (fndecl) = 1;
8068   /* Build the parameter.  */
8069   if (use_cxa_atexit)
8070     {
8071       tree parmdecl = cp_build_parm_decl (fndecl, NULL_TREE, ptr_type_node);
8072       TREE_USED (parmdecl) = 1;
8073       DECL_READ_P (parmdecl) = 1;
8074       DECL_ARGUMENTS (fndecl) = parmdecl;
8075     }
8076 
8077   pushdecl (fndecl);
8078   start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
8079 
8080   pop_lang_context ();
8081 
8082   return current_function_decl;
8083 }
8084 
8085 /* Finish the cleanup function begun by start_cleanup_fn.  */
8086 
8087 static void
8088 end_cleanup_fn (void)
8089 {
8090   expand_or_defer_fn (finish_function (/*inline_p=*/false));
8091 
8092   pop_from_top_level ();
8093 }
8094 
8095 /* Generate code to handle the destruction of DECL, an object with
8096    static storage duration.  */
8097 
8098 tree
8099 register_dtor_fn (tree decl)
8100 {
8101   tree cleanup;
8102   tree addr;
8103   tree compound_stmt;
8104   tree fcall;
8105   tree type;
8106   bool ob_parm, dso_parm, use_dtor;
8107   tree arg0, arg1, arg2;
8108   tree atex_node;
8109 
8110   type = TREE_TYPE (decl);
8111   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
8112     return void_node;
8113 
8114   /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
8115      "__aeabi_atexit"), and DECL is a class object, we can just pass the
8116      destructor to "__cxa_atexit"; we don't have to build a temporary
8117      function to do the cleanup.  */
8118   dso_parm = (flag_use_cxa_atexit
8119 	      && !targetm.cxx.use_atexit_for_cxa_atexit ());
8120   ob_parm = (CP_DECL_THREAD_LOCAL_P (decl) || dso_parm);
8121   use_dtor = ob_parm && CLASS_TYPE_P (type);
8122   if (use_dtor)
8123     {
8124       cleanup = get_class_binding (type, complete_dtor_identifier);
8125 
8126       /* Make sure it is accessible.  */
8127       perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
8128 				     tf_warning_or_error);
8129     }
8130   else
8131     {
8132       /* Call build_cleanup before we enter the anonymous function so
8133 	 that any access checks will be done relative to the current
8134 	 scope, rather than the scope of the anonymous function.  */
8135       build_cleanup (decl);
8136 
8137       /* Now start the function.  */
8138       cleanup = start_cleanup_fn ();
8139 
8140       /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
8141 	 to the original function, rather than the anonymous one.  That
8142 	 will make the back end think that nested functions are in use,
8143 	 which causes confusion.  */
8144       push_deferring_access_checks (dk_no_check);
8145       fcall = build_cleanup (decl);
8146       pop_deferring_access_checks ();
8147 
8148       /* Create the body of the anonymous function.  */
8149       compound_stmt = begin_compound_stmt (BCS_FN_BODY);
8150       finish_expr_stmt (fcall);
8151       finish_compound_stmt (compound_stmt);
8152       end_cleanup_fn ();
8153     }
8154 
8155   /* Call atexit with the cleanup function.  */
8156   mark_used (cleanup);
8157   cleanup = build_address (cleanup);
8158 
8159   if (CP_DECL_THREAD_LOCAL_P (decl))
8160     atex_node = get_thread_atexit_node ();
8161   else
8162     atex_node = get_atexit_node ();
8163 
8164   if (use_dtor)
8165     {
8166       /* We must convert CLEANUP to the type that "__cxa_atexit"
8167 	 expects.  */
8168       cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
8169       /* "__cxa_atexit" will pass the address of DECL to the
8170 	 cleanup function.  */
8171       mark_used (decl);
8172       addr = build_address (decl);
8173       /* The declared type of the parameter to "__cxa_atexit" is
8174 	 "void *".  For plain "T*", we could just let the
8175 	 machinery in cp_build_function_call convert it -- but if the
8176 	 type is "cv-qualified T *", then we need to convert it
8177 	 before passing it in, to avoid spurious errors.  */
8178       addr = build_nop (ptr_type_node, addr);
8179     }
8180   else
8181     /* Since the cleanup functions we build ignore the address
8182        they're given, there's no reason to pass the actual address
8183        in, and, in general, it's cheaper to pass NULL than any
8184        other value.  */
8185     addr = null_pointer_node;
8186 
8187   if (dso_parm)
8188     arg2 = cp_build_addr_expr (get_dso_handle_node (),
8189 			       tf_warning_or_error);
8190   else if (ob_parm)
8191     /* Just pass NULL to the dso handle parm if we don't actually
8192        have a DSO handle on this target.  */
8193     arg2 = null_pointer_node;
8194   else
8195     arg2 = NULL_TREE;
8196 
8197   if (ob_parm)
8198     {
8199       if (!CP_DECL_THREAD_LOCAL_P (decl)
8200 	  && targetm.cxx.use_aeabi_atexit ())
8201 	{
8202 	  arg1 = cleanup;
8203 	  arg0 = addr;
8204 	}
8205       else
8206 	{
8207 	  arg1 = addr;
8208 	  arg0 = cleanup;
8209 	}
8210     }
8211   else
8212     {
8213       arg0 = cleanup;
8214       arg1 = NULL_TREE;
8215     }
8216   return cp_build_function_call_nary (atex_node, tf_warning_or_error,
8217 				      arg0, arg1, arg2, NULL_TREE);
8218 }
8219 
8220 /* DECL is a VAR_DECL with static storage duration.  INIT, if present,
8221    is its initializer.  Generate code to handle the construction
8222    and destruction of DECL.  */
8223 
8224 static void
8225 expand_static_init (tree decl, tree init)
8226 {
8227   gcc_assert (VAR_P (decl));
8228   gcc_assert (TREE_STATIC (decl));
8229 
8230   /* Some variables require no dynamic initialization.  */
8231   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
8232     {
8233       /* Make sure the destructor is callable.  */
8234       cxx_maybe_build_cleanup (decl, tf_warning_or_error);
8235       if (!init)
8236 	return;
8237     }
8238 
8239   if (CP_DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
8240       && !DECL_FUNCTION_SCOPE_P (decl))
8241     {
8242       if (init)
8243 	error ("non-local variable %qD declared %<__thread%> "
8244 	       "needs dynamic initialization", decl);
8245       else
8246 	error ("non-local variable %qD declared %<__thread%> "
8247 	       "has a non-trivial destructor", decl);
8248       static bool informed;
8249       if (!informed)
8250 	{
8251 	  inform (DECL_SOURCE_LOCATION (decl),
8252 		  "C++11 %<thread_local%> allows dynamic initialization "
8253 		  "and destruction");
8254 	  informed = true;
8255 	}
8256       return;
8257     }
8258 
8259   if (DECL_FUNCTION_SCOPE_P (decl))
8260     {
8261       /* Emit code to perform this initialization but once.  */
8262       tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
8263       tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
8264       tree guard, guard_addr;
8265       tree flag, begin;
8266       /* We don't need thread-safety code for thread-local vars.  */
8267       bool thread_guard = (flag_threadsafe_statics
8268 			   && !CP_DECL_THREAD_LOCAL_P (decl));
8269 
8270       /* Emit code to perform this initialization but once.  This code
8271 	 looks like:
8272 
8273 	   static <type> guard;
8274 	   if (!__atomic_load (guard.first_byte)) {
8275 	     if (__cxa_guard_acquire (&guard)) {
8276 	       bool flag = false;
8277 	       try {
8278 		 // Do initialization.
8279 		 flag = true; __cxa_guard_release (&guard);
8280 		 // Register variable for destruction at end of program.
8281 	       } catch {
8282 		 if (!flag) __cxa_guard_abort (&guard);
8283 	       }
8284 	     }
8285 	   }
8286 
8287 	 Note that the `flag' variable is only set to 1 *after* the
8288 	 initialization is complete.  This ensures that an exception,
8289 	 thrown during the construction, will cause the variable to
8290 	 reinitialized when we pass through this code again, as per:
8291 
8292 	   [stmt.dcl]
8293 
8294 	   If the initialization exits by throwing an exception, the
8295 	   initialization is not complete, so it will be tried again
8296 	   the next time control enters the declaration.
8297 
8298 	 This process should be thread-safe, too; multiple threads
8299 	 should not be able to initialize the variable more than
8300 	 once.  */
8301 
8302       /* Create the guard variable.  */
8303       guard = get_guard (decl);
8304 
8305       /* Begin the conditional initialization.  */
8306       if_stmt = begin_if_stmt ();
8307 
8308       finish_if_stmt_cond (get_guard_cond (guard, thread_guard), if_stmt);
8309       then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8310 
8311       if (thread_guard)
8312 	{
8313 	  tree vfntype = NULL_TREE;
8314 	  tree acquire_name, release_name, abort_name;
8315 	  tree acquire_fn, release_fn, abort_fn;
8316 	  guard_addr = build_address (guard);
8317 
8318 	  acquire_name = get_identifier ("__cxa_guard_acquire");
8319 	  release_name = get_identifier ("__cxa_guard_release");
8320 	  abort_name = get_identifier ("__cxa_guard_abort");
8321 	  acquire_fn = get_global_binding (acquire_name);
8322 	  release_fn = get_global_binding (release_name);
8323 	  abort_fn = get_global_binding (abort_name);
8324 	  if (!acquire_fn)
8325 	    acquire_fn = push_library_fn
8326 	      (acquire_name, build_function_type_list (integer_type_node,
8327 						       TREE_TYPE (guard_addr),
8328 						       NULL_TREE),
8329 	       NULL_TREE, ECF_NOTHROW | ECF_LEAF);
8330 	  if (!release_fn || !abort_fn)
8331 	    vfntype = build_function_type_list (void_type_node,
8332 						TREE_TYPE (guard_addr),
8333 						NULL_TREE);
8334 	  if (!release_fn)
8335 	    release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
8336 					   ECF_NOTHROW | ECF_LEAF);
8337 	  if (!abort_fn)
8338 	    abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
8339 					ECF_NOTHROW | ECF_LEAF);
8340 
8341 	  inner_if_stmt = begin_if_stmt ();
8342 	  finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
8343 			       inner_if_stmt);
8344 
8345 	  inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8346 	  begin = get_target_expr (boolean_false_node);
8347 	  flag = TARGET_EXPR_SLOT (begin);
8348 
8349 	  TARGET_EXPR_CLEANUP (begin)
8350 	    = build3 (COND_EXPR, void_type_node, flag,
8351 		      void_node,
8352 		      build_call_n (abort_fn, 1, guard_addr));
8353 	  CLEANUP_EH_ONLY (begin) = 1;
8354 
8355 	  /* Do the initialization itself.  */
8356 	  init = add_stmt_to_compound (begin, init);
8357 	  init = add_stmt_to_compound
8358 	    (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
8359 	  init = add_stmt_to_compound
8360 	    (init, build_call_n (release_fn, 1, guard_addr));
8361 	}
8362       else
8363 	init = add_stmt_to_compound (init, set_guard (guard));
8364 
8365       /* Use atexit to register a function for destroying this static
8366 	 variable.  */
8367       init = add_stmt_to_compound (init, register_dtor_fn (decl));
8368 
8369       finish_expr_stmt (init);
8370 
8371       if (thread_guard)
8372 	{
8373 	  finish_compound_stmt (inner_then_clause);
8374 	  finish_then_clause (inner_if_stmt);
8375 	  finish_if_stmt (inner_if_stmt);
8376 	}
8377 
8378       finish_compound_stmt (then_clause);
8379       finish_then_clause (if_stmt);
8380       finish_if_stmt (if_stmt);
8381     }
8382   else if (CP_DECL_THREAD_LOCAL_P (decl))
8383     tls_aggregates = tree_cons (init, decl, tls_aggregates);
8384   else
8385     static_aggregates = tree_cons (init, decl, static_aggregates);
8386 }
8387 
8388 
8389 /* Make TYPE a complete type based on INITIAL_VALUE.
8390    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8391    2 if there was no information (in which case assume 0 if DO_DEFAULT),
8392    3 if the initializer list is empty (in pedantic mode). */
8393 
8394 int
8395 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
8396 {
8397   int failure;
8398   tree type, elt_type;
8399 
8400   /* Don't get confused by a CONSTRUCTOR for some other type.  */
8401   if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
8402       && !BRACE_ENCLOSED_INITIALIZER_P (initial_value)
8403       && TREE_CODE (TREE_TYPE (initial_value)) != ARRAY_TYPE)
8404     return 1;
8405 
8406   if (initial_value)
8407     {
8408       unsigned HOST_WIDE_INT i;
8409       tree value;
8410 
8411       /* An array of character type can be initialized from a
8412 	 brace-enclosed string constant.
8413 
8414 	 FIXME: this code is duplicated from reshape_init. Probably
8415 	 we should just call reshape_init here?  */
8416       if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
8417 	  && TREE_CODE (initial_value) == CONSTRUCTOR
8418 	  && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
8419 	{
8420 	  vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
8421 	  tree value = (*v)[0].value;
8422 
8423 	  if (TREE_CODE (value) == STRING_CST
8424 	      && v->length () == 1)
8425 	    initial_value = value;
8426 	}
8427 
8428       /* If any of the elements are parameter packs, we can't actually
8429 	 complete this type now because the array size is dependent.  */
8430       if (TREE_CODE (initial_value) == CONSTRUCTOR)
8431 	{
8432 	  FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
8433 				      i, value)
8434 	    {
8435 	      if (PACK_EXPANSION_P (value))
8436 		return 0;
8437 	    }
8438 	}
8439     }
8440 
8441   failure = complete_array_type (ptype, initial_value, do_default);
8442 
8443   /* We can create the array before the element type is complete, which
8444      means that we didn't have these two bits set in the original type
8445      either.  In completing the type, we are expected to propagate these
8446      bits.  See also complete_type which does the same thing for arrays
8447      of fixed size.  */
8448   type = *ptype;
8449   if (type != error_mark_node && TYPE_DOMAIN (type))
8450     {
8451       elt_type = TREE_TYPE (type);
8452       TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
8453       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
8454 	= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
8455     }
8456 
8457   return failure;
8458 }
8459 
8460 /* As above, but either give an error or reject zero-size arrays, depending
8461    on COMPLAIN.  */
8462 
8463 int
8464 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
8465 				 bool do_default, tsubst_flags_t complain)
8466 {
8467   int failure;
8468   bool sfinae = !(complain & tf_error);
8469   /* In SFINAE context we can't be lenient about zero-size arrays.  */
8470   if (sfinae)
8471     ++pedantic;
8472   failure = cp_complete_array_type (ptype, initial_value, do_default);
8473   if (sfinae)
8474     --pedantic;
8475   if (failure)
8476     {
8477       if (sfinae)
8478 	/* Not an error.  */;
8479       else if (failure == 1)
8480 	error ("initializer fails to determine size of %qT", *ptype);
8481       else if (failure == 2)
8482 	{
8483 	  if (do_default)
8484 	    error ("array size missing in %qT", *ptype);
8485 	}
8486       else if (failure == 3)
8487 	error ("zero-size array %qT", *ptype);
8488       *ptype = error_mark_node;
8489     }
8490   return failure;
8491 }
8492 
8493 /* Return zero if something is declared to be a member of type
8494    CTYPE when in the context of CUR_TYPE.  STRING is the error
8495    message to print in that case.  Otherwise, quietly return 1.  */
8496 
8497 static int
8498 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
8499 {
8500   if (ctype && ctype != cur_type)
8501     {
8502       if (flags == DTOR_FLAG)
8503 	error ("destructor for alien class %qT cannot be a member", ctype);
8504       else
8505 	error ("constructor for alien class %qT cannot be a member", ctype);
8506       return 0;
8507     }
8508   return 1;
8509 }
8510 
8511 /* Subroutine of `grokdeclarator'.  */
8512 
8513 /* Generate errors possibly applicable for a given set of specifiers.
8514    This is for ARM $7.1.2.  */
8515 
8516 static void
8517 bad_specifiers (tree object,
8518 		enum bad_spec_place type,
8519 		int virtualp,
8520 		int quals,
8521 		int inlinep,
8522 		int friendp,
8523 		int raises)
8524 {
8525   switch (type)
8526     {
8527       case BSP_VAR:
8528 	if (virtualp)
8529 	  error ("%qD declared as a %<virtual%> variable", object);
8530 	if (quals)
8531 	  error ("%<const%> and %<volatile%> function specifiers on "
8532 	         "%qD invalid in variable declaration", object);
8533 	break;
8534       case BSP_PARM:
8535 	if (virtualp)
8536 	  error ("%qD declared as a %<virtual%> parameter", object);
8537 	if (inlinep)
8538 	  error ("%qD declared as an %<inline%> parameter", object);
8539 	if (quals)
8540 	  error ("%<const%> and %<volatile%> function specifiers on "
8541 	  	 "%qD invalid in parameter declaration", object);
8542 	break;
8543       case BSP_TYPE:
8544 	if (virtualp)
8545 	  error ("%qD declared as a %<virtual%> type", object);
8546 	if (inlinep)
8547 	  error ("%qD declared as an %<inline%> type", object);
8548 	if (quals)
8549 	  error ("%<const%> and %<volatile%> function specifiers on "
8550 	  	 "%qD invalid in type declaration", object);
8551 	break;
8552       case BSP_FIELD:
8553 	if (virtualp)
8554 	  error ("%qD declared as a %<virtual%> field", object);
8555 	if (inlinep)
8556 	  error ("%qD declared as an %<inline%> field", object);
8557 	if (quals)
8558 	  error ("%<const%> and %<volatile%> function specifiers on "
8559 	  	 "%qD invalid in field declaration", object);
8560 	break;
8561       default:
8562         gcc_unreachable();
8563     }
8564   if (friendp)
8565     error ("%q+D declared as a friend", object);
8566   if (raises
8567       && !flag_noexcept_type
8568       && (TREE_CODE (object) == TYPE_DECL
8569 	  || (!TYPE_PTRFN_P (TREE_TYPE (object))
8570 	      && !TYPE_REFFN_P (TREE_TYPE (object))
8571 	      && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
8572     error ("%q+D declared with an exception specification", object);
8573 }
8574 
8575 /* DECL is a member function or static data member and is presently
8576    being defined.  Check that the definition is taking place in a
8577    valid namespace.  */
8578 
8579 static void
8580 check_class_member_definition_namespace (tree decl)
8581 {
8582   /* These checks only apply to member functions and static data
8583      members.  */
8584   gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
8585   /* We check for problems with specializations in pt.c in
8586      check_specialization_namespace, where we can issue better
8587      diagnostics.  */
8588   if (processing_specialization)
8589     return;
8590   /* We check this in check_explicit_instantiation_namespace.  */
8591   if (processing_explicit_instantiation)
8592     return;
8593   /* [class.mfct]
8594 
8595      A member function definition that appears outside of the
8596      class definition shall appear in a namespace scope enclosing
8597      the class definition.
8598 
8599      [class.static.data]
8600 
8601      The definition for a static data member shall appear in a
8602      namespace scope enclosing the member's class definition.  */
8603   if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
8604     permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
8605 	       decl, DECL_CONTEXT (decl));
8606 }
8607 
8608 /* Build a PARM_DECL for the "this" parameter of FN.  TYPE is the
8609    METHOD_TYPE for a non-static member function; QUALS are the
8610    cv-qualifiers that apply to the function.  */
8611 
8612 tree
8613 build_this_parm (tree fn, tree type, cp_cv_quals quals)
8614 {
8615   tree this_type;
8616   tree qual_type;
8617   tree parm;
8618   cp_cv_quals this_quals;
8619 
8620   if (CLASS_TYPE_P (type))
8621     {
8622       this_type
8623 	= cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
8624       this_type = build_pointer_type (this_type);
8625     }
8626   else
8627     this_type = type_of_this_parm (type);
8628   /* The `this' parameter is implicitly `const'; it cannot be
8629      assigned to.  */
8630   this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
8631   qual_type = cp_build_qualified_type (this_type, this_quals);
8632   parm = build_artificial_parm (fn, this_identifier, qual_type);
8633   cp_apply_type_quals_to_decl (this_quals, parm);
8634   return parm;
8635 }
8636 
8637 /* DECL is a static member function.  Complain if it was declared
8638    with function-cv-quals.  */
8639 
8640 static void
8641 check_static_quals (tree decl, cp_cv_quals quals)
8642 {
8643   if (quals != TYPE_UNQUALIFIED)
8644     error ("static member function %q#D declared with type qualifiers",
8645 	   decl);
8646 }
8647 
8648 // Check that FN takes no arguments and returns bool.
8649 static void
8650 check_concept_fn (tree fn)
8651 {
8652   // A constraint is nullary.
8653   if (DECL_ARGUMENTS (fn))
8654     error ("concept %q#D declared with function parameters", fn);
8655 
8656   // The declared return type of the concept shall be bool, and
8657   // it shall not be deduced from it definition.
8658   tree type = TREE_TYPE (TREE_TYPE (fn));
8659   if (is_auto (type))
8660     error ("concept %q#D declared with a deduced return type", fn);
8661   else if (type != boolean_type_node)
8662     error ("concept %q#D with non-%<bool%> return type %qT", fn, type);
8663 }
8664 
8665 /* Helper function.  Replace the temporary this parameter injected
8666    during cp_finish_omp_declare_simd with the real this parameter.  */
8667 
8668 static tree
8669 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
8670 {
8671   tree this_parm = (tree) data;
8672   if (TREE_CODE (*tp) == PARM_DECL
8673       && DECL_NAME (*tp) == this_identifier
8674       && *tp != this_parm)
8675     *tp = this_parm;
8676   else if (TYPE_P (*tp))
8677     *walk_subtrees = 0;
8678   return NULL_TREE;
8679 }
8680 
8681 /* CTYPE is class type, or null if non-class.
8682    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8683    or METHOD_TYPE.
8684    DECLARATOR is the function's name.
8685    PARMS is a chain of PARM_DECLs for the function.
8686    VIRTUALP is truthvalue of whether the function is virtual or not.
8687    FLAGS are to be passed through to `grokclassfn'.
8688    QUALS are qualifiers indicating whether the function is `const'
8689    or `volatile'.
8690    RAISES is a list of exceptions that this function can raise.
8691    CHECK is 1 if we must find this method in CTYPE, 0 if we should
8692    not look, and -1 if we should not call `grokclassfn' at all.
8693 
8694    SFK is the kind of special function (if any) for the new function.
8695 
8696    Returns `NULL_TREE' if something goes wrong, after issuing
8697    applicable error messages.  */
8698 
8699 static tree
8700 grokfndecl (tree ctype,
8701 	    tree type,
8702 	    tree declarator,
8703 	    tree parms,
8704 	    tree orig_declarator,
8705 	    tree decl_reqs,
8706 	    int virtualp,
8707 	    enum overload_flags flags,
8708 	    cp_cv_quals quals,
8709 	    cp_ref_qualifier rqual,
8710 	    tree raises,
8711 	    int check,
8712 	    int friendp,
8713 	    int publicp,
8714 	    int inlinep,
8715 	    bool deletedp,
8716 	    special_function_kind sfk,
8717 	    bool funcdef_flag,
8718 	    int template_count,
8719 	    tree in_namespace,
8720 	    tree* attrlist,
8721 	    location_t location)
8722 {
8723   tree decl;
8724   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8725   tree t;
8726 
8727   // Was the concept specifier present?
8728   bool concept_p = inlinep & 4;
8729 
8730   // Concept declarations must have a corresponding definition.
8731   if (concept_p && !funcdef_flag)
8732     {
8733       error ("concept %qD has no definition", declarator);
8734       return NULL_TREE;
8735     }
8736 
8737   if (rqual)
8738     type = build_ref_qualified_type (type, rqual);
8739   if (raises)
8740     type = build_exception_variant (type, raises);
8741 
8742   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8743 
8744   /* Set the constraints on the declaration. */
8745   if (flag_concepts)
8746     {
8747       tree tmpl_reqs = NULL_TREE;
8748       if (processing_template_decl > template_class_depth (ctype))
8749         tmpl_reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
8750 
8751       /* Adjust the required expression into a constraint. */
8752       if (decl_reqs)
8753         decl_reqs = normalize_expression (decl_reqs);
8754 
8755       tree ci = build_constraints (tmpl_reqs, decl_reqs);
8756       set_constraints (decl, ci);
8757     }
8758 
8759   /* If we have an explicit location, use it, otherwise use whatever
8760      build_lang_decl used (probably input_location).  */
8761   if (location != UNKNOWN_LOCATION)
8762     DECL_SOURCE_LOCATION (decl) = location;
8763 
8764   if (TREE_CODE (type) == METHOD_TYPE)
8765     {
8766       tree parm = build_this_parm (decl, type, quals);
8767       DECL_CHAIN (parm) = parms;
8768       parms = parm;
8769 
8770       /* Allocate space to hold the vptr bit if needed.  */
8771       SET_DECL_ALIGN (decl, MINIMUM_METHOD_BOUNDARY);
8772     }
8773 
8774   DECL_ARGUMENTS (decl) = parms;
8775   for (t = parms; t; t = DECL_CHAIN (t))
8776     DECL_CONTEXT (t) = decl;
8777 
8778   /* Propagate volatile out from type to decl.  */
8779   if (TYPE_VOLATILE (type))
8780     TREE_THIS_VOLATILE (decl) = 1;
8781 
8782   /* Setup decl according to sfk.  */
8783   switch (sfk)
8784     {
8785     case sfk_constructor:
8786     case sfk_copy_constructor:
8787     case sfk_move_constructor:
8788       DECL_CXX_CONSTRUCTOR_P (decl) = 1;
8789       DECL_NAME (decl) = ctor_identifier;
8790       break;
8791     case sfk_destructor:
8792       DECL_CXX_DESTRUCTOR_P (decl) = 1;
8793       DECL_NAME (decl) = dtor_identifier;
8794       break;
8795     default:
8796       break;
8797     }
8798 
8799   if (friendp && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8800     {
8801       if (funcdef_flag)
8802 	error ("defining explicit specialization %qD in friend declaration",
8803 	       orig_declarator);
8804       else
8805 	{
8806 	  tree fns = TREE_OPERAND (orig_declarator, 0);
8807 	  tree args = TREE_OPERAND (orig_declarator, 1);
8808 
8809 	  if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8810 	    {
8811 	      /* Something like `template <class T> friend void f<T>()'.  */
8812 	      error ("invalid use of template-id %qD in declaration "
8813 		     "of primary template",
8814 		     orig_declarator);
8815 	      return NULL_TREE;
8816 	    }
8817 
8818 
8819 	  /* A friend declaration of the form friend void f<>().  Record
8820 	     the information in the TEMPLATE_ID_EXPR.  */
8821 	  SET_DECL_IMPLICIT_INSTANTIATION (decl);
8822 
8823 	  gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
8824 	  DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
8825 
8826 	  for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8827 	    if (TREE_PURPOSE (t)
8828 		&& TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8829 	    {
8830 	      error ("default arguments are not allowed in declaration "
8831 		     "of friend template specialization %qD",
8832 		     decl);
8833 	      return NULL_TREE;
8834 	    }
8835 
8836 	  if (inlinep & 1)
8837 	    {
8838 	      error ("%<inline%> is not allowed in declaration of friend "
8839 		     "template specialization %qD",
8840 		     decl);
8841 	      return NULL_TREE;
8842 	    }
8843 	}
8844     }
8845 
8846   /* If this decl has namespace scope, set that up.  */
8847   if (in_namespace)
8848     set_decl_namespace (decl, in_namespace, friendp);
8849   else if (!ctype)
8850     DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
8851 
8852   /* `main' and builtins have implicit 'C' linkage.  */
8853   if (ctype == NULL_TREE
8854       && DECL_FILE_SCOPE_P (decl)
8855       && current_lang_name == lang_name_cplusplus
8856       && (MAIN_NAME_P (declarator)
8857 	  || (IDENTIFIER_LENGTH (declarator) > 10
8858 	      && IDENTIFIER_POINTER (declarator)[0] == '_'
8859 	      && IDENTIFIER_POINTER (declarator)[1] == '_'
8860 	      && strncmp (IDENTIFIER_POINTER (declarator)+2,
8861 			  "builtin_", 8) == 0)
8862 	  || (targetcm.cxx_implicit_extern_c
8863 	      && (targetcm.cxx_implicit_extern_c
8864 		  (IDENTIFIER_POINTER (declarator))))))
8865     SET_DECL_LANGUAGE (decl, lang_c);
8866 
8867   /* Should probably propagate const out from type to decl I bet (mrs).  */
8868   if (staticp)
8869     {
8870       DECL_STATIC_FUNCTION_P (decl) = 1;
8871       DECL_CONTEXT (decl) = ctype;
8872     }
8873 
8874   if (deletedp)
8875     DECL_DELETED_FN (decl) = 1;
8876 
8877   if (ctype)
8878     {
8879       DECL_CONTEXT (decl) = ctype;
8880       if (funcdef_flag)
8881 	check_class_member_definition_namespace (decl);
8882     }
8883 
8884   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8885     {
8886       if (PROCESSING_REAL_TEMPLATE_DECL_P())
8887 	error ("cannot declare %<::main%> to be a template");
8888       if (inlinep & 1)
8889 	error ("cannot declare %<::main%> to be inline");
8890       if (inlinep & 2)
8891 	error ("cannot declare %<::main%> to be %<constexpr%>");
8892       if (!publicp)
8893 	error ("cannot declare %<::main%> to be static");
8894       inlinep = 0;
8895       publicp = 1;
8896     }
8897 
8898   /* Members of anonymous types and local classes have no linkage; make
8899      them internal.  If a typedef is made later, this will be changed.  */
8900   if (ctype && (!TREE_PUBLIC (TYPE_MAIN_DECL (ctype))
8901 		|| decl_function_context (TYPE_MAIN_DECL (ctype))))
8902     publicp = 0;
8903 
8904   if (publicp && cxx_dialect == cxx98)
8905     {
8906       /* [basic.link]: A name with no linkage (notably, the name of a class
8907 	 or enumeration declared in a local scope) shall not be used to
8908 	 declare an entity with linkage.
8909 
8910 	 DR 757 relaxes this restriction for C++0x.  */
8911       no_linkage_error (decl);
8912     }
8913 
8914   TREE_PUBLIC (decl) = publicp;
8915   if (! publicp)
8916     {
8917       DECL_INTERFACE_KNOWN (decl) = 1;
8918       DECL_NOT_REALLY_EXTERN (decl) = 1;
8919     }
8920 
8921   /* If the declaration was declared inline, mark it as such.  */
8922   if (inlinep)
8923     {
8924       DECL_DECLARED_INLINE_P (decl) = 1;
8925       if (publicp)
8926 	DECL_COMDAT (decl) = 1;
8927     }
8928   if (inlinep & 2)
8929     DECL_DECLARED_CONSTEXPR_P (decl) = true;
8930 
8931   // If the concept declaration specifier was found, check
8932   // that the declaration satisfies the necessary requirements.
8933   if (concept_p)
8934     {
8935       DECL_DECLARED_CONCEPT_P (decl) = true;
8936       check_concept_fn (decl);
8937     }
8938 
8939   DECL_EXTERNAL (decl) = 1;
8940   if (TREE_CODE (type) == FUNCTION_TYPE)
8941     {
8942       if (quals || rqual)
8943 	TREE_TYPE (decl) = apply_memfn_quals (TREE_TYPE (decl),
8944 					      TYPE_UNQUALIFIED,
8945 					      REF_QUAL_NONE);
8946 
8947       if (quals)
8948 	{
8949 	  error (ctype
8950 		 ? G_("static member function %qD cannot have cv-qualifier")
8951 		 : G_("non-member function %qD cannot have cv-qualifier"),
8952 		 decl);
8953 	  quals = TYPE_UNQUALIFIED;
8954 	}
8955 
8956       if (rqual)
8957 	{
8958 	  error (ctype
8959 		 ? G_("static member function %qD cannot have ref-qualifier")
8960 		 : G_("non-member function %qD cannot have ref-qualifier"),
8961 		 decl);
8962 	  rqual = REF_QUAL_NONE;
8963 	}
8964     }
8965 
8966   if (deduction_guide_p (decl))
8967     {
8968       if (!DECL_NAMESPACE_SCOPE_P (decl))
8969 	{
8970 	  error_at (location, "deduction guide %qD must be declared at "
8971 		    "namespace scope", decl);
8972 	  return NULL_TREE;
8973 	}
8974       if (funcdef_flag)
8975 	error_at (location,
8976 		  "deduction guide %qD must not have a function body", decl);
8977     }
8978   else if (IDENTIFIER_ANY_OP_P (DECL_NAME (decl))
8979 	   && !grok_op_properties (decl, /*complain=*/true))
8980     return NULL_TREE;
8981   else if (UDLIT_OPER_P (DECL_NAME (decl)))
8982     {
8983       bool long_long_unsigned_p;
8984       bool long_double_p;
8985       const char *suffix = NULL;
8986       /* [over.literal]/6: Literal operators shall not have C linkage. */
8987       if (DECL_LANGUAGE (decl) == lang_c)
8988 	{
8989 	  error ("literal operator with C linkage");
8990 	  maybe_show_extern_c_location ();
8991 	  return NULL_TREE;
8992 	}
8993 
8994       if (DECL_NAMESPACE_SCOPE_P (decl))
8995 	{
8996 	  if (!check_literal_operator_args (decl, &long_long_unsigned_p,
8997 					    &long_double_p))
8998 	    {
8999 	      error ("%qD has invalid argument list", decl);
9000 	      return NULL_TREE;
9001 	    }
9002 
9003 	  suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
9004 	  if (long_long_unsigned_p)
9005 	    {
9006 	      if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
9007 		warning (0, "integer suffix %qs"
9008 			    " shadowed by implementation", suffix);
9009 	    }
9010 	  else if (long_double_p)
9011 	    {
9012 	      if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
9013 		warning (0, "floating point suffix %qs"
9014 			    " shadowed by implementation", suffix);
9015 	    }
9016 	  /* 17.6.3.3.5  */
9017 	  if (suffix[0] != '_'
9018 	      && !in_system_header_at (DECL_SOURCE_LOCATION (decl))
9019 	      && !current_function_decl && !(friendp && !funcdef_flag))
9020 	    warning (OPT_Wliteral_suffix,
9021 		     "literal operator suffixes not preceded by %<_%>"
9022 		     " are reserved for future standardization");
9023 	}
9024       else
9025 	{
9026 	  error ("%qD must be a non-member function", decl);
9027 	  return NULL_TREE;
9028 	}
9029     }
9030 
9031   if (funcdef_flag)
9032     /* Make the init_value nonzero so pushdecl knows this is not
9033        tentative.  error_mark_node is replaced later with the BLOCK.  */
9034     DECL_INITIAL (decl) = error_mark_node;
9035 
9036   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
9037     TREE_NOTHROW (decl) = 1;
9038 
9039   if (flag_openmp || flag_openmp_simd)
9040     {
9041       /* Adjust "omp declare simd" attributes.  */
9042       tree ods = lookup_attribute ("omp declare simd", *attrlist);
9043       if (ods)
9044 	{
9045 	  tree attr;
9046 	  for (attr = ods; attr;
9047 	       attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
9048 	    {
9049 	      if (TREE_CODE (type) == METHOD_TYPE)
9050 		walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
9051 			   DECL_ARGUMENTS (decl), NULL);
9052 	      if (TREE_VALUE (attr) != NULL_TREE)
9053 		{
9054 		  tree cl = TREE_VALUE (TREE_VALUE (attr));
9055 		  cl = c_omp_declare_simd_clauses_to_numbers
9056 						(DECL_ARGUMENTS (decl), cl);
9057 		  if (cl)
9058 		    TREE_VALUE (TREE_VALUE (attr)) = cl;
9059 		  else
9060 		    TREE_VALUE (attr) = NULL_TREE;
9061 		}
9062 	    }
9063 	}
9064     }
9065 
9066   /* Caller will do the rest of this.  */
9067   if (check < 0)
9068     return decl;
9069 
9070   if (ctype != NULL_TREE)
9071     grokclassfn (ctype, decl, flags);
9072 
9073   /* 12.4/3  */
9074   if (cxx_dialect >= cxx11
9075       && DECL_DESTRUCTOR_P (decl)
9076       && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
9077       && !processing_template_decl)
9078     deduce_noexcept_on_destructor (decl);
9079 
9080   decl = check_explicit_specialization (orig_declarator, decl,
9081 					template_count,
9082 					2 * funcdef_flag +
9083 					4 * (friendp != 0) +
9084 	                                8 * concept_p,
9085 					*attrlist);
9086   if (decl == error_mark_node)
9087     return NULL_TREE;
9088 
9089   if (DECL_STATIC_FUNCTION_P (decl))
9090     check_static_quals (decl, quals);
9091 
9092   if (attrlist)
9093     {
9094       cplus_decl_attributes (&decl, *attrlist, 0);
9095       *attrlist = NULL_TREE;
9096     }
9097 
9098   /* Check main's type after attributes have been applied.  */
9099   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
9100     {
9101       if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
9102 			integer_type_node))
9103 	{
9104 	  tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
9105 	  tree newtype;
9106 	  error ("%<::main%> must return %<int%>");
9107 	  newtype = build_function_type (integer_type_node, oldtypeargs);
9108 	  TREE_TYPE (decl) = newtype;
9109 	}
9110       if (warn_main)
9111 	check_main_parameter_types (decl);
9112     }
9113 
9114   if (ctype != NULL_TREE && check)
9115     {
9116       tree old_decl = check_classfn (ctype, decl,
9117 				     (processing_template_decl
9118 				      > template_class_depth (ctype))
9119 				     ? current_template_parms
9120 				     : NULL_TREE);
9121 
9122       if (old_decl == error_mark_node)
9123 	return NULL_TREE;
9124 
9125       if (old_decl)
9126 	{
9127 	  tree ok;
9128 	  tree pushed_scope;
9129 
9130 	  if (TREE_CODE (old_decl) == TEMPLATE_DECL)
9131 	    /* Because grokfndecl is always supposed to return a
9132 	       FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
9133 	       here.  We depend on our callers to figure out that its
9134 	       really a template that's being returned.  */
9135 	    old_decl = DECL_TEMPLATE_RESULT (old_decl);
9136 
9137 	  if (DECL_STATIC_FUNCTION_P (old_decl)
9138 	      && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
9139 	    {
9140 	      /* Remove the `this' parm added by grokclassfn.  */
9141 	      revert_static_member_fn (decl);
9142 	      check_static_quals (decl, quals);
9143 	    }
9144 	  if (DECL_ARTIFICIAL (old_decl))
9145 	    {
9146 	      error ("definition of implicitly-declared %qD", old_decl);
9147 	      return NULL_TREE;
9148 	    }
9149 	  else if (DECL_DEFAULTED_FN (old_decl))
9150 	    {
9151 	      error ("definition of explicitly-defaulted %q+D", decl);
9152 	      inform (DECL_SOURCE_LOCATION (old_decl),
9153 		      "%q#D explicitly defaulted here", old_decl);
9154 	      return NULL_TREE;
9155 	    }
9156 
9157 	  /* Since we've smashed OLD_DECL to its
9158 	     DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
9159 	  if (TREE_CODE (decl) == TEMPLATE_DECL)
9160 	    decl = DECL_TEMPLATE_RESULT (decl);
9161 
9162 	  /* Attempt to merge the declarations.  This can fail, in
9163 	     the case of some invalid specialization declarations.  */
9164 	  pushed_scope = push_scope (ctype);
9165 	  ok = duplicate_decls (decl, old_decl, friendp);
9166 	  if (pushed_scope)
9167 	    pop_scope (pushed_scope);
9168 	  if (!ok)
9169 	    {
9170 	      error ("no %q#D member function declared in class %qT",
9171 		     decl, ctype);
9172 	      return NULL_TREE;
9173 	    }
9174 	  if (ok == error_mark_node)
9175 	    return NULL_TREE;
9176 	  return old_decl;
9177 	}
9178     }
9179 
9180   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
9181     return NULL_TREE;
9182 
9183   if (ctype == NULL_TREE || check)
9184     return decl;
9185 
9186   if (virtualp)
9187     DECL_VIRTUAL_P (decl) = 1;
9188 
9189   return decl;
9190 }
9191 
9192 /* decl is a FUNCTION_DECL.
9193    specifiers are the parsed virt-specifiers.
9194 
9195    Set flags to reflect the virt-specifiers.
9196 
9197    Returns decl.  */
9198 
9199 static tree
9200 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
9201 {
9202   if (decl == NULL_TREE)
9203     return decl;
9204   if (specifiers & VIRT_SPEC_OVERRIDE)
9205     DECL_OVERRIDE_P (decl) = 1;
9206   if (specifiers & VIRT_SPEC_FINAL)
9207     DECL_FINAL_P (decl) = 1;
9208   return decl;
9209 }
9210 
9211 /* DECL is a VAR_DECL for a static data member.  Set flags to reflect
9212    the linkage that DECL will receive in the object file.  */
9213 
9214 static void
9215 set_linkage_for_static_data_member (tree decl)
9216 {
9217   /* A static data member always has static storage duration and
9218      external linkage.  Note that static data members are forbidden in
9219      local classes -- the only situation in which a class has
9220      non-external linkage.  */
9221   TREE_PUBLIC (decl) = 1;
9222   TREE_STATIC (decl) = 1;
9223   /* For non-template classes, static data members are always put
9224      out in exactly those files where they are defined, just as
9225      with ordinary namespace-scope variables.  */
9226   if (!processing_template_decl)
9227     DECL_INTERFACE_KNOWN (decl) = 1;
9228 }
9229 
9230 /* Create a VAR_DECL named NAME with the indicated TYPE.
9231 
9232    If SCOPE is non-NULL, it is the class type or namespace containing
9233    the variable.  If SCOPE is NULL, the variable should is created in
9234    the innermost enclosing scope.  */
9235 
9236 static tree
9237 grokvardecl (tree type,
9238 	     tree name,
9239 	     tree orig_declarator,
9240 	     const cp_decl_specifier_seq *declspecs,
9241 	     int initialized,
9242 	     int type_quals,
9243 	     int inlinep,
9244 	     bool conceptp,
9245 	     int template_count,
9246 	     tree scope)
9247 {
9248   tree decl;
9249   tree explicit_scope;
9250 
9251   gcc_assert (!name || identifier_p (name));
9252 
9253   bool constp = (type_quals & TYPE_QUAL_CONST) != 0;
9254   bool volatilep = (type_quals & TYPE_QUAL_VOLATILE) != 0;
9255 
9256   /* Compute the scope in which to place the variable, but remember
9257      whether or not that scope was explicitly specified by the user.   */
9258   explicit_scope = scope;
9259   if (!scope)
9260     {
9261       /* An explicit "extern" specifier indicates a namespace-scope
9262 	 variable.  */
9263       if (declspecs->storage_class == sc_extern)
9264 	scope = current_decl_namespace ();
9265       else if (!at_function_scope_p ())
9266 	scope = current_scope ();
9267     }
9268 
9269   if (scope
9270       && (/* If the variable is a namespace-scope variable declared in a
9271 	     template, we need DECL_LANG_SPECIFIC.  */
9272 	  (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
9273 	  /* Similarly for namespace-scope variables with language linkage
9274 	     other than C++.  */
9275 	  || (TREE_CODE (scope) == NAMESPACE_DECL
9276 	      && current_lang_name != lang_name_cplusplus)
9277 	  /* Similarly for static data members.  */
9278 	  || TYPE_P (scope)
9279 	  /* Similarly for explicit specializations.  */
9280 	  || (orig_declarator
9281 	      && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
9282     decl = build_lang_decl (VAR_DECL, name, type);
9283   else
9284     decl = build_decl (input_location, VAR_DECL, name, type);
9285 
9286   if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
9287     set_decl_namespace (decl, explicit_scope, 0);
9288   else
9289     DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
9290 
9291   if (declspecs->storage_class == sc_extern)
9292     {
9293       DECL_THIS_EXTERN (decl) = 1;
9294       DECL_EXTERNAL (decl) = !initialized;
9295     }
9296 
9297   if (DECL_CLASS_SCOPE_P (decl))
9298     {
9299       set_linkage_for_static_data_member (decl);
9300       /* This function is only called with out-of-class definitions.  */
9301       DECL_EXTERNAL (decl) = 0;
9302       check_class_member_definition_namespace (decl);
9303     }
9304   /* At top level, either `static' or no s.c. makes a definition
9305      (perhaps tentative), and absence of `static' makes it public.  */
9306   else if (toplevel_bindings_p ())
9307     {
9308       TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
9309 			    && (DECL_THIS_EXTERN (decl)
9310 				|| ! constp
9311 				|| volatilep
9312 				|| inlinep));
9313       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9314     }
9315   /* Not at top level, only `static' makes a static definition.  */
9316   else
9317     {
9318       TREE_STATIC (decl) = declspecs->storage_class == sc_static;
9319       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9320     }
9321 
9322   if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
9323     {
9324       if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
9325 	{
9326 	  CP_DECL_THREAD_LOCAL_P (decl) = true;
9327 	  if (!processing_template_decl)
9328 	    set_decl_tls_model (decl, decl_default_tls_model (decl));
9329 	}
9330       if (declspecs->gnu_thread_keyword_p)
9331 	SET_DECL_GNU_TLS_P (decl);
9332     }
9333 
9334   /* If the type of the decl has no linkage, make sure that we'll
9335      notice that in mark_used.  */
9336   if (cxx_dialect > cxx98
9337       && decl_linkage (decl) != lk_none
9338       && DECL_LANG_SPECIFIC (decl) == NULL
9339       && !DECL_EXTERN_C_P (decl)
9340       && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
9341     retrofit_lang_decl (decl);
9342 
9343   if (TREE_PUBLIC (decl))
9344     {
9345       /* [basic.link]: A name with no linkage (notably, the name of a class
9346 	 or enumeration declared in a local scope) shall not be used to
9347 	 declare an entity with linkage.
9348 
9349 	 DR 757 relaxes this restriction for C++0x.  */
9350       if (cxx_dialect < cxx11)
9351 	no_linkage_error (decl);
9352     }
9353   else
9354     DECL_INTERFACE_KNOWN (decl) = 1;
9355 
9356   if (DECL_NAME (decl)
9357       && MAIN_NAME_P (DECL_NAME (decl))
9358       && scope == global_namespace)
9359     error ("cannot declare %<::main%> to be a global variable");
9360 
9361   /* Check that the variable can be safely declared as a concept.
9362      Note that this also forbids explicit specializations.  */
9363   if (conceptp)
9364     {
9365       if (!processing_template_decl)
9366         {
9367           error ("a non-template variable cannot be %<concept%>");
9368           return NULL_TREE;
9369         }
9370       else
9371         DECL_DECLARED_CONCEPT_P (decl) = true;
9372       if (!same_type_ignoring_top_level_qualifiers_p (type, boolean_type_node))
9373 	error_at (declspecs->locations[ds_type_spec],
9374 		  "concept must have type %<bool%>");
9375     }
9376   else if (flag_concepts
9377 	   && processing_template_decl > template_class_depth (scope))
9378     {
9379       tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
9380       tree ci = build_constraints (reqs, NULL_TREE);
9381       set_constraints (decl, ci);
9382     }
9383 
9384   // Handle explicit specializations and instantiations of variable templates.
9385   if (orig_declarator)
9386     decl = check_explicit_specialization (orig_declarator, decl,
9387 					  template_count, conceptp * 8);
9388 
9389   return decl != error_mark_node ? decl : NULL_TREE;
9390 }
9391 
9392 /* Create and return a canonical pointer to member function type, for
9393    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
9394 
9395 tree
9396 build_ptrmemfunc_type (tree type)
9397 {
9398   tree field, fields;
9399   tree t;
9400 
9401   if (type == error_mark_node)
9402     return type;
9403 
9404   /* Make sure that we always have the unqualified pointer-to-member
9405      type first.  */
9406   if (cp_cv_quals quals = cp_type_quals (type))
9407     {
9408       tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9409       return cp_build_qualified_type (unqual, quals);
9410     }
9411 
9412   /* If a canonical type already exists for this type, use it.  We use
9413      this method instead of type_hash_canon, because it only does a
9414      simple equality check on the list of field members.  */
9415 
9416   t = TYPE_PTRMEMFUNC_TYPE (type);
9417   if (t)
9418     return t;
9419 
9420   t = make_node (RECORD_TYPE);
9421 
9422   /* Let the front end know this is a pointer to member function.  */
9423   TYPE_PTRMEMFUNC_FLAG (t) = 1;
9424 
9425   field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
9426   fields = field;
9427 
9428   field = build_decl (input_location, FIELD_DECL, delta_identifier,
9429 		      delta_type_node);
9430   DECL_CHAIN (field) = fields;
9431   fields = field;
9432 
9433   finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
9434 
9435   /* Zap out the name so that the back end will give us the debugging
9436      information for this anonymous RECORD_TYPE.  */
9437   TYPE_NAME (t) = NULL_TREE;
9438 
9439   /* Cache this pointer-to-member type so that we can find it again
9440      later.  */
9441   TYPE_PTRMEMFUNC_TYPE (type) = t;
9442 
9443   if (TYPE_STRUCTURAL_EQUALITY_P (type))
9444     SET_TYPE_STRUCTURAL_EQUALITY (t);
9445   else if (TYPE_CANONICAL (type) != type)
9446     TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
9447 
9448   return t;
9449 }
9450 
9451 /* Create and return a pointer to data member type.  */
9452 
9453 tree
9454 build_ptrmem_type (tree class_type, tree member_type)
9455 {
9456   if (TREE_CODE (member_type) == METHOD_TYPE)
9457     {
9458       cp_cv_quals quals = type_memfn_quals (member_type);
9459       cp_ref_qualifier rqual = type_memfn_rqual (member_type);
9460       member_type = build_memfn_type (member_type, class_type, quals, rqual);
9461       return build_ptrmemfunc_type (build_pointer_type (member_type));
9462     }
9463   else
9464     {
9465       gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
9466       return build_offset_type (class_type, member_type);
9467     }
9468 }
9469 
9470 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9471    Check to see that the definition is valid.  Issue appropriate error
9472    messages.  Return 1 if the definition is particularly bad, or 0
9473    otherwise.  */
9474 
9475 static int
9476 check_static_variable_definition (tree decl, tree type)
9477 {
9478   /* Avoid redundant diagnostics on out-of-class definitions.  */
9479   if (!current_class_type || !TYPE_BEING_DEFINED (current_class_type))
9480     return 0;
9481   /* Can't check yet if we don't know the type.  */
9482   if (dependent_type_p (type))
9483     return 0;
9484   /* If DECL is declared constexpr, we'll do the appropriate checks
9485      in check_initializer.  Similarly for inline static data members.  */
9486   if (DECL_P (decl)
9487       && (DECL_DECLARED_CONSTEXPR_P (decl)
9488 	  || DECL_VAR_DECLARED_INLINE_P (decl)))
9489     return 0;
9490   else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9491     {
9492       if (!COMPLETE_TYPE_P (type))
9493 	error_at (DECL_SOURCE_LOCATION (decl),
9494 		  "in-class initialization of static data member %q#D of "
9495 		  "incomplete type", decl);
9496       else if (literal_type_p (type))
9497 	permerror (DECL_SOURCE_LOCATION (decl),
9498 		   "%<constexpr%> needed for in-class initialization of "
9499 		   "static data member %q#D of non-integral type", decl);
9500       else
9501 	error_at (DECL_SOURCE_LOCATION (decl),
9502 		  "in-class initialization of static data member %q#D of "
9503 		  "non-literal type", decl);
9504       return 1;
9505     }
9506 
9507   /* Motion 10 at San Diego: If a static const integral data member is
9508      initialized with an integral constant expression, the initializer
9509      may appear either in the declaration (within the class), or in
9510      the definition, but not both.  If it appears in the class, the
9511      member is a member constant.  The file-scope definition is always
9512      required.  */
9513   if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
9514     {
9515       error_at (DECL_SOURCE_LOCATION (decl),
9516 		"invalid in-class initialization of static data member "
9517 		"of non-integral type %qT",
9518 		type);
9519       return 1;
9520     }
9521   else if (!CP_TYPE_CONST_P (type))
9522     error_at (DECL_SOURCE_LOCATION (decl),
9523 	      "ISO C++ forbids in-class initialization of non-const "
9524 	      "static member %qD",
9525 	      decl);
9526   else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9527     pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
9528 	     "ISO C++ forbids initialization of member constant "
9529 	     "%qD of non-integral type %qT", decl, type);
9530 
9531   return 0;
9532 }
9533 
9534 /* *expr_p is part of the TYPE_SIZE of a variably-sized array.  If any
9535    SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
9536    expressions out into temporary variables so that walk_tree doesn't
9537    step into them (c++/15764).  */
9538 
9539 static tree
9540 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
9541 {
9542   hash_set<tree> *pset = (hash_set<tree> *)data;
9543   tree expr = *expr_p;
9544   if (TREE_CODE (expr) == SAVE_EXPR)
9545     {
9546       tree op = TREE_OPERAND (expr, 0);
9547       cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
9548       if (TREE_SIDE_EFFECTS (op))
9549 	TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
9550       *walk_subtrees = 0;
9551     }
9552   else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
9553     *walk_subtrees = 0;
9554   return NULL;
9555 }
9556 
9557 /* Entry point for the above.  */
9558 
9559 static void
9560 stabilize_vla_size (tree size)
9561 {
9562   hash_set<tree> pset;
9563   /* Break out any function calls into temporary variables.  */
9564   cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
9565 }
9566 
9567 /* Reduce a SIZEOF_EXPR to its value.  */
9568 
9569 tree
9570 fold_sizeof_expr (tree t)
9571 {
9572   tree r;
9573   if (SIZEOF_EXPR_TYPE_P (t))
9574     r = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (t, 0)),
9575 				    SIZEOF_EXPR, false, false);
9576   else if (TYPE_P (TREE_OPERAND (t, 0)))
9577     r = cxx_sizeof_or_alignof_type (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9578 				    false, false);
9579   else
9580     r = cxx_sizeof_or_alignof_expr (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9581 				    false);
9582   if (r == error_mark_node)
9583     r = size_one_node;
9584   return r;
9585 }
9586 
9587 /* Given the SIZE (i.e., number of elements) in an array, compute
9588    an appropriate index type for the array.  If non-NULL, NAME is
9589    the name of the entity being declared.  */
9590 
9591 tree
9592 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
9593 {
9594   tree itype;
9595   tree osize = size;
9596 
9597   if (error_operand_p (size))
9598     return error_mark_node;
9599 
9600   if (!type_dependent_expression_p (size))
9601     {
9602       osize = size = mark_rvalue_use (size);
9603 
9604       if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
9605 	  && TREE_SIDE_EFFECTS (size))
9606 	/* In C++98, we mark a non-constant array bound with a magic
9607 	   NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case.  */;
9608       else
9609 	{
9610 	  size = instantiate_non_dependent_expr_sfinae (size, complain);
9611 	  size = build_converted_constant_expr (size_type_node, size, complain);
9612 	  size = maybe_constant_value (size);
9613 
9614 	  if (!TREE_CONSTANT (size))
9615 	    size = osize;
9616 	}
9617 
9618       if (error_operand_p (size))
9619 	return error_mark_node;
9620 
9621       /* The array bound must be an integer type.  */
9622       tree type = TREE_TYPE (size);
9623       if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
9624 	{
9625 	  if (!(complain & tf_error))
9626 	    return error_mark_node;
9627 	  if (name)
9628 	    error ("size of array %qD has non-integral type %qT", name, type);
9629 	  else
9630 	    error ("size of array has non-integral type %qT", type);
9631 	  size = integer_one_node;
9632 	}
9633     }
9634 
9635   /* A type is dependent if it is...an array type constructed from any
9636      dependent type or whose size is specified by a constant expression
9637      that is value-dependent.  */
9638   /* We can only call value_dependent_expression_p on integral constant
9639      expressions; treat non-constant expressions as dependent, too.  */
9640   if (processing_template_decl
9641       && (type_dependent_expression_p (size)
9642 	  || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
9643     {
9644       /* We cannot do any checking for a SIZE that isn't known to be
9645 	 constant. Just build the index type and mark that it requires
9646 	 structural equality checks.  */
9647       itype = build_index_type (build_min (MINUS_EXPR, sizetype,
9648 					   size, size_one_node));
9649       TYPE_DEPENDENT_P (itype) = 1;
9650       TYPE_DEPENDENT_P_VALID (itype) = 1;
9651       SET_TYPE_STRUCTURAL_EQUALITY (itype);
9652       return itype;
9653     }
9654 
9655   if (TREE_CODE (size) != INTEGER_CST)
9656     {
9657       tree folded = cp_fully_fold (size);
9658       if (TREE_CODE (folded) == INTEGER_CST)
9659 	pedwarn (location_of (size), OPT_Wpedantic,
9660 		 "size of array is not an integral constant-expression");
9661       /* Use the folded result for VLAs, too; it will have resolved
9662 	 SIZEOF_EXPR.  */
9663       size = folded;
9664     }
9665 
9666   /* Normally, the array-bound will be a constant.  */
9667   if (TREE_CODE (size) == INTEGER_CST)
9668     {
9669       /* An array must have a positive number of elements.  */
9670       if (!valid_constant_size_p (size))
9671 	{
9672 	  if (!(complain & tf_error))
9673 	    return error_mark_node;
9674 
9675 	  if (name)
9676 	    error ("size of array %qD is negative", name);
9677 	  else
9678 	    error ("size of array is negative");
9679 	  size = integer_one_node;
9680 	}
9681       /* As an extension we allow zero-sized arrays.  */
9682       else if (integer_zerop (size))
9683 	{
9684 	  if (!(complain & tf_error))
9685 	    /* We must fail if performing argument deduction (as
9686 	       indicated by the state of complain), so that
9687 	       another substitution can be found.  */
9688 	    return error_mark_node;
9689 	  else if (in_system_header_at (input_location))
9690 	    /* Allow them in system headers because glibc uses them.  */;
9691 	  else if (name)
9692 	    pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
9693 	  else
9694 	    pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
9695 	}
9696     }
9697   else if (TREE_CONSTANT (size)
9698 	   /* We don't allow VLAs at non-function scopes, or during
9699 	      tentative template substitution.  */
9700 	   || !at_function_scope_p ()
9701 	   || !(complain & tf_error))
9702     {
9703       if (!(complain & tf_error))
9704 	return error_mark_node;
9705       /* `(int) &fn' is not a valid array bound.  */
9706       if (name)
9707 	error ("size of array %qD is not an integral constant-expression",
9708 	       name);
9709       else
9710 	error ("size of array is not an integral constant-expression");
9711       size = integer_one_node;
9712     }
9713   else if (pedantic && warn_vla != 0)
9714     {
9715       if (name)
9716 	pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
9717       else
9718 	pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
9719     }
9720   else if (warn_vla > 0)
9721     {
9722       if (name)
9723 	warning (OPT_Wvla,
9724                  "variable length array %qD is used", name);
9725       else
9726 	warning (OPT_Wvla,
9727                  "variable length array is used");
9728     }
9729 
9730   if (processing_template_decl && !TREE_CONSTANT (size))
9731     /* A variable sized array.  */
9732     itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
9733   else
9734     {
9735       /* Compute the index of the largest element in the array.  It is
9736 	 one less than the number of elements in the array.  We save
9737 	 and restore PROCESSING_TEMPLATE_DECL so that computations in
9738 	 cp_build_binary_op will be appropriately folded.  */
9739       {
9740 	processing_template_decl_sentinel s;
9741 	itype = cp_build_binary_op (input_location,
9742 				    MINUS_EXPR,
9743 				    cp_convert (ssizetype, size, complain),
9744 				    cp_convert (ssizetype, integer_one_node,
9745 						complain),
9746 				    complain);
9747 	itype = maybe_constant_value (itype);
9748       }
9749 
9750       if (!TREE_CONSTANT (itype))
9751 	{
9752 	  /* A variable sized array.  */
9753 	  itype = variable_size (itype);
9754 
9755 	  stabilize_vla_size (itype);
9756 
9757 	  if (sanitize_flags_p (SANITIZE_VLA)
9758 	      && current_function_decl != NULL_TREE)
9759 	    {
9760 	      /* We have to add 1 -- in the ubsan routine we generate
9761 		 LE_EXPR rather than LT_EXPR.  */
9762 	      tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
9763 				    build_one_cst (TREE_TYPE (itype)));
9764 	      t = ubsan_instrument_vla (input_location, t);
9765 	      finish_expr_stmt (t);
9766 	    }
9767 	}
9768       /* Make sure that there was no overflow when creating to a signed
9769 	 index type.  (For example, on a 32-bit machine, an array with
9770 	 size 2^32 - 1 is too big.)  */
9771       else if (TREE_CODE (itype) == INTEGER_CST
9772 	       && TREE_OVERFLOW (itype))
9773 	{
9774 	  if (!(complain & tf_error))
9775 	    return error_mark_node;
9776 	  error ("overflow in array dimension");
9777 	  TREE_OVERFLOW (itype) = 0;
9778 	}
9779     }
9780 
9781   /* Create and return the appropriate index type.  */
9782   itype = build_index_type (itype);
9783 
9784   /* If the index type were dependent, we would have returned early, so
9785      remember that it isn't.  */
9786   TYPE_DEPENDENT_P (itype) = 0;
9787   TYPE_DEPENDENT_P_VALID (itype) = 1;
9788   return itype;
9789 }
9790 
9791 /* Returns the scope (if any) in which the entity declared by
9792    DECLARATOR will be located.  If the entity was declared with an
9793    unqualified name, NULL_TREE is returned.  */
9794 
9795 tree
9796 get_scope_of_declarator (const cp_declarator *declarator)
9797 {
9798   while (declarator && declarator->kind != cdk_id)
9799     declarator = declarator->declarator;
9800 
9801   /* If the declarator-id is a SCOPE_REF, the scope in which the
9802      declaration occurs is the first operand.  */
9803   if (declarator
9804       && declarator->u.id.qualifying_scope)
9805     return declarator->u.id.qualifying_scope;
9806 
9807   /* Otherwise, the declarator is not a qualified name; the entity will
9808      be declared in the current scope.  */
9809   return NULL_TREE;
9810 }
9811 
9812 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
9813    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
9814    with this type.  */
9815 
9816 static tree
9817 create_array_type_for_decl (tree name, tree type, tree size)
9818 {
9819   tree itype = NULL_TREE;
9820 
9821   /* If things have already gone awry, bail now.  */
9822   if (type == error_mark_node || size == error_mark_node)
9823     return error_mark_node;
9824 
9825   /* 8.3.4/1: If the type of the identifier of D contains the auto
9826      type-specifier, the program is ill-formed.  */
9827   if (type_uses_auto (type))
9828     {
9829       error ("%qD declared as array of %qT", name, type);
9830       return error_mark_node;
9831     }
9832 
9833   /* If there are some types which cannot be array elements,
9834      issue an error-message and return.  */
9835   switch (TREE_CODE (type))
9836     {
9837     case VOID_TYPE:
9838       if (name)
9839         error ("declaration of %qD as array of void", name);
9840       else
9841         error ("creating array of void");
9842       return error_mark_node;
9843 
9844     case FUNCTION_TYPE:
9845       if (name)
9846         error ("declaration of %qD as array of functions", name);
9847       else
9848         error ("creating array of functions");
9849       return error_mark_node;
9850 
9851     case REFERENCE_TYPE:
9852       if (name)
9853         error ("declaration of %qD as array of references", name);
9854       else
9855         error ("creating array of references");
9856       return error_mark_node;
9857 
9858     case METHOD_TYPE:
9859       if (name)
9860         error ("declaration of %qD as array of function members", name);
9861       else
9862         error ("creating array of function members");
9863       return error_mark_node;
9864 
9865     default:
9866       break;
9867     }
9868 
9869   /* [dcl.array]
9870 
9871      The constant expressions that specify the bounds of the arrays
9872      can be omitted only for the first member of the sequence.  */
9873   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9874     {
9875       if (name)
9876 	error ("declaration of %qD as multidimensional array must "
9877 	       "have bounds for all dimensions except the first",
9878 	       name);
9879       else
9880 	error ("multidimensional array must have bounds for all "
9881 	       "dimensions except the first");
9882 
9883       return error_mark_node;
9884     }
9885 
9886   /* Figure out the index type for the array.  */
9887   if (size)
9888     itype = compute_array_index_type (name, size, tf_warning_or_error);
9889 
9890   /* [dcl.array]
9891      T is called the array element type; this type shall not be [...] an
9892      abstract class type.  */
9893   abstract_virtuals_error (name, type);
9894 
9895   return build_cplus_array_type (type, itype);
9896 }
9897 
9898 /* Returns the smallest location != UNKNOWN_LOCATION among the
9899    three stored in LOCATIONS[ds_const], LOCATIONS[ds_volatile],
9900    and LOCATIONS[ds_restrict].  */
9901 
9902 static location_t
9903 smallest_type_quals_location (int type_quals, const location_t* locations)
9904 {
9905   location_t loc = UNKNOWN_LOCATION;
9906 
9907   if (type_quals & TYPE_QUAL_CONST)
9908     loc = locations[ds_const];
9909 
9910   if ((type_quals & TYPE_QUAL_VOLATILE)
9911       && (loc == UNKNOWN_LOCATION || locations[ds_volatile] < loc))
9912     loc = locations[ds_volatile];
9913 
9914   if ((type_quals & TYPE_QUAL_RESTRICT)
9915       && (loc == UNKNOWN_LOCATION || locations[ds_restrict] < loc))
9916     loc = locations[ds_restrict];
9917 
9918   return loc;
9919 }
9920 
9921 /* Check that it's OK to declare a function with the indicated TYPE
9922    and TYPE_QUALS.  SFK indicates the kind of special function (if any)
9923    that this function is.  OPTYPE is the type given in a conversion
9924    operator declaration, or the class type for a constructor/destructor.
9925    Returns the actual return type of the function; that may be different
9926    than TYPE if an error occurs, or for certain special functions.  */
9927 
9928 static tree
9929 check_special_function_return_type (special_function_kind sfk,
9930 				    tree type,
9931 				    tree optype,
9932 				    int type_quals,
9933 				    const location_t* locations)
9934 {
9935   switch (sfk)
9936     {
9937     case sfk_constructor:
9938       if (type)
9939 	error ("return type specification for constructor invalid");
9940       else if (type_quals != TYPE_UNQUALIFIED)
9941 	error_at (smallest_type_quals_location (type_quals, locations),
9942 		  "qualifiers are not allowed on constructor declaration");
9943 
9944       if (targetm.cxx.cdtor_returns_this ())
9945 	type = build_pointer_type (optype);
9946       else
9947 	type = void_type_node;
9948       break;
9949 
9950     case sfk_destructor:
9951       if (type)
9952 	error ("return type specification for destructor invalid");
9953       else if (type_quals != TYPE_UNQUALIFIED)
9954 	error_at (smallest_type_quals_location (type_quals, locations),
9955 		  "qualifiers are not allowed on destructor declaration");
9956 
9957       /* We can't use the proper return type here because we run into
9958 	 problems with ambiguous bases and covariant returns.  */
9959       if (targetm.cxx.cdtor_returns_this ())
9960 	type = build_pointer_type (void_type_node);
9961       else
9962 	type = void_type_node;
9963       break;
9964 
9965     case sfk_conversion:
9966       if (type)
9967 	error ("return type specified for %<operator %T%>", optype);
9968       else if (type_quals != TYPE_UNQUALIFIED)
9969 	error_at (smallest_type_quals_location (type_quals, locations),
9970 		  "qualifiers are not allowed on declaration of "
9971 		  "%<operator %T%>", optype);
9972 
9973       type = optype;
9974       break;
9975 
9976     case sfk_deduction_guide:
9977       if (type)
9978 	error ("return type specified for deduction guide");
9979       else if (type_quals != TYPE_UNQUALIFIED)
9980 	error_at (smallest_type_quals_location (type_quals, locations),
9981 		  "qualifiers are not allowed on declaration of "
9982 		  "deduction guide");
9983       if (TREE_CODE (optype) == TEMPLATE_TEMPLATE_PARM)
9984 	{
9985 	  error ("template template parameter %qT in declaration of "
9986 		 "deduction guide", optype);
9987 	  type = error_mark_node;
9988 	}
9989       else
9990 	type = make_template_placeholder (CLASSTYPE_TI_TEMPLATE (optype));
9991       for (int i = 0; i < ds_last; ++i)
9992 	if (i != ds_explicit && locations[i])
9993 	  error_at (locations[i],
9994 		    "decl-specifier in declaration of deduction guide");
9995       break;
9996 
9997     default:
9998       gcc_unreachable ();
9999     }
10000 
10001   return type;
10002 }
10003 
10004 /* A variable or data member (whose unqualified name is IDENTIFIER)
10005    has been declared with the indicated TYPE.  If the TYPE is not
10006    acceptable, issue an error message and return a type to use for
10007    error-recovery purposes.  */
10008 
10009 tree
10010 check_var_type (tree identifier, tree type)
10011 {
10012   if (VOID_TYPE_P (type))
10013     {
10014       if (!identifier)
10015 	error ("unnamed variable or field declared void");
10016       else if (identifier_p (identifier))
10017 	{
10018 	  gcc_assert (!IDENTIFIER_ANY_OP_P (identifier));
10019 	  error ("variable or field %qE declared void", identifier);
10020 	}
10021       else
10022 	error ("variable or field declared void");
10023       type = error_mark_node;
10024     }
10025 
10026   return type;
10027 }
10028 
10029 /* Handle declaring DECL as an inline variable.  */
10030 
10031 static void
10032 mark_inline_variable (tree decl)
10033 {
10034   bool inlinep = true;
10035   if (! toplevel_bindings_p ())
10036     {
10037       error ("%<inline%> specifier invalid for variable "
10038 	     "%qD declared at block scope", decl);
10039       inlinep = false;
10040     }
10041   else if (cxx_dialect < cxx17)
10042     pedwarn (DECL_SOURCE_LOCATION (decl), 0,
10043 	     "inline variables are only available "
10044 	     "with -std=c++17 or -std=gnu++17");
10045   if (inlinep)
10046     {
10047       retrofit_lang_decl (decl);
10048       SET_DECL_VAR_DECLARED_INLINE_P (decl);
10049     }
10050 }
10051 
10052 
10053 /* Assign a typedef-given name to a class or enumeration type declared
10054    as anonymous at first.  This was split out of grokdeclarator
10055    because it is also used in libcc1.  */
10056 
10057 void
10058 name_unnamed_type (tree type, tree decl)
10059 {
10060   gcc_assert (TYPE_UNNAMED_P (type));
10061 
10062   /* Replace the anonymous name with the real name everywhere.  */
10063   for (tree t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10064     {
10065       if (anon_aggrname_p (TYPE_IDENTIFIER (t)))
10066 	/* We do not rename the debug info representing the
10067 	   unnamed tagged type because the standard says in
10068 	   [dcl.typedef] that the naming applies only for
10069 	   linkage purposes.  */
10070 	/*debug_hooks->set_name (t, decl);*/
10071 	TYPE_NAME (t) = decl;
10072     }
10073 
10074   if (TYPE_LANG_SPECIFIC (type))
10075     TYPE_WAS_UNNAMED (type) = 1;
10076 
10077   /* If this is a typedef within a template class, the nested
10078      type is a (non-primary) template.  The name for the
10079      template needs updating as well.  */
10080   if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10081     DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10082       = TYPE_IDENTIFIER (type);
10083 
10084   /* Adjust linkage now that we aren't unnamed anymore.  */
10085   reset_type_linkage (type);
10086 
10087   /* FIXME remangle member functions; member functions of a
10088      type with external linkage have external linkage.  */
10089 
10090   /* Check that our job is done, and that it would fail if we
10091      attempted to do it again.  */
10092   gcc_assert (!TYPE_UNNAMED_P (type));
10093 }
10094 
10095 /* Given declspecs and a declarator (abstract or otherwise), determine
10096    the name and type of the object declared and construct a DECL node
10097    for it.
10098 
10099    DECLSPECS points to the representation of declaration-specifier
10100    sequence that precedes declarator.
10101 
10102    DECL_CONTEXT says which syntactic context this declaration is in:
10103      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
10104      FUNCDEF for a function definition.  Like NORMAL but a few different
10105       error messages in each case.  Return value may be zero meaning
10106       this definition is too screwy to try to parse.
10107      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
10108       handle member functions (which have FIELD context).
10109       Return value may be zero meaning this definition is too screwy to
10110       try to parse.
10111      PARM for a parameter declaration (either within a function prototype
10112       or before a function body).  Make a PARM_DECL, or return void_type_node.
10113      TPARM for a template parameter declaration.
10114      CATCHPARM for a parameter declaration before a catch clause.
10115      TYPENAME if for a typename (in a cast or sizeof).
10116       Don't make a DECL node; just return the ..._TYPE node.
10117      FIELD for a struct or union field; make a FIELD_DECL.
10118      BITFIELD for a field with specified width.
10119 
10120    INITIALIZED is as for start_decl.
10121 
10122    ATTRLIST is a pointer to the list of attributes, which may be NULL
10123    if there are none; *ATTRLIST may be modified if attributes from inside
10124    the declarator should be applied to the declaration.
10125 
10126    When this function is called, scoping variables (such as
10127    CURRENT_CLASS_TYPE) should reflect the scope in which the
10128    declaration occurs, not the scope in which the new declaration will
10129    be placed.  For example, on:
10130 
10131      void S::f() { ... }
10132 
10133    when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
10134    should not be `S'.
10135 
10136    Returns a DECL (if a declarator is present), a TYPE (if there is no
10137    declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
10138    error occurs. */
10139 
10140 tree
10141 grokdeclarator (const cp_declarator *declarator,
10142 		cp_decl_specifier_seq *declspecs,
10143 		enum decl_context decl_context,
10144 		int initialized,
10145 		tree* attrlist)
10146 {
10147   tree type = NULL_TREE;
10148   int longlong = 0;
10149   int explicit_intN = 0;
10150   int virtualp, explicitp, friendp, inlinep, staticp;
10151   int explicit_int = 0;
10152   int explicit_char = 0;
10153   int defaulted_int = 0;
10154 
10155   tree typedef_decl = NULL_TREE;
10156   const char *name = NULL;
10157   tree typedef_type = NULL_TREE;
10158   /* True if this declarator is a function definition.  */
10159   bool funcdef_flag = false;
10160   cp_declarator_kind innermost_code = cdk_error;
10161   int bitfield = 0;
10162 #if 0
10163   /* See the code below that used this.  */
10164   tree decl_attr = NULL_TREE;
10165 #endif
10166 
10167   /* Keep track of what sort of function is being processed
10168      so that we can warn about default return values, or explicit
10169      return values which do not match prescribed defaults.  */
10170   special_function_kind sfk = sfk_none;
10171 
10172   tree dname = NULL_TREE;
10173   tree ctor_return_type = NULL_TREE;
10174   enum overload_flags flags = NO_SPECIAL;
10175   /* cv-qualifiers that apply to the declarator, for a declaration of
10176      a member function.  */
10177   cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
10178   /* virt-specifiers that apply to the declarator, for a declaration of
10179      a member function.  */
10180   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
10181   /* ref-qualifier that applies to the declarator, for a declaration of
10182      a member function.  */
10183   cp_ref_qualifier rqual = REF_QUAL_NONE;
10184   /* cv-qualifiers that apply to the type specified by the DECLSPECS.  */
10185   int type_quals = TYPE_UNQUALIFIED;
10186   tree raises = NULL_TREE;
10187   int template_count = 0;
10188   tree returned_attrs = NULL_TREE;
10189   tree parms = NULL_TREE;
10190   const cp_declarator *id_declarator;
10191   /* The unqualified name of the declarator; either an
10192      IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
10193   tree unqualified_id;
10194   /* The class type, if any, in which this entity is located,
10195      or NULL_TREE if none.  Note that this value may be different from
10196      the current class type; for example if an attempt is made to declare
10197      "A::f" inside "B", this value will be "A".  */
10198   tree ctype = current_class_type;
10199   /* The NAMESPACE_DECL for the namespace in which this entity is
10200      located.  If an unqualified name is used to declare the entity,
10201      this value will be NULL_TREE, even if the entity is located at
10202      namespace scope.  */
10203   tree in_namespace = NULL_TREE;
10204   cp_storage_class storage_class;
10205   bool unsigned_p, signed_p, short_p, long_p, thread_p;
10206   bool type_was_error_mark_node = false;
10207   bool parameter_pack_p = declarator ? declarator->parameter_pack_p : false;
10208   bool template_type_arg = false;
10209   bool template_parm_flag = false;
10210   bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
10211   bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
10212   bool late_return_type_p = false;
10213   bool array_parameter_p = false;
10214   source_location saved_loc = input_location;
10215   tree reqs = NULL_TREE;
10216 
10217   signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
10218   unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
10219   short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
10220   long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
10221   longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
10222   explicit_intN = declspecs->explicit_intN_p;
10223   thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
10224 
10225   // Was concept_p specified? Note that ds_concept
10226   // implies ds_constexpr!
10227   bool concept_p = decl_spec_seq_has_spec_p (declspecs, ds_concept);
10228   if (concept_p)
10229     constexpr_p = true;
10230 
10231   if (decl_spec_seq_has_spec_p (declspecs, ds_const))
10232     type_quals |= TYPE_QUAL_CONST;
10233   if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
10234     type_quals |= TYPE_QUAL_VOLATILE;
10235   if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
10236     type_quals |= TYPE_QUAL_RESTRICT;
10237 
10238   if (decl_context == FUNCDEF)
10239     funcdef_flag = true, decl_context = NORMAL;
10240   else if (decl_context == MEMFUNCDEF)
10241     funcdef_flag = true, decl_context = FIELD;
10242   else if (decl_context == BITFIELD)
10243     bitfield = 1, decl_context = FIELD;
10244   else if (decl_context == TEMPLATE_TYPE_ARG)
10245     template_type_arg = true, decl_context = TYPENAME;
10246   else if (decl_context == TPARM)
10247     template_parm_flag = true, decl_context = PARM;
10248 
10249   if (initialized > 1)
10250     funcdef_flag = true;
10251 
10252   location_t typespec_loc = smallest_type_quals_location (type_quals,
10253 						      declspecs->locations);
10254   if (typespec_loc == UNKNOWN_LOCATION)
10255     typespec_loc = declspecs->locations[ds_type_spec];
10256   if (typespec_loc == UNKNOWN_LOCATION)
10257     typespec_loc = input_location;
10258 
10259   /* Look inside a declarator for the name being declared
10260      and get it as a string, for an error message.  */
10261   for (id_declarator = declarator;
10262        id_declarator;
10263        id_declarator = id_declarator->declarator)
10264     {
10265       if (id_declarator->kind != cdk_id)
10266 	innermost_code = id_declarator->kind;
10267 
10268       switch (id_declarator->kind)
10269 	{
10270 	case cdk_function:
10271 	  if (id_declarator->declarator
10272 	      && id_declarator->declarator->kind == cdk_id)
10273 	    {
10274 	      sfk = id_declarator->declarator->u.id.sfk;
10275 	      if (sfk == sfk_destructor)
10276 		flags = DTOR_FLAG;
10277 	    }
10278 	  break;
10279 
10280 	case cdk_id:
10281 	  {
10282 	    tree qualifying_scope = id_declarator->u.id.qualifying_scope;
10283 	    tree decl = id_declarator->u.id.unqualified_name;
10284 	    if (!decl)
10285 	      break;
10286 	    if (qualifying_scope)
10287 	      {
10288 		if (check_for_bare_parameter_packs (qualifying_scope,
10289 						    id_declarator->id_loc))
10290 		  return error_mark_node;
10291 		if (at_function_scope_p ())
10292 		  {
10293 		    /* [dcl.meaning]
10294 
10295 		       A declarator-id shall not be qualified except
10296 		       for ...
10297 
10298 		       None of the cases are permitted in block
10299 		       scope.  */
10300 		    if (qualifying_scope == global_namespace)
10301 		      error ("invalid use of qualified-name %<::%D%>",
10302 			     decl);
10303 		    else if (TYPE_P (qualifying_scope))
10304 		      error ("invalid use of qualified-name %<%T::%D%>",
10305 			     qualifying_scope, decl);
10306 		    else
10307 		      error ("invalid use of qualified-name %<%D::%D%>",
10308 			     qualifying_scope, decl);
10309 		    return error_mark_node;
10310 		  }
10311 		else if (TYPE_P (qualifying_scope))
10312 		  {
10313 		    ctype = qualifying_scope;
10314 		    if (!MAYBE_CLASS_TYPE_P (ctype))
10315 		      {
10316 			error ("%q#T is not a class or a namespace", ctype);
10317 			ctype = NULL_TREE;
10318 		      }
10319 		    else if (innermost_code != cdk_function
10320 			     && current_class_type
10321 			     && !uniquely_derived_from_p (ctype,
10322 							  current_class_type))
10323 		      {
10324 			error ("invalid use of qualified-name %<%T::%D%>",
10325 			       qualifying_scope, decl);
10326 			return error_mark_node;
10327 		      }
10328 		  }
10329 		else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
10330 		  in_namespace = qualifying_scope;
10331 	      }
10332 	    switch (TREE_CODE (decl))
10333 	      {
10334 	      case BIT_NOT_EXPR:
10335 		{
10336 		  if (innermost_code != cdk_function)
10337 		    {
10338 		      error ("declaration of %qD as non-function", decl);
10339 		      return error_mark_node;
10340 		    }
10341 		  else if (!qualifying_scope
10342 			   && !(current_class_type && at_class_scope_p ()))
10343 		    {
10344 		      error ("declaration of %qD as non-member", decl);
10345 		      return error_mark_node;
10346 		    }
10347 
10348 		  tree type = TREE_OPERAND (decl, 0);
10349 		  if (TYPE_P (type))
10350 		    type = constructor_name (type);
10351 		  name = identifier_to_locale (IDENTIFIER_POINTER (type));
10352 		  dname = decl;
10353 		}
10354 		break;
10355 
10356 	      case TEMPLATE_ID_EXPR:
10357 		{
10358 		  tree fns = TREE_OPERAND (decl, 0);
10359 
10360 		  dname = fns;
10361 		  if (!identifier_p (dname))
10362 		    dname = OVL_NAME (dname);
10363 		}
10364 		/* Fall through.  */
10365 
10366 	      case IDENTIFIER_NODE:
10367 		if (identifier_p (decl))
10368 		  dname = decl;
10369 
10370 		if (IDENTIFIER_KEYWORD_P (dname))
10371 		  {
10372 		    error ("declarator-id missing; using reserved word %qD",
10373 			   dname);
10374 		    name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10375 		  }
10376 		else if (!IDENTIFIER_CONV_OP_P (dname))
10377 		  name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10378 		else
10379 		  {
10380 		    gcc_assert (flags == NO_SPECIAL);
10381 		    flags = TYPENAME_FLAG;
10382 		    sfk = sfk_conversion;
10383 		    tree glob = get_global_binding (dname);
10384 		    if (glob && TREE_CODE (glob) == TYPE_DECL)
10385 		      name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10386 		    else
10387 		      name = "<invalid operator>";
10388 		  }
10389 		break;
10390 
10391 	      default:
10392 		gcc_unreachable ();
10393 	      }
10394 	    break;
10395 	  }
10396 
10397 	case cdk_array:
10398 	case cdk_pointer:
10399 	case cdk_reference:
10400 	case cdk_ptrmem:
10401 	  break;
10402 
10403 	case cdk_decomp:
10404 	  name = "structured binding";
10405 	  break;
10406 
10407 	case cdk_error:
10408 	  return error_mark_node;
10409 
10410 	default:
10411 	  gcc_unreachable ();
10412 	}
10413       if (id_declarator->kind == cdk_id)
10414 	break;
10415     }
10416 
10417   /* [dcl.fct.edf]
10418 
10419      The declarator in a function-definition shall have the form
10420      D1 ( parameter-declaration-clause) ...  */
10421   if (funcdef_flag && innermost_code != cdk_function)
10422     {
10423       error ("function definition does not declare parameters");
10424       return error_mark_node;
10425     }
10426 
10427   if (flags == TYPENAME_FLAG
10428       && innermost_code != cdk_function
10429       && ! (ctype && !declspecs->any_specifiers_p))
10430     {
10431       error ("declaration of %qD as non-function", dname);
10432       return error_mark_node;
10433     }
10434 
10435   if (dname && identifier_p (dname))
10436     {
10437       if (UDLIT_OPER_P (dname)
10438 	  && innermost_code != cdk_function)
10439 	{
10440 	  error ("declaration of %qD as non-function", dname);
10441 	  return error_mark_node;
10442 	}
10443 
10444       if (IDENTIFIER_ANY_OP_P (dname))
10445 	{
10446 	  if (typedef_p)
10447 	    {
10448 	      error ("declaration of %qD as %<typedef%>", dname);
10449 	      return error_mark_node;
10450 	    }
10451 	  else if (decl_context == PARM || decl_context == CATCHPARM)
10452 	    {
10453 	      error ("declaration of %qD as parameter", dname);
10454 	      return error_mark_node;
10455 	    }
10456 	}
10457     }
10458 
10459   /* Anything declared one level down from the top level
10460      must be one of the parameters of a function
10461      (because the body is at least two levels down).  */
10462 
10463   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
10464      by not allowing C++ class definitions to specify their parameters
10465      with xdecls (must be spec.d in the parmlist).
10466 
10467      Since we now wait to push a class scope until we are sure that
10468      we are in a legitimate method context, we must set oldcname
10469      explicitly (since current_class_name is not yet alive).
10470 
10471      We also want to avoid calling this a PARM if it is in a namespace.  */
10472 
10473   if (decl_context == NORMAL && !toplevel_bindings_p ())
10474     {
10475       cp_binding_level *b = current_binding_level;
10476       current_binding_level = b->level_chain;
10477       if (current_binding_level != 0 && toplevel_bindings_p ())
10478 	decl_context = PARM;
10479       current_binding_level = b;
10480     }
10481 
10482   if (name == NULL)
10483     name = decl_context == PARM ? "parameter" : "type name";
10484 
10485   if (concept_p && typedef_p)
10486     {
10487       error ("%<concept%> cannot appear in a typedef declaration");
10488       return error_mark_node;
10489     }
10490 
10491   if (constexpr_p && typedef_p)
10492     {
10493       error ("%<constexpr%> cannot appear in a typedef declaration");
10494       return error_mark_node;
10495     }
10496 
10497   /* If there were multiple types specified in the decl-specifier-seq,
10498      issue an error message.  */
10499   if (declspecs->multiple_types_p)
10500     {
10501       error ("two or more data types in declaration of %qs", name);
10502       return error_mark_node;
10503     }
10504 
10505   if (declspecs->conflicting_specifiers_p)
10506     {
10507       error ("conflicting specifiers in declaration of %qs", name);
10508       return error_mark_node;
10509     }
10510 
10511   /* Extract the basic type from the decl-specifier-seq.  */
10512   type = declspecs->type;
10513   if (type == error_mark_node)
10514     {
10515       type = NULL_TREE;
10516       type_was_error_mark_node = true;
10517     }
10518   /* If the entire declaration is itself tagged as deprecated then
10519      suppress reports of deprecated items.  */
10520   if (type && TREE_DEPRECATED (type)
10521       && deprecated_state != DEPRECATED_SUPPRESS)
10522     cp_warn_deprecated_use (type);
10523   if (type && TREE_CODE (type) == TYPE_DECL)
10524     {
10525       typedef_decl = type;
10526       type = TREE_TYPE (typedef_decl);
10527       if (TREE_DEPRECATED (type)
10528 	  && DECL_ARTIFICIAL (typedef_decl)
10529 	  && deprecated_state != DEPRECATED_SUPPRESS)
10530 	cp_warn_deprecated_use (type);
10531     }
10532   /* No type at all: default to `int', and set DEFAULTED_INT
10533      because it was not a user-defined typedef.  */
10534   if (type == NULL_TREE)
10535     {
10536       if (signed_p || unsigned_p || long_p || short_p)
10537 	{
10538 	  /* These imply 'int'.  */
10539 	  type = integer_type_node;
10540 	  defaulted_int = 1;
10541 	}
10542       /* If we just have "complex", it is equivalent to "complex double".  */
10543       else if (!longlong && !explicit_intN
10544 	       && decl_spec_seq_has_spec_p (declspecs, ds_complex))
10545 	{
10546 	  type = double_type_node;
10547 	  pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
10548 		   "ISO C++ does not support plain %<complex%> meaning "
10549 		   "%<double complex%>");
10550 	}
10551     }
10552   /* Gather flags.  */
10553   explicit_int = declspecs->explicit_int_p;
10554   explicit_char = declspecs->explicit_char_p;
10555 
10556 #if 0
10557   /* See the code below that used this.  */
10558   if (typedef_decl)
10559     decl_attr = DECL_ATTRIBUTES (typedef_decl);
10560 #endif
10561   typedef_type = type;
10562 
10563   if (sfk == sfk_conversion || sfk == sfk_deduction_guide)
10564     ctor_return_type = TREE_TYPE (dname);
10565   else
10566     ctor_return_type = ctype;
10567 
10568   if (sfk != sfk_none)
10569     {
10570       type = check_special_function_return_type (sfk, type,
10571 						 ctor_return_type,
10572 						 type_quals,
10573 						 declspecs->locations);
10574       type_quals = TYPE_UNQUALIFIED;
10575     }
10576   else if (type == NULL_TREE)
10577     {
10578       int is_main;
10579 
10580       explicit_int = -1;
10581 
10582       /* We handle `main' specially here, because 'main () { }' is so
10583 	 common.  With no options, it is allowed.  With -Wreturn-type,
10584 	 it is a warning.  It is only an error with -pedantic-errors.  */
10585       is_main = (funcdef_flag
10586 		 && dname && identifier_p (dname)
10587 		 && MAIN_NAME_P (dname)
10588 		 && ctype == NULL_TREE
10589 		 && in_namespace == NULL_TREE
10590 		 && current_namespace == global_namespace);
10591 
10592       if (type_was_error_mark_node)
10593 	/* We've already issued an error, don't complain more.  */;
10594       else if (in_system_header_at (input_location) || flag_ms_extensions)
10595 	/* Allow it, sigh.  */;
10596       else if (! is_main)
10597 	permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
10598       else if (pedantic)
10599 	pedwarn (input_location, OPT_Wpedantic,
10600 		 "ISO C++ forbids declaration of %qs with no type", name);
10601       else
10602 	warning (OPT_Wreturn_type,
10603                  "ISO C++ forbids declaration of %qs with no type", name);
10604 
10605       if (type_was_error_mark_node && template_parm_flag)
10606 	/* FIXME we should be able to propagate the error_mark_node as is
10607 	   for other contexts too.  */
10608 	type = error_mark_node;
10609       else
10610 	type = integer_type_node;
10611     }
10612 
10613   ctype = NULL_TREE;
10614 
10615   if (explicit_intN)
10616     {
10617       if (! int_n_enabled_p[declspecs->int_n_idx])
10618 	{
10619 	  error ("%<__int%d%> is not supported by this target",
10620 		 int_n_data[declspecs->int_n_idx].bitsize);
10621 	  explicit_intN = false;
10622 	}
10623       else if (pedantic && ! in_system_header_at (input_location))
10624 	pedwarn (input_location, OPT_Wpedantic,
10625 		 "ISO C++ does not support %<__int%d%> for %qs",
10626 		 int_n_data[declspecs->int_n_idx].bitsize, name);
10627     }
10628 
10629   /* Now process the modifiers that were specified
10630      and check for invalid combinations.  */
10631 
10632   /* Long double is a special combination.  */
10633   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
10634     {
10635       long_p = false;
10636       type = cp_build_qualified_type (long_double_type_node,
10637 				      cp_type_quals (type));
10638     }
10639 
10640   /* Check all other uses of type modifiers.  */
10641 
10642   if (unsigned_p || signed_p || long_p || short_p)
10643     {
10644       int ok = 0;
10645 
10646       if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
10647 	error ("%<signed%> or %<unsigned%> invalid for %qs", name);
10648       else if (signed_p && unsigned_p)
10649 	error ("%<signed%> and %<unsigned%> specified together for %qs", name);
10650       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
10651 	error ("%<long long%> invalid for %qs", name);
10652       else if (long_p && TREE_CODE (type) == REAL_TYPE)
10653 	error ("%<long%> invalid for %qs", name);
10654       else if (short_p && TREE_CODE (type) == REAL_TYPE)
10655 	error ("%<short%> invalid for %qs", name);
10656       else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
10657 	error ("%<long%> or %<short%> invalid for %qs", name);
10658       else if ((long_p || short_p || explicit_char || explicit_int) && explicit_intN)
10659 	error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
10660       else if ((long_p || short_p) && explicit_char)
10661 	error ("%<long%> or %<short%> specified with char for %qs", name);
10662       else if (long_p && short_p)
10663 	error ("%<long%> and %<short%> specified together for %qs", name);
10664       else if (type == char16_type_node || type == char32_type_node)
10665 	{
10666 	  if (signed_p || unsigned_p)
10667 	    error ("%<signed%> or %<unsigned%> invalid for %qs", name);
10668 	  else if (short_p || long_p)
10669 	    error ("%<short%> or %<long%> invalid for %qs", name);
10670 	}
10671       else
10672 	{
10673 	  ok = 1;
10674 	  if (!explicit_int && !defaulted_int && !explicit_char && !explicit_intN && pedantic)
10675 	    {
10676 	      pedwarn (input_location, OPT_Wpedantic,
10677 		       "long, short, signed or unsigned used invalidly for %qs",
10678 		       name);
10679 	      if (flag_pedantic_errors)
10680 		ok = 0;
10681 	    }
10682 	}
10683 
10684       /* Discard the type modifiers if they are invalid.  */
10685       if (! ok)
10686 	{
10687 	  unsigned_p = false;
10688 	  signed_p = false;
10689 	  long_p = false;
10690 	  short_p = false;
10691 	  longlong = 0;
10692 	}
10693     }
10694 
10695   /* Decide whether an integer type is signed or not.
10696      Optionally treat bitfields as signed by default.  */
10697   if (unsigned_p
10698       /* [class.bit]
10699 
10700 	 It is implementation-defined whether a plain (neither
10701 	 explicitly signed or unsigned) char, short, int, or long
10702 	 bit-field is signed or unsigned.
10703 
10704 	 Naturally, we extend this to long long as well.  Note that
10705 	 this does not include wchar_t.  */
10706       || (bitfield && !flag_signed_bitfields
10707 	  && !signed_p
10708 	  /* A typedef for plain `int' without `signed' can be
10709 	     controlled just like plain `int', but a typedef for
10710 	     `signed int' cannot be so controlled.  */
10711 	  && !(typedef_decl
10712 	       && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
10713 	  && TREE_CODE (type) == INTEGER_TYPE
10714 	  && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
10715     {
10716       if (explicit_intN)
10717 	type = int_n_trees[declspecs->int_n_idx].unsigned_type;
10718       else if (longlong)
10719 	type = long_long_unsigned_type_node;
10720       else if (long_p)
10721 	type = long_unsigned_type_node;
10722       else if (short_p)
10723 	type = short_unsigned_type_node;
10724       else if (type == char_type_node)
10725 	type = unsigned_char_type_node;
10726       else if (typedef_decl)
10727 	type = unsigned_type_for (type);
10728       else
10729 	type = unsigned_type_node;
10730     }
10731   else if (signed_p && type == char_type_node)
10732     type = signed_char_type_node;
10733   else if (explicit_intN)
10734     type = int_n_trees[declspecs->int_n_idx].signed_type;
10735   else if (longlong)
10736     type = long_long_integer_type_node;
10737   else if (long_p)
10738     type = long_integer_type_node;
10739   else if (short_p)
10740     type = short_integer_type_node;
10741 
10742   if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
10743     {
10744       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10745 	error ("complex invalid for %qs", name);
10746       /* If a modifier is specified, the resulting complex is the complex
10747 	 form of TYPE.  E.g, "complex short" is "complex short int".  */
10748       else if (type == integer_type_node)
10749 	type = complex_integer_type_node;
10750       else if (type == float_type_node)
10751 	type = complex_float_type_node;
10752       else if (type == double_type_node)
10753 	type = complex_double_type_node;
10754       else if (type == long_double_type_node)
10755 	type = complex_long_double_type_node;
10756       else
10757 	type = build_complex_type (type);
10758     }
10759 
10760   /* If we're using the injected-class-name to form a compound type or a
10761      declaration, replace it with the underlying class so we don't get
10762      redundant typedefs in the debug output.  But if we are returning the
10763      type unchanged, leave it alone so that it's available to
10764      maybe_get_template_decl_from_type_decl.  */
10765   if (CLASS_TYPE_P (type)
10766       && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
10767       && type == TREE_TYPE (TYPE_NAME (type))
10768       && (declarator || type_quals))
10769     type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
10770 
10771   type_quals |= cp_type_quals (type);
10772   type = cp_build_qualified_type_real
10773     (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
10774 			  || declspecs->decltype_p)
10775 			 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
10776   /* We might have ignored or rejected some of the qualifiers.  */
10777   type_quals = cp_type_quals (type);
10778 
10779   if (cxx_dialect >= cxx17 && type && is_auto (type)
10780       && innermost_code != cdk_function
10781       && id_declarator && declarator != id_declarator)
10782     if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (type))
10783     {
10784       error_at (typespec_loc, "template placeholder type %qT must be followed "
10785 		"by a simple declarator-id", type);
10786       inform (DECL_SOURCE_LOCATION (tmpl), "%qD declared here", tmpl);
10787     }
10788 
10789   staticp = 0;
10790   inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
10791   virtualp =  decl_spec_seq_has_spec_p (declspecs, ds_virtual);
10792   explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
10793 
10794   storage_class = declspecs->storage_class;
10795   if (storage_class == sc_static)
10796     staticp = 1 + (decl_context == FIELD);
10797 
10798   if (virtualp)
10799     {
10800       if (staticp == 2)
10801 	{
10802 	  error ("member %qD cannot be declared both %<virtual%> "
10803 		 "and %<static%>", dname);
10804 	  storage_class = sc_none;
10805 	  staticp = 0;
10806 	}
10807       if (constexpr_p)
10808 	error ("member %qD cannot be declared both %<virtual%> "
10809 	       "and %<constexpr%>", dname);
10810     }
10811   friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
10812 
10813   /* Issue errors about use of storage classes for parameters.  */
10814   if (decl_context == PARM)
10815     {
10816       if (typedef_p)
10817 	{
10818 	  error ("typedef declaration invalid in parameter declaration");
10819 	  return error_mark_node;
10820 	}
10821       else if (template_parm_flag && storage_class != sc_none)
10822 	{
10823 	  error ("storage class specified for template parameter %qs", name);
10824 	  return error_mark_node;
10825 	}
10826       else if (storage_class == sc_static
10827 	       || storage_class == sc_extern
10828 	       || thread_p)
10829 	error ("storage class specifiers invalid in parameter declarations");
10830 
10831       /* Function parameters cannot be concept. */
10832       if (concept_p)
10833           error ("a parameter cannot be declared %<concept%>");
10834       /* Function parameters cannot be constexpr.  If we saw one, moan
10835          and pretend it wasn't there.  */
10836       else if (constexpr_p)
10837         {
10838           error ("a parameter cannot be declared %<constexpr%>");
10839           constexpr_p = 0;
10840         }
10841     }
10842 
10843   /* Give error if `virtual' is used outside of class declaration.  */
10844   if (virtualp
10845       && (current_class_name == NULL_TREE || decl_context != FIELD))
10846     {
10847       error_at (declspecs->locations[ds_virtual],
10848 		"%<virtual%> outside class declaration");
10849       virtualp = 0;
10850     }
10851 
10852   if (innermost_code == cdk_decomp)
10853     {
10854       location_t loc = (declarator->kind == cdk_reference
10855 			? declarator->declarator->id_loc : declarator->id_loc);
10856       if (inlinep)
10857 	error_at (declspecs->locations[ds_inline],
10858 		  "structured binding declaration cannot be %<inline%>");
10859       if (typedef_p)
10860 	error_at (declspecs->locations[ds_typedef],
10861 		  "structured binding declaration cannot be %<typedef%>");
10862       if (constexpr_p)
10863 	error_at (declspecs->locations[ds_constexpr], "structured "
10864 		  "binding declaration cannot be %<constexpr%>");
10865       if (thread_p)
10866 	error_at (declspecs->locations[ds_thread],
10867 		  "structured binding declaration cannot be %qs",
10868 		  declspecs->gnu_thread_keyword_p
10869 		  ? "__thread" : "thread_local");
10870       if (concept_p)
10871 	error_at (declspecs->locations[ds_concept],
10872 		  "structured binding declaration cannot be %<concept%>");
10873       switch (storage_class)
10874 	{
10875 	case sc_none:
10876 	  break;
10877 	case sc_register:
10878 	  error_at (loc, "structured binding declaration cannot be "
10879 		    "%<register%>");
10880 	  break;
10881 	case sc_static:
10882 	  error_at (loc, "structured binding declaration cannot be "
10883 		    "%<static%>");
10884 	  break;
10885 	case sc_extern:
10886 	  error_at (loc, "structured binding declaration cannot be "
10887 		    "%<extern%>");
10888 	  break;
10889 	case sc_mutable:
10890 	  error_at (loc, "structured binding declaration cannot be "
10891 		    "%<mutable%>");
10892 	  break;
10893 	case sc_auto:
10894 	  error_at (loc, "structured binding declaration cannot be "
10895 		    "C++98 %<auto%>");
10896 	  break;
10897 	default:
10898 	  gcc_unreachable ();
10899 	}
10900       if (TREE_CODE (type) != TEMPLATE_TYPE_PARM
10901 	  || TYPE_IDENTIFIER (type) != auto_identifier)
10902 	{
10903 	  if (type != error_mark_node)
10904 	    {
10905 	      error_at (loc, "structured binding declaration cannot have "
10906 			"type %qT", type);
10907 	      inform (loc,
10908 		      "type must be cv-qualified %<auto%> or reference to "
10909 		      "cv-qualified %<auto%>");
10910 	    }
10911 	  type = build_qualified_type (make_auto (), type_quals);
10912 	  declspecs->type = type;
10913 	}
10914       inlinep = 0;
10915       typedef_p = 0;
10916       constexpr_p = 0;
10917       thread_p = 0;
10918       concept_p = 0;
10919       storage_class = sc_none;
10920       staticp = 0;
10921       declspecs->storage_class = sc_none;
10922       declspecs->locations[ds_thread] = UNKNOWN_LOCATION;
10923     }
10924 
10925   /* Static anonymous unions are dealt with here.  */
10926   if (staticp && decl_context == TYPENAME
10927       && declspecs->type
10928       && ANON_AGGR_TYPE_P (declspecs->type))
10929     decl_context = FIELD;
10930 
10931   /* Warn about storage classes that are invalid for certain
10932      kinds of declarations (parameters, typenames, etc.).  */
10933   if (thread_p
10934       && ((storage_class
10935 	   && storage_class != sc_extern
10936 	   && storage_class != sc_static)
10937 	  || typedef_p))
10938     {
10939       error ("multiple storage classes in declaration of %qs", name);
10940       thread_p = false;
10941     }
10942   if (decl_context != NORMAL
10943       && ((storage_class != sc_none
10944 	   && storage_class != sc_mutable)
10945 	  || thread_p))
10946     {
10947       if ((decl_context == PARM || decl_context == CATCHPARM)
10948 	  && (storage_class == sc_register
10949 	      || storage_class == sc_auto))
10950 	;
10951       else if (typedef_p)
10952 	;
10953       else if (decl_context == FIELD
10954 	       /* C++ allows static class elements.  */
10955 	       && storage_class == sc_static)
10956 	/* C++ also allows inlines and signed and unsigned elements,
10957 	   but in those cases we don't come in here.  */
10958 	;
10959       else
10960 	{
10961 	  if (decl_context == FIELD)
10962 	    error ("storage class specified for %qs", name);
10963 	  else
10964 	    {
10965 	      if (decl_context == PARM || decl_context == CATCHPARM)
10966 		error ("storage class specified for parameter %qs", name);
10967 	      else
10968 		error ("storage class specified for typename");
10969 	    }
10970 	  if (storage_class == sc_register
10971 	      || storage_class == sc_auto
10972 	      || storage_class == sc_extern
10973 	      || thread_p)
10974 	    storage_class = sc_none;
10975 	}
10976     }
10977   else if (storage_class == sc_extern && funcdef_flag
10978 	   && ! toplevel_bindings_p ())
10979     error ("nested function %qs declared %<extern%>", name);
10980   else if (toplevel_bindings_p ())
10981     {
10982       if (storage_class == sc_auto)
10983 	error ("top-level declaration of %qs specifies %<auto%>", name);
10984     }
10985   else if (thread_p
10986 	   && storage_class != sc_extern
10987 	   && storage_class != sc_static)
10988     {
10989       if (declspecs->gnu_thread_keyword_p)
10990 	pedwarn (input_location, 0, "function-scope %qs implicitly auto and "
10991 		 "declared %<__thread%>", name);
10992 
10993       /* When thread_local is applied to a variable of block scope the
10994 	 storage-class-specifier static is implied if it does not appear
10995 	 explicitly.  */
10996       storage_class = declspecs->storage_class = sc_static;
10997       staticp = 1;
10998     }
10999 
11000   if (storage_class && friendp)
11001     {
11002       error ("storage class specifiers invalid in friend function declarations");
11003       storage_class = sc_none;
11004       staticp = 0;
11005     }
11006 
11007   if (!id_declarator)
11008     unqualified_id = NULL_TREE;
11009   else
11010     {
11011       unqualified_id = id_declarator->u.id.unqualified_name;
11012       switch (TREE_CODE (unqualified_id))
11013 	{
11014 	case BIT_NOT_EXPR:
11015 	  unqualified_id = TREE_OPERAND (unqualified_id, 0);
11016 	  if (TYPE_P (unqualified_id))
11017 	    unqualified_id = constructor_name (unqualified_id);
11018 	  break;
11019 
11020 	case IDENTIFIER_NODE:
11021 	case TEMPLATE_ID_EXPR:
11022 	  break;
11023 
11024 	default:
11025 	  gcc_unreachable ();
11026 	}
11027     }
11028 
11029   if (declspecs->std_attributes)
11030     {
11031       location_t attr_loc = declspecs->locations[ds_std_attribute];
11032       if (warning_at (attr_loc, OPT_Wattributes, "attribute ignored"))
11033 	inform (attr_loc, "an attribute that appertains to a type-specifier "
11034 		"is ignored");
11035     }
11036 
11037   /* Determine the type of the entity declared by recurring on the
11038      declarator.  */
11039   for (; declarator; declarator = declarator->declarator)
11040     {
11041       const cp_declarator *inner_declarator;
11042       tree attrs;
11043 
11044       if (type == error_mark_node)
11045 	return error_mark_node;
11046 
11047       attrs = declarator->attributes;
11048       if (attrs)
11049 	{
11050 	  int attr_flags;
11051 
11052 	  attr_flags = 0;
11053 	  if (declarator == NULL || declarator->kind == cdk_id)
11054 	    attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
11055 	  if (declarator->kind == cdk_function)
11056 	    attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
11057 	  if (declarator->kind == cdk_array)
11058 	    attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
11059 	  returned_attrs = decl_attributes (&type,
11060 					    chainon (returned_attrs, attrs),
11061 					    attr_flags);
11062 	}
11063 
11064       inner_declarator = declarator->declarator;
11065 
11066       /* We don't want to warn in parameter context because we don't
11067 	 yet know if the parse will succeed, and this might turn out
11068 	 to be a constructor call.  */
11069       if (decl_context != PARM
11070 	  && decl_context != TYPENAME
11071 	  && !typedef_p
11072 	  && declarator->parenthesized != UNKNOWN_LOCATION
11073 	  /* If the type is class-like and the inner name used a
11074 	     global namespace qualifier, we need the parens.
11075 	     Unfortunately all we can tell is whether a qualified name
11076 	     was used or not.  */
11077 	  && !(inner_declarator
11078 	       && inner_declarator->kind == cdk_id
11079 	       && inner_declarator->u.id.qualifying_scope
11080 	       && (MAYBE_CLASS_TYPE_P (type)
11081 		   || TREE_CODE (type) == ENUMERAL_TYPE)))
11082 	warning_at (declarator->parenthesized, OPT_Wparentheses,
11083 		    "unnecessary parentheses in declaration of %qs", name);
11084       if (declarator->kind == cdk_id || declarator->kind == cdk_decomp)
11085 	break;
11086 
11087       switch (declarator->kind)
11088 	{
11089 	case cdk_array:
11090 	  type = create_array_type_for_decl (dname, type,
11091 					     declarator->u.array.bounds);
11092 	  if (!valid_array_size_p (input_location, type, dname))
11093 	    type = error_mark_node;
11094 
11095 	  if (declarator->std_attributes)
11096 	    /* [dcl.array]/1:
11097 
11098 	       The optional attribute-specifier-seq appertains to the
11099 	       array.  */
11100 	    returned_attrs = chainon (returned_attrs,
11101 				      declarator->std_attributes);
11102 	  break;
11103 
11104 	case cdk_function:
11105 	  {
11106 	    tree arg_types;
11107 	    int funcdecl_p;
11108 
11109 	    /* Declaring a function type.  */
11110 
11111 	    input_location = declspecs->locations[ds_type_spec];
11112 	    abstract_virtuals_error (ACU_RETURN, type);
11113 	    input_location = saved_loc;
11114 
11115 	    /* Pick up type qualifiers which should be applied to `this'.  */
11116 	    memfn_quals = declarator->u.function.qualifiers;
11117 	    /* Pick up virt-specifiers.  */
11118             virt_specifiers = declarator->u.function.virt_specifiers;
11119 	    /* And ref-qualifier, too */
11120 	    rqual = declarator->u.function.ref_qualifier;
11121 	    /* And tx-qualifier.  */
11122 	    tree tx_qual = declarator->u.function.tx_qualifier;
11123 	    /* Pick up the exception specifications.  */
11124 	    raises = declarator->u.function.exception_specification;
11125 	    /* If the exception-specification is ill-formed, let's pretend
11126 	       there wasn't one.  */
11127 	    if (raises == error_mark_node)
11128 	      raises = NULL_TREE;
11129 
11130 	    if (reqs)
11131 	      error_at (location_of (reqs), "requires-clause on return type");
11132 	    reqs = declarator->u.function.requires_clause;
11133 
11134 	    /* Say it's a definition only for the CALL_EXPR
11135 	       closest to the identifier.  */
11136 	    funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
11137 
11138 	    /* Handle a late-specified return type.  */
11139 	    tree late_return_type = declarator->u.function.late_return_type;
11140 	    if (funcdecl_p)
11141 	      {
11142 		if (tree auto_node = type_uses_auto (type))
11143 		  {
11144 		    if (!late_return_type)
11145 		      {
11146 			if (current_class_type
11147 			    && LAMBDA_TYPE_P (current_class_type))
11148 			  /* OK for C++11 lambdas.  */;
11149 			else if (cxx_dialect < cxx14)
11150 			  {
11151 			    error ("%qs function uses "
11152 				   "%<auto%> type specifier without trailing "
11153 				   "return type", name);
11154 			    inform (input_location, "deduced return type "
11155 				    "only available with -std=c++14 or "
11156 				    "-std=gnu++14");
11157 			  }
11158 			else if (virtualp)
11159 			  {
11160 			    error ("virtual function cannot "
11161 				   "have deduced return type");
11162 			    virtualp = false;
11163 			  }
11164 		      }
11165 		    else if (!is_auto (type) && sfk != sfk_conversion)
11166 		      {
11167 			error ("%qs function with trailing return type has"
11168 			       " %qT as its type rather than plain %<auto%>",
11169 			       name, type);
11170 			return error_mark_node;
11171 		      }
11172 		    tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node);
11173 		    if (!tmpl)
11174 		      if (tree late_auto = type_uses_auto (late_return_type))
11175 			tmpl = CLASS_PLACEHOLDER_TEMPLATE (late_auto);
11176 		    if (tmpl)
11177 		      {
11178 			if (!dguide_name_p (unqualified_id))
11179 			  {
11180 			    error_at (declarator->id_loc, "deduced class "
11181 				      "type %qD in function return type",
11182 				      DECL_NAME (tmpl));
11183 			    inform (DECL_SOURCE_LOCATION (tmpl),
11184 				    "%qD declared here", tmpl);
11185 			    return error_mark_node;
11186 			  }
11187 			else if (!late_return_type)
11188 			  {
11189 			    error_at (declarator->id_loc, "deduction guide "
11190 				      "for %qT must have trailing return "
11191 				      "type", TREE_TYPE (tmpl));
11192 			    inform (DECL_SOURCE_LOCATION (tmpl),
11193 				    "%qD declared here", tmpl);
11194 			    return error_mark_node;
11195 			  }
11196 			else if (CLASS_TYPE_P (late_return_type)
11197 				 && CLASSTYPE_TEMPLATE_INFO (late_return_type)
11198 				 && (CLASSTYPE_TI_TEMPLATE (late_return_type)
11199 				     == tmpl))
11200 			  /* OK */;
11201 			else
11202 			  error ("trailing return type %qT of deduction guide "
11203 				 "is not a specialization of %qT",
11204 				 late_return_type, TREE_TYPE (tmpl));
11205 		      }
11206 		  }
11207 		else if (late_return_type
11208 			 && sfk != sfk_conversion)
11209 		  {
11210 		    if (cxx_dialect < cxx11)
11211 		      /* Not using maybe_warn_cpp0x because this should
11212 			 always be an error.  */
11213 		      error ("trailing return type only available with "
11214 			     "-std=c++11 or -std=gnu++11");
11215 		    else
11216 		      error ("%qs function with trailing return type not "
11217 			     "declared with %<auto%> type specifier", name);
11218 		    return error_mark_node;
11219 		  }
11220 	      }
11221 	    type = splice_late_return_type (type, late_return_type);
11222 	    if (type == error_mark_node)
11223 	      return error_mark_node;
11224 
11225 	    if (late_return_type)
11226 	      {
11227 		late_return_type_p = true;
11228 		type_quals = cp_type_quals (type);
11229 	      }
11230 
11231 	    if (type_quals != TYPE_UNQUALIFIED)
11232 	      {
11233 		if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
11234 		  warning_at (typespec_loc, OPT_Wignored_qualifiers, "type "
11235 			      "qualifiers ignored on function return type");
11236 		/* We now know that the TYPE_QUALS don't apply to the
11237 		   decl, but to its return type.  */
11238 		type_quals = TYPE_UNQUALIFIED;
11239 	      }
11240 
11241 	    /* Error about some types functions can't return.  */
11242 
11243 	    if (TREE_CODE (type) == FUNCTION_TYPE)
11244 	      {
11245 		error_at (typespec_loc, "%qs declared as function returning "
11246 			  "a function", name);
11247 		return error_mark_node;
11248 	      }
11249 	    if (TREE_CODE (type) == ARRAY_TYPE)
11250 	      {
11251 		error_at (typespec_loc, "%qs declared as function returning "
11252 			  "an array", name);
11253 		return error_mark_node;
11254 	      }
11255 
11256 	    if (ctype == NULL_TREE
11257 		&& decl_context == FIELD
11258 		&& funcdecl_p
11259 		&& friendp == 0)
11260 	      ctype = current_class_type;
11261 
11262 	    if (ctype && (sfk == sfk_constructor
11263 			  || sfk == sfk_destructor))
11264 	      {
11265 		/* We are within a class's scope. If our declarator name
11266 		   is the same as the class name, and we are defining
11267 		   a function, then it is a constructor/destructor, and
11268 		   therefore returns a void type.  */
11269 
11270 		/* ISO C++ 12.4/2.  A destructor may not be declared
11271 		   const or volatile.  A destructor may not be static.
11272 		   A destructor may not be declared with ref-qualifier.
11273 
11274 		   ISO C++ 12.1.  A constructor may not be declared
11275 		   const or volatile.  A constructor may not be
11276 		   virtual.  A constructor may not be static.
11277 		   A constructor may not be declared with ref-qualifier. */
11278 		if (staticp == 2)
11279 		  error ((flags == DTOR_FLAG)
11280 			 ? G_("destructor cannot be static member function")
11281 			 : G_("constructor cannot be static member function"));
11282 		if (memfn_quals)
11283 		  {
11284 		    error ((flags == DTOR_FLAG)
11285 			   ? G_("destructors may not be cv-qualified")
11286 			   : G_("constructors may not be cv-qualified"));
11287 		    memfn_quals = TYPE_UNQUALIFIED;
11288 		  }
11289 
11290 		if (rqual)
11291 		  {
11292 		    maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
11293 		    error ((flags == DTOR_FLAG)
11294 			   ? G_("destructors may not be ref-qualified")
11295 			   : G_("constructors may not be ref-qualified"));
11296 		    rqual = REF_QUAL_NONE;
11297 		  }
11298 
11299 		if (decl_context == FIELD
11300 		    && !member_function_or_else (ctype,
11301 						 current_class_type,
11302 						 flags))
11303 		  return error_mark_node;
11304 
11305 		if (flags != DTOR_FLAG)
11306 		  {
11307 		    /* It's a constructor.  */
11308 		    if (explicitp == 1)
11309 		      explicitp = 2;
11310 		    if (virtualp)
11311 		      {
11312 			permerror (input_location,
11313 				   "constructors cannot be declared %<virtual%>");
11314 			virtualp = 0;
11315 		      }
11316 		    if (decl_context == FIELD
11317 			&& sfk != sfk_constructor)
11318 		      return error_mark_node;
11319 		  }
11320 		if (decl_context == FIELD)
11321 		  staticp = 0;
11322 	      }
11323 	    else if (friendp)
11324 	      {
11325 		if (virtualp)
11326 		  {
11327 		    /* Cannot be both friend and virtual.  */
11328 		    error ("virtual functions cannot be friends");
11329 		    friendp = 0;
11330 		  }
11331 		if (decl_context == NORMAL)
11332 		  error ("friend declaration not in class definition");
11333 		if (current_function_decl && funcdef_flag)
11334 		  error ("can%'t define friend function %qs in a local "
11335 			 "class definition",
11336 			 name);
11337 	      }
11338 	    else if (ctype && sfk == sfk_conversion)
11339 	      {
11340 		if (explicitp == 1)
11341 		  {
11342 		    maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
11343 		    explicitp = 2;
11344 		  }
11345 		if (late_return_type_p)
11346 		  error ("a conversion function cannot have a trailing return type");
11347 	      }
11348 	    else if (sfk == sfk_deduction_guide)
11349 	      {
11350 		if (explicitp == 1)
11351 		  explicitp = 2;
11352 	      }
11353 
11354 	    tree pushed_scope = NULL_TREE;
11355 	    if (funcdecl_p
11356 		&& decl_context != FIELD
11357 		&& inner_declarator->u.id.qualifying_scope
11358 		&& CLASS_TYPE_P (inner_declarator->u.id.qualifying_scope))
11359 	      pushed_scope
11360 		= push_scope (inner_declarator->u.id.qualifying_scope);
11361 
11362 	    arg_types = grokparms (declarator->u.function.parameters, &parms);
11363 
11364 	    if (pushed_scope)
11365 	      pop_scope (pushed_scope);
11366 
11367 	    if (inner_declarator
11368 		&& inner_declarator->kind == cdk_id
11369 		&& inner_declarator->u.id.sfk == sfk_destructor
11370 		&& arg_types != void_list_node)
11371 	      {
11372 		error ("destructors may not have parameters");
11373 		arg_types = void_list_node;
11374 		parms = NULL_TREE;
11375 	      }
11376 
11377 	    type = build_function_type (type, arg_types);
11378 
11379 	    tree attrs = declarator->std_attributes;
11380 	    if (tx_qual)
11381 	      {
11382 		tree att = build_tree_list (tx_qual, NULL_TREE);
11383 		/* transaction_safe applies to the type, but
11384 		   transaction_safe_dynamic applies to the function.  */
11385 		if (is_attribute_p ("transaction_safe", tx_qual))
11386 		  attrs = chainon (attrs, att);
11387 		else
11388 		  returned_attrs = chainon (returned_attrs, att);
11389 	      }
11390 	    if (attrs)
11391 	      /* [dcl.fct]/2:
11392 
11393 		 The optional attribute-specifier-seq appertains to
11394 		 the function type.  */
11395 	      decl_attributes (&type, attrs, 0);
11396 
11397 	    if (raises)
11398 	      type = build_exception_variant (type, raises);
11399 	  }
11400 	  break;
11401 
11402 	case cdk_pointer:
11403 	case cdk_reference:
11404 	case cdk_ptrmem:
11405 	  /* Filter out pointers-to-references and references-to-references.
11406 	     We can get these if a TYPE_DECL is used.  */
11407 
11408 	  if (TREE_CODE (type) == REFERENCE_TYPE)
11409 	    {
11410 	      if (declarator->kind != cdk_reference)
11411 		{
11412 		  error ("cannot declare pointer to %q#T", type);
11413 		  type = TREE_TYPE (type);
11414 		}
11415 
11416 	      /* In C++0x, we allow reference to reference declarations
11417 		 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
11418 		 and template type arguments [14.3.1/4 temp.arg.type]. The
11419 		 check for direct reference to reference declarations, which
11420 		 are still forbidden, occurs below. Reasoning behind the change
11421 		 can be found in DR106, DR540, and the rvalue reference
11422 		 proposals. */
11423 	      else if (cxx_dialect == cxx98)
11424 		{
11425 		  error ("cannot declare reference to %q#T", type);
11426 		  type = TREE_TYPE (type);
11427 		}
11428 	    }
11429 	  else if (VOID_TYPE_P (type))
11430 	    {
11431 	      if (declarator->kind == cdk_reference)
11432 		error ("cannot declare reference to %q#T", type);
11433 	      else if (declarator->kind == cdk_ptrmem)
11434 		error ("cannot declare pointer to %q#T member", type);
11435 	    }
11436 
11437 	  /* We now know that the TYPE_QUALS don't apply to the decl,
11438 	     but to the target of the pointer.  */
11439 	  type_quals = TYPE_UNQUALIFIED;
11440 
11441 	  /* This code used to handle METHOD_TYPE, but I don't think it's
11442 	     possible to get it here anymore.  */
11443 	  gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11444 	  if (declarator->kind == cdk_ptrmem
11445 	      && TREE_CODE (type) == FUNCTION_TYPE)
11446 	    {
11447 	      memfn_quals |= type_memfn_quals (type);
11448 	      type = build_memfn_type (type,
11449 				       declarator->u.pointer.class_type,
11450 				       memfn_quals,
11451 				       rqual);
11452 	      if (type == error_mark_node)
11453 		return error_mark_node;
11454 
11455 	      rqual = REF_QUAL_NONE;
11456 	      memfn_quals = TYPE_UNQUALIFIED;
11457 	    }
11458 
11459 	  if (TREE_CODE (type) == FUNCTION_TYPE
11460 	      && (type_memfn_quals (type) != TYPE_UNQUALIFIED
11461 		  || type_memfn_rqual (type) != REF_QUAL_NONE))
11462             error (declarator->kind == cdk_reference
11463                    ? G_("cannot declare reference to qualified function type %qT")
11464                    : G_("cannot declare pointer to qualified function type %qT"),
11465 		   type);
11466 
11467 	  /* When the pointed-to type involves components of variable size,
11468 	     care must be taken to ensure that the size evaluation code is
11469 	     emitted early enough to dominate all the possible later uses
11470 	     and late enough for the variables on which it depends to have
11471 	     been assigned.
11472 
11473 	     This is expected to happen automatically when the pointed-to
11474 	     type has a name/declaration of it's own, but special attention
11475 	     is required if the type is anonymous.
11476 
11477 	     We handle the NORMAL and FIELD contexts here by inserting a
11478 	     dummy statement that just evaluates the size at a safe point
11479 	     and ensures it is not deferred until e.g. within a deeper
11480 	     conditional context (c++/43555).
11481 
11482 	     We expect nothing to be needed here for PARM or TYPENAME.
11483 	     Evaluating the size at this point for TYPENAME would
11484 	     actually be incorrect, as we might be in the middle of an
11485 	     expression with side effects on the pointed-to type size
11486 	     "arguments" prior to the pointer declaration point and the
11487 	     size evaluation could end up prior to the side effects.  */
11488 
11489 	  if (!TYPE_NAME (type)
11490 	      && (decl_context == NORMAL || decl_context == FIELD)
11491 	      && at_function_scope_p ()
11492 	      && variably_modified_type_p (type, NULL_TREE))
11493 	    {
11494 	      TYPE_NAME (type) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
11495 					     NULL_TREE, type);
11496 	      add_decl_expr (TYPE_NAME (type));
11497 	    }
11498 
11499 	  if (declarator->kind == cdk_reference)
11500 	    {
11501 	      /* In C++0x, the type we are creating a reference to might be
11502 		 a typedef which is itself a reference type. In that case,
11503 		 we follow the reference collapsing rules in
11504 		 [7.1.3/8 dcl.typedef] to create the final reference type:
11505 
11506 		 "If a typedef TD names a type that is a reference to a type
11507 		 T, an attempt to create the type 'lvalue reference to cv TD'
11508 		 creates the type 'lvalue reference to T,' while an attempt
11509 		 to create the type "rvalue reference to cv TD' creates the
11510 		 type TD."
11511               */
11512 	      if (VOID_TYPE_P (type))
11513 		/* We already gave an error.  */;
11514 	      else if (TREE_CODE (type) == REFERENCE_TYPE)
11515 		{
11516 		  if (declarator->u.reference.rvalue_ref)
11517 		    /* Leave type alone.  */;
11518 		  else
11519 		    type = cp_build_reference_type (TREE_TYPE (type), false);
11520 		}
11521 	      else
11522 		type = cp_build_reference_type
11523 		  (type, declarator->u.reference.rvalue_ref);
11524 
11525 	      /* In C++0x, we need this check for direct reference to
11526 		 reference declarations, which are forbidden by
11527 		 [8.3.2/5 dcl.ref]. Reference to reference declarations
11528 		 are only allowed indirectly through typedefs and template
11529 		 type arguments. Example:
11530 
11531 		   void foo(int & &);      // invalid ref-to-ref decl
11532 
11533 		   typedef int & int_ref;
11534 		   void foo(int_ref &);    // valid ref-to-ref decl
11535 	      */
11536 	      if (inner_declarator && inner_declarator->kind == cdk_reference)
11537 		error ("cannot declare reference to %q#T, which is not "
11538 		       "a typedef or a template type argument", type);
11539 	    }
11540 	  else if (TREE_CODE (type) == METHOD_TYPE)
11541 	    type = build_ptrmemfunc_type (build_pointer_type (type));
11542 	  else if (declarator->kind == cdk_ptrmem)
11543 	    {
11544 	      gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
11545 			  != NAMESPACE_DECL);
11546 	      if (declarator->u.pointer.class_type == error_mark_node)
11547 		/* We will already have complained.  */
11548 		type = error_mark_node;
11549 	      else
11550 		type = build_ptrmem_type (declarator->u.pointer.class_type,
11551 					  type);
11552 	    }
11553 	  else
11554 	    type = build_pointer_type (type);
11555 
11556 	  /* Process a list of type modifier keywords (such as
11557 	     const or volatile) that were given inside the `*' or `&'.  */
11558 
11559 	  if (declarator->u.pointer.qualifiers)
11560 	    {
11561 	      type
11562 		= cp_build_qualified_type (type,
11563 					   declarator->u.pointer.qualifiers);
11564 	      type_quals = cp_type_quals (type);
11565 	    }
11566 
11567 	  /* Apply C++11 attributes to the pointer, and not to the
11568 	     type pointed to.  This is unlike what is done for GNU
11569 	     attributes above.  It is to comply with [dcl.ptr]/1:
11570 
11571 		 [the optional attribute-specifier-seq (7.6.1) appertains
11572 		  to the pointer and not to the object pointed to].  */
11573 	  if (declarator->std_attributes)
11574 	    decl_attributes (&type, declarator->std_attributes,
11575 			     0);
11576 
11577 	  ctype = NULL_TREE;
11578 	  break;
11579 
11580 	case cdk_error:
11581 	  break;
11582 
11583 	default:
11584 	  gcc_unreachable ();
11585 	}
11586     }
11587 
11588   /* A `constexpr' specifier used in an object declaration declares
11589      the object as `const'.  */
11590   if (constexpr_p && innermost_code != cdk_function)
11591     {
11592       /* DR1688 says that a `constexpr' specifier in combination with
11593 	 `volatile' is valid.  */
11594 
11595       if (TREE_CODE (type) != REFERENCE_TYPE)
11596 	{
11597 	  type_quals |= TYPE_QUAL_CONST;
11598 	  type = cp_build_qualified_type (type, type_quals);
11599 	}
11600     }
11601 
11602   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
11603       && TREE_CODE (type) != FUNCTION_TYPE
11604       && TREE_CODE (type) != METHOD_TYPE
11605       && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
11606     {
11607       error ("template-id %qD used as a declarator",
11608 	     unqualified_id);
11609       unqualified_id = dname;
11610     }
11611 
11612   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
11613      qualified with a class-name, turn it into a METHOD_TYPE, unless
11614      we know that the function is static.  We take advantage of this
11615      opportunity to do other processing that pertains to entities
11616      explicitly declared to be class members.  Note that if DECLARATOR
11617      is non-NULL, we know it is a cdk_id declarator; otherwise, we
11618      would not have exited the loop above.  */
11619   if (declarator
11620       && declarator->kind == cdk_id
11621       && declarator->u.id.qualifying_scope
11622       && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
11623     {
11624       ctype = declarator->u.id.qualifying_scope;
11625       ctype = TYPE_MAIN_VARIANT (ctype);
11626       template_count = num_template_headers_for_class (ctype);
11627 
11628       if (ctype == current_class_type)
11629 	{
11630 	  if (friendp)
11631 	    {
11632 	      permerror (input_location, "member functions are implicitly "
11633 					 "friends of their class");
11634 	      friendp = 0;
11635 	    }
11636 	  else
11637 	    permerror (declarator->id_loc,
11638 		       "extra qualification %<%T::%> on member %qs",
11639 		       ctype, name);
11640 	}
11641       else if (/* If the qualifying type is already complete, then we
11642 		  can skip the following checks.  */
11643 	       !COMPLETE_TYPE_P (ctype)
11644 	       && (/* If the function is being defined, then
11645 		      qualifying type must certainly be complete.  */
11646 		   funcdef_flag
11647 		   /* A friend declaration of "T::f" is OK, even if
11648 		      "T" is a template parameter.  But, if this
11649 		      function is not a friend, the qualifying type
11650 		      must be a class.  */
11651 		   || (!friendp && !CLASS_TYPE_P (ctype))
11652 		   /* For a declaration, the type need not be
11653 		      complete, if either it is dependent (since there
11654 		      is no meaningful definition of complete in that
11655 		      case) or the qualifying class is currently being
11656 		      defined.  */
11657 		   || !(dependent_type_p (ctype)
11658 			|| currently_open_class (ctype)))
11659 	       /* Check that the qualifying type is complete.  */
11660 	       && !complete_type_or_else (ctype, NULL_TREE))
11661 	return error_mark_node;
11662       else if (TREE_CODE (type) == FUNCTION_TYPE)
11663 	{
11664 	  if (current_class_type
11665 	      && (!friendp || funcdef_flag || initialized))
11666 	    {
11667 	      error (funcdef_flag || initialized
11668 		     ? G_("cannot define member function %<%T::%s%> "
11669 			  "within %qT")
11670 		     : G_("cannot declare member function %<%T::%s%> "
11671 			  "within %qT"),
11672 		     ctype, name, current_class_type);
11673 	      return error_mark_node;
11674 	    }
11675 	}
11676       else if (typedef_p && current_class_type)
11677 	{
11678 	  error ("cannot declare member %<%T::%s%> within %qT",
11679 		 ctype, name, current_class_type);
11680 	  return error_mark_node;
11681 	}
11682     }
11683 
11684   if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
11685     ctype = current_class_type;
11686 
11687   /* Now TYPE has the actual type.  */
11688 
11689   if (returned_attrs)
11690     {
11691       if (attrlist)
11692 	*attrlist = chainon (returned_attrs, *attrlist);
11693       else
11694 	attrlist = &returned_attrs;
11695     }
11696 
11697   if (declarator
11698       && declarator->kind == cdk_id
11699       && declarator->std_attributes
11700       && attrlist != NULL)
11701     {
11702       /* [dcl.meaning]/1: The optional attribute-specifier-seq following
11703 	 a declarator-id appertains to the entity that is declared.  */
11704       if (declarator->std_attributes != error_mark_node)
11705 	*attrlist = chainon (*attrlist, declarator->std_attributes);
11706       else
11707 	/* We should have already diagnosed the issue (c++/78344).  */
11708 	gcc_assert (seen_error ());
11709     }
11710 
11711   /* Handle parameter packs. */
11712   if (parameter_pack_p)
11713     {
11714       if (decl_context == PARM)
11715         /* Turn the type into a pack expansion.*/
11716         type = make_pack_expansion (type);
11717       else
11718         error ("non-parameter %qs cannot be a parameter pack", name);
11719     }
11720 
11721   if ((decl_context == FIELD || decl_context == PARM)
11722       && !processing_template_decl
11723       && variably_modified_type_p (type, NULL_TREE))
11724     {
11725       if (decl_context == FIELD)
11726 	error ("data member may not have variably modified type %qT", type);
11727       else
11728 	error ("parameter may not have variably modified type %qT", type);
11729       type = error_mark_node;
11730     }
11731 
11732   if (explicitp == 1 || (explicitp && friendp))
11733     {
11734       /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
11735 	 in the declaration of a constructor or conversion function within
11736 	 a class definition.  */
11737       if (!current_class_type)
11738 	error_at (declspecs->locations[ds_explicit],
11739 		  "%<explicit%> outside class declaration");
11740       else if (friendp)
11741 	error_at (declspecs->locations[ds_explicit],
11742 		  "%<explicit%> in friend declaration");
11743       else
11744 	error_at (declspecs->locations[ds_explicit],
11745 		  "only declarations of constructors and conversion operators "
11746 		  "can be %<explicit%>");
11747       explicitp = 0;
11748     }
11749 
11750   if (storage_class == sc_mutable)
11751     {
11752       if (decl_context != FIELD || friendp)
11753 	{
11754 	  error ("non-member %qs cannot be declared %<mutable%>", name);
11755 	  storage_class = sc_none;
11756 	}
11757       else if (decl_context == TYPENAME || typedef_p)
11758 	{
11759 	  error ("non-object member %qs cannot be declared %<mutable%>", name);
11760 	  storage_class = sc_none;
11761 	}
11762       else if (TREE_CODE (type) == FUNCTION_TYPE
11763 	       || TREE_CODE (type) == METHOD_TYPE)
11764 	{
11765 	  error ("function %qs cannot be declared %<mutable%>", name);
11766 	  storage_class = sc_none;
11767 	}
11768       else if (staticp)
11769 	{
11770 	  error ("static %qs cannot be declared %<mutable%>", name);
11771 	  storage_class = sc_none;
11772 	}
11773       else if (type_quals & TYPE_QUAL_CONST)
11774 	{
11775 	  error ("const %qs cannot be declared %<mutable%>", name);
11776 	  storage_class = sc_none;
11777 	}
11778       else if (TREE_CODE (type) == REFERENCE_TYPE)
11779 	{
11780 	  permerror (input_location, "reference %qs cannot be declared "
11781 	             "%<mutable%>", name);
11782 	  storage_class = sc_none;
11783 	}
11784     }
11785 
11786   /* If this is declaring a typedef name, return a TYPE_DECL.  */
11787   if (typedef_p && decl_context != TYPENAME)
11788     {
11789       tree decl;
11790 
11791       /* This declaration:
11792 
11793 	   typedef void f(int) const;
11794 
11795 	 declares a function type which is not a member of any
11796 	 particular class, but which is cv-qualified; for
11797 	 example "f S::*" declares a pointer to a const-qualified
11798 	 member function of S.  We record the cv-qualification in the
11799 	 function type.  */
11800       if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
11801         {
11802           type = apply_memfn_quals (type, memfn_quals, rqual);
11803 
11804           /* We have now dealt with these qualifiers.  */
11805           memfn_quals = TYPE_UNQUALIFIED;
11806 	  rqual = REF_QUAL_NONE;
11807         }
11808 
11809       if (type_uses_auto (type))
11810 	{
11811 	  error ("typedef declared %<auto%>");
11812 	  type = error_mark_node;
11813 	}
11814 
11815       if (reqs)
11816 	error_at (location_of (reqs), "requires-clause on typedef");
11817 
11818       if (id_declarator && declarator->u.id.qualifying_scope)
11819 	{
11820 	  error ("typedef name may not be a nested-name-specifier");
11821 	  type = error_mark_node;
11822 	}
11823 
11824       if (decl_context == FIELD)
11825 	decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
11826       else
11827 	decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
11828 
11829       if (decl_context != FIELD)
11830 	{
11831 	  if (!current_function_decl)
11832 	    DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
11833 	  else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
11834 		   || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
11835 		       (current_function_decl)))
11836 	    /* The TYPE_DECL is "abstract" because there will be
11837 	       clones of this constructor/destructor, and there will
11838 	       be copies of this TYPE_DECL generated in those
11839 	       clones.  The decloning optimization (for space) may
11840                revert this subsequently if it determines that
11841                the clones should share a common implementation.  */
11842 	    DECL_ABSTRACT_P (decl) = true;
11843 	}
11844       else if (current_class_type
11845 	       && constructor_name_p (unqualified_id, current_class_type))
11846 	permerror (input_location, "ISO C++ forbids nested type %qD with same name "
11847 		   "as enclosing class",
11848 		   unqualified_id);
11849 
11850       /* If the user declares "typedef struct {...} foo" then the
11851 	 struct will have an anonymous name.  Fill that name in now.
11852 	 Nothing can refer to it, so nothing needs know about the name
11853 	 change.  */
11854       if (type != error_mark_node
11855 	  && unqualified_id
11856 	  && TYPE_NAME (type)
11857 	  && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11858 	  && TYPE_UNNAMED_P (type)
11859 	  && declspecs->type_definition_p
11860 	  && attributes_naming_typedef_ok (*attrlist)
11861 	  && cp_type_quals (type) == TYPE_UNQUALIFIED)
11862 	name_unnamed_type (type, decl);
11863 
11864       if (signed_p
11865 	  || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11866 	C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11867 
11868       bad_specifiers (decl, BSP_TYPE, virtualp,
11869 		      memfn_quals != TYPE_UNQUALIFIED,
11870 		      inlinep, friendp, raises != NULL_TREE);
11871 
11872       if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
11873 	/* Acknowledge that this was written:
11874 	     `using analias = atype;'.  */
11875 	TYPE_DECL_ALIAS_P (decl) = 1;
11876 
11877       return decl;
11878     }
11879 
11880   /* Detect the case of an array type of unspecified size
11881      which came, as such, direct from a typedef name.
11882      We must copy the type, so that the array's domain can be
11883      individually set by the object's initializer.  */
11884 
11885   if (type && typedef_type
11886       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
11887       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
11888     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
11889 
11890   /* Detect where we're using a typedef of function type to declare a
11891      function. PARMS will not be set, so we must create it now.  */
11892 
11893   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
11894     {
11895       tree decls = NULL_TREE;
11896       tree args;
11897 
11898       for (args = TYPE_ARG_TYPES (type);
11899 	   args && args != void_list_node;
11900 	   args = TREE_CHAIN (args))
11901 	{
11902 	  tree decl = cp_build_parm_decl (NULL_TREE, NULL_TREE,
11903 					  TREE_VALUE (args));
11904 
11905 	  DECL_CHAIN (decl) = decls;
11906 	  decls = decl;
11907 	}
11908 
11909       parms = nreverse (decls);
11910 
11911       if (decl_context != TYPENAME)
11912 	{
11913 	  /* The qualifiers on the function type become the qualifiers on
11914 	     the non-static member function. */
11915 	  memfn_quals |= type_memfn_quals (type);
11916 	  rqual = type_memfn_rqual (type);
11917 	  type_quals = TYPE_UNQUALIFIED;
11918 	}
11919     }
11920 
11921   /* If this is a type name (such as, in a cast or sizeof),
11922      compute the type and return it now.  */
11923 
11924   if (decl_context == TYPENAME)
11925     {
11926       /* Note that here we don't care about type_quals.  */
11927 
11928       /* Special case: "friend class foo" looks like a TYPENAME context.  */
11929       if (friendp)
11930 	{
11931 	  if (inlinep)
11932 	    {
11933 	      error ("%<inline%> specified for friend class declaration");
11934 	      inlinep = 0;
11935 	    }
11936 
11937 	  if (!current_aggr)
11938 	    {
11939 	      /* Don't allow friend declaration without a class-key.  */
11940 	      if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11941 		permerror (input_location, "template parameters cannot be friends");
11942 	      else if (TREE_CODE (type) == TYPENAME_TYPE)
11943 		permerror (input_location, "friend declaration requires class-key, "
11944 			   "i.e. %<friend class %T::%D%>",
11945 			   TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
11946 	      else
11947 		permerror (input_location, "friend declaration requires class-key, "
11948 			   "i.e. %<friend %#T%>",
11949 			   type);
11950 	    }
11951 
11952 	  /* Only try to do this stuff if we didn't already give up.  */
11953 	  if (type != integer_type_node)
11954 	    {
11955 	      /* A friendly class?  */
11956 	      if (current_class_type)
11957 		make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
11958 				   /*complain=*/true);
11959 	      else
11960 		error ("trying to make class %qT a friend of global scope",
11961 		       type);
11962 
11963 	      type = void_type_node;
11964 	    }
11965 	}
11966       else if (memfn_quals || rqual)
11967 	{
11968 	  if (ctype == NULL_TREE
11969 	      && TREE_CODE (type) == METHOD_TYPE)
11970 	    ctype = TYPE_METHOD_BASETYPE (type);
11971 
11972 	  if (ctype)
11973 	    type = build_memfn_type (type, ctype, memfn_quals, rqual);
11974 	  /* Core issue #547: need to allow this in template type args.
11975 	     Allow it in general in C++11 for alias-declarations.  */
11976 	  else if ((template_type_arg || cxx_dialect >= cxx11)
11977 		   && TREE_CODE (type) == FUNCTION_TYPE)
11978 	    type = apply_memfn_quals (type, memfn_quals, rqual);
11979 	  else
11980 	    error ("invalid qualifiers on non-member function type");
11981 	}
11982 
11983       if (reqs)
11984 	error_at (location_of (reqs), "requires-clause on type-id");
11985 
11986       return type;
11987     }
11988   else if (unqualified_id == NULL_TREE && decl_context != PARM
11989 	   && decl_context != CATCHPARM
11990 	   && TREE_CODE (type) != UNION_TYPE
11991 	   && ! bitfield
11992 	   && innermost_code != cdk_decomp)
11993     {
11994       error ("abstract declarator %qT used as declaration", type);
11995       return error_mark_node;
11996     }
11997 
11998   if (!FUNC_OR_METHOD_TYPE_P (type))
11999     {
12000       /* Only functions may be declared using an operator-function-id.  */
12001       if (dname && IDENTIFIER_ANY_OP_P (dname))
12002 	{
12003 	  error ("declaration of %qD as non-function", dname);
12004 	  return error_mark_node;
12005 	}
12006 
12007       if (reqs)
12008 	error_at (location_of (reqs),
12009 		  "requires-clause on declaration of non-function type %qT",
12010 		  type);
12011     }
12012 
12013   /* We don't check parameter types here because we can emit a better
12014      error message later.  */
12015   if (decl_context != PARM)
12016     {
12017       type = check_var_type (unqualified_id, type);
12018       if (type == error_mark_node)
12019         return error_mark_node;
12020     }
12021 
12022   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
12023      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
12024 
12025   if (decl_context == PARM || decl_context == CATCHPARM)
12026     {
12027       if (ctype || in_namespace)
12028 	error ("cannot use %<::%> in parameter declaration");
12029 
12030       if (type_uses_auto (type)
12031 	  && !(cxx_dialect >= cxx17 && template_parm_flag))
12032 	{
12033 	  if (cxx_dialect >= cxx14)
12034 	    error ("%<auto%> parameter not permitted in this context");
12035 	  else
12036 	    error ("parameter declared %<auto%>");
12037 	  type = error_mark_node;
12038 	}
12039 
12040       /* A parameter declared as an array of T is really a pointer to T.
12041 	 One declared as a function is really a pointer to a function.
12042 	 One declared as a member is really a pointer to member.  */
12043 
12044       if (TREE_CODE (type) == ARRAY_TYPE)
12045 	{
12046 	  /* Transfer const-ness of array into that of type pointed to.  */
12047 	  type = build_pointer_type (TREE_TYPE (type));
12048 	  type_quals = TYPE_UNQUALIFIED;
12049 	  array_parameter_p = true;
12050 	}
12051       else if (TREE_CODE (type) == FUNCTION_TYPE)
12052 	type = build_pointer_type (type);
12053     }
12054 
12055   if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
12056       && !(identifier_p (unqualified_id)
12057 	   && IDENTIFIER_NEWDEL_OP_P (unqualified_id)))
12058     {
12059       cp_cv_quals real_quals = memfn_quals;
12060       if (cxx_dialect < cxx14 && constexpr_p
12061 	  && sfk != sfk_constructor && sfk != sfk_destructor)
12062 	real_quals |= TYPE_QUAL_CONST;
12063       type = build_memfn_type (type, ctype, real_quals, rqual);
12064     }
12065 
12066   {
12067     tree decl = NULL_TREE;
12068 
12069     if (decl_context == PARM)
12070       {
12071 	decl = cp_build_parm_decl (NULL_TREE, unqualified_id, type);
12072 	DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
12073 
12074 	bad_specifiers (decl, BSP_PARM, virtualp,
12075 			memfn_quals != TYPE_UNQUALIFIED,
12076 			inlinep, friendp, raises != NULL_TREE);
12077       }
12078     else if (decl_context == FIELD)
12079       {
12080 	if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE)
12081 	  if (tree auto_node = type_uses_auto (type))
12082 	    {
12083 	      location_t loc = declspecs->locations[ds_type_spec];
12084 	      if (CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12085 		error_at (loc, "invalid use of template-name %qE without an "
12086 			  "argument list",
12087 			  CLASS_PLACEHOLDER_TEMPLATE (auto_node));
12088 	      else
12089 		error_at (loc, "non-static data member declared with "
12090 			  "placeholder %qT", auto_node);
12091 	      type = error_mark_node;
12092 	    }
12093 
12094 	/* The C99 flexible array extension.  */
12095 	if (!staticp && TREE_CODE (type) == ARRAY_TYPE
12096 	    && TYPE_DOMAIN (type) == NULL_TREE)
12097 	  {
12098 	    if (ctype
12099 		&& (TREE_CODE (ctype) == UNION_TYPE
12100 		    || TREE_CODE (ctype) == QUAL_UNION_TYPE))
12101 	      {
12102 		error ("flexible array member in union");
12103 		type = error_mark_node;
12104 	      }
12105 	    else
12106 	      {
12107 		/* Array is a flexible member.  */
12108 		if (in_system_header_at (input_location))
12109 		  /* Do not warn on flexible array members in system
12110 		     headers because glibc uses them.  */;
12111 		else if (name)
12112 		  pedwarn (input_location, OPT_Wpedantic,
12113 			   "ISO C++ forbids flexible array member %qs", name);
12114 		else
12115 		  pedwarn (input_location, OPT_Wpedantic,
12116 			   "ISO C++ forbids flexible array members");
12117 
12118 		/* Flexible array member has a null domain.  */
12119 		type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
12120 	      }
12121 	  }
12122 
12123 	if (type == error_mark_node)
12124 	  {
12125 	    /* Happens when declaring arrays of sizes which
12126 	       are error_mark_node, for example.  */
12127 	    decl = NULL_TREE;
12128 	  }
12129 	else if (in_namespace && !friendp)
12130 	  {
12131 	    /* Something like struct S { int N::j; };  */
12132 	    error ("invalid use of %<::%>");
12133 	    return error_mark_node;
12134 	  }
12135 	else if (TREE_CODE (type) == FUNCTION_TYPE
12136 		 || TREE_CODE (type) == METHOD_TYPE)
12137 	  {
12138 	    int publicp = 0;
12139 	    tree function_context;
12140 
12141 	    if (friendp == 0)
12142 	      {
12143 		/* This should never happen in pure C++ (the check
12144 		   could be an assert).  It could happen in
12145 		   Objective-C++ if someone writes invalid code that
12146 		   uses a function declaration for an instance
12147 		   variable or property (instance variables and
12148 		   properties are parsed as FIELD_DECLs, but they are
12149 		   part of an Objective-C class, not a C++ class).
12150 		   That code is invalid and is caught by this
12151 		   check.  */
12152 		if (!ctype)
12153 		  {
12154 		    error ("declaration of function %qD in invalid context",
12155 			   unqualified_id);
12156 		    return error_mark_node;
12157 		  }
12158 
12159 		/* ``A union may [ ... ] not [ have ] virtual functions.''
12160 		   ARM 9.5 */
12161 		if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
12162 		  {
12163 		    error ("function %qD declared %<virtual%> inside a union",
12164 			   unqualified_id);
12165 		    return error_mark_node;
12166 		  }
12167 
12168 		if (virtualp
12169 		    && identifier_p (unqualified_id)
12170 		    && IDENTIFIER_NEWDEL_OP_P (unqualified_id))
12171 		  {
12172 		    error ("%qD cannot be declared %<virtual%>, since it "
12173 			   "is always static", unqualified_id);
12174 		    virtualp = 0;
12175 		  }
12176 	      }
12177 
12178 	    /* Check that the name used for a destructor makes sense.  */
12179 	    if (sfk == sfk_destructor)
12180 	      {
12181 		tree uqname = id_declarator->u.id.unqualified_name;
12182 
12183 		if (!ctype)
12184 		  {
12185 		    gcc_assert (friendp);
12186 		    error ("expected qualified name in friend declaration "
12187 			   "for destructor %qD", uqname);
12188 		    return error_mark_node;
12189 		  }
12190 
12191 		if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
12192 		  {
12193 		    error ("declaration of %qD as member of %qT",
12194 			   uqname, ctype);
12195 		    return error_mark_node;
12196 		  }
12197                 if (concept_p)
12198                   {
12199                     error ("a destructor cannot be %<concept%>");
12200                     return error_mark_node;
12201                   }
12202                 if (constexpr_p)
12203                   {
12204                     error ("a destructor cannot be %<constexpr%>");
12205                     return error_mark_node;
12206                   }
12207 	      }
12208 	    else if (sfk == sfk_constructor && friendp && !ctype)
12209 	      {
12210 		error ("expected qualified name in friend declaration "
12211 		       "for constructor %qD",
12212 		       id_declarator->u.id.unqualified_name);
12213 		return error_mark_node;
12214 	      }
12215 	    if (sfk == sfk_constructor)
12216 	      if (concept_p)
12217 		{
12218 		  error ("a constructor cannot be %<concept%>");
12219 		  return error_mark_node;
12220 		}
12221 	    if (concept_p)
12222 	      {
12223 		error ("a concept cannot be a member function");
12224 		concept_p = false;
12225 	      }
12226 
12227 	    if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12228 	      {
12229 		tree tmpl = TREE_OPERAND (unqualified_id, 0);
12230 		if (variable_template_p (tmpl))
12231 		  {
12232 		    error ("specialization of variable template %qD "
12233 			   "declared as function", tmpl);
12234 		    inform (DECL_SOURCE_LOCATION (tmpl),
12235 			    "variable template declared here");
12236 		    return error_mark_node;
12237 		  }
12238 	      }
12239 
12240 	    /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
12241 	    function_context = (ctype != NULL_TREE) ?
12242 	      decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
12243 	    publicp = (! friendp || ! staticp)
12244 	      && function_context == NULL_TREE;
12245 
12246 	    if (late_return_type_p)
12247 	      TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
12248 
12249 	    decl = grokfndecl (ctype, type,
12250 			       TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
12251 			       ? unqualified_id : dname,
12252 			       parms,
12253 			       unqualified_id,
12254 			       reqs,
12255 			       virtualp, flags, memfn_quals, rqual, raises,
12256 			       friendp ? -1 : 0, friendp, publicp,
12257                                inlinep | (2 * constexpr_p) | (4 * concept_p),
12258 			       initialized == SD_DELETED, sfk,
12259 			       funcdef_flag, template_count, in_namespace,
12260 			       attrlist, declarator->id_loc);
12261             decl = set_virt_specifiers (decl, virt_specifiers);
12262 	    if (decl == NULL_TREE)
12263 	      return error_mark_node;
12264 #if 0
12265 	    /* This clobbers the attrs stored in `decl' from `attrlist'.  */
12266 	    /* The decl and setting of decl_attr is also turned off.  */
12267 	    decl = build_decl_attribute_variant (decl, decl_attr);
12268 #endif
12269 
12270 	    /* [class.conv.ctor]
12271 
12272 	       A constructor declared without the function-specifier
12273 	       explicit that can be called with a single parameter
12274 	       specifies a conversion from the type of its first
12275 	       parameter to the type of its class.  Such a constructor
12276 	       is called a converting constructor.  */
12277 	    if (explicitp == 2)
12278 	      DECL_NONCONVERTING_P (decl) = 1;
12279 	  }
12280 	else if (!staticp && !dependent_type_p (type)
12281 		 && !COMPLETE_TYPE_P (complete_type (type))
12282 		 && (!complete_or_array_type_p (type)
12283 		     || initialized == 0))
12284 	  {
12285 	    if (TREE_CODE (type) != ARRAY_TYPE
12286 		|| !COMPLETE_TYPE_P (TREE_TYPE (type)))
12287 	      {
12288 		if (unqualified_id)
12289 		  {
12290 		    error ("field %qD has incomplete type %qT",
12291 			   unqualified_id, type);
12292 		    cxx_incomplete_type_inform (strip_array_types (type));
12293 		  }
12294 		else
12295 		  error ("name %qT has incomplete type", type);
12296 
12297 		type = error_mark_node;
12298 		decl = NULL_TREE;
12299 	      }
12300 	  }
12301 	else
12302 	  {
12303 	    if (friendp)
12304 	      {
12305 		error ("%qE is neither function nor member function; "
12306 		       "cannot be declared friend", unqualified_id);
12307 		return error_mark_node;
12308 	      }
12309 	    decl = NULL_TREE;
12310 	  }
12311 
12312 	if (friendp)
12313 	  {
12314 	    /* Friends are treated specially.  */
12315 	    if (ctype == current_class_type)
12316 	      ;  /* We already issued a permerror.  */
12317 	    else if (decl && DECL_NAME (decl))
12318 	      {
12319 		if (template_class_depth (current_class_type) == 0)
12320 		  {
12321 		    decl = check_explicit_specialization
12322 		      (unqualified_id, decl, template_count,
12323 		       2 * funcdef_flag + 4);
12324 		    if (decl == error_mark_node)
12325 		      return error_mark_node;
12326 		  }
12327 
12328 		decl = do_friend (ctype, unqualified_id, decl,
12329 				  *attrlist, flags,
12330 				  funcdef_flag);
12331 		return decl;
12332 	      }
12333 	    else
12334 	      return error_mark_node;
12335 	  }
12336 
12337 	/* Structure field.  It may not be a function, except for C++.  */
12338 
12339 	if (decl == NULL_TREE)
12340 	  {
12341 	    if (staticp)
12342 	      {
12343 		/* C++ allows static class members.  All other work
12344 		   for this is done by grokfield.  */
12345 		decl = build_lang_decl_loc (declarator
12346 					    ? declarator->id_loc
12347 					    : input_location,
12348 					    VAR_DECL, unqualified_id, type);
12349 		set_linkage_for_static_data_member (decl);
12350 		if (concept_p)
12351 		    error ("static data member %qE declared %<concept%>",
12352 			   unqualified_id);
12353 		else if (constexpr_p && !initialized)
12354 		  {
12355 		    error ("%<constexpr%> static data member %qD must have an "
12356 			   "initializer", decl);
12357 		    constexpr_p = false;
12358 		  }
12359 
12360 		if (inlinep)
12361 		  mark_inline_variable (decl);
12362 
12363 		if (!DECL_VAR_DECLARED_INLINE_P (decl)
12364 		    && !(cxx_dialect >= cxx17 && constexpr_p))
12365 		  /* Even if there is an in-class initialization, DECL
12366 		     is considered undefined until an out-of-class
12367 		     definition is provided, unless this is an inline
12368 		     variable.  */
12369 		  DECL_EXTERNAL (decl) = 1;
12370 
12371 		if (thread_p)
12372 		  {
12373 		    CP_DECL_THREAD_LOCAL_P (decl) = true;
12374 		    if (!processing_template_decl)
12375 		      set_decl_tls_model (decl, decl_default_tls_model (decl));
12376 		    if (declspecs->gnu_thread_keyword_p)
12377 		      SET_DECL_GNU_TLS_P (decl);
12378 		  }
12379 	      }
12380 	    else
12381 	      {
12382 		if (concept_p)
12383 		  error ("non-static data member %qE declared %<concept%>",
12384 			 unqualified_id);
12385                 else if (constexpr_p)
12386 		  {
12387 		    error ("non-static data member %qE declared %<constexpr%>",
12388 			   unqualified_id);
12389 		    constexpr_p = false;
12390 		  }
12391 		decl = build_decl (input_location,
12392 				   FIELD_DECL, unqualified_id, type);
12393 		DECL_NONADDRESSABLE_P (decl) = bitfield;
12394 		if (bitfield && !unqualified_id)
12395 		  {
12396 		    TREE_NO_WARNING (decl) = 1;
12397 		    DECL_PADDING_P (decl) = 1;
12398 		  }
12399 
12400 		if (storage_class == sc_mutable)
12401 		  {
12402 		    DECL_MUTABLE_P (decl) = 1;
12403 		    storage_class = sc_none;
12404 		  }
12405 
12406 		if (initialized)
12407 		  {
12408 		    /* An attempt is being made to initialize a non-static
12409 		       member.  This is new in C++11.  */
12410 		    maybe_warn_cpp0x (CPP0X_NSDMI);
12411 
12412 		    /* If this has been parsed with static storage class, but
12413 		       errors forced staticp to be cleared, ensure NSDMI is
12414 		       not present.  */
12415 		    if (declspecs->storage_class == sc_static)
12416 		      DECL_INITIAL (decl) = error_mark_node;
12417 		  }
12418 	      }
12419 
12420 	    bad_specifiers (decl, BSP_FIELD, virtualp,
12421 			    memfn_quals != TYPE_UNQUALIFIED,
12422 			    staticp ? false : inlinep, friendp,
12423 			    raises != NULL_TREE);
12424 	  }
12425       }
12426     else if (TREE_CODE (type) == FUNCTION_TYPE
12427 	     || TREE_CODE (type) == METHOD_TYPE)
12428       {
12429 	tree original_name;
12430 	int publicp = 0;
12431 
12432 	if (!unqualified_id)
12433 	  return error_mark_node;
12434 
12435 	if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12436 	  original_name = dname;
12437 	else
12438 	  original_name = unqualified_id;
12439 	// FIXME:gcc_assert (original_name == dname);
12440 
12441 	if (storage_class == sc_auto)
12442 	  error ("storage class %<auto%> invalid for function %qs", name);
12443 	else if (storage_class == sc_register)
12444 	  error ("storage class %<register%> invalid for function %qs", name);
12445 	else if (thread_p)
12446 	  {
12447 	    if (declspecs->gnu_thread_keyword_p)
12448 	      error ("storage class %<__thread%> invalid for function %qs",
12449 		     name);
12450 	    else
12451 	      error ("storage class %<thread_local%> invalid for function %qs",
12452 		     name);
12453 	  }
12454 
12455         if (virt_specifiers)
12456           error ("virt-specifiers in %qs not allowed outside a class definition", name);
12457 	/* Function declaration not at top level.
12458 	   Storage classes other than `extern' are not allowed
12459 	   and `extern' makes no difference.  */
12460 	if (! toplevel_bindings_p ()
12461 	    && (storage_class == sc_static
12462 		|| decl_spec_seq_has_spec_p (declspecs, ds_inline))
12463 	    && pedantic)
12464 	  {
12465 	    if (storage_class == sc_static)
12466 	      pedwarn (input_location, OPT_Wpedantic,
12467 		       "%<static%> specifier invalid for function %qs "
12468 		       "declared out of global scope", name);
12469 	    else
12470 	      pedwarn (input_location, OPT_Wpedantic,
12471 		       "%<inline%> specifier invalid for function %qs "
12472 		       "declared out of global scope", name);
12473 	  }
12474 
12475 	if (ctype == NULL_TREE)
12476 	  {
12477 	    if (virtualp)
12478 	      {
12479 		error ("virtual non-class function %qs", name);
12480 		virtualp = 0;
12481 	      }
12482 	    else if (sfk == sfk_constructor
12483 		     || sfk == sfk_destructor)
12484 	      {
12485 		error (funcdef_flag
12486 		       ? G_("%qs defined in a non-class scope")
12487 		       : G_("%qs declared in a non-class scope"), name);
12488 		sfk = sfk_none;
12489 	      }
12490 	  }
12491 
12492 	/* Record whether the function is public.  */
12493 	publicp = (ctype != NULL_TREE
12494 		   || storage_class != sc_static);
12495 
12496 	if (late_return_type_p)
12497 	  TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
12498 
12499 	decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
12500                            reqs, virtualp, flags, memfn_quals, rqual, raises,
12501 			   1, friendp,
12502 			   publicp,
12503                            inlinep | (2 * constexpr_p) | (4 * concept_p),
12504 			   initialized == SD_DELETED,
12505                            sfk,
12506                            funcdef_flag,
12507 			   template_count, in_namespace, attrlist,
12508 			   declarator->id_loc);
12509 	if (decl == NULL_TREE)
12510 	  return error_mark_node;
12511 
12512 	if (explicitp == 2)
12513 	  DECL_NONCONVERTING_P (decl) = 1;
12514 	if (staticp == 1)
12515 	  {
12516 	    int invalid_static = 0;
12517 
12518 	    /* Don't allow a static member function in a class, and forbid
12519 	       declaring main to be static.  */
12520 	    if (TREE_CODE (type) == METHOD_TYPE)
12521 	      {
12522 		permerror (input_location, "cannot declare member function %qD to have "
12523 			   "static linkage", decl);
12524 		invalid_static = 1;
12525 	      }
12526 	    else if (current_function_decl)
12527 	      {
12528 		/* 7.1.1: There can be no static function declarations within a
12529 		   block.  */
12530 		error ("cannot declare static function inside another function");
12531 		invalid_static = 1;
12532 	      }
12533 
12534 	    if (invalid_static)
12535 	      {
12536 		staticp = 0;
12537 		storage_class = sc_none;
12538 	      }
12539 	  }
12540       }
12541     else
12542       {
12543 	/* It's a variable.  */
12544 
12545 	/* An uninitialized decl with `extern' is a reference.  */
12546 	decl = grokvardecl (type, dname, unqualified_id,
12547 			    declspecs,
12548 			    initialized,
12549 			    type_quals,
12550 			    inlinep,
12551 			    concept_p,
12552 			    template_count,
12553 			    ctype ? ctype : in_namespace);
12554 	if (decl == NULL_TREE)
12555 	  return error_mark_node;
12556 
12557 	bad_specifiers (decl, BSP_VAR, virtualp,
12558 			memfn_quals != TYPE_UNQUALIFIED,
12559 			inlinep, friendp, raises != NULL_TREE);
12560 
12561 	if (ctype)
12562 	  {
12563 	    DECL_CONTEXT (decl) = ctype;
12564 	    if (staticp == 1)
12565 	      {
12566 		permerror (input_location, "%<static%> may not be used when defining "
12567 			   "(as opposed to declaring) a static data member");
12568 		staticp = 0;
12569 		storage_class = sc_none;
12570 	      }
12571 	    if (storage_class == sc_register && TREE_STATIC (decl))
12572 	      {
12573 		error ("static member %qD declared %<register%>", decl);
12574 		storage_class = sc_none;
12575 	      }
12576 	    if (storage_class == sc_extern && pedantic)
12577 	      {
12578 		pedwarn (input_location, OPT_Wpedantic,
12579 			 "cannot explicitly declare member %q#D to have "
12580 			 "extern linkage", decl);
12581 		storage_class = sc_none;
12582 	      }
12583 	  }
12584 	else if (constexpr_p && DECL_EXTERNAL (decl))
12585 	  {
12586 	    error ("declaration of %<constexpr%> variable %qD "
12587 		   "is not a definition", decl);
12588 	    constexpr_p = false;
12589 	  }
12590 
12591 	if (inlinep)
12592 	  mark_inline_variable (decl);
12593 	if (innermost_code == cdk_decomp)
12594 	  {
12595 	    gcc_assert (declarator && declarator->kind == cdk_decomp);
12596 	    DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
12597 	    DECL_ARTIFICIAL (decl) = 1;
12598 	    fit_decomposition_lang_decl (decl, NULL_TREE);
12599 	  }
12600       }
12601 
12602     if (VAR_P (decl) && !initialized)
12603       if (tree auto_node = type_uses_auto (type))
12604 	if (!CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12605 	  {
12606 	    location_t loc = declspecs->locations[ds_type_spec];
12607 	    error_at (loc, "declaration of %q#D has no initializer", decl);
12608 	    TREE_TYPE (decl) = error_mark_node;
12609 	  }
12610 
12611     if (storage_class == sc_extern && initialized && !funcdef_flag)
12612       {
12613 	if (toplevel_bindings_p ())
12614 	  {
12615 	    /* It's common practice (and completely valid) to have a const
12616 	       be initialized and declared extern.  */
12617 	    if (!(type_quals & TYPE_QUAL_CONST))
12618 	      warning (0, "%qs initialized and declared %<extern%>", name);
12619 	  }
12620 	else
12621 	  {
12622 	    error ("%qs has both %<extern%> and initializer", name);
12623 	    return error_mark_node;
12624 	  }
12625       }
12626 
12627     /* Record `register' declaration for warnings on &
12628        and in case doing stupid register allocation.  */
12629 
12630     if (storage_class == sc_register)
12631       {
12632 	DECL_REGISTER (decl) = 1;
12633 	/* Warn about register storage specifiers on PARM_DECLs.  */
12634 	if (TREE_CODE (decl) == PARM_DECL)
12635 	  {
12636 	    if (cxx_dialect >= cxx17)
12637 	      pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12638 		       "ISO C++17 does not allow %<register%> storage "
12639 		       "class specifier");
12640 	    else
12641 	      warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12642 			  "%<register%> storage class specifier used");
12643 	  }
12644       }
12645     else if (storage_class == sc_extern)
12646       DECL_THIS_EXTERN (decl) = 1;
12647     else if (storage_class == sc_static)
12648       DECL_THIS_STATIC (decl) = 1;
12649 
12650     /* Set constexpr flag on vars (functions got it in grokfndecl).  */
12651     if (constexpr_p && VAR_P (decl))
12652       DECL_DECLARED_CONSTEXPR_P (decl) = true;
12653 
12654     /* Record constancy and volatility on the DECL itself .  There's
12655        no need to do this when processing a template; we'll do this
12656        for the instantiated declaration based on the type of DECL.  */
12657     if (!processing_template_decl)
12658       cp_apply_type_quals_to_decl (type_quals, decl);
12659 
12660     return decl;
12661   }
12662 }
12663 
12664 /* Subroutine of start_function.  Ensure that each of the parameter
12665    types (as listed in PARMS) is complete, as is required for a
12666    function definition.  */
12667 
12668 static void
12669 require_complete_types_for_parms (tree parms)
12670 {
12671   for (; parms; parms = DECL_CHAIN (parms))
12672     {
12673       if (dependent_type_p (TREE_TYPE (parms)))
12674 	continue;
12675       if (!VOID_TYPE_P (TREE_TYPE (parms))
12676 	  && complete_type_or_else (TREE_TYPE (parms), parms))
12677 	{
12678 	  relayout_decl (parms);
12679 	  DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
12680 
12681 	  maybe_warn_parm_abi (TREE_TYPE (parms),
12682 			       DECL_SOURCE_LOCATION (parms));
12683 	}
12684       else
12685 	/* grokparms or complete_type_or_else will have already issued
12686 	   an error.  */
12687 	TREE_TYPE (parms) = error_mark_node;
12688     }
12689 }
12690 
12691 /* Returns nonzero if T is a local variable.  */
12692 
12693 int
12694 local_variable_p (const_tree t)
12695 {
12696   if ((VAR_P (t)
12697        /* A VAR_DECL with a context that is a _TYPE is a static data
12698 	  member.  */
12699        && !TYPE_P (CP_DECL_CONTEXT (t))
12700        /* Any other non-local variable must be at namespace scope.  */
12701        && !DECL_NAMESPACE_SCOPE_P (t))
12702       || (TREE_CODE (t) == PARM_DECL))
12703     return 1;
12704 
12705   return 0;
12706 }
12707 
12708 /* Like local_variable_p, but suitable for use as a tree-walking
12709    function.  */
12710 
12711 static tree
12712 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
12713 			 void * /*data*/)
12714 {
12715   if (local_variable_p (*tp)
12716       && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
12717     return *tp;
12718   else if (TYPE_P (*tp))
12719     *walk_subtrees = 0;
12720 
12721   return NULL_TREE;
12722 }
12723 
12724 /* Check that ARG, which is a default-argument expression for a
12725    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
12726    something goes wrong.  DECL may also be a _TYPE node, rather than a
12727    DECL, if there is no DECL available.  */
12728 
12729 tree
12730 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
12731 {
12732   tree var;
12733   tree decl_type;
12734 
12735   if (TREE_CODE (arg) == DEFAULT_ARG)
12736     /* We get a DEFAULT_ARG when looking at an in-class declaration
12737        with a default argument.  Ignore the argument for now; we'll
12738        deal with it after the class is complete.  */
12739     return arg;
12740 
12741   if (TYPE_P (decl))
12742     {
12743       decl_type = decl;
12744       decl = NULL_TREE;
12745     }
12746   else
12747     decl_type = TREE_TYPE (decl);
12748 
12749   if (arg == error_mark_node
12750       || decl == error_mark_node
12751       || TREE_TYPE (arg) == error_mark_node
12752       || decl_type == error_mark_node)
12753     /* Something already went wrong.  There's no need to check
12754        further.  */
12755     return error_mark_node;
12756 
12757   /* [dcl.fct.default]
12758 
12759      A default argument expression is implicitly converted to the
12760      parameter type.  */
12761   ++cp_unevaluated_operand;
12762   /* Avoid digest_init clobbering the initializer.  */
12763   tree carg = BRACE_ENCLOSED_INITIALIZER_P (arg) ? unshare_expr (arg): arg;
12764   perform_implicit_conversion_flags (decl_type, carg, complain,
12765 				     LOOKUP_IMPLICIT);
12766   --cp_unevaluated_operand;
12767 
12768   /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
12769      the call sites.  */
12770   if (TYPE_PTR_OR_PTRMEM_P (decl_type)
12771       && null_ptr_cst_p (arg))
12772     return nullptr_node;
12773 
12774   /* [dcl.fct.default]
12775 
12776      Local variables shall not be used in default argument
12777      expressions.
12778 
12779      The keyword `this' shall not be used in a default argument of a
12780      member function.  */
12781   var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
12782   if (var)
12783     {
12784       if (complain & tf_warning_or_error)
12785 	{
12786 	  if (DECL_NAME (var) == this_identifier)
12787 	    permerror (input_location, "default argument %qE uses %qD",
12788 		       arg, var);
12789 	  else
12790 	    error ("default argument %qE uses local variable %qD", arg, var);
12791 	}
12792       return error_mark_node;
12793     }
12794 
12795   /* All is well.  */
12796   return arg;
12797 }
12798 
12799 /* Returns a deprecated type used within TYPE, or NULL_TREE if none.  */
12800 
12801 static tree
12802 type_is_deprecated (tree type)
12803 {
12804   enum tree_code code;
12805   if (TREE_DEPRECATED (type))
12806     return type;
12807   if (TYPE_NAME (type))
12808     {
12809       if (TREE_DEPRECATED (TYPE_NAME (type)))
12810 	return type;
12811       else
12812 	return NULL_TREE;
12813     }
12814 
12815   /* Do warn about using typedefs to a deprecated class.  */
12816   if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
12817     return type_is_deprecated (TYPE_MAIN_VARIANT (type));
12818 
12819   code = TREE_CODE (type);
12820 
12821   if (code == POINTER_TYPE || code == REFERENCE_TYPE
12822       || code == OFFSET_TYPE || code == FUNCTION_TYPE
12823       || code == METHOD_TYPE || code == ARRAY_TYPE)
12824     return type_is_deprecated (TREE_TYPE (type));
12825 
12826   if (TYPE_PTRMEMFUNC_P (type))
12827     return type_is_deprecated
12828       (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
12829 
12830   return NULL_TREE;
12831 }
12832 
12833 /* Decode the list of parameter types for a function type.
12834    Given the list of things declared inside the parens,
12835    return a list of types.
12836 
12837    If this parameter does not end with an ellipsis, we append
12838    void_list_node.
12839 
12840    *PARMS is set to the chain of PARM_DECLs created.  */
12841 
12842 tree
12843 grokparms (tree parmlist, tree *parms)
12844 {
12845   tree result = NULL_TREE;
12846   tree decls = NULL_TREE;
12847   tree parm;
12848   int any_error = 0;
12849 
12850   for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
12851     {
12852       tree type = NULL_TREE;
12853       tree init = TREE_PURPOSE (parm);
12854       tree decl = TREE_VALUE (parm);
12855 
12856       if (parm == void_list_node)
12857 	break;
12858 
12859       if (! decl || TREE_TYPE (decl) == error_mark_node)
12860 	continue;
12861 
12862       type = TREE_TYPE (decl);
12863       if (VOID_TYPE_P (type))
12864 	{
12865 	  if (same_type_p (type, void_type_node)
12866 	      && !init
12867 	      && !DECL_NAME (decl) && !result
12868 	      && TREE_CHAIN (parm) == void_list_node)
12869 	    /* DR 577: A parameter list consisting of a single
12870 	       unnamed parameter of non-dependent type 'void'.  */
12871 	    break;
12872 	  else if (cv_qualified_p (type))
12873 	    error_at (DECL_SOURCE_LOCATION (decl),
12874 		      "invalid use of cv-qualified type %qT in "
12875 		      "parameter declaration", type);
12876 	  else
12877 	    error_at (DECL_SOURCE_LOCATION (decl),
12878 		      "invalid use of type %<void%> in parameter "
12879 		      "declaration");
12880 	  /* It's not a good idea to actually create parameters of
12881 	     type `void'; other parts of the compiler assume that a
12882 	     void type terminates the parameter list.  */
12883 	  type = error_mark_node;
12884 	  TREE_TYPE (decl) = error_mark_node;
12885 	}
12886 
12887       if (type != error_mark_node)
12888 	{
12889 	  if (deprecated_state != DEPRECATED_SUPPRESS)
12890 	    {
12891 	      tree deptype = type_is_deprecated (type);
12892 	      if (deptype)
12893 		cp_warn_deprecated_use (deptype);
12894 	    }
12895 
12896 	  /* Top-level qualifiers on the parameters are
12897 	     ignored for function types.  */
12898 	  type = cp_build_qualified_type (type, 0);
12899 	  if (TREE_CODE (type) == METHOD_TYPE)
12900 	    {
12901 	      error ("parameter %qD invalidly declared method type", decl);
12902 	      type = build_pointer_type (type);
12903 	      TREE_TYPE (decl) = type;
12904 	    }
12905 	  else if (abstract_virtuals_error (decl, type))
12906 	    any_error = 1;  /* Seems like a good idea.  */
12907 	  else if (cxx_dialect < cxx17 && POINTER_TYPE_P (type))
12908 	    {
12909 	      /* Before C++17 DR 393:
12910 		 [dcl.fct]/6, parameter types cannot contain pointers
12911 		 (references) to arrays of unknown bound.  */
12912 	      tree t = TREE_TYPE (type);
12913 	      int ptr = TYPE_PTR_P (type);
12914 
12915 	      while (1)
12916 		{
12917 		  if (TYPE_PTR_P (t))
12918 		    ptr = 1;
12919 		  else if (TREE_CODE (t) != ARRAY_TYPE)
12920 		    break;
12921 		  else if (!TYPE_DOMAIN (t))
12922 		    break;
12923 		  t = TREE_TYPE (t);
12924 		}
12925 	      if (TREE_CODE (t) == ARRAY_TYPE)
12926 		pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
12927 			 ptr
12928 			 ? G_("parameter %qD includes pointer to array of "
12929 			      "unknown bound %qT")
12930 			 : G_("parameter %qD includes reference to array of "
12931 			      "unknown bound %qT"),
12932 			 decl, t);
12933 	    }
12934 
12935 	  if (any_error)
12936 	    init = NULL_TREE;
12937 	  else if (init && !processing_template_decl)
12938 	    init = check_default_argument (decl, init, tf_warning_or_error);
12939 	}
12940 
12941       DECL_CHAIN (decl) = decls;
12942       decls = decl;
12943       result = tree_cons (init, type, result);
12944     }
12945   decls = nreverse (decls);
12946   result = nreverse (result);
12947   if (parm)
12948     result = chainon (result, void_list_node);
12949   *parms = decls;
12950 
12951   return result;
12952 }
12953 
12954 
12955 /* D is a constructor or overloaded `operator='.
12956 
12957    Let T be the class in which D is declared. Then, this function
12958    returns:
12959 
12960    -1 if D's is an ill-formed constructor or copy assignment operator
12961       whose first parameter is of type `T'.
12962    0  if D is not a copy constructor or copy assignment
12963       operator.
12964    1  if D is a copy constructor or copy assignment operator whose
12965       first parameter is a reference to non-const qualified T.
12966    2  if D is a copy constructor or copy assignment operator whose
12967       first parameter is a reference to const qualified T.
12968 
12969    This function can be used as a predicate. Positive values indicate
12970    a copy constructor and nonzero values indicate a copy assignment
12971    operator.  */
12972 
12973 int
12974 copy_fn_p (const_tree d)
12975 {
12976   tree args;
12977   tree arg_type;
12978   int result = 1;
12979 
12980   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
12981 
12982   if (TREE_CODE (d) == TEMPLATE_DECL
12983       || (DECL_TEMPLATE_INFO (d)
12984 	  && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
12985     /* Instantiations of template member functions are never copy
12986        functions.  Note that member functions of templated classes are
12987        represented as template functions internally, and we must
12988        accept those as copy functions.  */
12989     return 0;
12990 
12991   args = FUNCTION_FIRST_USER_PARMTYPE (d);
12992   if (!args)
12993     return 0;
12994 
12995   arg_type = TREE_VALUE (args);
12996   if (arg_type == error_mark_node)
12997     return 0;
12998 
12999   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
13000     {
13001       /* Pass by value copy assignment operator.  */
13002       result = -1;
13003     }
13004   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
13005 	   && !TYPE_REF_IS_RVALUE (arg_type)
13006 	   && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
13007     {
13008       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
13009 	result = 2;
13010     }
13011   else
13012     return 0;
13013 
13014   args = TREE_CHAIN (args);
13015 
13016   if (args && args != void_list_node && !TREE_PURPOSE (args))
13017     /* There are more non-optional args.  */
13018     return 0;
13019 
13020   return result;
13021 }
13022 
13023 /* D is a constructor or overloaded `operator='.
13024 
13025    Let T be the class in which D is declared. Then, this function
13026    returns true when D is a move constructor or move assignment
13027    operator, false otherwise.  */
13028 
13029 bool
13030 move_fn_p (const_tree d)
13031 {
13032   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
13033 
13034   if (cxx_dialect == cxx98)
13035     /* There are no move constructors if we are in C++98 mode.  */
13036     return false;
13037 
13038   if (TREE_CODE (d) == TEMPLATE_DECL
13039       || (DECL_TEMPLATE_INFO (d)
13040          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
13041     /* Instantiations of template member functions are never move
13042        functions.  Note that member functions of templated classes are
13043        represented as template functions internally, and we must
13044        accept those as move functions.  */
13045     return 0;
13046 
13047   return move_signature_fn_p (d);
13048 }
13049 
13050 /* D is a constructor or overloaded `operator='.
13051 
13052    Then, this function returns true when D has the same signature as a move
13053    constructor or move assignment operator (because either it is such a
13054    ctor/op= or it is a template specialization with the same signature),
13055    false otherwise.  */
13056 
13057 bool
13058 move_signature_fn_p (const_tree d)
13059 {
13060   tree args;
13061   tree arg_type;
13062   bool result = false;
13063 
13064   args = FUNCTION_FIRST_USER_PARMTYPE (d);
13065   if (!args)
13066     return 0;
13067 
13068   arg_type = TREE_VALUE (args);
13069   if (arg_type == error_mark_node)
13070     return 0;
13071 
13072   if (TREE_CODE (arg_type) == REFERENCE_TYPE
13073       && TYPE_REF_IS_RVALUE (arg_type)
13074       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
13075                       DECL_CONTEXT (d)))
13076     result = true;
13077 
13078   args = TREE_CHAIN (args);
13079 
13080   if (args && args != void_list_node && !TREE_PURPOSE (args))
13081     /* There are more non-optional args.  */
13082     return false;
13083 
13084   return result;
13085 }
13086 
13087 /* Remember any special properties of member function DECL.  */
13088 
13089 void
13090 grok_special_member_properties (tree decl)
13091 {
13092   tree class_type;
13093 
13094   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
13095     return;
13096 
13097   class_type = DECL_CONTEXT (decl);
13098   if (IDENTIFIER_CTOR_P (DECL_NAME (decl)))
13099     {
13100       int ctor = copy_fn_p (decl);
13101 
13102       if (!DECL_ARTIFICIAL (decl))
13103 	TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
13104 
13105       if (ctor > 0)
13106 	{
13107 	  /* [class.copy]
13108 
13109 	     A non-template constructor for class X is a copy
13110 	     constructor if its first parameter is of type X&, const
13111 	     X&, volatile X& or const volatile X&, and either there
13112 	     are no other parameters or else all other parameters have
13113 	     default arguments.  */
13114 	  TYPE_HAS_COPY_CTOR (class_type) = 1;
13115 	  if (user_provided_p (decl))
13116 	    TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
13117 	  if (ctor > 1)
13118 	    TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
13119 	}
13120       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
13121 	TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
13122       else if (move_fn_p (decl) && user_provided_p (decl))
13123 	TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
13124       else if (is_list_ctor (decl))
13125 	TYPE_HAS_LIST_CTOR (class_type) = 1;
13126 
13127       if (DECL_DECLARED_CONSTEXPR_P (decl)
13128 	  && !ctor && !move_fn_p (decl))
13129 	TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
13130     }
13131   else if (DECL_NAME (decl) == assign_op_identifier)
13132     {
13133       /* [class.copy]
13134 
13135 	 A non-template assignment operator for class X is a copy
13136 	 assignment operator if its parameter is of type X, X&, const
13137 	 X&, volatile X& or const volatile X&.  */
13138 
13139       int assop = copy_fn_p (decl);
13140 
13141       if (assop)
13142 	{
13143 	  TYPE_HAS_COPY_ASSIGN (class_type) = 1;
13144 	  if (user_provided_p (decl))
13145 	    TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
13146 	  if (assop != 1)
13147 	    TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
13148 	}
13149       else if (move_fn_p (decl) && user_provided_p (decl))
13150 	TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
13151     }
13152   else if (IDENTIFIER_CONV_OP_P (DECL_NAME (decl)))
13153     TYPE_HAS_CONVERSION (class_type) = true;
13154 
13155   /* Destructors are handled in check_methods.  */
13156 }
13157 
13158 /* Check a constructor DECL has the correct form.  Complains
13159    if the class has a constructor of the form X(X).  */
13160 
13161 bool
13162 grok_ctor_properties (const_tree ctype, const_tree decl)
13163 {
13164   int ctor_parm = copy_fn_p (decl);
13165 
13166   if (ctor_parm < 0)
13167     {
13168       /* [class.copy]
13169 
13170 	 A declaration of a constructor for a class X is ill-formed if
13171 	 its first parameter is of type (optionally cv-qualified) X
13172 	 and either there are no other parameters or else all other
13173 	 parameters have default arguments.
13174 
13175 	 We *don't* complain about member template instantiations that
13176 	 have this form, though; they can occur as we try to decide
13177 	 what constructor to use during overload resolution.  Since
13178 	 overload resolution will never prefer such a constructor to
13179 	 the non-template copy constructor (which is either explicitly
13180 	 or implicitly defined), there's no need to worry about their
13181 	 existence.  Theoretically, they should never even be
13182 	 instantiated, but that's hard to forestall.  */
13183       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
13184 		ctype, ctype);
13185       return false;
13186     }
13187 
13188   return true;
13189 }
13190 
13191 /* DECL is a declaration for an overloaded or conversion operator.  If
13192    COMPLAIN is true, errors are issued for invalid declarations.  */
13193 
13194 bool
13195 grok_op_properties (tree decl, bool complain)
13196 {
13197   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
13198   bool methodp = TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE;
13199   tree name = DECL_NAME (decl);
13200 
13201   tree class_type = DECL_CONTEXT (decl);
13202   if (class_type && !CLASS_TYPE_P (class_type))
13203     class_type = NULL_TREE;
13204 
13205   tree_code operator_code;
13206   unsigned op_flags;
13207   if (IDENTIFIER_CONV_OP_P (name))
13208     {
13209       /* Conversion operators are TYPE_EXPR for the purposes of this
13210 	 function.  */
13211       operator_code = TYPE_EXPR;
13212       op_flags = OVL_OP_FLAG_UNARY;
13213     }
13214   else
13215     {
13216       const ovl_op_info_t *ovl_op = IDENTIFIER_OVL_OP_INFO (name);
13217 
13218       operator_code = ovl_op->tree_code;
13219       op_flags = ovl_op->flags;
13220       gcc_checking_assert (operator_code != ERROR_MARK);
13221       DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13222     }
13223 
13224   if (op_flags & OVL_OP_FLAG_ALLOC)
13225     {
13226       /* operator new and operator delete are quite special.  */
13227       if (class_type)
13228 	switch (op_flags)
13229 	  {
13230 	  case OVL_OP_FLAG_ALLOC:
13231 	    TYPE_HAS_NEW_OPERATOR (class_type) = 1;
13232 	    break;
13233 
13234 	  case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE:
13235 	    TYPE_GETS_DELETE (class_type) |= 1;
13236 	    break;
13237 
13238 	  case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_VEC:
13239 	    TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
13240 	    break;
13241 
13242 	  case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE | OVL_OP_FLAG_VEC:
13243 	    TYPE_GETS_DELETE (class_type) |= 2;
13244 	    break;
13245 
13246 	  default:
13247 	    gcc_unreachable ();
13248 	  }
13249 
13250       /* [basic.std.dynamic.allocation]/1:
13251 
13252 	 A program is ill-formed if an allocation function is declared
13253 	 in a namespace scope other than global scope or declared
13254 	 static in global scope.
13255 
13256 	 The same also holds true for deallocation functions.  */
13257       if (DECL_NAMESPACE_SCOPE_P (decl))
13258 	{
13259 	  if (CP_DECL_CONTEXT (decl) != global_namespace)
13260 	    {
13261 	      error ("%qD may not be declared within a namespace", decl);
13262 	      return false;
13263 	    }
13264 
13265 	  if (!TREE_PUBLIC (decl))
13266 	    {
13267 	      error ("%qD may not be declared as static", decl);
13268 	      return false;
13269 	    }
13270 	}
13271 
13272       if (op_flags & OVL_OP_FLAG_DELETE)
13273 	TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
13274       else
13275 	{
13276 	  DECL_IS_OPERATOR_NEW (decl) = 1;
13277 	  TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
13278 	}
13279 
13280       return true;
13281     }
13282 
13283   /* An operator function must either be a non-static member function
13284      or have at least one parameter of a class, a reference to a class,
13285      an enumeration, or a reference to an enumeration.  13.4.0.6 */
13286   if (! methodp || DECL_STATIC_FUNCTION_P (decl))
13287     {
13288       if (operator_code == TYPE_EXPR
13289 	  || operator_code == CALL_EXPR
13290 	  || operator_code == COMPONENT_REF
13291 	  || operator_code == ARRAY_REF
13292 	  || operator_code == NOP_EXPR)
13293 	{
13294 	  error ("%qD must be a nonstatic member function", decl);
13295 	  return false;
13296 	}
13297 
13298       if (DECL_STATIC_FUNCTION_P (decl))
13299 	{
13300 	  error ("%qD must be either a non-static member "
13301 		 "function or a non-member function", decl);
13302 	  return false;
13303 	}
13304 
13305       for (tree arg = argtypes; ; arg = TREE_CHAIN (arg))
13306 	{
13307 	  if (!arg || arg == void_list_node)
13308 	    {
13309 	      if (complain)
13310 		error ("%qD must have an argument of class or "
13311 		       "enumerated type", decl);
13312 	      return false;
13313 	    }
13314 
13315 	  tree type = non_reference (TREE_VALUE (arg));
13316 	  if (type == error_mark_node)
13317 	    return false;
13318 
13319 	  /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
13320 	     because these checks are performed even on template
13321 	     functions.  */
13322 	  if (MAYBE_CLASS_TYPE_P (type)
13323 	      || TREE_CODE (type) == ENUMERAL_TYPE)
13324 	    break;
13325 	}
13326     }
13327 
13328   if (operator_code == CALL_EXPR)
13329     /* There are no further restrictions on the arguments to an overloaded
13330        "operator ()".  */
13331     return true;
13332 
13333   if (operator_code == COND_EXPR)
13334     {
13335       /* 13.4.0.3 */
13336       error ("ISO C++ prohibits overloading operator ?:");
13337       return false;
13338     }
13339 
13340   /* Count the number of arguments and check for ellipsis.  */
13341   int arity = 0;
13342   for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13343     {
13344       if (!arg)
13345 	{
13346 	  /* Variadic.  */
13347 	  error ("%qD must not have variable number of arguments", decl);
13348 	  return false;
13349 	}
13350       ++arity;
13351     }
13352 
13353   /* Verify correct number of arguments.  */
13354   switch (op_flags)
13355     {
13356     case OVL_OP_FLAG_AMBIARY:
13357       if (arity == 1)
13358 	{
13359 	  /* We have a unary instance of an ambi-ary op.  Remap to the
13360 	     unary one.  */
13361 	  unsigned alt = ovl_op_alternate[ovl_op_mapping [operator_code]];
13362 	  const ovl_op_info_t *ovl_op = &ovl_op_info[false][alt];
13363 	  gcc_checking_assert (ovl_op->flags == OVL_OP_FLAG_UNARY);
13364 	  operator_code = ovl_op->tree_code;
13365 	  DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13366 	}
13367       else if (arity != 2)
13368 	{
13369 	  /* This was an ambiguous operator but is invalid. */
13370 	  error (methodp
13371 		 ? G_("%qD must have either zero or one argument")
13372 		 : G_("%qD must have either one or two arguments"), decl);
13373 	  return false;
13374 	}
13375       else if ((operator_code == POSTINCREMENT_EXPR
13376 		|| operator_code == POSTDECREMENT_EXPR)
13377 	       && ! processing_template_decl
13378 	       /* x++ and x--'s second argument must be an int.  */
13379 	       && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)),
13380 				 integer_type_node))
13381 	{
13382 	  error (methodp
13383 		 ? G_("postfix %qD must have %<int%> as its argument")
13384 		 : G_("postfix %qD must have %<int%> as its second argument"),
13385 		 decl);
13386 	  return false;
13387 	}
13388       break;
13389 
13390     case OVL_OP_FLAG_UNARY:
13391       if (arity != 1)
13392 	{
13393 	  error (methodp
13394 		 ? G_("%qD must have no arguments")
13395 		 : G_("%qD must have exactly one argument"), decl);
13396 	  return false;
13397 	}
13398       break;
13399 
13400     case OVL_OP_FLAG_BINARY:
13401       if (arity != 2)
13402 	{
13403 	  error (methodp
13404 		 ? G_("%qD must have exactly one argument")
13405 		 : G_("%qD must have exactly two arguments"), decl);
13406 	  return false;
13407 	}
13408       break;
13409 
13410     default:
13411       gcc_unreachable ();
13412     }
13413 
13414   /* There can be no default arguments.  */
13415   for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13416     if (TREE_PURPOSE (arg))
13417       {
13418 	TREE_PURPOSE (arg) = NULL_TREE;
13419 	if (operator_code == POSTINCREMENT_EXPR
13420 	    || operator_code == POSTDECREMENT_EXPR)
13421 	  pedwarn (input_location, OPT_Wpedantic,
13422 		   "%qD cannot have default arguments", decl);
13423 	else
13424 	  {
13425 	    error ("%qD cannot have default arguments", decl);
13426 	    return false;
13427 	  }
13428       }
13429 
13430   /* At this point the declaration is well-formed.  It may not be
13431      sensible though.  */
13432 
13433   /* Check member function warnings only on the in-class declaration.
13434      There's no point warning on an out-of-class definition.  */
13435   if (class_type && class_type != current_class_type)
13436     return true;
13437 
13438   /* Warn about conversion operators that will never be used.  */
13439   if (IDENTIFIER_CONV_OP_P (name)
13440       && ! DECL_TEMPLATE_INFO (decl)
13441       && warn_conversion)
13442     {
13443       tree t = TREE_TYPE (name);
13444       int ref = (TREE_CODE (t) == REFERENCE_TYPE);
13445 
13446       if (ref)
13447 	t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
13448 
13449       if (VOID_TYPE_P (t))
13450 	warning (OPT_Wconversion,
13451 		 ref
13452 		 ? G_("conversion to a reference to void "
13453 		      "will never use a type conversion operator")
13454 		 : G_("conversion to void "
13455 		      "will never use a type conversion operator"));
13456       else if (class_type)
13457 	{
13458 	  if (t == class_type)
13459 	    warning (OPT_Wconversion,
13460                      ref
13461                      ? G_("conversion to a reference to the same type "
13462                           "will never use a type conversion operator")
13463                      : G_("conversion to the same type "
13464                           "will never use a type conversion operator"));
13465 	  /* Don't force t to be complete here.  */
13466 	  else if (MAYBE_CLASS_TYPE_P (t)
13467 		   && COMPLETE_TYPE_P (t)
13468 		   && DERIVED_FROM_P (t, class_type))
13469 	    warning (OPT_Wconversion,
13470 		     ref
13471 		     ? G_("conversion to a reference to a base class "
13472 			  "will never use a type conversion operator")
13473 		     : G_("conversion to a base class "
13474 			  "will never use a type conversion operator"));
13475 	}
13476     }
13477 
13478   if (!warn_ecpp)
13479     return true;
13480 
13481   /* Effective C++ rules below.  */
13482 
13483   /* More Effective C++ rule 7.  */
13484   if (operator_code == TRUTH_ANDIF_EXPR
13485       || operator_code == TRUTH_ORIF_EXPR
13486       || operator_code == COMPOUND_EXPR)
13487     warning (OPT_Weffc__,
13488 	     "user-defined %qD always evaluates both arguments", decl);
13489 
13490   /* More Effective C++ rule 6.  */
13491   if (operator_code == POSTINCREMENT_EXPR
13492       || operator_code == POSTDECREMENT_EXPR
13493       || operator_code == PREINCREMENT_EXPR
13494       || operator_code == PREDECREMENT_EXPR)
13495     {
13496       tree arg = TREE_VALUE (argtypes);
13497       tree ret = TREE_TYPE (TREE_TYPE (decl));
13498       if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
13499 	arg = TREE_TYPE (arg);
13500       arg = TYPE_MAIN_VARIANT (arg);
13501 
13502       if (operator_code == PREINCREMENT_EXPR
13503 	  || operator_code == PREDECREMENT_EXPR)
13504 	{
13505 	  if (TREE_CODE (ret) != REFERENCE_TYPE
13506 	      || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)), arg))
13507 	    warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
13508 		     build_reference_type (arg));
13509 	}
13510       else
13511 	{
13512 	  if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
13513 	    warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
13514 	}
13515     }
13516 
13517   /* Effective C++ rule 23.  */
13518   if (!DECL_ASSIGNMENT_OPERATOR_P (decl)
13519       && (operator_code == PLUS_EXPR
13520 	  || operator_code == MINUS_EXPR
13521 	  || operator_code == TRUNC_DIV_EXPR
13522 	  || operator_code == MULT_EXPR
13523 	  || operator_code == TRUNC_MOD_EXPR)
13524       && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
13525     warning (OPT_Weffc__, "%qD should return by value", decl);
13526 
13527   return true;
13528 }
13529 
13530 /* Return a string giving the keyword associate with CODE.  */
13531 
13532 static const char *
13533 tag_name (enum tag_types code)
13534 {
13535   switch (code)
13536     {
13537     case record_type:
13538       return "struct";
13539     case class_type:
13540       return "class";
13541     case union_type:
13542       return "union";
13543     case enum_type:
13544       return "enum";
13545     case typename_type:
13546       return "typename";
13547     default:
13548       gcc_unreachable ();
13549     }
13550 }
13551 
13552 /* Name lookup in an elaborated-type-specifier (after the keyword
13553    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
13554    elaborated-type-specifier is invalid, issue a diagnostic and return
13555    error_mark_node; otherwise, return the *_TYPE to which it referred.
13556    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
13557 
13558 tree
13559 check_elaborated_type_specifier (enum tag_types tag_code,
13560 				 tree decl,
13561 				 bool allow_template_p)
13562 {
13563   tree type;
13564 
13565   /* In the case of:
13566 
13567        struct S { struct S *p; };
13568 
13569      name lookup will find the TYPE_DECL for the implicit "S::S"
13570      typedef.  Adjust for that here.  */
13571   if (DECL_SELF_REFERENCE_P (decl))
13572     decl = TYPE_NAME (TREE_TYPE (decl));
13573 
13574   type = TREE_TYPE (decl);
13575 
13576   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
13577      is false for this case as well.  */
13578   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
13579     {
13580       error ("using template type parameter %qT after %qs",
13581 	     type, tag_name (tag_code));
13582       return error_mark_node;
13583     }
13584   /* Accept template template parameters.  */
13585   else if (allow_template_p
13586 	   && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
13587 	       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
13588     ;
13589   /*   [dcl.type.elab]
13590 
13591        If the identifier resolves to a typedef-name or the
13592        simple-template-id resolves to an alias template
13593        specialization, the elaborated-type-specifier is ill-formed.
13594 
13595      In other words, the only legitimate declaration to use in the
13596      elaborated type specifier is the implicit typedef created when
13597      the type is declared.  */
13598   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
13599 	   && !DECL_SELF_REFERENCE_P (decl)
13600 	   && tag_code != typename_type)
13601     {
13602       if (alias_template_specialization_p (type))
13603 	error ("using alias template specialization %qT after %qs",
13604 	       type, tag_name (tag_code));
13605       else
13606 	error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
13607       inform (DECL_SOURCE_LOCATION (decl),
13608 	      "%qD has a previous declaration here", decl);
13609       return error_mark_node;
13610     }
13611   else if (TREE_CODE (type) != RECORD_TYPE
13612 	   && TREE_CODE (type) != UNION_TYPE
13613 	   && tag_code != enum_type
13614 	   && tag_code != typename_type)
13615     {
13616       error ("%qT referred to as %qs", type, tag_name (tag_code));
13617       inform (location_of (type), "%qT has a previous declaration here", type);
13618       return error_mark_node;
13619     }
13620   else if (TREE_CODE (type) != ENUMERAL_TYPE
13621 	   && tag_code == enum_type)
13622     {
13623       error ("%qT referred to as enum", type);
13624       inform (location_of (type), "%qT has a previous declaration here", type);
13625       return error_mark_node;
13626     }
13627   else if (!allow_template_p
13628 	   && TREE_CODE (type) == RECORD_TYPE
13629 	   && CLASSTYPE_IS_TEMPLATE (type))
13630     {
13631       /* If a class template appears as elaborated type specifier
13632 	 without a template header such as:
13633 
13634 	   template <class T> class C {};
13635 	   void f(class C);		// No template header here
13636 
13637 	 then the required template argument is missing.  */
13638       error ("template argument required for %<%s %T%>",
13639 	     tag_name (tag_code),
13640 	     DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
13641       return error_mark_node;
13642     }
13643 
13644   return type;
13645 }
13646 
13647 /* Lookup NAME in elaborate type specifier in scope according to
13648    SCOPE and issue diagnostics if necessary.
13649    Return *_TYPE node upon success, NULL_TREE when the NAME is not
13650    found, and ERROR_MARK_NODE for type error.  */
13651 
13652 static tree
13653 lookup_and_check_tag (enum tag_types tag_code, tree name,
13654 		      tag_scope scope, bool template_header_p)
13655 {
13656   tree t;
13657   tree decl;
13658   if (scope == ts_global)
13659     {
13660       /* First try ordinary name lookup, ignoring hidden class name
13661 	 injected via friend declaration.  */
13662       decl = lookup_name_prefer_type (name, 2);
13663       decl = strip_using_decl (decl);
13664       /* If that fails, the name will be placed in the smallest
13665 	 non-class, non-function-prototype scope according to 3.3.1/5.
13666 	 We may already have a hidden name declared as friend in this
13667 	 scope.  So lookup again but not ignoring hidden names.
13668 	 If we find one, that name will be made visible rather than
13669 	 creating a new tag.  */
13670       if (!decl)
13671 	decl = lookup_type_scope (name, ts_within_enclosing_non_class);
13672     }
13673   else
13674     decl = lookup_type_scope (name, scope);
13675 
13676   if (decl
13677       && (DECL_CLASS_TEMPLATE_P (decl)
13678 	  /* If scope is ts_current we're defining a class, so ignore a
13679 	     template template parameter.  */
13680 	  || (scope != ts_current
13681 	      && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
13682     decl = DECL_TEMPLATE_RESULT (decl);
13683 
13684   if (decl && TREE_CODE (decl) == TYPE_DECL)
13685     {
13686       /* Look for invalid nested type:
13687 	   class C {
13688 	     class C {};
13689 	   };  */
13690       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
13691 	{
13692 	  error ("%qD has the same name as the class in which it is "
13693 		 "declared",
13694 		 decl);
13695 	  return error_mark_node;
13696 	}
13697 
13698       /* Two cases we need to consider when deciding if a class
13699 	 template is allowed as an elaborated type specifier:
13700 	 1. It is a self reference to its own class.
13701 	 2. It comes with a template header.
13702 
13703 	 For example:
13704 
13705 	   template <class T> class C {
13706 	     class C *c1;		// DECL_SELF_REFERENCE_P is true
13707 	     class D;
13708 	   };
13709 	   template <class U> class C; // template_header_p is true
13710 	   template <class T> class C<T>::D {
13711 	     class C *c2;		// DECL_SELF_REFERENCE_P is true
13712 	   };  */
13713 
13714       t = check_elaborated_type_specifier (tag_code,
13715 					   decl,
13716 					   template_header_p
13717 					   | DECL_SELF_REFERENCE_P (decl));
13718       if (template_header_p && t && CLASS_TYPE_P (t)
13719 	  && (!CLASSTYPE_TEMPLATE_INFO (t)
13720 	      || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))))
13721 	{
13722 	  error ("%qT is not a template", t);
13723 	  inform (location_of (t), "previous declaration here");
13724 	  if (TYPE_CLASS_SCOPE_P (t)
13725 	      && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t)))
13726 	    inform (input_location,
13727 		    "perhaps you want to explicitly add %<%T::%>",
13728 		    TYPE_CONTEXT (t));
13729 	  t = error_mark_node;
13730 	}
13731 
13732       return t;
13733     }
13734   else if (decl && TREE_CODE (decl) == TREE_LIST)
13735     {
13736       error ("reference to %qD is ambiguous", name);
13737       print_candidates (decl);
13738       return error_mark_node;
13739     }
13740   else
13741     return NULL_TREE;
13742 }
13743 
13744 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
13745    Define the tag as a forward-reference if it is not defined.
13746 
13747    If a declaration is given, process it here, and report an error if
13748    multiple declarations are not identical.
13749 
13750    SCOPE is TS_CURRENT when this is also a definition.  Only look in
13751    the current frame for the name (since C++ allows new names in any
13752    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
13753    declaration.  Only look beginning from the current scope outward up
13754    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
13755 
13756    TEMPLATE_HEADER_P is true when this declaration is preceded by
13757    a set of template parameters.  */
13758 
13759 static tree
13760 xref_tag_1 (enum tag_types tag_code, tree name,
13761             tag_scope scope, bool template_header_p)
13762 {
13763   enum tree_code code;
13764   tree context = NULL_TREE;
13765 
13766   gcc_assert (identifier_p (name));
13767 
13768   switch (tag_code)
13769     {
13770     case record_type:
13771     case class_type:
13772       code = RECORD_TYPE;
13773       break;
13774     case union_type:
13775       code = UNION_TYPE;
13776       break;
13777     case enum_type:
13778       code = ENUMERAL_TYPE;
13779       break;
13780     default:
13781       gcc_unreachable ();
13782     }
13783 
13784   /* In case of anonymous name, xref_tag is only called to
13785      make type node and push name.  Name lookup is not required.  */
13786   tree t = NULL_TREE;
13787   if (scope != ts_lambda && !anon_aggrname_p (name))
13788     t = lookup_and_check_tag  (tag_code, name, scope, template_header_p);
13789 
13790   if (t == error_mark_node)
13791     return error_mark_node;
13792 
13793   if (scope != ts_current && t && current_class_type
13794       && template_class_depth (current_class_type)
13795       && template_header_p)
13796     {
13797       if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
13798 	return t;
13799 
13800       /* Since SCOPE is not TS_CURRENT, we are not looking at a
13801 	 definition of this tag.  Since, in addition, we are currently
13802 	 processing a (member) template declaration of a template
13803 	 class, we must be very careful; consider:
13804 
13805 	   template <class X> struct S1
13806 
13807 	   template <class U> struct S2
13808 	   {
13809 	     template <class V> friend struct S1;
13810 	   };
13811 
13812 	 Here, the S2::S1 declaration should not be confused with the
13813 	 outer declaration.  In particular, the inner version should
13814 	 have a template parameter of level 2, not level 1.
13815 
13816 	 On the other hand, when presented with:
13817 
13818 	   template <class T> struct S1
13819 	   {
13820 	     template <class U> struct S2 {};
13821 	     template <class U> friend struct S2;
13822 	   };
13823 
13824 	 the friend must find S1::S2 eventually.  We accomplish this
13825 	 by making sure that the new type we create to represent this
13826 	 declaration has the right TYPE_CONTEXT.  */
13827       context = TYPE_CONTEXT (t);
13828       t = NULL_TREE;
13829     }
13830 
13831   if (! t)
13832     {
13833       /* If no such tag is yet defined, create a forward-reference node
13834 	 and record it as the "definition".
13835 	 When a real declaration of this type is found,
13836 	 the forward-reference will be altered into a real type.  */
13837       if (code == ENUMERAL_TYPE)
13838 	{
13839 	  error ("use of enum %q#D without previous declaration", name);
13840 	  return error_mark_node;
13841 	}
13842       else
13843 	{
13844 	  t = make_class_type (code);
13845 	  TYPE_CONTEXT (t) = context;
13846 	  if (scope == ts_lambda)
13847 	    {
13848 	      /* Mark it as a lambda type.  */
13849 	      CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
13850 	      /* And push it into current scope.  */
13851 	      scope = ts_current;
13852 	    }
13853 	  t = pushtag (name, t, scope);
13854 	}
13855     }
13856   else
13857     {
13858       if (template_header_p && MAYBE_CLASS_TYPE_P (t))
13859         {
13860           /* Check that we aren't trying to overload a class with different
13861              constraints.  */
13862           tree constr = NULL_TREE;
13863           if (current_template_parms)
13864             {
13865               tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
13866               constr = build_constraints (reqs, NULL_TREE);
13867             }
13868 	  if (!redeclare_class_template (t, current_template_parms, constr))
13869 	    return error_mark_node;
13870         }
13871       else if (!processing_template_decl
13872 	       && CLASS_TYPE_P (t)
13873 	       && CLASSTYPE_IS_TEMPLATE (t))
13874 	{
13875 	  error ("redeclaration of %qT as a non-template", t);
13876 	  inform (location_of (t), "previous declaration %qD", t);
13877 	  return error_mark_node;
13878 	}
13879 
13880       if (scope != ts_within_enclosing_non_class && TYPE_HIDDEN_P (t))
13881 	{
13882 	  /* This is no longer an invisible friend.  Make it
13883 	     visible.  */
13884 	  tree decl = TYPE_NAME (t);
13885 
13886 	  DECL_ANTICIPATED (decl) = false;
13887 	  DECL_FRIEND_P (decl) = false;
13888 
13889 	  if (TYPE_TEMPLATE_INFO (t))
13890 	    {
13891 	      tree tmpl = TYPE_TI_TEMPLATE (t);
13892 	      DECL_ANTICIPATED (tmpl) = false;
13893 	      DECL_FRIEND_P (tmpl) = false;
13894 	    }
13895 	}
13896     }
13897 
13898   return t;
13899 }
13900 
13901 /* Wrapper for xref_tag_1.  */
13902 
13903 tree
13904 xref_tag (enum tag_types tag_code, tree name,
13905           tag_scope scope, bool template_header_p)
13906 {
13907   tree ret;
13908   bool subtime;
13909   subtime = timevar_cond_start (TV_NAME_LOOKUP);
13910   ret = xref_tag_1 (tag_code, name, scope, template_header_p);
13911   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
13912   return ret;
13913 }
13914 
13915 
13916 tree
13917 xref_tag_from_type (tree old, tree id, tag_scope scope)
13918 {
13919   enum tag_types tag_kind;
13920 
13921   if (TREE_CODE (old) == RECORD_TYPE)
13922     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
13923   else
13924     tag_kind  = union_type;
13925 
13926   if (id == NULL_TREE)
13927     id = TYPE_IDENTIFIER (old);
13928 
13929   return xref_tag (tag_kind, id, scope, false);
13930 }
13931 
13932 /* Create the binfo hierarchy for REF with (possibly NULL) base list
13933    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
13934    access_* node, and the TREE_VALUE is the type of the base-class.
13935    Non-NULL TREE_TYPE indicates virtual inheritance.  */
13936 
13937 void
13938 xref_basetypes (tree ref, tree base_list)
13939 {
13940   tree *basep;
13941   tree binfo, base_binfo;
13942   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
13943   unsigned max_bases = 0;  /* Maximum direct bases.  */
13944   unsigned max_dvbases = 0; /* Maximum direct virtual bases.  */
13945   int i;
13946   tree default_access;
13947   tree igo_prev; /* Track Inheritance Graph Order.  */
13948 
13949   if (ref == error_mark_node)
13950     return;
13951 
13952   /* The base of a derived class is private by default, all others are
13953      public.  */
13954   default_access = (TREE_CODE (ref) == RECORD_TYPE
13955 		    && CLASSTYPE_DECLARED_CLASS (ref)
13956 		    ? access_private_node : access_public_node);
13957 
13958   /* First, make sure that any templates in base-classes are
13959      instantiated.  This ensures that if we call ourselves recursively
13960      we do not get confused about which classes are marked and which
13961      are not.  */
13962   basep = &base_list;
13963   while (*basep)
13964     {
13965       tree basetype = TREE_VALUE (*basep);
13966 
13967       /* The dependent_type_p call below should really be dependent_scope_p
13968 	 so that we give a hard error about using an incomplete type as a
13969 	 base, but we allow it with a pedwarn for backward
13970 	 compatibility.  */
13971       if (processing_template_decl
13972 	  && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
13973 	cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
13974       if (!dependent_type_p (basetype)
13975 	  && !complete_type_or_else (basetype, NULL))
13976 	/* An incomplete type.  Remove it from the list.  */
13977 	*basep = TREE_CHAIN (*basep);
13978       else
13979 	{
13980 	  max_bases++;
13981 	  if (TREE_TYPE (*basep))
13982 	    max_dvbases++;
13983 	  if (CLASS_TYPE_P (basetype))
13984 	    max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
13985 	  basep = &TREE_CHAIN (*basep);
13986 	}
13987     }
13988   max_vbases += max_dvbases;
13989 
13990   TYPE_MARKED_P (ref) = 1;
13991 
13992   /* The binfo slot should be empty, unless this is an (ill-formed)
13993      redefinition.  */
13994   gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
13995 
13996   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
13997 
13998   binfo = make_tree_binfo (max_bases);
13999 
14000   TYPE_BINFO (ref) = binfo;
14001   BINFO_OFFSET (binfo) = size_zero_node;
14002   BINFO_TYPE (binfo) = ref;
14003 
14004   /* Apply base-class info set up to the variants of this type.  */
14005   fixup_type_variants (ref);
14006 
14007   if (max_bases)
14008     {
14009       vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
14010       /* A C++98 POD cannot have base classes.  */
14011       CLASSTYPE_NON_LAYOUT_POD_P (ref) = true;
14012 
14013       if (TREE_CODE (ref) == UNION_TYPE)
14014 	{
14015 	  error ("derived union %qT invalid", ref);
14016 	  return;
14017 	}
14018     }
14019 
14020   if (max_bases > 1)
14021     warning (OPT_Wmultiple_inheritance,
14022 	     "%qT defined with multiple direct bases", ref);
14023 
14024   if (max_vbases)
14025     {
14026       /* An aggregate can't have virtual base classes.  */
14027       CLASSTYPE_NON_AGGREGATE (ref) = true;
14028 
14029       vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
14030 
14031       if (max_dvbases)
14032 	warning (OPT_Wvirtual_inheritance,
14033 		 "%qT defined with direct virtual base", ref);
14034     }
14035 
14036   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
14037     {
14038       tree access = TREE_PURPOSE (base_list);
14039       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
14040       tree basetype = TREE_VALUE (base_list);
14041 
14042       if (access == access_default_node)
14043 	access = default_access;
14044 
14045       /* Before C++17, an aggregate cannot have base classes.  In C++17, an
14046 	 aggregate can't have virtual, private, or protected base classes.  */
14047       if (cxx_dialect < cxx17
14048 	  || access != access_public_node
14049 	  || via_virtual)
14050 	CLASSTYPE_NON_AGGREGATE (ref) = true;
14051 
14052       if (PACK_EXPANSION_P (basetype))
14053         basetype = PACK_EXPANSION_PATTERN (basetype);
14054       if (TREE_CODE (basetype) == TYPE_DECL)
14055 	basetype = TREE_TYPE (basetype);
14056       if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
14057 	{
14058 	  error ("base type %qT fails to be a struct or class type",
14059 		 basetype);
14060 	  goto dropped_base;
14061 	}
14062 
14063       base_binfo = NULL_TREE;
14064       if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
14065 	{
14066 	  base_binfo = TYPE_BINFO (basetype);
14067 	  /* The original basetype could have been a typedef'd type.  */
14068 	  basetype = BINFO_TYPE (base_binfo);
14069 
14070 	  /* Inherit flags from the base.  */
14071 	  TYPE_HAS_NEW_OPERATOR (ref)
14072 	    |= TYPE_HAS_NEW_OPERATOR (basetype);
14073 	  TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
14074 	    |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
14075 	  TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
14076 	  TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
14077 	  CLASSTYPE_DIAMOND_SHAPED_P (ref)
14078 	    |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
14079 	  CLASSTYPE_REPEATED_BASE_P (ref)
14080 	    |= CLASSTYPE_REPEATED_BASE_P (basetype);
14081 	}
14082 
14083       /* We must do this test after we've seen through a typedef
14084 	 type.  */
14085       if (TYPE_MARKED_P (basetype))
14086 	{
14087 	  if (basetype == ref)
14088 	    error ("recursive type %qT undefined", basetype);
14089 	  else
14090 	    error ("duplicate base type %qT invalid", basetype);
14091 	  goto dropped_base;
14092 	}
14093 
14094       if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
14095         /* Regenerate the pack expansion for the bases. */
14096         basetype = make_pack_expansion (basetype);
14097 
14098       TYPE_MARKED_P (basetype) = 1;
14099 
14100       base_binfo = copy_binfo (base_binfo, basetype, ref,
14101 			       &igo_prev, via_virtual);
14102       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
14103 	BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
14104 
14105       BINFO_BASE_APPEND (binfo, base_binfo);
14106       BINFO_BASE_ACCESS_APPEND (binfo, access);
14107       continue;
14108 
14109     dropped_base:
14110       /* Update max_vbases to reflect the reality that we are dropping
14111 	 this base:  if it reaches zero we want to undo the vec_alloc
14112 	 above to avoid inconsistencies during error-recovery: eg, in
14113 	 build_special_member_call, CLASSTYPE_VBASECLASSES non null
14114 	 and vtt null (c++/27952).  */
14115       if (via_virtual)
14116 	max_vbases--;
14117       if (CLASS_TYPE_P (basetype))
14118 	max_vbases
14119 	  -= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
14120     }
14121 
14122   if (CLASSTYPE_VBASECLASSES (ref)
14123       && max_vbases == 0)
14124     vec_free (CLASSTYPE_VBASECLASSES (ref));
14125 
14126   if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
14127     /* If we didn't get max_vbases vbases, we must have shared at
14128        least one of them, and are therefore diamond shaped.  */
14129     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
14130 
14131   /* Unmark all the types.  */
14132   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
14133     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
14134   TYPE_MARKED_P (ref) = 0;
14135 
14136   /* Now see if we have a repeated base type.  */
14137   if (!CLASSTYPE_REPEATED_BASE_P (ref))
14138     {
14139       for (base_binfo = binfo; base_binfo;
14140 	   base_binfo = TREE_CHAIN (base_binfo))
14141 	{
14142 	  if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
14143 	    {
14144 	      CLASSTYPE_REPEATED_BASE_P (ref) = 1;
14145 	      break;
14146 	    }
14147 	  TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
14148 	}
14149       for (base_binfo = binfo; base_binfo;
14150 	   base_binfo = TREE_CHAIN (base_binfo))
14151 	if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
14152 	  TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
14153 	else
14154 	  break;
14155     }
14156 }
14157 
14158 
14159 /* Copies the enum-related properties from type SRC to type DST.
14160    Used with the underlying type of an enum and the enum itself.  */
14161 static void
14162 copy_type_enum (tree dst, tree src)
14163 {
14164   tree t;
14165   for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
14166     {
14167       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
14168       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
14169       TYPE_SIZE (t) = TYPE_SIZE (src);
14170       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
14171       SET_TYPE_MODE (dst, TYPE_MODE (src));
14172       TYPE_PRECISION (t) = TYPE_PRECISION (src);
14173       unsigned valign = TYPE_ALIGN (src);
14174       if (TYPE_USER_ALIGN (t))
14175 	valign = MAX (valign, TYPE_ALIGN (t));
14176       else
14177 	TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
14178       SET_TYPE_ALIGN (t, valign);
14179       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
14180     }
14181 }
14182 
14183 /* Begin compiling the definition of an enumeration type.
14184    NAME is its name,
14185 
14186    if ENUMTYPE is not NULL_TREE then the type has alredy been found.
14187 
14188    UNDERLYING_TYPE is the type that will be used as the storage for
14189    the enumeration type. This should be NULL_TREE if no storage type
14190    was specified.
14191 
14192    ATTRIBUTES are any attributes specified after the enum-key.
14193 
14194    SCOPED_ENUM_P is true if this is a scoped enumeration type.
14195 
14196    if IS_NEW is not NULL, gets TRUE iff a new type is created.
14197 
14198    Returns the type object, as yet incomplete.
14199    Also records info about it so that build_enumerator
14200    may be used to declare the individual values as they are read.  */
14201 
14202 tree
14203 start_enum (tree name, tree enumtype, tree underlying_type,
14204 	    tree attributes, bool scoped_enum_p, bool *is_new)
14205 {
14206   tree prevtype = NULL_TREE;
14207   gcc_assert (identifier_p (name));
14208 
14209   if (is_new)
14210     *is_new = false;
14211   /* [C++0x dcl.enum]p5:
14212 
14213     If not explicitly specified, the underlying type of a scoped
14214     enumeration type is int.  */
14215   if (!underlying_type && scoped_enum_p)
14216     underlying_type = integer_type_node;
14217 
14218   if (underlying_type)
14219     underlying_type = cv_unqualified (underlying_type);
14220 
14221   /* If this is the real definition for a previous forward reference,
14222      fill in the contents in the same object that used to be the
14223      forward reference.  */
14224   if (!enumtype)
14225     enumtype = lookup_and_check_tag (enum_type, name,
14226 				     /*tag_scope=*/ts_current,
14227 				     /*template_header_p=*/false);
14228 
14229   /* In case of a template_decl, the only check that should be deferred
14230      to instantiation time is the comparison of underlying types.  */
14231   if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
14232     {
14233       if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
14234 	{
14235 	  error_at (input_location, "scoped/unscoped mismatch "
14236 		    "in enum %q#T", enumtype);
14237 	  inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14238 		  "previous definition here");
14239 	  enumtype = error_mark_node;
14240 	}
14241       else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
14242 	{
14243 	  error_at (input_location, "underlying type mismatch "
14244 		    "in enum %q#T", enumtype);
14245 	  inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14246 		  "previous definition here");
14247 	  enumtype = error_mark_node;
14248 	}
14249       else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
14250 	       && !dependent_type_p (underlying_type)
14251 	       && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
14252 	       && !same_type_p (underlying_type,
14253 				ENUM_UNDERLYING_TYPE (enumtype)))
14254 	{
14255 	  error_at (input_location, "different underlying type "
14256 		    "in enum %q#T", enumtype);
14257 	  inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14258 		  "previous definition here");
14259 	  underlying_type = NULL_TREE;
14260 	}
14261     }
14262 
14263   if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
14264       || processing_template_decl)
14265     {
14266       /* In case of error, make a dummy enum to allow parsing to
14267 	 continue.  */
14268       if (enumtype == error_mark_node)
14269 	{
14270 	  name = make_anon_name ();
14271 	  enumtype = NULL_TREE;
14272 	}
14273 
14274       /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
14275          of an opaque enum, or an opaque enum of an already defined
14276 	 enumeration (C++0x only).
14277 	 In any other case, it'll be NULL_TREE. */
14278       if (!enumtype)
14279 	{
14280 	  if (is_new)
14281 	    *is_new = true;
14282 	}
14283       prevtype = enumtype;
14284 
14285       /* Do not push the decl more than once, unless we need to
14286 	 compare underlying types at instantiation time */
14287       if (!enumtype
14288 	  || TREE_CODE (enumtype) != ENUMERAL_TYPE
14289 	  || (underlying_type
14290 	      && dependent_type_p (underlying_type))
14291 	  || (ENUM_UNDERLYING_TYPE (enumtype)
14292 	      && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
14293 	{
14294 	  enumtype = cxx_make_type (ENUMERAL_TYPE);
14295 	  enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
14296 
14297 	  /* std::byte aliases anything.  */
14298 	  if (enumtype != error_mark_node
14299 	      && TYPE_CONTEXT (enumtype) == std_node
14300 	      && !strcmp ("byte", TYPE_NAME_STRING (enumtype)))
14301 	    TYPE_ALIAS_SET (enumtype) = 0;
14302 	}
14303       else
14304 	  enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
14305 			       false);
14306 
14307       if (enumtype == error_mark_node)
14308 	return error_mark_node;
14309 
14310       /* The enum is considered opaque until the opening '{' of the
14311 	 enumerator list.  */
14312       SET_OPAQUE_ENUM_P (enumtype, true);
14313       ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
14314     }
14315 
14316   SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
14317 
14318   cplus_decl_attributes (&enumtype, attributes, (int)ATTR_FLAG_TYPE_IN_PLACE);
14319 
14320   if (underlying_type)
14321     {
14322       if (ENUM_UNDERLYING_TYPE (enumtype))
14323 	/* We already checked that it matches, don't change it to a different
14324 	   typedef variant.  */;
14325       else if (CP_INTEGRAL_TYPE_P (underlying_type))
14326         {
14327 	  copy_type_enum (enumtype, underlying_type);
14328           ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14329         }
14330       else if (dependent_type_p (underlying_type))
14331 	ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14332       else
14333         error ("underlying type %qT of %qT must be an integral type",
14334                underlying_type, enumtype);
14335     }
14336 
14337   /* If into a template class, the returned enum is always the first
14338      declaration (opaque or not) seen. This way all the references to
14339      this type will be to the same declaration. The following ones are used
14340      only to check for definition errors.  */
14341   if (prevtype && processing_template_decl)
14342     return prevtype;
14343   else
14344     return enumtype;
14345 }
14346 
14347 /* After processing and defining all the values of an enumeration type,
14348    install their decls in the enumeration type.
14349    ENUMTYPE is the type object.  */
14350 
14351 void
14352 finish_enum_value_list (tree enumtype)
14353 {
14354   tree values;
14355   tree underlying_type;
14356   tree decl;
14357   tree value;
14358   tree minnode, maxnode;
14359   tree t;
14360 
14361   bool fixed_underlying_type_p
14362     = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
14363 
14364   /* We built up the VALUES in reverse order.  */
14365   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
14366 
14367   /* For an enum defined in a template, just set the type of the values;
14368      all further processing is postponed until the template is
14369      instantiated.  We need to set the type so that tsubst of a CONST_DECL
14370      works.  */
14371   if (processing_template_decl)
14372     {
14373       for (values = TYPE_VALUES (enumtype);
14374 	   values;
14375 	   values = TREE_CHAIN (values))
14376 	TREE_TYPE (TREE_VALUE (values)) = enumtype;
14377       return;
14378     }
14379 
14380   /* Determine the minimum and maximum values of the enumerators.  */
14381   if (TYPE_VALUES (enumtype))
14382     {
14383       minnode = maxnode = NULL_TREE;
14384 
14385       for (values = TYPE_VALUES (enumtype);
14386 	   values;
14387 	   values = TREE_CHAIN (values))
14388 	{
14389 	  decl = TREE_VALUE (values);
14390 
14391 	  /* [dcl.enum]: Following the closing brace of an enum-specifier,
14392 	     each enumerator has the type of its enumeration.  Prior to the
14393 	     closing brace, the type of each enumerator is the type of its
14394 	     initializing value.  */
14395 	  TREE_TYPE (decl) = enumtype;
14396 
14397 	  /* Update the minimum and maximum values, if appropriate.  */
14398 	  value = DECL_INITIAL (decl);
14399 	  if (value == error_mark_node)
14400 	    value = integer_zero_node;
14401 	  /* Figure out what the minimum and maximum values of the
14402 	     enumerators are.  */
14403 	  if (!minnode)
14404 	    minnode = maxnode = value;
14405 	  else if (tree_int_cst_lt (maxnode, value))
14406 	    maxnode = value;
14407 	  else if (tree_int_cst_lt (value, minnode))
14408 	    minnode = value;
14409 	}
14410     }
14411   else
14412     /* [dcl.enum]
14413 
14414        If the enumerator-list is empty, the underlying type is as if
14415        the enumeration had a single enumerator with value 0.  */
14416     minnode = maxnode = integer_zero_node;
14417 
14418   if (!fixed_underlying_type_p)
14419     {
14420       /* Compute the number of bits require to represent all values of the
14421 	 enumeration.  We must do this before the type of MINNODE and
14422 	 MAXNODE are transformed, since tree_int_cst_min_precision relies
14423 	 on the TREE_TYPE of the value it is passed.  */
14424       signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
14425       int lowprec = tree_int_cst_min_precision (minnode, sgn);
14426       int highprec = tree_int_cst_min_precision (maxnode, sgn);
14427       int precision = MAX (lowprec, highprec);
14428       unsigned int itk;
14429       bool use_short_enum;
14430 
14431       /* Determine the underlying type of the enumeration.
14432 
14433          [dcl.enum]
14434 
14435          The underlying type of an enumeration is an integral type that
14436          can represent all the enumerator values defined in the
14437          enumeration.  It is implementation-defined which integral type is
14438          used as the underlying type for an enumeration except that the
14439          underlying type shall not be larger than int unless the value of
14440          an enumerator cannot fit in an int or unsigned int.
14441 
14442          We use "int" or an "unsigned int" as the underlying type, even if
14443          a smaller integral type would work, unless the user has
14444          explicitly requested that we use the smallest possible type.  The
14445          user can request that for all enumerations with a command line
14446          flag, or for just one enumeration with an attribute.  */
14447 
14448       use_short_enum = flag_short_enums
14449         || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
14450 
14451       /* If the precision of the type was specified with an attribute and it
14452 	 was too small, give an error.  Otherwise, use it.  */
14453       if (TYPE_PRECISION (enumtype))
14454 	{
14455 	  if (precision > TYPE_PRECISION (enumtype))
14456 	    error ("specified mode too small for enumeral values");
14457 	  else
14458 	    {
14459 	      use_short_enum = true;
14460 	      precision = TYPE_PRECISION (enumtype);
14461 	    }
14462 	}
14463 
14464       for (itk = (use_short_enum ? itk_char : itk_int);
14465            itk != itk_none;
14466            itk++)
14467         {
14468           underlying_type = integer_types[itk];
14469           if (underlying_type != NULL_TREE
14470 	      && TYPE_PRECISION (underlying_type) >= precision
14471               && TYPE_SIGN (underlying_type) == sgn)
14472             break;
14473         }
14474       if (itk == itk_none)
14475         {
14476           /* DR 377
14477 
14478              IF no integral type can represent all the enumerator values, the
14479              enumeration is ill-formed.  */
14480           error ("no integral type can represent all of the enumerator values "
14481                  "for %qT", enumtype);
14482           precision = TYPE_PRECISION (long_long_integer_type_node);
14483           underlying_type = integer_types[itk_unsigned_long_long];
14484         }
14485 
14486       /* [dcl.enum]
14487 
14488          The value of sizeof() applied to an enumeration type, an object
14489          of an enumeration type, or an enumerator, is the value of sizeof()
14490          applied to the underlying type.  */
14491       copy_type_enum (enumtype, underlying_type);
14492 
14493       /* Compute the minimum and maximum values for the type.
14494 
14495 	 [dcl.enum]
14496 
14497 	 For an enumeration where emin is the smallest enumerator and emax
14498 	 is the largest, the values of the enumeration are the values of the
14499 	 underlying type in the range bmin to bmax, where bmin and bmax are,
14500 	 respectively, the smallest and largest values of the smallest bit-
14501 	 field that can store emin and emax.  */
14502 
14503       /* The middle-end currently assumes that types with TYPE_PRECISION
14504 	 narrower than their underlying type are suitably zero or sign
14505 	 extended to fill their mode.  Similarly, it assumes that the front
14506 	 end assures that a value of a particular type must be within
14507 	 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
14508 
14509 	 We used to set these fields based on bmin and bmax, but that led
14510 	 to invalid assumptions like optimizing away bounds checking.  So
14511 	 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
14512 	 TYPE_MAX_VALUE to the values for the mode above and only restrict
14513 	 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics.  */
14514       ENUM_UNDERLYING_TYPE (enumtype)
14515 	= build_distinct_type_copy (underlying_type);
14516       TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
14517       set_min_and_max_values_for_integral_type
14518         (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
14519 
14520       /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE.  */
14521       if (flag_strict_enums)
14522 	set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
14523     }
14524   else
14525     underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
14526 
14527   /* Convert each of the enumerators to the type of the underlying
14528      type of the enumeration.  */
14529   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
14530     {
14531       location_t saved_location;
14532 
14533       decl = TREE_VALUE (values);
14534       saved_location = input_location;
14535       input_location = DECL_SOURCE_LOCATION (decl);
14536       if (fixed_underlying_type_p)
14537         /* If the enumeration type has a fixed underlying type, we
14538            already checked all of the enumerator values.  */
14539         value = DECL_INITIAL (decl);
14540       else
14541         value = perform_implicit_conversion (underlying_type,
14542                                              DECL_INITIAL (decl),
14543                                              tf_warning_or_error);
14544       input_location = saved_location;
14545 
14546       /* Do not clobber shared ints.  */
14547       if (value != error_mark_node)
14548 	{
14549 	  value = copy_node (value);
14550 
14551 	  TREE_TYPE (value) = enumtype;
14552 	}
14553       DECL_INITIAL (decl) = value;
14554     }
14555 
14556   /* Fix up all variant types of this enum type.  */
14557   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
14558     TYPE_VALUES (t) = TYPE_VALUES (enumtype);
14559 
14560   if (at_class_scope_p ()
14561       && COMPLETE_TYPE_P (current_class_type)
14562       && UNSCOPED_ENUM_P (enumtype))
14563     {
14564       insert_late_enum_def_bindings (current_class_type, enumtype);
14565       /* TYPE_FIELDS needs fixup.  */
14566       fixup_type_variants (current_class_type);
14567     }
14568 
14569   /* Finish debugging output for this type.  */
14570   rest_of_type_compilation (enumtype, namespace_bindings_p ());
14571 
14572   /* Each enumerator now has the type of its enumeration.  Clear the cache
14573      so that this change in types doesn't confuse us later on.  */
14574   clear_cv_and_fold_caches ();
14575 }
14576 
14577 /* Finishes the enum type. This is called only the first time an
14578    enumeration is seen, be it opaque or odinary.
14579    ENUMTYPE is the type object.  */
14580 
14581 void
14582 finish_enum (tree enumtype)
14583 {
14584   if (processing_template_decl)
14585     {
14586       if (at_function_scope_p ())
14587 	add_stmt (build_min (TAG_DEFN, enumtype));
14588       return;
14589     }
14590 
14591   /* If this is a forward declaration, there should not be any variants,
14592      though we can get a variant in the middle of an enum-specifier with
14593      wacky code like 'enum E { e = sizeof(const E*) };'  */
14594   gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
14595 	      && (TYPE_VALUES (enumtype)
14596 		  || !TYPE_NEXT_VARIANT (enumtype)));
14597 }
14598 
14599 /* Build and install a CONST_DECL for an enumeration constant of the
14600    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
14601    Apply ATTRIBUTES if available.  LOC is the location of NAME.
14602    Assignment of sequential values by default is handled here.  */
14603 
14604 void
14605 build_enumerator (tree name, tree value, tree enumtype, tree attributes,
14606 		  location_t loc)
14607 {
14608   tree decl;
14609   tree context;
14610   tree type;
14611 
14612   /* scalar_constant_value will pull out this expression, so make sure
14613      it's folded as appropriate.  */
14614   if (processing_template_decl)
14615     value = fold_non_dependent_expr (value);
14616 
14617   /* If the VALUE was erroneous, pretend it wasn't there; that will
14618      result in the enum being assigned the next value in sequence.  */
14619   if (value == error_mark_node)
14620     value = NULL_TREE;
14621 
14622   /* Remove no-op casts from the value.  */
14623   if (value)
14624     STRIP_TYPE_NOPS (value);
14625 
14626   if (! processing_template_decl)
14627     {
14628       /* Validate and default VALUE.  */
14629       if (value != NULL_TREE)
14630 	{
14631 	  if (!ENUM_UNDERLYING_TYPE (enumtype))
14632 	    {
14633 	      tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
14634 							   value, true);
14635 	      if (tmp_value)
14636 		value = tmp_value;
14637 	    }
14638 	  else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14639 		   (TREE_TYPE (value)))
14640 	    value = perform_implicit_conversion_flags
14641 	      (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
14642 	       LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
14643 
14644 	  if (value == error_mark_node)
14645 	    value = NULL_TREE;
14646 
14647 	  if (value != NULL_TREE)
14648 	    {
14649 	      if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14650 		  (TREE_TYPE (value)))
14651 		{
14652 		  error ("enumerator value for %qD must have integral or "
14653 			 "unscoped enumeration type", name);
14654 		  value = NULL_TREE;
14655 		}
14656 	      else
14657 		{
14658 		  value = cxx_constant_value (value);
14659 
14660 		  if (TREE_CODE (value) != INTEGER_CST)
14661 		    {
14662 		      error ("enumerator value for %qD is not an integer "
14663 			     "constant", name);
14664 		      value = NULL_TREE;
14665 		    }
14666 		}
14667 	    }
14668 	}
14669 
14670       /* Default based on previous value.  */
14671       if (value == NULL_TREE)
14672 	{
14673 	  if (TYPE_VALUES (enumtype))
14674 	    {
14675 	      tree prev_value;
14676 	      bool overflowed;
14677 
14678 	      /* C++03 7.2/4: If no initializer is specified for the first
14679 		 enumerator, the type is an unspecified integral
14680 		 type. Otherwise the type is the same as the type of the
14681 		 initializing value of the preceding enumerator unless the
14682 		 incremented value is not representable in that type, in
14683 		 which case the type is an unspecified integral type
14684 		 sufficient to contain the incremented value.  */
14685 	      prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
14686 	      if (error_operand_p (prev_value))
14687 		value = error_mark_node;
14688 	      else
14689 		{
14690 		  tree type = TREE_TYPE (prev_value);
14691 		  signop sgn = TYPE_SIGN (type);
14692 		  widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
14693 					   &overflowed);
14694 		  if (!overflowed)
14695 		    {
14696 		      bool pos = !wi::neg_p (wi, sgn);
14697 		      if (!wi::fits_to_tree_p (wi, type))
14698 			{
14699 			  unsigned int itk;
14700 			  for (itk = itk_int; itk != itk_none; itk++)
14701 			    {
14702 			      type = integer_types[itk];
14703 			      if (type != NULL_TREE
14704 				  && (pos || !TYPE_UNSIGNED (type))
14705 				  && wi::fits_to_tree_p (wi, type))
14706 				break;
14707 			    }
14708 			  if (type && cxx_dialect < cxx11
14709 			      && itk > itk_unsigned_long)
14710 			    pedwarn (input_location, OPT_Wlong_long,
14711 				     pos ? G_("\
14712 incremented enumerator value is too large for %<unsigned long%>") : G_("\
14713 incremented enumerator value is too large for %<long%>"));
14714 			}
14715 		      if (type == NULL_TREE)
14716 			overflowed = true;
14717 		      else
14718 			value = wide_int_to_tree (type, wi);
14719 		    }
14720 
14721 		  if (overflowed)
14722 		    {
14723 		      error ("overflow in enumeration values at %qD", name);
14724 		      value = error_mark_node;
14725 		    }
14726 		}
14727 	    }
14728 	  else
14729 	    value = integer_zero_node;
14730 	}
14731 
14732       /* Remove no-op casts from the value.  */
14733       STRIP_TYPE_NOPS (value);
14734 
14735       /* If the underlying type of the enum is fixed, check whether
14736          the enumerator values fits in the underlying type.  If it
14737          does not fit, the program is ill-formed [C++0x dcl.enum].  */
14738       if (ENUM_UNDERLYING_TYPE (enumtype)
14739           && value
14740           && TREE_CODE (value) == INTEGER_CST)
14741         {
14742 	  if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
14743 	    error ("enumerator value %qE is outside the range of underlying "
14744 		   "type %qT", value, ENUM_UNDERLYING_TYPE (enumtype));
14745 
14746           /* Convert the value to the appropriate type.  */
14747           value = fold_convert (ENUM_UNDERLYING_TYPE (enumtype), value);
14748         }
14749     }
14750 
14751   /* C++ associates enums with global, function, or class declarations.  */
14752   context = current_scope ();
14753 
14754   /* Build the actual enumeration constant.  Note that the enumeration
14755      constants have the underlying type of the enum (if it is fixed)
14756      or the type of their initializer (if the underlying type of the
14757      enum is not fixed):
14758 
14759       [ C++0x dcl.enum ]
14760 
14761         If the underlying type is fixed, the type of each enumerator
14762         prior to the closing brace is the underlying type; if the
14763         initializing value of an enumerator cannot be represented by
14764         the underlying type, the program is ill-formed. If the
14765         underlying type is not fixed, the type of each enumerator is
14766         the type of its initializing value.
14767 
14768     If the underlying type is not fixed, it will be computed by
14769     finish_enum and we will reset the type of this enumerator.  Of
14770     course, if we're processing a template, there may be no value.  */
14771   type = value ? TREE_TYPE (value) : NULL_TREE;
14772 
14773   decl = build_decl (loc, CONST_DECL, name, type);
14774 
14775   DECL_CONTEXT (decl) = enumtype;
14776   TREE_CONSTANT (decl) = 1;
14777   TREE_READONLY (decl) = 1;
14778   DECL_INITIAL (decl) = value;
14779 
14780   if (attributes)
14781     cplus_decl_attributes (&decl, attributes, 0);
14782 
14783   if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
14784     {
14785       /* In something like `struct S { enum E { i = 7 }; };' we put `i'
14786 	 on the TYPE_FIELDS list for `S'.  (That's so that you can say
14787 	 things like `S::i' later.)  */
14788 
14789       /* The enumerator may be getting declared outside of its enclosing
14790 	 class, like so:
14791 
14792 	   class S { public: enum E : int; }; enum S::E : int { i = 7; };
14793 
14794 	 For which case we need to make sure that the access of `S::i'
14795 	 matches the access of `S::E'.  */
14796       tree saved_cas = current_access_specifier;
14797       if (TREE_PRIVATE (TYPE_NAME (enumtype)))
14798 	current_access_specifier = access_private_node;
14799       else if (TREE_PROTECTED (TYPE_NAME (enumtype)))
14800 	current_access_specifier = access_protected_node;
14801       else
14802 	current_access_specifier = access_public_node;
14803 
14804       finish_member_declaration (decl);
14805 
14806       current_access_specifier = saved_cas;
14807     }
14808   else
14809     pushdecl (decl);
14810 
14811   /* Add this enumeration constant to the list for this type.  */
14812   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
14813 }
14814 
14815 /* Look for an enumerator with the given NAME within the enumeration
14816    type ENUMTYPE.  This routine is used primarily for qualified name
14817    lookup into an enumerator in C++0x, e.g.,
14818 
14819      enum class Color { Red, Green, Blue };
14820 
14821      Color color = Color::Red;
14822 
14823    Returns the value corresponding to the enumerator, or
14824    NULL_TREE if no such enumerator was found.  */
14825 tree
14826 lookup_enumerator (tree enumtype, tree name)
14827 {
14828   tree e;
14829   gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
14830 
14831   e = purpose_member (name, TYPE_VALUES (enumtype));
14832   return e? TREE_VALUE (e) : NULL_TREE;
14833 }
14834 
14835 
14836 /* We're defining DECL.  Make sure that its type is OK.  */
14837 
14838 static void
14839 check_function_type (tree decl, tree current_function_parms)
14840 {
14841   tree fntype = TREE_TYPE (decl);
14842   tree return_type = complete_type (TREE_TYPE (fntype));
14843 
14844   /* In a function definition, arg types must be complete.  */
14845   require_complete_types_for_parms (current_function_parms);
14846 
14847   if (dependent_type_p (return_type)
14848       || type_uses_auto (return_type))
14849     return;
14850   if (!COMPLETE_OR_VOID_TYPE_P (return_type))
14851     {
14852       tree args = TYPE_ARG_TYPES (fntype);
14853 
14854       error ("return type %q#T is incomplete", return_type);
14855 
14856       /* Make it return void instead.  */
14857       if (TREE_CODE (fntype) == METHOD_TYPE)
14858 	fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
14859 					     void_type_node,
14860 					     TREE_CHAIN (args));
14861       else
14862 	fntype = build_function_type (void_type_node, args);
14863       fntype
14864 	= build_exception_variant (fntype,
14865 				   TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
14866       fntype = (cp_build_type_attribute_variant
14867 		(fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
14868       TREE_TYPE (decl) = fntype;
14869     }
14870   else
14871     {
14872       abstract_virtuals_error (decl, TREE_TYPE (fntype));
14873       maybe_warn_parm_abi (TREE_TYPE (fntype),
14874 			   DECL_SOURCE_LOCATION (decl));
14875     }
14876 }
14877 
14878 /* True iff FN is an implicitly-defined default constructor.  */
14879 
14880 static bool
14881 implicit_default_ctor_p (tree fn)
14882 {
14883   return (DECL_CONSTRUCTOR_P (fn)
14884 	  && !user_provided_p (fn)
14885 	  && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)));
14886 }
14887 
14888 /* Clobber the contents of *this to let the back end know that the object
14889    storage is dead when we enter the constructor or leave the destructor.  */
14890 
14891 static tree
14892 build_clobber_this ()
14893 {
14894   /* Clobbering an empty base is pointless, and harmful if its one byte
14895      TYPE_SIZE overlays real data.  */
14896   if (is_empty_class (current_class_type))
14897     return void_node;
14898 
14899   /* If we have virtual bases, clobber the whole object, but only if we're in
14900      charge.  If we don't have virtual bases, clobber the as-base type so we
14901      don't mess with tail padding.  */
14902   bool vbases = CLASSTYPE_VBASECLASSES (current_class_type);
14903 
14904   tree ctype = current_class_type;
14905   if (!vbases)
14906     ctype = CLASSTYPE_AS_BASE (ctype);
14907 
14908   tree clobber = build_constructor (ctype, NULL);
14909   TREE_THIS_VOLATILE (clobber) = true;
14910 
14911   tree thisref = current_class_ref;
14912   if (ctype != current_class_type)
14913     {
14914       thisref = build_nop (build_reference_type (ctype), current_class_ptr);
14915       thisref = convert_from_reference (thisref);
14916     }
14917 
14918   tree exprstmt = build2 (MODIFY_EXPR, void_type_node, thisref, clobber);
14919   if (vbases)
14920     exprstmt = build_if_in_charge (exprstmt);
14921 
14922   return exprstmt;
14923 }
14924 
14925 /* Create the FUNCTION_DECL for a function definition.
14926    DECLSPECS and DECLARATOR are the parts of the declaration;
14927    they describe the function's name and the type it returns,
14928    but twisted together in a fashion that parallels the syntax of C.
14929 
14930    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
14931    DECLARATOR is really the DECL for the function we are about to
14932    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
14933    indicating that the function is an inline defined in-class.
14934 
14935    This function creates a binding context for the function body
14936    as well as setting up the FUNCTION_DECL in current_function_decl.
14937 
14938    For C++, we must first check whether that datum makes any sense.
14939    For example, "class A local_a(1,2);" means that variable local_a
14940    is an aggregate of type A, which should have a constructor
14941    applied to it with the argument list [1, 2].
14942 
14943    On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
14944    or may be a BLOCK if the function has been defined previously
14945    in this translation unit.  On exit, DECL_INITIAL (decl1) will be
14946    error_mark_node if the function has never been defined, or
14947    a BLOCK if the function has been defined somewhere.  */
14948 
14949 bool
14950 start_preparsed_function (tree decl1, tree attrs, int flags)
14951 {
14952   tree ctype = NULL_TREE;
14953   tree fntype;
14954   tree restype;
14955   int doing_friend = 0;
14956   cp_binding_level *bl;
14957   tree current_function_parms;
14958   struct c_fileinfo *finfo
14959     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
14960   bool honor_interface;
14961 
14962   /* Sanity check.  */
14963   gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
14964   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
14965 
14966   fntype = TREE_TYPE (decl1);
14967   if (TREE_CODE (fntype) == METHOD_TYPE)
14968     ctype = TYPE_METHOD_BASETYPE (fntype);
14969 
14970   /* ISO C++ 11.4/5.  A friend function defined in a class is in
14971      the (lexical) scope of the class in which it is defined.  */
14972   if (!ctype && DECL_FRIEND_P (decl1))
14973     {
14974       ctype = DECL_FRIEND_CONTEXT (decl1);
14975 
14976       /* CTYPE could be null here if we're dealing with a template;
14977 	 for example, `inline friend float foo()' inside a template
14978 	 will have no CTYPE set.  */
14979       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
14980 	ctype = NULL_TREE;
14981       else
14982 	doing_friend = 1;
14983     }
14984 
14985   if (DECL_DECLARED_INLINE_P (decl1)
14986       && lookup_attribute ("noinline", attrs))
14987     warning_at (DECL_SOURCE_LOCATION (decl1), 0,
14988 		"inline function %qD given attribute noinline", decl1);
14989 
14990   /* Handle gnu_inline attribute.  */
14991   if (GNU_INLINE_P (decl1))
14992     {
14993       DECL_EXTERNAL (decl1) = 1;
14994       DECL_NOT_REALLY_EXTERN (decl1) = 0;
14995       DECL_INTERFACE_KNOWN (decl1) = 1;
14996       DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
14997     }
14998 
14999   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
15000     /* This is a constructor, we must ensure that any default args
15001        introduced by this definition are propagated to the clones
15002        now. The clones are used directly in overload resolution.  */
15003     adjust_clone_args (decl1);
15004 
15005   /* Sometimes we don't notice that a function is a static member, and
15006      build a METHOD_TYPE for it.  Fix that up now.  */
15007   gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
15008 		&& TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
15009 
15010   /* Set up current_class_type, and enter the scope of the class, if
15011      appropriate.  */
15012   if (ctype)
15013     push_nested_class (ctype);
15014   else if (DECL_STATIC_FUNCTION_P (decl1))
15015     push_nested_class (DECL_CONTEXT (decl1));
15016 
15017   /* Now that we have entered the scope of the class, we must restore
15018      the bindings for any template parameters surrounding DECL1, if it
15019      is an inline member template.  (Order is important; consider the
15020      case where a template parameter has the same name as a field of
15021      the class.)  It is not until after this point that
15022      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
15023   if (flags & SF_INCLASS_INLINE)
15024     maybe_begin_member_template_processing (decl1);
15025 
15026   /* Effective C++ rule 15.  */
15027   if (warn_ecpp
15028       && DECL_ASSIGNMENT_OPERATOR_P (decl1)
15029       && DECL_OVERLOADED_OPERATOR_IS (decl1, NOP_EXPR)
15030       && VOID_TYPE_P (TREE_TYPE (fntype)))
15031     warning (OPT_Weffc__,
15032 	     "%<operator=%> should return a reference to %<*this%>");
15033 
15034   /* Make the init_value nonzero so pushdecl knows this is not tentative.
15035      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
15036   if (!DECL_INITIAL (decl1))
15037     DECL_INITIAL (decl1) = error_mark_node;
15038 
15039   /* This function exists in static storage.
15040      (This does not mean `static' in the C sense!)  */
15041   TREE_STATIC (decl1) = 1;
15042 
15043   /* We must call push_template_decl after current_class_type is set
15044      up.  (If we are processing inline definitions after exiting a
15045      class scope, current_class_type will be NULL_TREE until set above
15046      by push_nested_class.)  */
15047   if (processing_template_decl)
15048     {
15049       tree newdecl1 = push_template_decl (decl1);
15050       if (newdecl1 == error_mark_node)
15051 	{
15052 	  if (ctype || DECL_STATIC_FUNCTION_P (decl1))
15053 	    pop_nested_class ();
15054 	  return false;
15055 	}
15056       decl1 = newdecl1;
15057     }
15058 
15059   /* Make sure the parameter and return types are reasonable.  When
15060      you declare a function, these types can be incomplete, but they
15061      must be complete when you define the function.  */
15062   check_function_type (decl1, DECL_ARGUMENTS (decl1));
15063 
15064   /* Build the return declaration for the function.  */
15065   restype = TREE_TYPE (fntype);
15066 
15067   if (DECL_RESULT (decl1) == NULL_TREE)
15068     {
15069       tree resdecl;
15070 
15071       resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
15072       DECL_ARTIFICIAL (resdecl) = 1;
15073       DECL_IGNORED_P (resdecl) = 1;
15074       DECL_RESULT (decl1) = resdecl;
15075 
15076       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
15077     }
15078 
15079   /* Record the decl so that the function name is defined.
15080      If we already have a decl for this name, and it is a FUNCTION_DECL,
15081      use the old decl.  */
15082   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
15083     {
15084       /* A specialization is not used to guide overload resolution.  */
15085       if (!DECL_FUNCTION_MEMBER_P (decl1)
15086 	  && !(DECL_USE_TEMPLATE (decl1) &&
15087 	       PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
15088 	{
15089 	  tree olddecl = pushdecl (decl1);
15090 
15091 	  if (olddecl == error_mark_node)
15092 	    /* If something went wrong when registering the declaration,
15093 	       use DECL1; we have to have a FUNCTION_DECL to use when
15094 	       parsing the body of the function.  */
15095 	    ;
15096 	  else
15097 	    {
15098 	      /* Otherwise, OLDDECL is either a previous declaration
15099 		 of the same function or DECL1 itself.  */
15100 
15101 	      if (warn_missing_declarations
15102 		  && olddecl == decl1
15103 		  && !DECL_MAIN_P (decl1)
15104 		  && TREE_PUBLIC (decl1)
15105 		  && !DECL_DECLARED_INLINE_P (decl1))
15106 		{
15107 		  tree context;
15108 
15109 		  /* Check whether DECL1 is in an anonymous
15110 		     namespace.  */
15111 		  for (context = DECL_CONTEXT (decl1);
15112 		       context;
15113 		       context = DECL_CONTEXT (context))
15114 		    {
15115 		      if (TREE_CODE (context) == NAMESPACE_DECL
15116 			  && DECL_NAME (context) == NULL_TREE)
15117 			break;
15118 		    }
15119 
15120 		  if (context == NULL)
15121 		    warning_at (DECL_SOURCE_LOCATION (decl1),
15122 				OPT_Wmissing_declarations,
15123 				"no previous declaration for %qD", decl1);
15124 		}
15125 
15126 	      decl1 = olddecl;
15127 	    }
15128 	}
15129       else
15130 	{
15131 	  /* We need to set the DECL_CONTEXT.  */
15132 	  if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
15133 	    DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
15134 	}
15135       fntype = TREE_TYPE (decl1);
15136       restype = TREE_TYPE (fntype);
15137 
15138       /* If #pragma weak applies, mark the decl appropriately now.
15139 	 The pragma only applies to global functions.  Because
15140 	 determining whether or not the #pragma applies involves
15141 	 computing the mangled name for the declaration, we cannot
15142 	 apply the pragma until after we have merged this declaration
15143 	 with any previous declarations; if the original declaration
15144 	 has a linkage specification, that specification applies to
15145 	 the definition as well, and may affect the mangled name.  */
15146       if (DECL_FILE_SCOPE_P (decl1))
15147 	maybe_apply_pragma_weak (decl1);
15148     }
15149 
15150   /* We are now in the scope of the function being defined.  */
15151   current_function_decl = decl1;
15152 
15153   /* Save the parm names or decls from this function's declarator
15154      where store_parm_decls will find them.  */
15155   current_function_parms = DECL_ARGUMENTS (decl1);
15156 
15157   /* Let the user know we're compiling this function.  */
15158   announce_function (decl1);
15159 
15160   gcc_assert (DECL_INITIAL (decl1));
15161 
15162   /* This function may already have been parsed, in which case just
15163      return; our caller will skip over the body without parsing.  */
15164   if (DECL_INITIAL (decl1) != error_mark_node)
15165     return true;
15166 
15167   /* Initialize RTL machinery.  We cannot do this until
15168      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
15169      even when processing a template; this is how we get
15170      CFUN set up, and our per-function variables initialized.
15171      FIXME factor out the non-RTL stuff.  */
15172   bl = current_binding_level;
15173   allocate_struct_function (decl1, processing_template_decl);
15174 
15175   /* Initialize the language data structures.  Whenever we start
15176      a new function, we destroy temporaries in the usual way.  */
15177   cfun->language = ggc_cleared_alloc<language_function> ();
15178   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
15179   current_binding_level = bl;
15180 
15181   if (!processing_template_decl && type_uses_auto (restype))
15182     {
15183       FNDECL_USED_AUTO (decl1) = true;
15184       current_function_auto_return_pattern = restype;
15185     }
15186 
15187   /* Start the statement-tree, start the tree now.  */
15188   DECL_SAVED_TREE (decl1) = push_stmt_list ();
15189 
15190   /* If we are (erroneously) defining a function that we have already
15191      defined before, wipe out what we knew before.  */
15192   if (!DECL_PENDING_INLINE_P (decl1))
15193     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
15194 
15195   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
15196     {
15197       /* We know that this was set up by `grokclassfn'.  We do not
15198 	 wait until `store_parm_decls', since evil parse errors may
15199 	 never get us to that point.  Here we keep the consistency
15200 	 between `current_class_type' and `current_class_ptr'.  */
15201       tree t = DECL_ARGUMENTS (decl1);
15202 
15203       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
15204       gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
15205 
15206       cp_function_chain->x_current_class_ref
15207 	= cp_build_fold_indirect_ref (t);
15208       /* Set this second to avoid shortcut in cp_build_indirect_ref.  */
15209       cp_function_chain->x_current_class_ptr = t;
15210 
15211       /* Constructors and destructors need to know whether they're "in
15212 	 charge" of initializing virtual base classes.  */
15213       t = DECL_CHAIN (t);
15214       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
15215 	{
15216 	  current_in_charge_parm = t;
15217 	  t = DECL_CHAIN (t);
15218 	}
15219       if (DECL_HAS_VTT_PARM_P (decl1))
15220 	{
15221 	  gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
15222 	  current_vtt_parm = t;
15223 	}
15224     }
15225 
15226   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
15227 		     /* Implicitly-defined methods (like the
15228 			destructor for a class in which no destructor
15229 			is explicitly declared) must not be defined
15230 			until their definition is needed.  So, we
15231 			ignore interface specifications for
15232 			compiler-generated functions.  */
15233 		     && !DECL_ARTIFICIAL (decl1));
15234 
15235   if (processing_template_decl)
15236     /* Don't mess with interface flags.  */;
15237   else if (DECL_INTERFACE_KNOWN (decl1))
15238     {
15239       tree ctx = decl_function_context (decl1);
15240 
15241       if (DECL_NOT_REALLY_EXTERN (decl1))
15242 	DECL_EXTERNAL (decl1) = 0;
15243 
15244       if (ctx != NULL_TREE && vague_linkage_p (ctx))
15245 	/* This is a function in a local class in an extern inline
15246 	   or template function.  */
15247 	comdat_linkage (decl1);
15248     }
15249   /* If this function belongs to an interface, it is public.
15250      If it belongs to someone else's interface, it is also external.
15251      This only affects inlines and template instantiations.  */
15252   else if (!finfo->interface_unknown && honor_interface)
15253     {
15254       if (DECL_DECLARED_INLINE_P (decl1)
15255 	  || DECL_TEMPLATE_INSTANTIATION (decl1))
15256 	{
15257 	  DECL_EXTERNAL (decl1)
15258 	    = (finfo->interface_only
15259 	       || (DECL_DECLARED_INLINE_P (decl1)
15260 		   && ! flag_implement_inlines
15261 		   && !DECL_VINDEX (decl1)));
15262 
15263 	  /* For WIN32 we also want to put these in linkonce sections.  */
15264 	  maybe_make_one_only (decl1);
15265 	}
15266       else
15267 	DECL_EXTERNAL (decl1) = 0;
15268       DECL_INTERFACE_KNOWN (decl1) = 1;
15269       /* If this function is in an interface implemented in this file,
15270 	 make sure that the back end knows to emit this function
15271 	 here.  */
15272       if (!DECL_EXTERNAL (decl1))
15273 	mark_needed (decl1);
15274     }
15275   else if (finfo->interface_unknown && finfo->interface_only
15276 	   && honor_interface)
15277     {
15278       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
15279 	 interface, we will have both finfo->interface_unknown and
15280 	 finfo->interface_only set.  In that case, we don't want to
15281 	 use the normal heuristics because someone will supply a
15282 	 #pragma implementation elsewhere, and deducing it here would
15283 	 produce a conflict.  */
15284       comdat_linkage (decl1);
15285       DECL_EXTERNAL (decl1) = 0;
15286       DECL_INTERFACE_KNOWN (decl1) = 1;
15287       DECL_DEFER_OUTPUT (decl1) = 1;
15288     }
15289   else
15290     {
15291       /* This is a definition, not a reference.
15292 	 So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
15293       if (!GNU_INLINE_P (decl1))
15294 	DECL_EXTERNAL (decl1) = 0;
15295 
15296       if ((DECL_DECLARED_INLINE_P (decl1)
15297 	   || DECL_TEMPLATE_INSTANTIATION (decl1))
15298 	  && ! DECL_INTERFACE_KNOWN (decl1))
15299 	DECL_DEFER_OUTPUT (decl1) = 1;
15300       else
15301 	DECL_INTERFACE_KNOWN (decl1) = 1;
15302     }
15303 
15304   /* Determine the ELF visibility attribute for the function.  We must not
15305      do this before calling "pushdecl", as we must allow "duplicate_decls"
15306      to merge any attributes appropriately.  We also need to wait until
15307      linkage is set.  */
15308   if (!DECL_CLONED_FUNCTION_P (decl1))
15309     determine_visibility (decl1);
15310 
15311   if (!processing_template_decl)
15312     maybe_instantiate_noexcept (decl1);
15313 
15314   begin_scope (sk_function_parms, decl1);
15315 
15316   ++function_depth;
15317 
15318   if (DECL_DESTRUCTOR_P (decl1)
15319       || (DECL_CONSTRUCTOR_P (decl1)
15320 	  && targetm.cxx.cdtor_returns_this ()))
15321     {
15322       cdtor_label = create_artificial_label (input_location);
15323       LABEL_DECL_CDTOR (cdtor_label) = true;
15324     }
15325 
15326   start_fname_decls ();
15327 
15328   store_parm_decls (current_function_parms);
15329 
15330   if (!processing_template_decl
15331       && (flag_lifetime_dse > 1)
15332       && DECL_CONSTRUCTOR_P (decl1)
15333       && !DECL_CLONED_FUNCTION_P (decl1)
15334       /* Clobbering an empty base is harmful if it overlays real data.  */
15335       && !is_empty_class (current_class_type)
15336       /* We can't clobber safely for an implicitly-defined default constructor
15337 	 because part of the initialization might happen before we enter the
15338 	 constructor, via AGGR_INIT_ZERO_FIRST (c++/68006).  */
15339       && !implicit_default_ctor_p (decl1))
15340     finish_expr_stmt (build_clobber_this ());
15341 
15342   if (!processing_template_decl
15343       && DECL_CONSTRUCTOR_P (decl1)
15344       && sanitize_flags_p (SANITIZE_VPTR)
15345       && !DECL_CLONED_FUNCTION_P (decl1)
15346       && !implicit_default_ctor_p (decl1))
15347     cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr);
15348 
15349   start_lambda_scope (decl1);
15350 
15351   return true;
15352 }
15353 
15354 
15355 /* Like start_preparsed_function, except that instead of a
15356    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
15357 
15358    Returns true on success.  If the DECLARATOR is not suitable
15359    for a function, we return false, which tells the parser to
15360    skip the entire function.  */
15361 
15362 bool
15363 start_function (cp_decl_specifier_seq *declspecs,
15364 		const cp_declarator *declarator,
15365 		tree attrs)
15366 {
15367   tree decl1;
15368 
15369   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
15370   invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION, decl1);
15371   if (decl1 == error_mark_node)
15372     return false;
15373   /* If the declarator is not suitable for a function definition,
15374      cause a syntax error.  */
15375   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
15376     {
15377       error ("invalid function declaration");
15378       return false;
15379     }
15380 
15381   if (DECL_MAIN_P (decl1))
15382     /* main must return int.  grokfndecl should have corrected it
15383        (and issued a diagnostic) if the user got it wrong.  */
15384     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
15385 			     integer_type_node));
15386 
15387   return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
15388 }
15389 
15390 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
15391    FN.  */
15392 
15393 static bool
15394 use_eh_spec_block (tree fn)
15395 {
15396   return (flag_exceptions && flag_enforce_eh_specs
15397 	  && !processing_template_decl
15398 	  && !type_throw_all_p (TREE_TYPE (fn))
15399 	  /* We insert the EH_SPEC_BLOCK only in the original
15400 	     function; then, it is copied automatically to the
15401 	     clones.  */
15402 	  && !DECL_CLONED_FUNCTION_P (fn)
15403 	  /* Implicitly-generated constructors and destructors have
15404 	     exception specifications.  However, those specifications
15405 	     are the union of the possible exceptions specified by the
15406 	     constructors/destructors for bases and members, so no
15407 	     unallowed exception will ever reach this function.  By
15408 	     not creating the EH_SPEC_BLOCK we save a little memory,
15409 	     and we avoid spurious warnings about unreachable
15410 	     code.  */
15411 	  && !DECL_DEFAULTED_FN (fn));
15412 }
15413 
15414 /* Store the parameter declarations into the current function declaration.
15415    This is called after parsing the parameter declarations, before
15416    digesting the body of the function.
15417 
15418    Also install to binding contour return value identifier, if any.  */
15419 
15420 static void
15421 store_parm_decls (tree current_function_parms)
15422 {
15423   tree fndecl = current_function_decl;
15424   tree parm;
15425 
15426   /* This is a chain of any other decls that came in among the parm
15427      declarations.  If a parm is declared with  enum {foo, bar} x;
15428      then CONST_DECLs for foo and bar are put here.  */
15429   tree nonparms = NULL_TREE;
15430 
15431   if (current_function_parms)
15432     {
15433       /* This case is when the function was defined with an ANSI prototype.
15434 	 The parms already have decls, so we need not do anything here
15435 	 except record them as in effect
15436 	 and complain if any redundant old-style parm decls were written.  */
15437 
15438       tree specparms = current_function_parms;
15439       tree next;
15440 
15441       /* Must clear this because it might contain TYPE_DECLs declared
15442 	     at class level.  */
15443       current_binding_level->names = NULL;
15444 
15445       /* If we're doing semantic analysis, then we'll call pushdecl
15446 	     for each of these.  We must do them in reverse order so that
15447 	     they end in the correct forward order.  */
15448       specparms = nreverse (specparms);
15449 
15450       for (parm = specparms; parm; parm = next)
15451 	{
15452 	  next = DECL_CHAIN (parm);
15453 	  if (TREE_CODE (parm) == PARM_DECL)
15454 	    pushdecl (parm);
15455 	  else
15456 	    {
15457 	      /* If we find an enum constant or a type tag,
15458 		 put it aside for the moment.  */
15459 	      TREE_CHAIN (parm) = NULL_TREE;
15460 	      nonparms = chainon (nonparms, parm);
15461 	    }
15462 	}
15463 
15464       /* Get the decls in their original chain order and record in the
15465 	 function.  This is all and only the PARM_DECLs that were
15466 	 pushed into scope by the loop above.  */
15467       DECL_ARGUMENTS (fndecl) = get_local_decls ();
15468     }
15469   else
15470     DECL_ARGUMENTS (fndecl) = NULL_TREE;
15471 
15472   /* Now store the final chain of decls for the arguments
15473      as the decl-chain of the current lexical scope.
15474      Put the enumerators in as well, at the front so that
15475      DECL_ARGUMENTS is not modified.  */
15476   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
15477 
15478   if (use_eh_spec_block (current_function_decl))
15479     current_eh_spec_block = begin_eh_spec_block ();
15480 }
15481 
15482 
15483 /* We have finished doing semantic analysis on DECL, but have not yet
15484    generated RTL for its body.  Save away our current state, so that
15485    when we want to generate RTL later we know what to do.  */
15486 
15487 static void
15488 save_function_data (tree decl)
15489 {
15490   struct language_function *f;
15491 
15492   /* Save the language-specific per-function data so that we can
15493      get it back when we really expand this function.  */
15494   gcc_assert (!DECL_PENDING_INLINE_P (decl));
15495 
15496   /* Make a copy.  */
15497   f = ggc_alloc<language_function> ();
15498   memcpy (f, cp_function_chain, sizeof (struct language_function));
15499   DECL_SAVED_FUNCTION_DATA (decl) = f;
15500 
15501   /* Clear out the bits we don't need.  */
15502   f->base.x_stmt_tree.x_cur_stmt_list = NULL;
15503   f->bindings = NULL;
15504   f->x_local_names = NULL;
15505   f->base.local_typedefs = NULL;
15506 }
15507 
15508 
15509 /* Set the return value of the constructor (if present).  */
15510 
15511 static void
15512 finish_constructor_body (void)
15513 {
15514   tree val;
15515   tree exprstmt;
15516 
15517   if (targetm.cxx.cdtor_returns_this ())
15518     {
15519       /* Any return from a constructor will end up here.  */
15520       add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15521 
15522       val = DECL_ARGUMENTS (current_function_decl);
15523       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15524 		    DECL_RESULT (current_function_decl), val);
15525       /* Return the address of the object.  */
15526       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15527       add_stmt (exprstmt);
15528     }
15529 }
15530 
15531 /* Do all the processing for the beginning of a destructor; set up the
15532    vtable pointers and cleanups for bases and members.  */
15533 
15534 static void
15535 begin_destructor_body (void)
15536 {
15537   tree compound_stmt;
15538 
15539   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
15540      issued an error message.  We still want to try to process the
15541      body of the function, but initialize_vtbl_ptrs will crash if
15542      TYPE_BINFO is NULL.  */
15543   if (COMPLETE_TYPE_P (current_class_type))
15544     {
15545       compound_stmt = begin_compound_stmt (0);
15546       /* Make all virtual function table pointers in non-virtual base
15547 	 classes point to CURRENT_CLASS_TYPE's virtual function
15548 	 tables.  */
15549       initialize_vtbl_ptrs (current_class_ptr);
15550       finish_compound_stmt (compound_stmt);
15551 
15552       if (flag_lifetime_dse
15553 	  /* Clobbering an empty base is harmful if it overlays real data.  */
15554 	  && !is_empty_class (current_class_type))
15555       {
15556 	if (sanitize_flags_p (SANITIZE_VPTR)
15557 	    && (flag_sanitize_recover & SANITIZE_VPTR) == 0
15558 	    && TYPE_CONTAINS_VPTR_P (current_class_type))
15559 	  {
15560 	    tree binfo = TYPE_BINFO (current_class_type);
15561 	    tree ref
15562 	      = cp_build_fold_indirect_ref (current_class_ptr);
15563 
15564 	    tree vtbl_ptr = build_vfield_ref (ref, TREE_TYPE (binfo));
15565 	    tree vtbl = build_zero_cst (TREE_TYPE (vtbl_ptr));
15566 	    tree stmt = cp_build_modify_expr (input_location, vtbl_ptr,
15567 					      NOP_EXPR, vtbl,
15568 					      tf_warning_or_error);
15569 	    /* If the vptr is shared with some virtual nearly empty base,
15570 	       don't clear it if not in charge, the dtor of the virtual
15571 	       nearly empty base will do that later.  */
15572 	    if (CLASSTYPE_VBASECLASSES (current_class_type)
15573 		&& CLASSTYPE_PRIMARY_BINFO (current_class_type)
15574 		&& BINFO_VIRTUAL_P
15575 			  (CLASSTYPE_PRIMARY_BINFO (current_class_type)))
15576 	      {
15577 		stmt = convert_to_void (stmt, ICV_STATEMENT,
15578 					tf_warning_or_error);
15579 		stmt = build_if_in_charge (stmt);
15580 	      }
15581 	    finish_decl_cleanup (NULL_TREE, stmt);
15582 	  }
15583 	else
15584 	  finish_decl_cleanup (NULL_TREE, build_clobber_this ());
15585       }
15586 
15587       /* And insert cleanups for our bases and members so that they
15588 	 will be properly destroyed if we throw.  */
15589       push_base_cleanups ();
15590     }
15591 }
15592 
15593 /* At the end of every destructor we generate code to delete the object if
15594    necessary.  Do that now.  */
15595 
15596 static void
15597 finish_destructor_body (void)
15598 {
15599   tree exprstmt;
15600 
15601   /* Any return from a destructor will end up here; that way all base
15602      and member cleanups will be run when the function returns.  */
15603   add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15604 
15605   if (targetm.cxx.cdtor_returns_this ())
15606     {
15607       tree val;
15608 
15609       val = DECL_ARGUMENTS (current_function_decl);
15610       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15611 		    DECL_RESULT (current_function_decl), val);
15612       /* Return the address of the object.  */
15613       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15614       add_stmt (exprstmt);
15615     }
15616 }
15617 
15618 /* Do the necessary processing for the beginning of a function body, which
15619    in this case includes member-initializers, but not the catch clauses of
15620    a function-try-block.  Currently, this means opening a binding level
15621    for the member-initializers (in a ctor), member cleanups (in a dtor),
15622    and capture proxies (in a lambda operator()).  */
15623 
15624 tree
15625 begin_function_body (void)
15626 {
15627   tree stmt;
15628 
15629   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
15630     return NULL_TREE;
15631 
15632   if (processing_template_decl)
15633     /* Do nothing now.  */;
15634   else
15635     /* Always keep the BLOCK node associated with the outermost pair of
15636        curly braces of a function.  These are needed for correct
15637        operation of dwarfout.c.  */
15638     keep_next_level (true);
15639 
15640   stmt = begin_compound_stmt (BCS_FN_BODY);
15641 
15642   if (processing_template_decl)
15643     /* Do nothing now.  */;
15644   else if (DECL_DESTRUCTOR_P (current_function_decl))
15645     begin_destructor_body ();
15646 
15647   return stmt;
15648 }
15649 
15650 /* Do the processing for the end of a function body.  Currently, this means
15651    closing out the cleanups for fully-constructed bases and members, and in
15652    the case of the destructor, deleting the object if desired.  Again, this
15653    is only meaningful for [cd]tors, since they are the only functions where
15654    there is a significant distinction between the main body and any
15655    function catch clauses.  Handling, say, main() return semantics here
15656    would be wrong, as flowing off the end of a function catch clause for
15657    main() would also need to return 0.  */
15658 
15659 void
15660 finish_function_body (tree compstmt)
15661 {
15662   if (compstmt == NULL_TREE)
15663     return;
15664 
15665   /* Close the block.  */
15666   finish_compound_stmt (compstmt);
15667 
15668   if (processing_template_decl)
15669     /* Do nothing now.  */;
15670   else if (DECL_CONSTRUCTOR_P (current_function_decl))
15671     finish_constructor_body ();
15672   else if (DECL_DESTRUCTOR_P (current_function_decl))
15673     finish_destructor_body ();
15674 }
15675 
15676 /* Given a function, returns the BLOCK corresponding to the outermost level
15677    of curly braces, skipping the artificial block created for constructor
15678    initializers.  */
15679 
15680 tree
15681 outer_curly_brace_block (tree fndecl)
15682 {
15683   tree block = DECL_INITIAL (fndecl);
15684   if (BLOCK_OUTER_CURLY_BRACE_P (block))
15685     return block;
15686   block = BLOCK_SUBBLOCKS (block);
15687   if (BLOCK_OUTER_CURLY_BRACE_P (block))
15688     return block;
15689   block = BLOCK_SUBBLOCKS (block);
15690   gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
15691   return block;
15692 }
15693 
15694 /* If FNDECL is a class's key method, add the class to the list of
15695    keyed classes that should be emitted.  */
15696 
15697 static void
15698 record_key_method_defined (tree fndecl)
15699 {
15700   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
15701       && DECL_VIRTUAL_P (fndecl)
15702       && !processing_template_decl)
15703     {
15704       tree fnclass = DECL_CONTEXT (fndecl);
15705       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
15706 	vec_safe_push (keyed_classes, fnclass);
15707     }
15708 }
15709 
15710 /* Subroutine of finish_function.
15711    Save the body of constexpr functions for possible
15712    future compile time evaluation.  */
15713 
15714 static void
15715 maybe_save_function_definition (tree fun)
15716 {
15717   if (!processing_template_decl
15718       && DECL_DECLARED_CONSTEXPR_P (fun)
15719       && !cp_function_chain->invalid_constexpr
15720       && !DECL_CLONED_FUNCTION_P (fun))
15721     register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
15722 }
15723 
15724 /* Finish up a function declaration and compile that function
15725    all the way to assembler language output.  The free the storage
15726    for the function definition. INLINE_P is TRUE if we just
15727    finished processing the body of an in-class inline function
15728    definition.  (This processing will have taken place after the
15729    class definition is complete.)  */
15730 
15731 tree
15732 finish_function (bool inline_p)
15733 {
15734   tree fndecl = current_function_decl;
15735   tree fntype, ctype = NULL_TREE;
15736 
15737   /* When we get some parse errors, we can end up without a
15738      current_function_decl, so cope.  */
15739   if (fndecl == NULL_TREE)
15740     return error_mark_node;
15741 
15742   finish_lambda_scope ();
15743 
15744   if (c_dialect_objc ())
15745     objc_finish_function ();
15746 
15747   record_key_method_defined (fndecl);
15748 
15749   fntype = TREE_TYPE (fndecl);
15750 
15751   /*  TREE_READONLY (fndecl) = 1;
15752       This caused &foo to be of type ptr-to-const-function
15753       which then got a warning when stored in a ptr-to-function variable.  */
15754 
15755   gcc_assert (building_stmt_list_p ());
15756   /* The current function is being defined, so its DECL_INITIAL should
15757      be set, and unless there's a multiple definition, it should be
15758      error_mark_node.  */
15759   gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
15760 
15761   /* For a cloned function, we've already got all the code we need;
15762      there's no need to add any extra bits.  */
15763   if (!DECL_CLONED_FUNCTION_P (fndecl))
15764     {
15765       /* Make it so that `main' always returns 0 by default.  */
15766       if (DECL_MAIN_P (current_function_decl))
15767 	finish_return_stmt (integer_zero_node);
15768 
15769       if (use_eh_spec_block (current_function_decl))
15770 	finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
15771 			      (TREE_TYPE (current_function_decl)),
15772 			      current_eh_spec_block);
15773     }
15774 
15775   /* If we're saving up tree structure, tie off the function now.  */
15776   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
15777 
15778   finish_fname_decls ();
15779 
15780   /* If this function can't throw any exceptions, remember that.  */
15781   if (!processing_template_decl
15782       && !cp_function_chain->can_throw
15783       && !flag_non_call_exceptions
15784       && !decl_replaceable_p (fndecl))
15785     TREE_NOTHROW (fndecl) = 1;
15786 
15787   /* This must come after expand_function_end because cleanups might
15788      have declarations (from inline functions) that need to go into
15789      this function's blocks.  */
15790 
15791   /* If the current binding level isn't the outermost binding level
15792      for this function, either there is a bug, or we have experienced
15793      syntax errors and the statement tree is malformed.  */
15794   if (current_binding_level->kind != sk_function_parms)
15795     {
15796       /* Make sure we have already experienced errors.  */
15797       gcc_assert (errorcount);
15798 
15799       /* Throw away the broken statement tree and extra binding
15800 	 levels.  */
15801       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
15802 
15803       while (current_binding_level->kind != sk_function_parms)
15804 	{
15805 	  if (current_binding_level->kind == sk_class)
15806 	    pop_nested_class ();
15807 	  else
15808 	    poplevel (0, 0, 0);
15809 	}
15810     }
15811   poplevel (1, 0, 1);
15812 
15813   /* Statements should always be full-expressions at the outermost set
15814      of curly braces for a function.  */
15815   gcc_assert (stmts_are_full_exprs_p ());
15816 
15817   /* If there are no return statements in a function with auto return type,
15818      the return type is void.  But if the declared type is something like
15819      auto*, this is an error.  */
15820   if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
15821       && TREE_TYPE (fntype) == current_function_auto_return_pattern)
15822     {
15823       if (is_auto (current_function_auto_return_pattern))
15824 	{
15825 	  apply_deduced_return_type (fndecl, void_type_node);
15826 	  fntype = TREE_TYPE (fndecl);
15827 	}
15828       else if (!current_function_returns_value
15829 	       && !current_function_returns_null)
15830 	{
15831 	  error ("no return statements in function returning %qT",
15832 		 current_function_auto_return_pattern);
15833 	  inform (input_location, "only plain %<auto%> return type can be "
15834 		  "deduced to %<void%>");
15835 	}
15836     }
15837 
15838   // If this is a concept, check that the definition is reasonable.
15839   if (DECL_DECLARED_CONCEPT_P (fndecl))
15840     check_function_concept (fndecl);
15841 
15842   /* Lambda closure members are implicitly constexpr if possible.  */
15843   if (cxx_dialect >= cxx17
15844       && LAMBDA_TYPE_P (CP_DECL_CONTEXT (fndecl)))
15845     DECL_DECLARED_CONSTEXPR_P (fndecl)
15846       = ((processing_template_decl
15847 	  || is_valid_constexpr_fn (fndecl, /*complain*/false))
15848 	 && potential_constant_expression (DECL_SAVED_TREE (fndecl)));
15849 
15850   /* Save constexpr function body before it gets munged by
15851      the NRV transformation.   */
15852   maybe_save_function_definition (fndecl);
15853 
15854   /* Invoke the pre-genericize plugin before we start munging things.  */
15855   if (!processing_template_decl)
15856     invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
15857 
15858   /* Perform delayed folding before NRV transformation.  */
15859   if (!processing_template_decl)
15860     cp_fold_function (fndecl);
15861 
15862   /* Set up the named return value optimization, if we can.  Candidate
15863      variables are selected in check_return_expr.  */
15864   if (current_function_return_value)
15865     {
15866       tree r = current_function_return_value;
15867       tree outer;
15868 
15869       if (r != error_mark_node
15870 	  /* This is only worth doing for fns that return in memory--and
15871 	     simpler, since we don't have to worry about promoted modes.  */
15872 	  && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
15873 	  /* Only allow this for variables declared in the outer scope of
15874 	     the function so we know that their lifetime always ends with a
15875 	     return; see g++.dg/opt/nrv6.C.  We could be more flexible if
15876 	     we were to do this optimization in tree-ssa.  */
15877 	  && (outer = outer_curly_brace_block (fndecl))
15878 	  && chain_member (r, BLOCK_VARS (outer)))
15879 	finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
15880 
15881       current_function_return_value = NULL_TREE;
15882     }
15883 
15884   /* Remember that we were in class scope.  */
15885   if (current_class_name)
15886     ctype = current_class_type;
15887 
15888   /* Must mark the RESULT_DECL as being in this function.  */
15889   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
15890 
15891   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
15892      to the FUNCTION_DECL node itself.  */
15893   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
15894 
15895   /* Save away current state, if appropriate.  */
15896   if (!processing_template_decl)
15897     save_function_data (fndecl);
15898 
15899   /* Complain if there's just no return statement.  */
15900   if (warn_return_type
15901       && !VOID_TYPE_P (TREE_TYPE (fntype))
15902       && !dependent_type_p (TREE_TYPE (fntype))
15903       && !current_function_returns_value && !current_function_returns_null
15904       /* Don't complain if we abort or throw.  */
15905       && !current_function_returns_abnormally
15906       /* Don't complain if there's an infinite loop.  */
15907       && !current_function_infinite_loop
15908       /* Don't complain if we are declared noreturn.  */
15909       && !TREE_THIS_VOLATILE (fndecl)
15910       && !DECL_NAME (DECL_RESULT (fndecl))
15911       && !TREE_NO_WARNING (fndecl)
15912       /* Structor return values (if any) are set by the compiler.  */
15913       && !DECL_CONSTRUCTOR_P (fndecl)
15914       && !DECL_DESTRUCTOR_P (fndecl)
15915       && targetm.warn_func_return (fndecl))
15916     {
15917       warning (OPT_Wreturn_type,
15918  	       "no return statement in function returning non-void");
15919       TREE_NO_WARNING (fndecl) = 1;
15920     }
15921 
15922   /* Store the end of the function, so that we get good line number
15923      info for the epilogue.  */
15924   cfun->function_end_locus = input_location;
15925 
15926   /* Complain about parameters that are only set, but never otherwise used.  */
15927   if (warn_unused_but_set_parameter
15928       && !processing_template_decl
15929       && errorcount == unused_but_set_errorcount
15930       && !DECL_CLONED_FUNCTION_P (fndecl))
15931     {
15932       tree decl;
15933 
15934       for (decl = DECL_ARGUMENTS (fndecl);
15935 	   decl;
15936 	   decl = DECL_CHAIN (decl))
15937 	if (TREE_USED (decl)
15938 	    && TREE_CODE (decl) == PARM_DECL
15939 	    && !DECL_READ_P (decl)
15940 	    && DECL_NAME (decl)
15941 	    && !DECL_ARTIFICIAL (decl)
15942 	    && !TREE_NO_WARNING (decl)
15943 	    && !DECL_IN_SYSTEM_HEADER (decl)
15944 	    && TREE_TYPE (decl) != error_mark_node
15945 	    && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
15946 	    && (!CLASS_TYPE_P (TREE_TYPE (decl))
15947 	        || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
15948 	  warning_at (DECL_SOURCE_LOCATION (decl),
15949 		      OPT_Wunused_but_set_parameter,
15950 		      "parameter %qD set but not used", decl);
15951       unused_but_set_errorcount = errorcount;
15952     }
15953 
15954   /* Complain about locally defined typedefs that are not used in this
15955      function.  */
15956   maybe_warn_unused_local_typedefs ();
15957 
15958   /* Possibly warn about unused parameters.  */
15959   if (warn_unused_parameter
15960       && !processing_template_decl
15961       && !DECL_CLONED_FUNCTION_P (fndecl))
15962     do_warn_unused_parameter (fndecl);
15963 
15964   /* Genericize before inlining.  */
15965   if (!processing_template_decl)
15966     {
15967       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
15968       cp_genericize (fndecl);
15969       /* Clear out the bits we don't need.  */
15970       f->x_current_class_ptr = NULL;
15971       f->x_current_class_ref = NULL;
15972       f->x_eh_spec_block = NULL;
15973       f->x_in_charge_parm = NULL;
15974       f->x_vtt_parm = NULL;
15975       f->x_return_value = NULL;
15976       f->bindings = NULL;
15977       f->extern_decl_map = NULL;
15978       f->infinite_loops = NULL;
15979     }
15980   /* Clear out the bits we don't need.  */
15981   local_names = NULL;
15982 
15983   /* We're leaving the context of this function, so zap cfun.  It's still in
15984      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
15985   set_cfun (NULL);
15986   current_function_decl = NULL;
15987 
15988   /* If this is an in-class inline definition, we may have to pop the
15989      bindings for the template parameters that we added in
15990      maybe_begin_member_template_processing when start_function was
15991      called.  */
15992   if (inline_p)
15993     maybe_end_member_template_processing ();
15994 
15995   /* Leave the scope of the class.  */
15996   if (ctype)
15997     pop_nested_class ();
15998 
15999   --function_depth;
16000 
16001   /* Clean up.  */
16002   current_function_decl = NULL_TREE;
16003 
16004   invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
16005   return fndecl;
16006 }
16007 
16008 /* Create the FUNCTION_DECL for a function definition.
16009    DECLSPECS and DECLARATOR are the parts of the declaration;
16010    they describe the return type and the name of the function,
16011    but twisted together in a fashion that parallels the syntax of C.
16012 
16013    This function creates a binding context for the function body
16014    as well as setting up the FUNCTION_DECL in current_function_decl.
16015 
16016    Returns a FUNCTION_DECL on success.
16017 
16018    If the DECLARATOR is not suitable for a function (it defines a datum
16019    instead), we return 0, which tells yyparse to report a parse error.
16020 
16021    May return void_type_node indicating that this method is actually
16022    a friend.  See grokfield for more details.
16023 
16024    Came here with a `.pushlevel' .
16025 
16026    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
16027    CHANGES TO CODE IN `grokfield'.  */
16028 
16029 tree
16030 grokmethod (cp_decl_specifier_seq *declspecs,
16031 	    const cp_declarator *declarator, tree attrlist)
16032 {
16033   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
16034 				&attrlist);
16035 
16036   if (fndecl == error_mark_node)
16037     return error_mark_node;
16038 
16039   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
16040     {
16041       error ("invalid member function declaration");
16042       return error_mark_node;
16043     }
16044 
16045   if (attrlist)
16046     cplus_decl_attributes (&fndecl, attrlist, 0);
16047 
16048   /* Pass friends other than inline friend functions back.  */
16049   if (fndecl == void_type_node)
16050     return fndecl;
16051 
16052   if (DECL_IN_AGGR_P (fndecl))
16053     {
16054       if (DECL_CLASS_SCOPE_P (fndecl))
16055 	error ("%qD is already defined in class %qT", fndecl,
16056 	       DECL_CONTEXT (fndecl));
16057       return error_mark_node;
16058     }
16059 
16060   check_template_shadow (fndecl);
16061 
16062   if (TREE_PUBLIC (fndecl))
16063     DECL_COMDAT (fndecl) = 1;
16064   DECL_DECLARED_INLINE_P (fndecl) = 1;
16065   DECL_NO_INLINE_WARNING_P (fndecl) = 1;
16066 
16067   /* We process method specializations in finish_struct_1.  */
16068   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
16069     {
16070       fndecl = push_template_decl (fndecl);
16071       if (fndecl == error_mark_node)
16072 	return fndecl;
16073     }
16074 
16075   if (! DECL_FRIEND_P (fndecl))
16076     {
16077       if (DECL_CHAIN (fndecl))
16078 	{
16079 	  fndecl = copy_node (fndecl);
16080 	  TREE_CHAIN (fndecl) = NULL_TREE;
16081 	}
16082     }
16083 
16084   cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
16085 
16086   DECL_IN_AGGR_P (fndecl) = 1;
16087   return fndecl;
16088 }
16089 
16090 
16091 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
16092    we can lay it out later, when and if its type becomes complete.
16093 
16094    Also handle constexpr variables where the initializer involves
16095    an unlowered PTRMEM_CST because the class isn't complete yet.  */
16096 
16097 void
16098 maybe_register_incomplete_var (tree var)
16099 {
16100   gcc_assert (VAR_P (var));
16101 
16102   /* Keep track of variables with incomplete types.  */
16103   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
16104       && DECL_EXTERNAL (var))
16105     {
16106       tree inner_type = TREE_TYPE (var);
16107 
16108       while (TREE_CODE (inner_type) == ARRAY_TYPE)
16109 	inner_type = TREE_TYPE (inner_type);
16110       inner_type = TYPE_MAIN_VARIANT (inner_type);
16111 
16112       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
16113 	  /* RTTI TD entries are created while defining the type_info.  */
16114 	  || (TYPE_LANG_SPECIFIC (inner_type)
16115 	      && TYPE_BEING_DEFINED (inner_type)))
16116 	{
16117 	  incomplete_var iv = {var, inner_type};
16118 	  vec_safe_push (incomplete_vars, iv);
16119 	}
16120       else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
16121 	       && decl_constant_var_p (var)
16122 	       && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
16123 	{
16124 	  /* When the outermost open class is complete we can resolve any
16125 	     pointers-to-members.  */
16126 	  tree context = outermost_open_class ();
16127 	  incomplete_var iv = {var, context};
16128 	  vec_safe_push (incomplete_vars, iv);
16129 	}
16130     }
16131 }
16132 
16133 /* Called when a class type (given by TYPE) is defined.  If there are
16134    any existing VAR_DECLs whose type has been completed by this
16135    declaration, update them now.  */
16136 
16137 void
16138 complete_vars (tree type)
16139 {
16140   unsigned ix;
16141   incomplete_var *iv;
16142 
16143   for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
16144     {
16145       if (same_type_p (type, iv->incomplete_type))
16146 	{
16147 	  tree var = iv->decl;
16148 	  tree type = TREE_TYPE (var);
16149 
16150 	  if (type != error_mark_node
16151 	      && (TYPE_MAIN_VARIANT (strip_array_types (type))
16152 		  == iv->incomplete_type))
16153 	    {
16154 	      /* Complete the type of the variable.  The VAR_DECL itself
16155 		 will be laid out in expand_expr.  */
16156 	      complete_type (type);
16157 	      cp_apply_type_quals_to_decl (cp_type_quals (type), var);
16158 	    }
16159 
16160 	  /* Remove this entry from the list.  */
16161 	  incomplete_vars->unordered_remove (ix);
16162 	}
16163       else
16164 	ix++;
16165     }
16166 
16167   /* Check for pending declarations which may have abstract type.  */
16168   complete_type_check_abstract (type);
16169 }
16170 
16171 /* If DECL is of a type which needs a cleanup, build and return an
16172    expression to perform that cleanup here.  Return NULL_TREE if no
16173    cleanup need be done.  DECL can also be a _REF when called from
16174    split_nonconstant_init_1.  */
16175 
16176 tree
16177 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
16178 {
16179   tree type;
16180   tree attr;
16181   tree cleanup;
16182 
16183   /* Assume no cleanup is required.  */
16184   cleanup = NULL_TREE;
16185 
16186   if (error_operand_p (decl))
16187     return cleanup;
16188 
16189   /* Handle "__attribute__((cleanup))".  We run the cleanup function
16190      before the destructor since the destructor is what actually
16191      terminates the lifetime of the object.  */
16192   if (DECL_P (decl))
16193     attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
16194   else
16195     attr = NULL_TREE;
16196   if (attr)
16197     {
16198       tree id;
16199       tree fn;
16200       tree arg;
16201 
16202       /* Get the name specified by the user for the cleanup function.  */
16203       id = TREE_VALUE (TREE_VALUE (attr));
16204       /* Look up the name to find the cleanup function to call.  It is
16205 	 important to use lookup_name here because that is what is
16206 	 used in c-common.c:handle_cleanup_attribute when performing
16207 	 initial checks on the attribute.  Note that those checks
16208 	 include ensuring that the function found is not an overloaded
16209 	 function, or an object with an overloaded call operator,
16210 	 etc.; we can rely on the fact that the function found is an
16211 	 ordinary FUNCTION_DECL.  */
16212       fn = lookup_name (id);
16213       arg = build_address (decl);
16214       if (!mark_used (decl, complain) && !(complain & tf_error))
16215 	return error_mark_node;
16216       cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
16217       if (cleanup == error_mark_node)
16218 	return error_mark_node;
16219     }
16220   /* Handle ordinary C++ destructors.  */
16221   type = TREE_TYPE (decl);
16222   if (type_build_dtor_call (type))
16223     {
16224       int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
16225       tree addr;
16226       tree call;
16227 
16228       if (TREE_CODE (type) == ARRAY_TYPE)
16229 	addr = decl;
16230       else
16231 	addr = build_address (decl);
16232 
16233       call = build_delete (TREE_TYPE (addr), addr,
16234 			   sfk_complete_destructor, flags, 0, complain);
16235       if (call == error_mark_node)
16236 	cleanup = error_mark_node;
16237       else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
16238 	/* Discard the call.  */;
16239       else if (cleanup)
16240 	cleanup = cp_build_compound_expr (cleanup, call, complain);
16241       else
16242 	cleanup = call;
16243     }
16244 
16245   /* build_delete sets the location of the destructor call to the
16246      current location, even though the destructor is going to be
16247      called later, at the end of the current scope.  This can lead to
16248      a "jumpy" behavior for users of debuggers when they step around
16249      the end of the block.  So let's unset the location of the
16250      destructor call instead.  */
16251   protected_set_expr_location (cleanup, UNKNOWN_LOCATION);
16252 
16253   if (cleanup
16254       && DECL_P (decl)
16255       && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl)))
16256       /* Treat objects with destructors as used; the destructor may do
16257 	 something substantive.  */
16258       && !mark_used (decl, complain) && !(complain & tf_error))
16259     return error_mark_node;
16260 
16261   return cleanup;
16262 }
16263 
16264 
16265 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
16266    FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
16267    METHOD_TYPE or FUNCTION_TYPE, or pointer to member function.  */
16268 
16269 tree
16270 static_fn_type (tree memfntype)
16271 {
16272   tree fntype;
16273   tree args;
16274 
16275   if (TYPE_PTRMEMFUNC_P (memfntype))
16276     memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
16277   if (POINTER_TYPE_P (memfntype)
16278       || TREE_CODE (memfntype) == FUNCTION_DECL)
16279     memfntype = TREE_TYPE (memfntype);
16280   if (TREE_CODE (memfntype) == FUNCTION_TYPE)
16281     return memfntype;
16282   gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
16283   args = TYPE_ARG_TYPES (memfntype);
16284   cp_ref_qualifier rqual = type_memfn_rqual (memfntype);
16285   fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
16286   fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype), rqual);
16287   fntype = (cp_build_type_attribute_variant
16288 	    (fntype, TYPE_ATTRIBUTES (memfntype)));
16289   fntype = (build_exception_variant
16290 	    (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
16291   if (TYPE_HAS_LATE_RETURN_TYPE (memfntype))
16292     TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
16293   return fntype;
16294 }
16295 
16296 /* DECL was originally constructed as a non-static member function,
16297    but turned out to be static.  Update it accordingly.  */
16298 
16299 void
16300 revert_static_member_fn (tree decl)
16301 {
16302   tree stype = static_fn_type (decl);
16303   cp_cv_quals quals = type_memfn_quals (stype);
16304   cp_ref_qualifier rqual = type_memfn_rqual (stype);
16305 
16306   if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
16307     stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
16308 
16309   TREE_TYPE (decl) = stype;
16310 
16311   if (DECL_ARGUMENTS (decl))
16312     DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
16313   DECL_STATIC_FUNCTION_P (decl) = 1;
16314 }
16315 
16316 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
16317    one of the language-independent trees.  */
16318 
16319 enum cp_tree_node_structure_enum
16320 cp_tree_node_structure (union lang_tree_node * t)
16321 {
16322   switch (TREE_CODE (&t->generic))
16323     {
16324     case DEFAULT_ARG:		return TS_CP_DEFAULT_ARG;
16325     case DEFERRED_NOEXCEPT:	return TS_CP_DEFERRED_NOEXCEPT;
16326     case IDENTIFIER_NODE:	return TS_CP_IDENTIFIER;
16327     case OVERLOAD:		return TS_CP_OVERLOAD;
16328     case TEMPLATE_PARM_INDEX:	return TS_CP_TPI;
16329     case PTRMEM_CST:		return TS_CP_PTRMEM;
16330     case BASELINK:		return TS_CP_BASELINK;
16331     case TEMPLATE_DECL:		return TS_CP_TEMPLATE_DECL;
16332     case STATIC_ASSERT:		return TS_CP_STATIC_ASSERT;
16333     case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
16334     case TRAIT_EXPR:		return TS_CP_TRAIT_EXPR;
16335     case LAMBDA_EXPR:		return TS_CP_LAMBDA_EXPR;
16336     case TEMPLATE_INFO:		return TS_CP_TEMPLATE_INFO;
16337     case CONSTRAINT_INFO:       return TS_CP_CONSTRAINT_INFO;
16338     case USERDEF_LITERAL:	return TS_CP_USERDEF_LITERAL;
16339     default:			return TS_CP_GENERIC;
16340     }
16341 }
16342 
16343 /* Build the void_list_node (void_type_node having been created).  */
16344 tree
16345 build_void_list_node (void)
16346 {
16347   tree t = build_tree_list (NULL_TREE, void_type_node);
16348   return t;
16349 }
16350 
16351 bool
16352 cp_missing_noreturn_ok_p (tree decl)
16353 {
16354   /* A missing noreturn is ok for the `main' function.  */
16355   return DECL_MAIN_P (decl);
16356 }
16357 
16358 /* Return the decl used to identify the COMDAT group into which DECL should
16359    be placed.  */
16360 
16361 tree
16362 cxx_comdat_group (tree decl)
16363 {
16364   /* Virtual tables, construction virtual tables, and virtual table
16365      tables all go in a single COMDAT group, named after the primary
16366      virtual table.  */
16367   if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
16368     decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
16369   /* For all other DECLs, the COMDAT group is the mangled name of the
16370      declaration itself.  */
16371   else
16372     {
16373       while (DECL_THUNK_P (decl))
16374 	{
16375 	  /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
16376 	     into the same section as the target function.  In that case
16377 	     we must return target's name.  */
16378 	  tree target = THUNK_TARGET (decl);
16379 	  if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
16380 	      && DECL_SECTION_NAME (target) != NULL
16381 	      && DECL_ONE_ONLY (target))
16382 	    decl = target;
16383 	  else
16384 	    break;
16385 	}
16386     }
16387 
16388   return decl;
16389 }
16390 
16391 /* Returns the return type for FN as written by the user, which may include
16392    a placeholder for a deduced return type.  */
16393 
16394 tree
16395 fndecl_declared_return_type (tree fn)
16396 {
16397   fn = STRIP_TEMPLATE (fn);
16398   if (FNDECL_USED_AUTO (fn))
16399     {
16400       struct language_function *f = NULL;
16401       if (DECL_STRUCT_FUNCTION (fn))
16402 	f = DECL_STRUCT_FUNCTION (fn)->language;
16403       if (f == NULL)
16404 	f = DECL_SAVED_FUNCTION_DATA (fn);
16405       return f->x_auto_return_pattern;
16406     }
16407   return TREE_TYPE (TREE_TYPE (fn));
16408 }
16409 
16410 /* Returns true iff DECL is a variable or function declared with an auto type
16411    that has not yet been deduced to a real type.  */
16412 
16413 bool
16414 undeduced_auto_decl (tree decl)
16415 {
16416   if (cxx_dialect < cxx11)
16417     return false;
16418   return ((VAR_OR_FUNCTION_DECL_P (decl)
16419 	   || TREE_CODE (decl) == TEMPLATE_DECL)
16420 	  && type_uses_auto (TREE_TYPE (decl)));
16421 }
16422 
16423 /* Complain if DECL has an undeduced return type.  */
16424 
16425 bool
16426 require_deduced_type (tree decl, tsubst_flags_t complain)
16427 {
16428   if (undeduced_auto_decl (decl))
16429     {
16430       if (complain & tf_error)
16431 	error ("use of %qD before deduction of %<auto%>", decl);
16432       return false;
16433     }
16434   return true;
16435 }
16436 
16437 #include "gt-cp-decl.h"
16438