1 /* Process declarations and variables for -*- C++ -*- compiler.
2    Copyright (C) 1988-2022 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 #include "gcc-rich-location.h"
55 #include "langhooks.h"
56 #include "context.h"  /* For 'g'.  */
57 #include "omp-general.h"
58 #include "omp-offload.h"  /* For offload_vars.  */
59 #include "opts.h"
60 #include "langhooks-def.h"  /* For lhd_simulate_record_decl  */
61 
62 /* Possible cases of bad specifiers type used by bad_specifiers. */
63 enum bad_spec_place {
64   BSP_VAR,    /* variable */
65   BSP_PARM,   /* parameter */
66   BSP_TYPE,   /* type */
67   BSP_FIELD   /* field */
68 };
69 
70 static const char *redeclaration_error_message (tree, tree);
71 
72 static int decl_jump_unsafe (tree);
73 static void require_complete_types_for_parms (tree);
74 static tree grok_reference_init (tree, tree, tree, int);
75 static tree grokvardecl (tree, tree, tree, const cp_decl_specifier_seq *,
76                                int, int, int, bool, int, tree, location_t);
77 static void check_static_variable_definition (tree, tree);
78 static void record_unknown_type (tree, const char *);
79 static int member_function_or_else (tree, tree, enum overload_flags);
80 static tree local_variable_p_walkfn (tree *, int *, void *);
81 static const char *tag_name (enum tag_types);
82 static tree lookup_and_check_tag (enum tag_types, tree, TAG_how, bool);
83 static void maybe_deduce_size_from_array_init (tree, tree);
84 static void layout_var_decl (tree);
85 static tree check_initializer (tree, tree, int, vec<tree, va_gc> **);
86 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
87 static void copy_type_enum (tree , tree);
88 static void check_function_type (tree, tree);
89 static void finish_constructor_body (void);
90 static void begin_destructor_body (void);
91 static void finish_destructor_body (void);
92 static void record_key_method_defined (tree);
93 static tree create_array_type_for_decl (tree, tree, tree, location_t);
94 static tree get_atexit_node (void);
95 static tree get_dso_handle_node (void);
96 static tree start_cleanup_fn (void);
97 static void end_cleanup_fn (void);
98 static tree cp_make_fname_decl (location_t, tree, int);
99 static void initialize_predefined_identifiers (void);
100 static tree check_special_function_return_type
101        (special_function_kind, tree, tree, int, const location_t*);
102 static tree push_cp_library_fn (enum tree_code, tree, int);
103 static tree build_cp_library_fn (tree, enum tree_code, tree, int);
104 static void store_parm_decls (tree);
105 static void initialize_local_var (tree, tree);
106 static void expand_static_init (tree, tree);
107 static location_t smallest_type_location (const cp_decl_specifier_seq*);
108 
109 /* The following symbols are subsumed in the cp_global_trees array, and
110    listed here individually for documentation purposes.
111 
112    C++ extensions
113           tree wchar_decl_node;
114 
115           tree vtable_entry_type;
116           tree delta_type_node;
117           tree __t_desc_type_node;
118 
119           tree class_type_node;
120           tree unknown_type_node;
121 
122    Array type `vtable_entry_type[]'
123 
124           tree vtbl_type_node;
125           tree vtbl_ptr_type_node;
126 
127    Namespaces,
128 
129           tree std_node;
130           tree abi_node;
131 
132    A FUNCTION_DECL which can call `abort'.  Not necessarily the
133    one that the user will declare, but sufficient to be called
134    by routines that want to abort the program.
135 
136           tree abort_fndecl;
137 
138    Used by RTTI
139           tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
140           tree tinfo_var_id;  */
141 
142 tree cp_global_trees[CPTI_MAX];
143 
144 /* A list of objects which have constructors or destructors
145    which reside in namespace scope.  The decl is stored in
146    the TREE_VALUE slot and the initializer is stored
147    in the TREE_PURPOSE slot.  */
148 tree static_aggregates;
149 
150 /* Like static_aggregates, but for thread_local variables.  */
151 tree tls_aggregates;
152 
153 /* A hash-map mapping from variable decls to the dynamic initializer for
154    the decl.  This is currently only used by OpenMP.  */
155 decl_tree_map *dynamic_initializers;
156 
157 /* -- end of C++ */
158 
159 /* A node for the integer constant 2.  */
160 
161 tree integer_two_node;
162 
163 /* vector of static decls.  */
164 vec<tree, va_gc> *static_decls;
165 
166 /* vector of keyed classes.  */
167 vec<tree, va_gc> *keyed_classes;
168 
169 /* Used only for jumps to as-yet undefined labels, since jumps to
170    defined labels can have their validity checked immediately.  */
171 
172 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
173   struct named_label_use_entry *next;
174   /* The binding level to which this entry is *currently* attached.
175      This is initially the binding level in which the goto appeared,
176      but is modified as scopes are closed.  */
177   cp_binding_level *binding_level;
178   /* The head of the names list that was current when the goto appeared,
179      or the inner scope popped.  These are the decls that will *not* be
180      skipped when jumping to the label.  */
181   tree names_in_scope;
182   /* The location of the goto, for error reporting.  */
183   location_t o_goto_locus;
184   /* True if an OpenMP structured block scope has been closed since
185      the goto appeared.  This means that the branch from the label will
186      illegally exit an OpenMP scope.  */
187   bool in_omp_scope;
188 };
189 
190 /* A list of all LABEL_DECLs in the function that have names.  Here so
191    we can clear out their names' definitions at the end of the
192    function, and so we can check the validity of jumps to these labels.  */
193 
194 struct GTY((for_user)) named_label_entry {
195 
196   tree name;  /* Name of decl. */
197 
198   tree label_decl; /* LABEL_DECL, unless deleted local label. */
199 
200   named_label_entry *outer; /* Outer shadowed chain.  */
201 
202   /* The binding level to which the label is *currently* attached.
203      This is initially set to the binding level in which the label
204      is defined, but is modified as scopes are closed.  */
205   cp_binding_level *binding_level;
206 
207   /* The head of the names list that was current when the label was
208      defined, or the inner scope popped.  These are the decls that will
209      be skipped when jumping to the label.  */
210   tree names_in_scope;
211 
212   /* A vector of all decls from all binding levels that would be
213      crossed by a backward branch to the label.  */
214   vec<tree, va_gc> *bad_decls;
215 
216   /* A list of uses of the label, before the label is defined.  */
217   named_label_use_entry *uses;
218 
219   /* The following bits are set after the label is defined, and are
220      updated as scopes are popped.  They indicate that a jump to the
221      label will illegally enter a scope of the given flavor.  */
222   bool in_try_scope;
223   bool in_catch_scope;
224   bool in_omp_scope;
225   bool in_transaction_scope;
226   bool in_constexpr_if;
227   bool in_consteval_if;
228 };
229 
230 #define named_labels cp_function_chain->x_named_labels
231 
232 /* The number of function bodies which we are currently processing.
233    (Zero if we are at namespace scope, one inside the body of a
234    function, two inside the body of a function in a local class, etc.)  */
235 int function_depth;
236 
237 /* Whether the exception-specifier is part of a function type (i.e. C++17).  */
238 bool flag_noexcept_type;
239 
240 /* States indicating how grokdeclarator() should handle declspecs marked
241    with __attribute__((deprecated)).  An object declared as
242    __attribute__((deprecated)) suppresses warnings of uses of other
243    deprecated items.  */
244 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
245 
246 
247 /* A list of VAR_DECLs whose type was incomplete at the time the
248    variable was declared.  */
249 
250 struct GTY(()) incomplete_var {
251   tree decl;
252   tree incomplete_type;
253 };
254 
255 
256 static GTY(()) vec<incomplete_var, va_gc> *incomplete_vars;
257 
258 /* Returns the kind of template specialization we are currently
259    processing, given that it's declaration contained N_CLASS_SCOPES
260    explicit scope qualifications.  */
261 
262 tmpl_spec_kind
current_tmpl_spec_kind(int n_class_scopes)263 current_tmpl_spec_kind (int n_class_scopes)
264 {
265   int n_template_parm_scopes = 0;
266   int seen_specialization_p = 0;
267   int innermost_specialization_p = 0;
268   cp_binding_level *b;
269 
270   /* Scan through the template parameter scopes.  */
271   for (b = current_binding_level;
272        b->kind == sk_template_parms;
273        b = b->level_chain)
274     {
275       /* If we see a specialization scope inside a parameter scope,
276            then something is wrong.  That corresponds to a declaration
277            like:
278 
279               template <class T> template <> ...
280 
281            which is always invalid since [temp.expl.spec] forbids the
282            specialization of a class member template if the enclosing
283            class templates are not explicitly specialized as well.  */
284       if (b->explicit_spec_p)
285           {
286             if (n_template_parm_scopes == 0)
287               innermost_specialization_p = 1;
288             else
289               seen_specialization_p = 1;
290           }
291       else if (seen_specialization_p == 1)
292           return tsk_invalid_member_spec;
293 
294       ++n_template_parm_scopes;
295     }
296 
297   /* Handle explicit instantiations.  */
298   if (processing_explicit_instantiation)
299     {
300       if (n_template_parm_scopes != 0)
301           /* We've seen a template parameter list during an explicit
302              instantiation.  For example:
303 
304                template <class T> template void f(int);
305 
306              This is erroneous.  */
307           return tsk_invalid_expl_inst;
308       else
309           return tsk_expl_inst;
310     }
311 
312   if (n_template_parm_scopes < n_class_scopes)
313     /* We've not seen enough template headers to match all the
314        specialized classes present.  For example:
315 
316            template <class T> void R<T>::S<T>::f(int);
317 
318        This is invalid; there needs to be one set of template
319        parameters for each class.  */
320     return tsk_insufficient_parms;
321   else if (n_template_parm_scopes == n_class_scopes)
322     /* We're processing a non-template declaration (even though it may
323        be a member of a template class.)  For example:
324 
325            template <class T> void S<T>::f(int);
326 
327        The `class T' matches the `S<T>', leaving no template headers
328        corresponding to the `f'.  */
329     return tsk_none;
330   else if (n_template_parm_scopes > n_class_scopes + 1)
331     /* We've got too many template headers.  For example:
332 
333            template <> template <class T> void f (T);
334 
335        There need to be more enclosing classes.  */
336     return tsk_excessive_parms;
337   else
338     /* This must be a template.  It's of the form:
339 
340            template <class T> template <class U> void S<T>::f(U);
341 
342        This is a specialization if the innermost level was a
343        specialization; otherwise it's just a definition of the
344        template.  */
345     return innermost_specialization_p ? tsk_expl_spec : tsk_template;
346 }
347 
348 /* Exit the current scope.  */
349 
350 void
finish_scope(void)351 finish_scope (void)
352 {
353   poplevel (0, 0, 0);
354 }
355 
356 /* When a label goes out of scope, check to see if that label was used
357    in a valid manner, and issue any appropriate warnings or errors.  */
358 
359 static void
check_label_used(tree label)360 check_label_used (tree label)
361 {
362   if (!processing_template_decl)
363     {
364       if (DECL_INITIAL (label) == NULL_TREE)
365           {
366             location_t location;
367 
368             error ("label %q+D used but not defined", label);
369             location = input_location;
370               /* FIXME want (LOCATION_FILE (input_location), (line)0) */
371             /* Avoid crashing later.  */
372             define_label (location, DECL_NAME (label));
373           }
374       else
375           warn_for_unused_label (label);
376     }
377 }
378 
379 /* Helper function to sort named label entries in a vector by DECL_UID.  */
380 
381 static int
sort_labels(const void * a,const void * b)382 sort_labels (const void *a, const void *b)
383 {
384   tree label1 = *(tree const *) a;
385   tree label2 = *(tree const *) b;
386 
387   /* DECL_UIDs can never be equal.  */
388   return DECL_UID (label1) > DECL_UID (label2) ? -1 : +1;
389 }
390 
391 /* At the end of a function, all labels declared within the function
392    go out of scope.  BLOCK is the top-level block for the
393    function.  */
394 
395 static void
pop_labels(tree block)396 pop_labels (tree block)
397 {
398   if (!named_labels)
399     return;
400 
401   /* We need to add the labels to the block chain, so debug
402      information is emitted.  But, we want the order to be stable so
403      need to sort them first.  Otherwise the debug output could be
404      randomly ordered.  I guess it's mostly stable, unless the hash
405      table implementation changes.  */
406   auto_vec<tree, 32> labels (named_labels->elements ());
407   hash_table<named_label_hash>::iterator end (named_labels->end ());
408   for (hash_table<named_label_hash>::iterator iter
409            (named_labels->begin ()); iter != end; ++iter)
410     {
411       named_label_entry *ent = *iter;
412 
413       gcc_checking_assert (!ent->outer);
414       if (ent->label_decl)
415           labels.quick_push (ent->label_decl);
416       ggc_free (ent);
417     }
418   named_labels = NULL;
419   labels.qsort (sort_labels);
420 
421   while (labels.length ())
422     {
423       tree label = labels.pop ();
424 
425       DECL_CHAIN (label) = BLOCK_VARS (block);
426       BLOCK_VARS (block) = label;
427 
428       check_label_used (label);
429     }
430 }
431 
432 /* At the end of a block with local labels, restore the outer definition.  */
433 
434 static void
pop_local_label(tree id,tree label)435 pop_local_label (tree id, tree label)
436 {
437   check_label_used (label);
438   named_label_entry **slot = named_labels->find_slot_with_hash
439     (id, IDENTIFIER_HASH_VALUE (id), NO_INSERT);
440   named_label_entry *ent = *slot;
441 
442   if (ent->outer)
443     ent = ent->outer;
444   else
445     {
446       ent = ggc_cleared_alloc<named_label_entry> ();
447       ent->name = id;
448     }
449   *slot = ent;
450 }
451 
452 /* The following two routines are used to interface to Objective-C++.
453    The binding level is purposely treated as an opaque type.  */
454 
455 void *
objc_get_current_scope(void)456 objc_get_current_scope (void)
457 {
458   return current_binding_level;
459 }
460 
461 /* The following routine is used by the NeXT-style SJLJ exceptions;
462    variables get marked 'volatile' so as to not be clobbered by
463    _setjmp()/_longjmp() calls.  All variables in the current scope,
464    as well as parent scopes up to (but not including) ENCLOSING_BLK
465    shall be thusly marked.  */
466 
467 void
objc_mark_locals_volatile(void * enclosing_blk)468 objc_mark_locals_volatile (void *enclosing_blk)
469 {
470   cp_binding_level *scope;
471 
472   for (scope = current_binding_level;
473        scope && scope != enclosing_blk;
474        scope = scope->level_chain)
475     {
476       tree decl;
477 
478       for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
479           objc_volatilize_decl (decl);
480 
481       /* Do not climb up past the current function.  */
482       if (scope->kind == sk_function_parms)
483           break;
484     }
485 }
486 
487 /* True if B is the level for the condition of a constexpr if.  */
488 
489 static bool
level_for_constexpr_if(cp_binding_level * b)490 level_for_constexpr_if (cp_binding_level *b)
491 {
492   return (b->kind == sk_cond && b->this_entity
493             && TREE_CODE (b->this_entity) == IF_STMT
494             && IF_STMT_CONSTEXPR_P (b->this_entity));
495 }
496 
497 /* True if B is the level for the condition of a consteval if.  */
498 
499 static bool
level_for_consteval_if(cp_binding_level * b)500 level_for_consteval_if (cp_binding_level *b)
501 {
502   return (b->kind == sk_cond && b->this_entity
503             && TREE_CODE (b->this_entity) == IF_STMT
504             && IF_STMT_CONSTEVAL_P (b->this_entity));
505 }
506 
507 /* Update data for defined and undefined labels when leaving a scope.  */
508 
509 int
poplevel_named_label_1(named_label_entry ** slot,cp_binding_level * bl)510 poplevel_named_label_1 (named_label_entry **slot, cp_binding_level *bl)
511 {
512   named_label_entry *ent = *slot;
513   cp_binding_level *obl = bl->level_chain;
514 
515   if (ent->binding_level == bl)
516     {
517       tree decl;
518 
519       /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
520            TREE_LISTs representing OVERLOADs, so be careful.  */
521       for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
522                                                                  ? DECL_CHAIN (decl)
523                                                                  : TREE_CHAIN (decl)))
524           if (decl_jump_unsafe (decl))
525             vec_safe_push (ent->bad_decls, decl);
526 
527       ent->binding_level = obl;
528       ent->names_in_scope = obl->names;
529       switch (bl->kind)
530           {
531           case sk_try:
532             ent->in_try_scope = true;
533             break;
534           case sk_catch:
535             ent->in_catch_scope = true;
536             break;
537           case sk_omp:
538             ent->in_omp_scope = true;
539             break;
540           case sk_transaction:
541             ent->in_transaction_scope = true;
542             break;
543           case sk_block:
544             if (level_for_constexpr_if (bl->level_chain))
545               ent->in_constexpr_if = true;
546             else if (level_for_consteval_if (bl->level_chain))
547               ent->in_consteval_if = true;
548             break;
549           default:
550             break;
551           }
552     }
553   else if (ent->uses)
554     {
555       struct named_label_use_entry *use;
556 
557       for (use = ent->uses; use ; use = use->next)
558           if (use->binding_level == bl)
559             {
560               use->binding_level = obl;
561               use->names_in_scope = obl->names;
562               if (bl->kind == sk_omp)
563                 use->in_omp_scope = true;
564             }
565     }
566 
567   return 1;
568 }
569 
570 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
571    when errors were reported, except for -Werror-unused-but-set-*.  */
572 static int unused_but_set_errorcount;
573 
574 /* Exit a binding level.
575    Pop the level off, and restore the state of the identifier-decl mappings
576    that were in effect when this level was entered.
577 
578    If KEEP == 1, this level had explicit declarations, so
579    and create a "block" (a BLOCK node) for the level
580    to record its declarations and subblocks for symbol table output.
581 
582    If FUNCTIONBODY is nonzero, this level is the body of a function,
583    so create a block as if KEEP were set and also clear out all
584    label names.
585 
586    If REVERSE is nonzero, reverse the order of decls before putting
587    them into the BLOCK.  */
588 
589 tree
poplevel(int keep,int reverse,int functionbody)590 poplevel (int keep, int reverse, int functionbody)
591 {
592   tree link;
593   /* The chain of decls was accumulated in reverse order.
594      Put it into forward order, just for cleanliness.  */
595   tree decls;
596   tree subblocks;
597   tree block;
598   tree decl;
599   scope_kind kind;
600 
601   auto_cond_timevar tv (TV_NAME_LOOKUP);
602  restart:
603 
604   block = NULL_TREE;
605 
606   gcc_assert (current_binding_level->kind != sk_class
607                 && current_binding_level->kind != sk_namespace);
608 
609   if (current_binding_level->kind == sk_cleanup)
610     functionbody = 0;
611   subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
612 
613   gcc_assert (!vec_safe_length (current_binding_level->class_shadowed));
614 
615   /* We used to use KEEP == 2 to indicate that the new block should go
616      at the beginning of the list of blocks at this binding level,
617      rather than the end.  This hack is no longer used.  */
618   gcc_assert (keep == 0 || keep == 1);
619 
620   if (current_binding_level->keep)
621     keep = 1;
622 
623   /* Any uses of undefined labels, and any defined labels, now operate
624      under constraints of next binding contour.  */
625   if (cfun && !functionbody && named_labels)
626     named_labels->traverse<cp_binding_level *, poplevel_named_label_1>
627                        (current_binding_level);
628 
629   /* Get the decls in the order they were written.
630      Usually current_binding_level->names is in reverse order.
631      But parameter decls were previously put in forward order.  */
632 
633   decls = current_binding_level->names;
634   if (reverse)
635     {
636       decls = nreverse (decls);
637       current_binding_level->names = decls;
638     }
639 
640   /* If there were any declarations or structure tags in that level,
641      or if this level is a function body,
642      create a BLOCK to record them for the life of this function.  */
643   block = NULL_TREE;
644   /* Avoid function body block if possible.  */
645   if (functionbody && subblocks && BLOCK_CHAIN (subblocks) == NULL_TREE)
646     keep = 0;
647   else if (keep == 1 || functionbody)
648     block = make_node (BLOCK);
649   if (block != NULL_TREE)
650     {
651       BLOCK_VARS (block) = decls;
652       BLOCK_SUBBLOCKS (block) = subblocks;
653     }
654 
655   /* In each subblock, record that this is its superior.  */
656   if (keep >= 0)
657     for (link = subblocks; link; link = BLOCK_CHAIN (link))
658       BLOCK_SUPERCONTEXT (link) = block;
659 
660   /* Before we remove the declarations first check for unused variables.  */
661   if ((warn_unused_variable || warn_unused_but_set_variable)
662       && current_binding_level->kind != sk_template_parms
663       && !processing_template_decl)
664     for (tree d = get_local_decls (); d; d = TREE_CHAIN (d))
665       {
666           /* There are cases where D itself is a TREE_LIST.  See in
667              push_local_binding where the list of decls returned by
668              getdecls is built.  */
669           decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
670 
671           tree type = TREE_TYPE (decl);
672           if (VAR_P (decl)
673               && (! TREE_USED (decl) || !DECL_READ_P (decl))
674               && ! DECL_IN_SYSTEM_HEADER (decl)
675               /* For structured bindings, consider only real variables, not
676                  subobjects.  */
677               && (DECL_DECOMPOSITION_P (decl) ? !DECL_DECOMP_BASE (decl)
678                     : (DECL_NAME (decl) && !DECL_ARTIFICIAL (decl)))
679               && type != error_mark_node
680               && (!CLASS_TYPE_P (type)
681                     || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
682                     || lookup_attribute ("warn_unused",
683                                              TYPE_ATTRIBUTES (TREE_TYPE (decl)))))
684             {
685               if (! TREE_USED (decl))
686                 {
687                     if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
688                       warning_at (DECL_SOURCE_LOCATION (decl),
689                                     OPT_Wunused_variable,
690                                     "unused structured binding declaration");
691                     else
692                       warning_at (DECL_SOURCE_LOCATION (decl),
693                                     OPT_Wunused_variable, "unused variable %qD", decl);
694                     suppress_warning (decl, OPT_Wunused_variable);
695                 }
696               else if (DECL_CONTEXT (decl) == current_function_decl
697                          // For -Wunused-but-set-variable leave references alone.
698                          && !TYPE_REF_P (TREE_TYPE (decl))
699                          && errorcount == unused_but_set_errorcount)
700                 {
701                     if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
702                       warning_at (DECL_SOURCE_LOCATION (decl),
703                                     OPT_Wunused_but_set_variable, "structured "
704                                     "binding declaration set but not used");
705                     else
706                       warning_at (DECL_SOURCE_LOCATION (decl),
707                                     OPT_Wunused_but_set_variable,
708                                     "variable %qD set but not used", decl);
709                     unused_but_set_errorcount = errorcount;
710                 }
711             }
712       }
713 
714   /* Remove declarations for all the DECLs in this level.  */
715   for (link = decls; link; link = TREE_CHAIN (link))
716     {
717       tree name;
718       if (TREE_CODE (link) == TREE_LIST)
719           {
720             decl = TREE_VALUE (link);
721             name = TREE_PURPOSE (link);
722             gcc_checking_assert (name);
723           }
724       else
725           {
726             decl = link;
727             name = DECL_NAME (decl);
728           }
729 
730       /* Remove the binding.  */
731       if (TREE_CODE (decl) == LABEL_DECL)
732           pop_local_label (name, decl);
733       else
734           pop_local_binding (name, decl);
735     }
736 
737   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
738   for (link = current_binding_level->type_shadowed;
739        link; link = TREE_CHAIN (link))
740     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
741 
742   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
743      list if a `using' declaration put them there.  The debugging
744      back ends won't understand OVERLOAD, so we remove them here.
745      Because the BLOCK_VARS are (temporarily) shared with
746      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
747      popped all the bindings.  Also remove undeduced 'auto' decls,
748      which LTO doesn't understand, and can't have been used by anything.  */
749   if (block)
750     {
751       tree* d;
752 
753       for (d = &BLOCK_VARS (block); *d; )
754           {
755             if (TREE_CODE (*d) == TREE_LIST
756                 || (!processing_template_decl
757                       && undeduced_auto_decl (*d)))
758               *d = TREE_CHAIN (*d);
759             else
760               d = &DECL_CHAIN (*d);
761           }
762     }
763 
764   /* If the level being exited is the top level of a function,
765      check over all the labels.  */
766   if (functionbody)
767     {
768       if (block)
769           {
770             /* Since this is the top level block of a function, the vars are
771                the function's parameters.  Don't leave them in the BLOCK
772                because they are found in the FUNCTION_DECL instead.  */
773             BLOCK_VARS (block) = 0;
774             pop_labels (block);
775           }
776       else
777           pop_labels (subblocks);
778     }
779 
780   kind = current_binding_level->kind;
781   if (kind == sk_cleanup)
782     {
783       tree stmt;
784 
785       /* If this is a temporary binding created for a cleanup, then we'll
786            have pushed a statement list level.  Pop that, create a new
787            BIND_EXPR for the block, and insert it into the stream.  */
788       stmt = pop_stmt_list (current_binding_level->statement_list);
789       stmt = c_build_bind_expr (input_location, block, stmt);
790       add_stmt (stmt);
791     }
792 
793   leave_scope ();
794   if (functionbody)
795     {
796       /* The current function is being defined, so its DECL_INITIAL
797            should be error_mark_node.  */
798       gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
799       DECL_INITIAL (current_function_decl) = block ? block : subblocks;
800       if (subblocks)
801           {
802             if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
803               {
804                 if (BLOCK_SUBBLOCKS (subblocks))
805                     BLOCK_OUTER_CURLY_BRACE_P (BLOCK_SUBBLOCKS (subblocks)) = 1;
806               }
807             else
808               BLOCK_OUTER_CURLY_BRACE_P (subblocks) = 1;
809           }
810     }
811   else if (block)
812     current_binding_level->blocks
813       = block_chainon (current_binding_level->blocks, block);
814 
815   /* If we did not make a block for the level just exited,
816      any blocks made for inner levels
817      (since they cannot be recorded as subblocks in that level)
818      must be carried forward so they will later become subblocks
819      of something else.  */
820   else if (subblocks)
821     current_binding_level->blocks
822       = block_chainon (current_binding_level->blocks, subblocks);
823 
824   /* Each and every BLOCK node created here in `poplevel' is important
825      (e.g. for proper debugging information) so if we created one
826      earlier, mark it as "used".  */
827   if (block)
828     TREE_USED (block) = 1;
829 
830   /* All temporary bindings created for cleanups are popped silently.  */
831   if (kind == sk_cleanup)
832     goto restart;
833 
834   return block;
835 }
836 
837 /* Call wrapup_globals_declarations for the globals in NAMESPACE.  */
838 /* Diagnose odr-used extern inline variables without definitions
839    in the current TU.  */
840 
841 int
wrapup_namespace_globals()842 wrapup_namespace_globals ()
843 {
844   if (vec<tree, va_gc> *statics = static_decls)
845     {
846       for (tree decl : *statics)
847           {
848             if (warn_unused_function
849                 && TREE_CODE (decl) == FUNCTION_DECL
850                 && DECL_INITIAL (decl) == 0
851                 && DECL_EXTERNAL (decl)
852                 && !TREE_PUBLIC (decl)
853                 && !DECL_ARTIFICIAL (decl)
854                 && !DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
855                 && !warning_suppressed_p (decl, OPT_Wunused_function))
856               warning_at (DECL_SOURCE_LOCATION (decl),
857                               OPT_Wunused_function,
858                               "%qF declared %<static%> but never defined", decl);
859 
860             if (VAR_P (decl)
861                 && DECL_EXTERNAL (decl)
862                 && DECL_INLINE_VAR_P (decl)
863                 && DECL_ODR_USED (decl))
864               error_at (DECL_SOURCE_LOCATION (decl),
865                           "odr-used inline variable %qD is not defined", decl);
866           }
867 
868       /* Clear out the list, so we don't rescan next time.  */
869       static_decls = NULL;
870 
871       /* Write out any globals that need to be output.  */
872       return wrapup_global_declarations (statics->address (),
873                                                    statics->length ());
874     }
875   return 0;
876 }
877 
878 /* In C++, you don't have to write `struct S' to refer to `S'; you
879    can just use `S'.  We accomplish this by creating a TYPE_DECL as
880    if the user had written `typedef struct S S'.  Create and return
881    the TYPE_DECL for TYPE.  */
882 
883 tree
create_implicit_typedef(tree name,tree type)884 create_implicit_typedef (tree name, tree type)
885 {
886   tree decl;
887 
888   decl = build_decl (input_location, TYPE_DECL, name, type);
889   DECL_ARTIFICIAL (decl) = 1;
890   /* There are other implicit type declarations, like the one *within*
891      a class that allows you to write `S::S'.  We must distinguish
892      amongst these.  */
893   SET_DECL_IMPLICIT_TYPEDEF_P (decl);
894   TYPE_NAME (type) = decl;
895   TYPE_STUB_DECL (type) = decl;
896 
897   return decl;
898 }
899 
900 /* Function-scope local entities that need discriminators.  Each entry
901    is a {decl,name} pair.  VAR_DECLs for anon unions get their name
902    smashed, so we cannot rely on DECL_NAME.  */
903 
904 static GTY((deletable)) vec<tree, va_gc> *local_entities;
905 
906 /* Determine the mangling discriminator of local DECL.  There are
907    generally very few of these in any particular function.  */
908 
909 void
determine_local_discriminator(tree decl)910 determine_local_discriminator (tree decl)
911 {
912   auto_cond_timevar tv (TV_NAME_LOOKUP);
913   retrofit_lang_decl (decl);
914   tree ctx = DECL_CONTEXT (decl);
915   tree name = (TREE_CODE (decl) == TYPE_DECL
916                  && TYPE_UNNAMED_P (TREE_TYPE (decl))
917                  ? NULL_TREE : DECL_NAME (decl));
918   size_t nelts = vec_safe_length (local_entities);
919   for (size_t i = 0; i < nelts; i += 2)
920     {
921       tree *pair = &(*local_entities)[i];
922       tree d = pair[0];
923       tree n = pair[1];
924       gcc_checking_assert (d != decl);
925       if (name == n
926             && TREE_CODE (decl) == TREE_CODE (d)
927             && ctx == DECL_CONTEXT (d))
928           {
929             tree disc = integer_one_node;
930             if (DECL_DISCRIMINATOR (d))
931               disc = build_int_cst (TREE_TYPE (disc),
932                                           TREE_INT_CST_LOW (DECL_DISCRIMINATOR (d)) + 1);
933             DECL_DISCRIMINATOR (decl) = disc;
934             /* Replace the saved decl.  */
935             pair[0] = decl;
936             decl = NULL_TREE;
937             break;
938           }
939     }
940 
941   if (decl)
942     {
943       vec_safe_reserve (local_entities, 2);
944       local_entities->quick_push (decl);
945       local_entities->quick_push (name);
946     }
947 }
948 
949 
950 
951 /* Returns true if functions FN1 and FN2 have equivalent trailing
952    requires clauses.  */
953 
954 static bool
function_requirements_equivalent_p(tree newfn,tree oldfn)955 function_requirements_equivalent_p (tree newfn, tree oldfn)
956 {
957   /* In the concepts TS, the combined constraints are compared.  */
958   if (cxx_dialect < cxx20)
959     {
960       tree ci1 = get_constraints (oldfn);
961       tree ci2 = get_constraints (newfn);
962       tree req1 = ci1 ? CI_ASSOCIATED_CONSTRAINTS (ci1) : NULL_TREE;
963       tree req2 = ci2 ? CI_ASSOCIATED_CONSTRAINTS (ci2) : NULL_TREE;
964       return cp_tree_equal (req1, req2);
965     }
966 
967   /* Compare only trailing requirements.  */
968   tree reqs1 = get_trailing_function_requirements (newfn);
969   tree reqs2 = get_trailing_function_requirements (oldfn);
970   if ((reqs1 != NULL_TREE) != (reqs2 != NULL_TREE))
971     return false;
972 
973   /* Substitution is needed when friends are involved.  */
974   reqs1 = maybe_substitute_reqs_for (reqs1, newfn);
975   reqs2 = maybe_substitute_reqs_for (reqs2, oldfn);
976 
977   return cp_tree_equal (reqs1, reqs2);
978 }
979 
980 /* Subroutine of duplicate_decls: return truthvalue of whether
981    or not types of these decls match.
982 
983    For C++, we must compare the parameter list so that `int' can match
984    `int&' in a parameter position, but `int&' is not confused with
985    `const int&'.  */
986 
987 int
decls_match(tree newdecl,tree olddecl,bool record_versions)988 decls_match (tree newdecl, tree olddecl, bool record_versions /* = true */)
989 {
990   int types_match;
991 
992   if (newdecl == olddecl)
993     return 1;
994 
995   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
996     /* If the two DECLs are not even the same kind of thing, we're not
997        interested in their types.  */
998     return 0;
999 
1000   gcc_assert (DECL_P (newdecl));
1001 
1002   if (TREE_CODE (newdecl) == FUNCTION_DECL)
1003     {
1004       /* Specializations of different templates are different functions
1005            even if they have the same type.  */
1006       tree t1 = (DECL_USE_TEMPLATE (newdecl)
1007                      ? DECL_TI_TEMPLATE (newdecl)
1008                      : NULL_TREE);
1009       tree t2 = (DECL_USE_TEMPLATE (olddecl)
1010                      ? DECL_TI_TEMPLATE (olddecl)
1011                      : NULL_TREE);
1012       if (t1 != t2)
1013           return 0;
1014 
1015       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1016             && ! (DECL_EXTERN_C_P (newdecl)
1017                     && DECL_EXTERN_C_P (olddecl)))
1018           return 0;
1019 
1020       /* A new declaration doesn't match a built-in one unless it
1021            is also extern "C".  */
1022       if (DECL_IS_UNDECLARED_BUILTIN (olddecl)
1023             && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
1024           return 0;
1025 
1026       tree f1 = TREE_TYPE (newdecl);
1027       tree f2 = TREE_TYPE (olddecl);
1028       if (TREE_CODE (f1) != TREE_CODE (f2))
1029           return 0;
1030 
1031       /* A declaration with deduced return type should use its pre-deduction
1032            type for declaration matching.  */
1033       tree r2 = fndecl_declared_return_type (olddecl);
1034       tree r1 = fndecl_declared_return_type (newdecl);
1035 
1036       tree p1 = TYPE_ARG_TYPES (f1);
1037       tree p2 = TYPE_ARG_TYPES (f2);
1038 
1039       if (same_type_p (r1, r2))
1040           {
1041             if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
1042                 && fndecl_built_in_p (olddecl))
1043               {
1044                 types_match = self_promoting_args_p (p1);
1045                 if (p1 == void_list_node)
1046                     TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1047               }
1048             else
1049               types_match =
1050                 compparms (p1, p2)
1051                 && type_memfn_rqual (f1) == type_memfn_rqual (f2)
1052                 && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1053                     || comp_type_attributes (TREE_TYPE (newdecl),
1054                                                      TREE_TYPE (olddecl)) != 0);
1055           }
1056       else
1057           types_match = 0;
1058 
1059       /* Two function declarations match if either has a requires-clause
1060          then both have a requires-clause and their constraints-expressions
1061          are equivalent.  */
1062       if (types_match && flag_concepts)
1063           types_match = function_requirements_equivalent_p (newdecl, olddecl);
1064 
1065       /* The decls dont match if they correspond to two different versions
1066            of the same function.   Disallow extern "C" functions to be
1067            versions for now.  */
1068       if (types_match
1069             && !DECL_EXTERN_C_P (newdecl)
1070             && !DECL_EXTERN_C_P (olddecl)
1071             && targetm.target_option.function_versions (newdecl, olddecl))
1072           {
1073             if (record_versions)
1074               maybe_version_functions (newdecl, olddecl,
1075                                              (!DECL_FUNCTION_VERSIONED (newdecl)
1076                                               || !DECL_FUNCTION_VERSIONED (olddecl)));
1077             return 0;
1078           }
1079     }
1080   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1081     {
1082       if (!template_heads_equivalent_p (newdecl, olddecl))
1083           return 0;
1084 
1085       tree oldres = DECL_TEMPLATE_RESULT (olddecl);
1086       tree newres = DECL_TEMPLATE_RESULT (newdecl);
1087 
1088       if (TREE_CODE (newres) != TREE_CODE (oldres))
1089           return 0;
1090 
1091       /* Two template types match if they are the same. Otherwise, compare
1092          the underlying declarations.  */
1093       if (TREE_CODE (newres) == TYPE_DECL)
1094         types_match = same_type_p (TREE_TYPE (newres), TREE_TYPE (oldres));
1095       else
1096           types_match = decls_match (newres, oldres);
1097     }
1098   else
1099     {
1100       /* Need to check scope for variable declaration (VAR_DECL).
1101            For typedef (TYPE_DECL), scope is ignored.  */
1102       if (VAR_P (newdecl)
1103             && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1104             /* [dcl.link]
1105                Two declarations for an object with C language linkage
1106                with the same name (ignoring the namespace that qualify
1107                it) that appear in different namespace scopes refer to
1108                the same object.  */
1109             && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1110           return 0;
1111 
1112       if (TREE_TYPE (newdecl) == error_mark_node)
1113           types_match = TREE_TYPE (olddecl) == error_mark_node;
1114       else if (TREE_TYPE (olddecl) == NULL_TREE)
1115           types_match = TREE_TYPE (newdecl) == NULL_TREE;
1116       else if (TREE_TYPE (newdecl) == NULL_TREE)
1117           types_match = 0;
1118       else
1119           types_match = comptypes (TREE_TYPE (newdecl),
1120                                          TREE_TYPE (olddecl),
1121                                          COMPARE_REDECLARATION);
1122     }
1123 
1124   return types_match;
1125 }
1126 
1127 /* Mark DECL as versioned if it isn't already.  */
1128 
1129 static void
maybe_mark_function_versioned(tree decl)1130 maybe_mark_function_versioned (tree decl)
1131 {
1132   if (!DECL_FUNCTION_VERSIONED (decl))
1133     {
1134       DECL_FUNCTION_VERSIONED (decl) = 1;
1135       /* If DECL_ASSEMBLER_NAME has already been set, re-mangle
1136            to include the version marker.  */
1137       if (DECL_ASSEMBLER_NAME_SET_P (decl))
1138           mangle_decl (decl);
1139     }
1140 }
1141 
1142 /* NEWDECL and OLDDECL have identical signatures.  If they are
1143    different versions adjust them and return true.
1144    If RECORD is set to true, record function versions.  */
1145 
1146 bool
maybe_version_functions(tree newdecl,tree olddecl,bool record)1147 maybe_version_functions (tree newdecl, tree olddecl, bool record)
1148 {
1149   if (!targetm.target_option.function_versions (newdecl, olddecl))
1150     return false;
1151 
1152   maybe_mark_function_versioned (olddecl);
1153   if (DECL_LOCAL_DECL_P (olddecl))
1154     {
1155       olddecl = DECL_LOCAL_DECL_ALIAS (olddecl);
1156       maybe_mark_function_versioned (olddecl);
1157     }
1158 
1159   maybe_mark_function_versioned (newdecl);
1160   if (DECL_LOCAL_DECL_P (newdecl))
1161     {
1162       /* Unfortunately, we can get here before pushdecl naturally calls
1163            push_local_extern_decl_alias, so we need to call it directly.  */
1164       if (!DECL_LOCAL_DECL_ALIAS (newdecl))
1165           push_local_extern_decl_alias (newdecl);
1166       newdecl = DECL_LOCAL_DECL_ALIAS (newdecl);
1167       maybe_mark_function_versioned (newdecl);
1168     }
1169 
1170   if (record)
1171     cgraph_node::record_function_versions (olddecl, newdecl);
1172 
1173   return true;
1174 }
1175 
1176 /* If NEWDECL is `static' and an `extern' was seen previously,
1177    warn about it.  OLDDECL is the previous declaration.
1178 
1179    Note that this does not apply to the C++ case of declaring
1180    a variable `extern const' and then later `const'.
1181 
1182    Don't complain about built-in functions, since they are beyond
1183    the user's control.  */
1184 
1185 void
warn_extern_redeclared_static(tree newdecl,tree olddecl)1186 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1187 {
1188   if (TREE_CODE (newdecl) == TYPE_DECL
1189       || TREE_CODE (newdecl) == TEMPLATE_DECL
1190       || TREE_CODE (newdecl) == CONST_DECL
1191       || TREE_CODE (newdecl) == NAMESPACE_DECL)
1192     return;
1193 
1194   /* Don't get confused by static member functions; that's a different
1195      use of `static'.  */
1196   if (TREE_CODE (newdecl) == FUNCTION_DECL
1197       && DECL_STATIC_FUNCTION_P (newdecl))
1198     return;
1199 
1200   /* If the old declaration was `static', or the new one isn't, then
1201      everything is OK.  */
1202   if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1203     return;
1204 
1205   /* It's OK to declare a builtin function as `static'.  */
1206   if (TREE_CODE (olddecl) == FUNCTION_DECL
1207       && DECL_ARTIFICIAL (olddecl))
1208     return;
1209 
1210   auto_diagnostic_group d;
1211   if (permerror (DECL_SOURCE_LOCATION (newdecl),
1212                      "%qD was declared %<extern%> and later %<static%>", newdecl))
1213     inform (DECL_SOURCE_LOCATION (olddecl),
1214               "previous declaration of %qD", olddecl);
1215 }
1216 
1217 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1218    function templates.  If their exception specifications do not
1219    match, issue a diagnostic.  */
1220 
1221 static void
check_redeclaration_exception_specification(tree new_decl,tree old_decl)1222 check_redeclaration_exception_specification (tree new_decl,
1223                                                        tree old_decl)
1224 {
1225   tree new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1226   tree old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1227 
1228   /* Two default specs are equivalent, don't force evaluation.  */
1229   if (UNEVALUATED_NOEXCEPT_SPEC_P (new_exceptions)
1230       && UNEVALUATED_NOEXCEPT_SPEC_P (old_exceptions))
1231     return;
1232 
1233   if (!type_dependent_expression_p (old_decl))
1234     {
1235       maybe_instantiate_noexcept (new_decl);
1236       maybe_instantiate_noexcept (old_decl);
1237     }
1238   new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1239   old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1240 
1241   /* [except.spec]
1242 
1243      If any declaration of a function has an exception-specification,
1244      all declarations, including the definition and an explicit
1245      specialization, of that function shall have an
1246      exception-specification with the same set of type-ids.  */
1247   if (!DECL_IS_UNDECLARED_BUILTIN (old_decl)
1248       && !DECL_IS_UNDECLARED_BUILTIN (new_decl)
1249       && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1250     {
1251       const char *const msg
1252           = G_("declaration of %qF has a different exception specifier");
1253       bool complained = true;
1254       location_t new_loc = DECL_SOURCE_LOCATION (new_decl);
1255       auto_diagnostic_group d;
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
validate_constexpr_redeclaration(tree old_decl,tree new_decl)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     {
1284       if (TREE_CODE (old_decl) != FUNCTION_DECL)
1285           return true;
1286       if (DECL_IMMEDIATE_FUNCTION_P (old_decl)
1287             == DECL_IMMEDIATE_FUNCTION_P (new_decl))
1288           return true;
1289     }
1290   if (TREE_CODE (old_decl) == FUNCTION_DECL)
1291     {
1292       /* With -fimplicit-constexpr, ignore changes in the constexpr
1293            keyword.  */
1294       if (flag_implicit_constexpr
1295             && (DECL_IMMEDIATE_FUNCTION_P (new_decl)
1296                 == DECL_IMMEDIATE_FUNCTION_P (old_decl)))
1297           return true;
1298       if (fndecl_built_in_p (old_decl))
1299           {
1300             /* Hide a built-in declaration.  */
1301             DECL_DECLARED_CONSTEXPR_P (old_decl)
1302               = DECL_DECLARED_CONSTEXPR_P (new_decl);
1303             if (DECL_IMMEDIATE_FUNCTION_P (new_decl))
1304               SET_DECL_IMMEDIATE_FUNCTION_P (old_decl);
1305             return true;
1306           }
1307       /* 7.1.5 [dcl.constexpr]
1308            Note: An explicit specialization can differ from the template
1309            declaration with respect to the constexpr specifier.  */
1310       if (! DECL_TEMPLATE_SPECIALIZATION (old_decl)
1311             && DECL_TEMPLATE_SPECIALIZATION (new_decl))
1312           return true;
1313 
1314       const char *kind = "constexpr";
1315       if (DECL_IMMEDIATE_FUNCTION_P (old_decl)
1316             || DECL_IMMEDIATE_FUNCTION_P (new_decl))
1317           kind = "consteval";
1318       error_at (DECL_SOURCE_LOCATION (new_decl),
1319                     "redeclaration %qD differs in %qs "
1320                     "from previous declaration", new_decl,
1321                     kind);
1322       inform (DECL_SOURCE_LOCATION (old_decl),
1323                 "previous declaration %qD", old_decl);
1324       return false;
1325     }
1326   return true;
1327 }
1328 
1329 // If OLDDECL and NEWDECL are concept declarations with the same type
1330 // (i.e., and template parameters), but different requirements,
1331 // emit diagnostics and return true. Otherwise, return false.
1332 static inline bool
check_concept_refinement(tree olddecl,tree newdecl)1333 check_concept_refinement (tree olddecl, tree newdecl)
1334 {
1335   if (!DECL_DECLARED_CONCEPT_P (olddecl) || !DECL_DECLARED_CONCEPT_P (newdecl))
1336     return false;
1337 
1338   tree d1 = DECL_TEMPLATE_RESULT (olddecl);
1339   tree d2 = DECL_TEMPLATE_RESULT (newdecl);
1340   if (TREE_CODE (d1) != TREE_CODE (d2))
1341     return false;
1342 
1343   tree t1 = TREE_TYPE (d1);
1344   tree t2 = TREE_TYPE (d2);
1345   if (TREE_CODE (d1) == FUNCTION_DECL)
1346     {
1347       if (compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2))
1348           && comp_template_parms (DECL_TEMPLATE_PARMS (olddecl),
1349                                   DECL_TEMPLATE_PARMS (newdecl))
1350           && !equivalently_constrained (olddecl, newdecl))
1351         {
1352           error ("cannot specialize concept %q#D", olddecl);
1353           return true;
1354         }
1355     }
1356   return false;
1357 }
1358 
1359 /* DECL is a redeclaration of a function or function template.  If
1360    it does have default arguments issue a diagnostic.  Note: this
1361    function is used to enforce the requirements in C++11 8.3.6 about
1362    no default arguments in redeclarations.  */
1363 
1364 static void
check_redeclaration_no_default_args(tree decl)1365 check_redeclaration_no_default_args (tree decl)
1366 {
1367   gcc_assert (DECL_DECLARES_FUNCTION_P (decl));
1368 
1369   for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
1370        t && t != void_list_node; t = TREE_CHAIN (t))
1371     if (TREE_PURPOSE (t))
1372       {
1373           permerror (DECL_SOURCE_LOCATION (decl),
1374                        "redeclaration of %q#D may not have default "
1375                        "arguments", decl);
1376           return;
1377       }
1378 }
1379 
1380 /* NEWDECL is a redeclaration of a function or function template OLDDECL,
1381    in any case represented as FUNCTION_DECLs (the DECL_TEMPLATE_RESULTs of
1382    the TEMPLATE_DECLs in case of function templates).  This function is used
1383    to enforce the final part of C++17 11.3.6/4, about a single declaration:
1384    "If a friend declaration specifies a default argument expression, that
1385    declaration shall be a definition and shall be the only declaration of
1386    the function or function template in the translation unit."  */
1387 
1388 static void
check_no_redeclaration_friend_default_args(tree olddecl,tree newdecl)1389 check_no_redeclaration_friend_default_args (tree olddecl, tree newdecl)
1390 {
1391   if (!DECL_UNIQUE_FRIEND_P (olddecl) && !DECL_UNIQUE_FRIEND_P (newdecl))
1392     return;
1393 
1394   for (tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl),
1395            t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
1396        t1 && t1 != void_list_node;
1397        t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1398     if ((DECL_UNIQUE_FRIEND_P (olddecl) && TREE_PURPOSE (t1))
1399           || (DECL_UNIQUE_FRIEND_P (newdecl) && TREE_PURPOSE (t2)))
1400       {
1401           auto_diagnostic_group d;
1402           if (permerror (DECL_SOURCE_LOCATION (newdecl),
1403                            "friend declaration of %q#D specifies default "
1404                            "arguments and isn%'t the only declaration", newdecl))
1405             inform (DECL_SOURCE_LOCATION (olddecl),
1406                       "previous declaration of %q#D", olddecl);
1407           return;
1408       }
1409 }
1410 
1411 /* Merge tree bits that correspond to attributes noreturn, nothrow,
1412    const,  malloc, and pure from NEWDECL with those of OLDDECL.  */
1413 
1414 static void
merge_attribute_bits(tree newdecl,tree olddecl)1415 merge_attribute_bits (tree newdecl, tree olddecl)
1416 {
1417   TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1418   TREE_THIS_VOLATILE (olddecl) |= TREE_THIS_VOLATILE (newdecl);
1419   TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1420   TREE_NOTHROW (olddecl) |= TREE_NOTHROW (newdecl);
1421   TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1422   TREE_READONLY (olddecl) |= TREE_READONLY (newdecl);
1423   DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1424   DECL_IS_MALLOC (olddecl) |= DECL_IS_MALLOC (newdecl);
1425   DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1426   DECL_PURE_P (olddecl) |= DECL_PURE_P (newdecl);
1427   DECL_UNINLINABLE (newdecl) |= DECL_UNINLINABLE (olddecl);
1428   DECL_UNINLINABLE (olddecl) |= DECL_UNINLINABLE (newdecl);
1429 }
1430 
1431 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn)                           \
1432                                 && lookup_attribute ("gnu_inline",              \
1433                                                          DECL_ATTRIBUTES (fn)))
1434 
1435 /* A subroutine of duplicate_decls. Emits a diagnostic when newdecl
1436    ambiguates olddecl.  Returns true if an error occurs.  */
1437 
1438 static bool
duplicate_function_template_decls(tree newdecl,tree olddecl)1439 duplicate_function_template_decls (tree newdecl, tree olddecl)
1440 {
1441 
1442   tree newres = DECL_TEMPLATE_RESULT (newdecl);
1443   tree oldres = DECL_TEMPLATE_RESULT (olddecl);
1444   /* Function template declarations can be differentiated by parameter
1445      and return type.  */
1446   if (compparms (TYPE_ARG_TYPES (TREE_TYPE (oldres)),
1447                      TYPE_ARG_TYPES (TREE_TYPE (newres)))
1448        && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1449                            TREE_TYPE (TREE_TYPE (olddecl))))
1450     {
1451       /* ... and also by their template-heads and requires-clauses.  */
1452       if (template_heads_equivalent_p (newdecl, olddecl)
1453             && function_requirements_equivalent_p (newres, oldres))
1454           {
1455             error ("ambiguating new declaration %q+#D", newdecl);
1456             inform (DECL_SOURCE_LOCATION (olddecl),
1457                       "old declaration %q#D", olddecl);
1458             return true;
1459           }
1460 
1461       /* FIXME: The types are the same but the are differences
1462            in either the template heads or function requirements.
1463            We should be able to diagnose a set of common errors
1464            stemming from these declarations. For example:
1465 
1466              template<typename T> requires C void f(...);
1467              template<typename T> void f(...) requires C;
1468 
1469            These are functionally equivalent but not equivalent.  */
1470     }
1471 
1472   return false;
1473 }
1474 
1475 /* OLD_PARMS is the innermost set of template parameters for some template
1476    declaration, and NEW_PARMS is the corresponding set of template parameters
1477    for a redeclaration of that template.  Merge the default arguments within
1478    these two sets of parameters.  CLASS_P is true iff the template in
1479    question is a class template.  */
1480 
1481 bool
merge_default_template_args(tree new_parms,tree old_parms,bool class_p)1482 merge_default_template_args (tree new_parms, tree old_parms, bool class_p)
1483 {
1484   gcc_checking_assert (TREE_VEC_LENGTH (new_parms)
1485                            == TREE_VEC_LENGTH (old_parms));
1486   for (int i = 0; i < TREE_VEC_LENGTH (new_parms); i++)
1487     {
1488       tree new_parm = TREE_VALUE (TREE_VEC_ELT (new_parms, i));
1489       tree old_parm = TREE_VALUE (TREE_VEC_ELT (old_parms, i));
1490       tree& new_default = TREE_PURPOSE (TREE_VEC_ELT (new_parms, i));
1491       tree& old_default = TREE_PURPOSE (TREE_VEC_ELT (old_parms, i));
1492       if (error_operand_p (new_parm) || error_operand_p (old_parm))
1493           return false;
1494       if (new_default != NULL_TREE && old_default != NULL_TREE)
1495           {
1496             auto_diagnostic_group d;
1497             error ("redefinition of default argument for %q+#D", new_parm);
1498             inform (DECL_SOURCE_LOCATION (old_parm),
1499                       "original definition appeared here");
1500             return false;
1501           }
1502       else if (new_default != NULL_TREE)
1503           /* Update the previous template parameters (which are the ones
1504              that will really count) with the new default value.  */
1505           old_default = new_default;
1506       else if (class_p && old_default != NULL_TREE)
1507           /* Update the new parameters, too; they'll be used as the
1508              parameters for any members.  */
1509           new_default = old_default;
1510     }
1511   return true;
1512 }
1513 
1514 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1515    If the redeclaration is invalid, a diagnostic is issued, and the
1516    error_mark_node is returned.  Otherwise, OLDDECL is returned.
1517 
1518    If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1519    returned.
1520 
1521    HIDING is true if the new decl is being hidden.  WAS_HIDDEN is true
1522    if the old decl was hidden.
1523 
1524    Hidden decls can be anticipated builtins, injected friends, or
1525    (coming soon) injected from a local-extern decl.   */
1526 
1527 tree
duplicate_decls(tree newdecl,tree olddecl,bool hiding,bool was_hidden)1528 duplicate_decls (tree newdecl, tree olddecl, bool hiding, bool was_hidden)
1529 {
1530   unsigned olddecl_uid = DECL_UID (olddecl);
1531   int types_match = 0;
1532   int new_defines_function = 0;
1533   tree new_template_info;
1534   location_t olddecl_loc = DECL_SOURCE_LOCATION (olddecl);
1535   location_t newdecl_loc = DECL_SOURCE_LOCATION (newdecl);
1536 
1537   if (newdecl == olddecl)
1538     return olddecl;
1539 
1540   types_match = decls_match (newdecl, olddecl);
1541 
1542   /* If either the type of the new decl or the type of the old decl is an
1543      error_mark_node, then that implies that we have already issued an
1544      error (earlier) for some bogus type specification, and in that case,
1545      it is rather pointless to harass the user with yet more error message
1546      about the same declaration, so just pretend the types match here.  */
1547   if (TREE_TYPE (newdecl) == error_mark_node
1548       || TREE_TYPE (olddecl) == error_mark_node)
1549     return error_mark_node;
1550 
1551   /* Check for redeclaration and other discrepancies.  */
1552   if (TREE_CODE (olddecl) == FUNCTION_DECL
1553       && DECL_IS_UNDECLARED_BUILTIN (olddecl))
1554     {
1555       if (TREE_CODE (newdecl) != FUNCTION_DECL)
1556           {
1557             /* Avoid warnings redeclaring built-ins which have not been
1558                explicitly declared.  */
1559             if (was_hidden)
1560               {
1561                 if (TREE_PUBLIC (newdecl)
1562                       && CP_DECL_CONTEXT (newdecl) == global_namespace)
1563                     warning_at (newdecl_loc,
1564                                   OPT_Wbuiltin_declaration_mismatch,
1565                                   "built-in function %qD declared as non-function",
1566                                   newdecl);
1567                 return NULL_TREE;
1568               }
1569 
1570             /* If you declare a built-in or predefined function name as static,
1571                the old definition is overridden, but optionally warn this was a
1572                bad choice of name.  */
1573             if (! TREE_PUBLIC (newdecl))
1574               {
1575                 warning_at (newdecl_loc,
1576                                 OPT_Wshadow,
1577                                 fndecl_built_in_p (olddecl)
1578                                 ? G_("shadowing built-in function %q#D")
1579                                 : G_("shadowing library function %q#D"), olddecl);
1580                 /* Discard the old built-in function.  */
1581                 return NULL_TREE;
1582               }
1583             /* If the built-in is not ansi, then programs can override
1584                it even globally without an error.  */
1585             else if (! fndecl_built_in_p (olddecl))
1586               warning_at (newdecl_loc, 0,
1587                               "library function %q#D redeclared as non-function %q#D",
1588                               olddecl, newdecl);
1589             else
1590               error_at (newdecl_loc,
1591                           "declaration of %q#D conflicts with built-in "
1592                           "declaration %q#D", newdecl, olddecl);
1593             return NULL_TREE;
1594           }
1595       else if (!types_match)
1596           {
1597             /* Avoid warnings redeclaring built-ins which have not been
1598                explicitly declared.  */
1599             if (was_hidden)
1600               {
1601                 tree t1, t2;
1602 
1603                 /* A new declaration doesn't match a built-in one unless it
1604                      is also extern "C".  */
1605                 gcc_assert (DECL_IS_UNDECLARED_BUILTIN (olddecl));
1606                 gcc_assert (DECL_EXTERN_C_P (olddecl));
1607                 if (!DECL_EXTERN_C_P (newdecl))
1608                     return NULL_TREE;
1609 
1610                 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1611                        t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1612                        t1 || t2;
1613                        t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1614                     {
1615                       if (!t1 || !t2)
1616                         break;
1617                       /* FILE, tm types are not known at the time
1618                          we create the builtins.  */
1619                       for (unsigned i = 0;
1620                            i < sizeof (builtin_structptr_types)
1621                                  / sizeof (builtin_structptr_type);
1622                            ++i)
1623                         if (TREE_VALUE (t2) == builtin_structptr_types[i].node)
1624                           {
1625                               tree t = TREE_VALUE (t1);
1626 
1627                               if (TYPE_PTR_P (t)
1628                                   && TYPE_IDENTIFIER (TREE_TYPE (t))
1629                                   == get_identifier (builtin_structptr_types[i].str)
1630                                   && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1631                                 {
1632                                   tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1633 
1634                                   TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1635                                     = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1636                                   types_match = decls_match (newdecl, olddecl);
1637                                   if (types_match)
1638                                     return duplicate_decls (newdecl, olddecl,
1639                                                                   hiding, was_hidden);
1640                                   TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1641                                 }
1642                               goto next_arg;
1643                           }
1644 
1645                       if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1646                         break;
1647                     next_arg:;
1648                     }
1649 
1650                 warning_at (newdecl_loc,
1651                                 OPT_Wbuiltin_declaration_mismatch,
1652                                 "declaration of %q#D conflicts with built-in "
1653                                 "declaration %q#D", newdecl, olddecl);
1654               }
1655             else if ((DECL_EXTERN_C_P (newdecl)
1656                         && DECL_EXTERN_C_P (olddecl))
1657                        || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1658                                          TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1659               {
1660                 /* Don't really override olddecl for __* prefixed builtins
1661                      except for __[^b]*_chk, the compiler might be using those
1662                      explicitly.  */
1663                 if (fndecl_built_in_p (olddecl))
1664                     {
1665                       tree id = DECL_NAME (olddecl);
1666                       const char *name = IDENTIFIER_POINTER (id);
1667                       size_t len;
1668 
1669                       if (name[0] == '_'
1670                           && name[1] == '_'
1671                           && (startswith (name + 2, "builtin_")
1672                                 || (len = strlen (name)) <= strlen ("___chk")
1673                                 || memcmp (name + len - strlen ("_chk"),
1674                                              "_chk", strlen ("_chk") + 1) != 0))
1675                         {
1676                           if (DECL_INITIAL (newdecl))
1677                               {
1678                                 error_at (newdecl_loc,
1679                                             "definition of %q#D ambiguates built-in "
1680                                             "declaration %q#D", newdecl, olddecl);
1681                                 return error_mark_node;
1682                               }
1683                           auto_diagnostic_group d;
1684                           if (permerror (newdecl_loc,
1685                                              "new declaration %q#D ambiguates built-in"
1686                                              " declaration %q#D", newdecl, olddecl)
1687                                 && flag_permissive)
1688                               inform (newdecl_loc,
1689                                         "ignoring the %q#D declaration", newdecl);
1690                           return flag_permissive ? olddecl : error_mark_node;
1691                         }
1692                     }
1693 
1694                 /* A near match; override the builtin.  */
1695 
1696                 if (TREE_PUBLIC (newdecl))
1697                     warning_at (newdecl_loc,
1698                                   OPT_Wbuiltin_declaration_mismatch,
1699                                   "new declaration %q#D ambiguates built-in "
1700                                   "declaration %q#D", newdecl, olddecl);
1701                 else
1702                     warning (OPT_Wshadow,
1703                                fndecl_built_in_p (olddecl)
1704                                ? G_("shadowing built-in function %q#D")
1705                                : G_("shadowing library function %q#D"), olddecl);
1706               }
1707             else
1708               /* Discard the old built-in function.  */
1709               return NULL_TREE;
1710 
1711             /* Replace the old RTL to avoid problems with inlining.  */
1712             COPY_DECL_RTL (newdecl, olddecl);
1713           }
1714       else
1715           {
1716             /* Even if the types match, prefer the new declarations type
1717                for built-ins which have not been explicitly declared,
1718                for exception lists, etc...  */
1719             tree type = TREE_TYPE (newdecl);
1720             tree attribs = (*targetm.merge_type_attributes)
1721               (TREE_TYPE (olddecl), type);
1722 
1723             type = cp_build_type_attribute_variant (type, attribs);
1724             TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1725           }
1726 
1727       /* If a function is explicitly declared "throw ()", propagate that to
1728            the corresponding builtin.  */
1729       if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1730             && was_hidden
1731             && TREE_NOTHROW (newdecl)
1732             && !TREE_NOTHROW (olddecl))
1733           {
1734             enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1735             tree tmpdecl = builtin_decl_explicit (fncode);
1736             if (tmpdecl && tmpdecl != olddecl && types_match)
1737               TREE_NOTHROW (tmpdecl)  = 1;
1738           }
1739 
1740       /* Whether or not the builtin can throw exceptions has no
1741            bearing on this declarator.  */
1742       TREE_NOTHROW (olddecl) = 0;
1743 
1744       if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1745           {
1746             /* If a builtin function is redeclared as `static', merge
1747                the declarations, but make the original one static.  */
1748             DECL_THIS_STATIC (olddecl) = 1;
1749             TREE_PUBLIC (olddecl) = 0;
1750 
1751             /* Make the old declaration consistent with the new one so
1752                that all remnants of the builtin-ness of this function
1753                will be banished.  */
1754             SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1755             COPY_DECL_RTL (newdecl, olddecl);
1756           }
1757     }
1758   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1759     {
1760       /* C++ Standard, 3.3, clause 4:
1761            "[Note: a namespace name or a class template name must be unique
1762            in its declarative region (7.3.2, clause 14). ]"  */
1763       if (TREE_CODE (olddecl) == NAMESPACE_DECL
1764             || TREE_CODE (newdecl) == NAMESPACE_DECL)
1765           /* Namespace conflicts with not namespace.  */;
1766       else if (DECL_TYPE_TEMPLATE_P (olddecl)
1767                  || DECL_TYPE_TEMPLATE_P (newdecl))
1768           /* Class template conflicts.  */;
1769       else if ((TREE_CODE (olddecl) == TEMPLATE_DECL
1770                     && DECL_TEMPLATE_RESULT (olddecl)
1771                     && TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == VAR_DECL)
1772                  || (TREE_CODE (newdecl) == TEMPLATE_DECL
1773                        && DECL_TEMPLATE_RESULT (newdecl)
1774                        && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == VAR_DECL))
1775           /* Variable template conflicts.  */;
1776       else if (concept_definition_p (olddecl)
1777                  || concept_definition_p (newdecl))
1778           /* Concept conflicts.  */;
1779       else if ((TREE_CODE (newdecl) == FUNCTION_DECL
1780                     && DECL_FUNCTION_TEMPLATE_P (olddecl))
1781                  || (TREE_CODE (olddecl) == FUNCTION_DECL
1782                        && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1783           {
1784             /* One is a function and the other is a template
1785                function.  */
1786             if (!UDLIT_OPER_P (DECL_NAME (newdecl)))
1787               return NULL_TREE;
1788 
1789             /* There can only be one!  */
1790             if (TREE_CODE (newdecl) == TEMPLATE_DECL
1791                 && check_raw_literal_operator (olddecl))
1792               error_at (newdecl_loc,
1793                           "literal operator %q#D conflicts with"
1794                           " raw literal operator", newdecl);
1795             else if (check_raw_literal_operator (newdecl))
1796               error_at (newdecl_loc,
1797                           "raw literal operator %q#D conflicts with"
1798                           " literal operator template", newdecl);
1799             else
1800               return NULL_TREE;
1801 
1802             inform (olddecl_loc, "previous declaration %q#D", olddecl);
1803             return error_mark_node;
1804           }
1805       else if ((VAR_P (olddecl) && DECL_DECOMPOSITION_P (olddecl))
1806                  || (VAR_P (newdecl) && DECL_DECOMPOSITION_P (newdecl)))
1807           /* A structured binding must be unique in its declarative region.  */;
1808       else if (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1809                  || DECL_IMPLICIT_TYPEDEF_P (newdecl))
1810           /* One is an implicit typedef, that's ok.  */
1811           return NULL_TREE;
1812 
1813       error ("%q#D redeclared as different kind of entity", newdecl);
1814       inform (olddecl_loc, "previous declaration %q#D", olddecl);
1815 
1816       return error_mark_node;
1817     }
1818   else if (!types_match)
1819     {
1820       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1821           /* These are certainly not duplicate declarations; they're
1822              from different scopes.  */
1823           return NULL_TREE;
1824 
1825       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1826           {
1827             tree oldres = DECL_TEMPLATE_RESULT (olddecl);
1828             tree newres = DECL_TEMPLATE_RESULT (newdecl);
1829 
1830             /* The name of a class template may not be declared to refer to
1831                any other template, class, function, object, namespace, value,
1832                or type in the same scope.  */
1833             if (TREE_CODE (oldres) == TYPE_DECL
1834                 || TREE_CODE (newres) == TYPE_DECL)
1835               {
1836                 error_at (newdecl_loc,
1837                               "conflicting declaration of template %q#D", newdecl);
1838                 inform (olddecl_loc,
1839                           "previous declaration %q#D", olddecl);
1840                 return error_mark_node;
1841               }
1842 
1843             else if (TREE_CODE (oldres) == FUNCTION_DECL
1844                        && TREE_CODE (newres) == FUNCTION_DECL)
1845               {
1846                 if (duplicate_function_template_decls (newdecl, olddecl))
1847                     return error_mark_node;
1848                 return NULL_TREE;
1849               }
1850           else if (check_concept_refinement (olddecl, newdecl))
1851               return error_mark_node;
1852             return NULL_TREE;
1853           }
1854       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1855           {
1856             if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1857               {
1858                 error_at (newdecl_loc,
1859                               "conflicting declaration of C function %q#D",
1860                               newdecl);
1861                 inform (olddecl_loc,
1862                           "previous declaration %q#D", olddecl);
1863                 return error_mark_node;
1864               }
1865             /* For function versions, params and types match, but they
1866                are not ambiguous.  */
1867             else if ((!DECL_FUNCTION_VERSIONED (newdecl)
1868                         && !DECL_FUNCTION_VERSIONED (olddecl))
1869                    // The functions have the same parameter types.
1870                        && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1871                                          TYPE_ARG_TYPES (TREE_TYPE (olddecl)))
1872                    // And the same constraints.
1873                    && equivalently_constrained (newdecl, olddecl))
1874               {
1875                 error_at (newdecl_loc,
1876                               "ambiguating new declaration of %q#D", newdecl);
1877                 inform (olddecl_loc,
1878                           "old declaration %q#D", olddecl);
1879               return error_mark_node;
1880               }
1881             else
1882               return NULL_TREE;
1883           }
1884       else
1885           {
1886             error_at (newdecl_loc, "conflicting declaration %q#D", newdecl);
1887             inform (olddecl_loc,
1888                       "previous declaration as %q#D", olddecl);
1889             return error_mark_node;
1890           }
1891     }
1892   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1893              && DECL_OMP_DECLARE_REDUCTION_P (newdecl))
1894     {
1895       /* OMP UDRs are never duplicates. */
1896       gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (olddecl));
1897       error_at (newdecl_loc,
1898                     "redeclaration of %<pragma omp declare reduction%>");
1899       inform (olddecl_loc,
1900                 "previous %<pragma omp declare reduction%> declaration");
1901       return error_mark_node;
1902     }
1903   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1904               && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1905                      && (!DECL_TEMPLATE_INFO (newdecl)
1906                          || (DECL_TI_TEMPLATE (newdecl)
1907                                != DECL_TI_TEMPLATE (olddecl))))
1908                     || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1909                         && (!DECL_TEMPLATE_INFO (olddecl)
1910                               || (DECL_TI_TEMPLATE (olddecl)
1911                                   != DECL_TI_TEMPLATE (newdecl))))))
1912     /* It's OK to have a template specialization and a non-template
1913        with the same type, or to have specializations of two
1914        different templates with the same type.  Note that if one is a
1915        specialization, and the other is an instantiation of the same
1916        template, that we do not exit at this point.  That situation
1917        can occur if we instantiate a template class, and then
1918        specialize one of its methods.  This situation is valid, but
1919        the declarations must be merged in the usual way.  */
1920     return NULL_TREE;
1921   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1922              && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1923                     && !DECL_USE_TEMPLATE (newdecl))
1924                  || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1925                        && !DECL_USE_TEMPLATE (olddecl))))
1926     /* One of the declarations is a template instantiation, and the
1927        other is not a template at all.  That's OK.  */
1928     return NULL_TREE;
1929   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1930     {
1931       /* In [namespace.alias] we have:
1932 
1933              In a declarative region, a namespace-alias-definition can be
1934              used to redefine a namespace-alias declared in that declarative
1935              region to refer only to the namespace to which it already
1936              refers.
1937 
1938            Therefore, if we encounter a second alias directive for the same
1939            alias, we can just ignore the second directive.  */
1940       if (DECL_NAMESPACE_ALIAS (newdecl)
1941             && (DECL_NAMESPACE_ALIAS (newdecl)
1942                 == DECL_NAMESPACE_ALIAS (olddecl)))
1943           return olddecl;
1944 
1945       /* Leave it to update_binding to merge or report error.  */
1946       return NULL_TREE;
1947     }
1948   else
1949     {
1950       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1951       if (errmsg)
1952           {
1953             auto_diagnostic_group d;
1954             error_at (newdecl_loc, errmsg, newdecl);
1955             if (DECL_NAME (olddecl) != NULL_TREE)
1956               inform (olddecl_loc,
1957                         (DECL_INITIAL (olddecl) && namespace_bindings_p ())
1958                         ? G_("%q#D previously defined here")
1959                         : G_("%q#D previously declared here"), olddecl);
1960             return error_mark_node;
1961           }
1962       else if (TREE_CODE (olddecl) == FUNCTION_DECL
1963                  && DECL_INITIAL (olddecl) != NULL_TREE
1964                  && !prototype_p (TREE_TYPE (olddecl))
1965                  && prototype_p (TREE_TYPE (newdecl)))
1966           {
1967             /* Prototype decl follows defn w/o prototype.  */
1968             auto_diagnostic_group d;
1969             if (warning_at (newdecl_loc, 0,
1970                                 "prototype specified for %q#D", newdecl))
1971               inform (olddecl_loc,
1972                         "previous non-prototype definition here");
1973           }
1974       else if (VAR_OR_FUNCTION_DECL_P (olddecl)
1975                  && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1976           {
1977             /* [dcl.link]
1978                If two declarations of the same function or object
1979                specify different linkage-specifications ..., the program
1980                is ill-formed.... Except for functions with C++ linkage,
1981                a function declaration without a linkage specification
1982                shall not precede the first linkage specification for
1983                that function.  A function can be declared without a
1984                linkage specification after an explicit linkage
1985                specification has been seen; the linkage explicitly
1986                specified in the earlier declaration is not affected by
1987                such a function declaration.
1988 
1989                DR 563 raises the question why the restrictions on
1990                functions should not also apply to objects.  Older
1991                versions of G++ silently ignore the linkage-specification
1992                for this example:
1993 
1994                  namespace N {
1995                  extern int i;
1996                    extern "C" int i;
1997                }
1998 
1999              which is clearly wrong.  Therefore, we now treat objects
2000                like functions.  */
2001             if (current_lang_depth () == 0)
2002               {
2003                 /* There is no explicit linkage-specification, so we use
2004                      the linkage from the previous declaration.  */
2005                 retrofit_lang_decl (newdecl);
2006                 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2007               }
2008             else
2009               {
2010                 auto_diagnostic_group d;
2011                 error_at (newdecl_loc,
2012                               "conflicting declaration of %q#D with %qL linkage",
2013                               newdecl, DECL_LANGUAGE (newdecl));
2014                 inform (olddecl_loc,
2015                           "previous declaration with %qL linkage",
2016                           DECL_LANGUAGE (olddecl));
2017               }
2018           }
2019 
2020       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
2021           ;
2022       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
2023           {
2024             /* Note: free functions, as TEMPLATE_DECLs, are handled below.  */
2025             if (DECL_FUNCTION_MEMBER_P (olddecl)
2026                 && (/* grokfndecl passes member function templates too
2027                          as FUNCTION_DECLs.  */
2028                       DECL_TEMPLATE_INFO (olddecl)
2029                       /* C++11 8.3.6/6.
2030                          Default arguments for a member function of a class
2031                          template shall be specified on the initial declaration
2032                          of the member function within the class template.  */
2033                       || CLASSTYPE_TEMPLATE_INFO (CP_DECL_CONTEXT (olddecl))))
2034               {
2035                 check_redeclaration_no_default_args (newdecl);
2036 
2037                 if (DECL_TEMPLATE_INFO (olddecl)
2038                       && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (olddecl)))
2039                     {
2040                       tree new_parms = DECL_TEMPLATE_INFO (newdecl)
2041                         ? DECL_INNERMOST_TEMPLATE_PARMS (DECL_TI_TEMPLATE (newdecl))
2042                         : INNERMOST_TEMPLATE_PARMS (current_template_parms);
2043                       tree old_parms
2044                         = DECL_INNERMOST_TEMPLATE_PARMS (DECL_TI_TEMPLATE (olddecl));
2045                       merge_default_template_args (new_parms, old_parms,
2046                                                          /*class_p=*/false);
2047                     }
2048               }
2049             else
2050               {
2051                 tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl);
2052                 tree t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
2053                 int i = 1;
2054 
2055                 for (; t1 && t1 != void_list_node;
2056                        t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
2057                     if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
2058                       {
2059                         if (simple_cst_equal (TREE_PURPOSE (t1),
2060                                                     TREE_PURPOSE (t2)) == 1)
2061                           {
2062                               auto_diagnostic_group d;
2063                               if (permerror (newdecl_loc,
2064                                                "default argument given for parameter "
2065                                                "%d of %q#D", i, newdecl))
2066                                 inform (olddecl_loc,
2067                                           "previous specification in %q#D here",
2068                                           olddecl);
2069                           }
2070                         else
2071                           {
2072                               auto_diagnostic_group d;
2073                               error_at (newdecl_loc,
2074                                           "default argument given for parameter %d "
2075                                           "of %q#D", i, newdecl);
2076                               inform (olddecl_loc,
2077                                         "previous specification in %q#D here",
2078                                         olddecl);
2079                           }
2080                       }
2081 
2082                 /* C++17 11.3.6/4: "If a friend declaration specifies a default
2083                      argument expression, that declaration... shall be the only
2084                      declaration of the function or function template in the
2085                      translation unit."  */
2086                 check_no_redeclaration_friend_default_args (olddecl, newdecl);
2087               }
2088           }
2089     }
2090 
2091   /* Do not merge an implicit typedef with an explicit one.  In:
2092 
2093        class A;
2094        ...
2095        typedef class A A __attribute__ ((foo));
2096 
2097      the attribute should apply only to the typedef.  */
2098   if (TREE_CODE (olddecl) == TYPE_DECL
2099       && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
2100             || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
2101     return NULL_TREE;
2102 
2103   if (DECL_TEMPLATE_PARM_P (olddecl) != DECL_TEMPLATE_PARM_P (newdecl))
2104     return NULL_TREE;
2105 
2106   if (!validate_constexpr_redeclaration (olddecl, newdecl))
2107     return error_mark_node;
2108 
2109   if (modules_p ()
2110       && TREE_CODE (CP_DECL_CONTEXT (olddecl)) == NAMESPACE_DECL
2111       && TREE_CODE (olddecl) != NAMESPACE_DECL
2112       && !hiding)
2113     {
2114       if (DECL_ARTIFICIAL (olddecl))
2115           {
2116             if (!(global_purview_p () || not_module_p ()))
2117               error ("declaration %qD conflicts with builtin", newdecl);
2118             else
2119               DECL_MODULE_EXPORT_P (olddecl) = DECL_MODULE_EXPORT_P (newdecl);
2120           }
2121       else
2122           {
2123             if (!module_may_redeclare (olddecl))
2124               {
2125                 error ("declaration %qD conflicts with import", newdecl);
2126                 inform (olddecl_loc, "import declared %q#D here", olddecl);
2127 
2128                 return error_mark_node;
2129               }
2130 
2131             if (DECL_MODULE_EXPORT_P (newdecl)
2132                 && !DECL_MODULE_EXPORT_P (olddecl))
2133               {
2134                 error ("conflicting exporting declaration %qD", newdecl);
2135                 inform (olddecl_loc, "previous declaration %q#D here", olddecl);
2136               }
2137           }
2138     }
2139 
2140   /* We have committed to returning OLDDECL at this point.  */
2141 
2142   /* If new decl is `static' and an `extern' was seen previously,
2143      warn about it.  */
2144   warn_extern_redeclared_static (newdecl, olddecl);
2145 
2146   /* True to merge attributes between the declarations, false to
2147      set OLDDECL's attributes to those of NEWDECL (for template
2148      explicit specializations that specify their own attributes
2149      independent of those specified for the primary template).  */
2150   const bool merge_attr = (TREE_CODE (newdecl) != FUNCTION_DECL
2151                                  || !DECL_TEMPLATE_SPECIALIZATION (newdecl)
2152                                  || DECL_TEMPLATE_SPECIALIZATION (olddecl));
2153 
2154   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2155     {
2156       if (merge_attr)
2157           {
2158             if (diagnose_mismatched_attributes (olddecl, newdecl))
2159               inform (olddecl_loc, DECL_INITIAL (olddecl)
2160                         ? G_("previous definition of %qD here")
2161                         : G_("previous declaration of %qD here"), olddecl);
2162 
2163             /* [dcl.attr.noreturn]: The first declaration of a function shall
2164                specify the noreturn attribute if any declaration of that function
2165                specifies the noreturn attribute.  */
2166             tree a;
2167             if (TREE_THIS_VOLATILE (newdecl)
2168                 && !TREE_THIS_VOLATILE (olddecl)
2169                 /* This applies to [[noreturn]] only, not its GNU variants.  */
2170                 && (a = lookup_attribute ("noreturn", DECL_ATTRIBUTES (newdecl)))
2171                 && cxx11_attribute_p (a)
2172                 && get_attribute_namespace (a) == NULL_TREE)
2173               {
2174                 error_at (newdecl_loc, "function %qD declared %<[[noreturn]]%> "
2175                               "but its first declaration was not", newdecl);
2176                 inform (olddecl_loc, "previous declaration of %qD", olddecl);
2177               }
2178           }
2179 
2180       /* Now that functions must hold information normally held
2181            by field decls, there is extra work to do so that
2182            declaration information does not get destroyed during
2183            definition.  */
2184       if (DECL_VINDEX (olddecl))
2185           DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
2186       if (DECL_CONTEXT (olddecl))
2187           DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
2188       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
2189       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
2190       DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
2191       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
2192       DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
2193       DECL_FINAL_P (newdecl) |= DECL_FINAL_P (olddecl);
2194       DECL_OVERRIDE_P (newdecl) |= DECL_OVERRIDE_P (olddecl);
2195       DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
2196       DECL_HAS_DEPENDENT_EXPLICIT_SPEC_P (newdecl)
2197           |= DECL_HAS_DEPENDENT_EXPLICIT_SPEC_P (olddecl);
2198       if (DECL_OVERLOADED_OPERATOR_P (olddecl))
2199           DECL_OVERLOADED_OPERATOR_CODE_RAW (newdecl)
2200             = DECL_OVERLOADED_OPERATOR_CODE_RAW (olddecl);
2201       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
2202 
2203       /* Optionally warn about more than one declaration for the same
2204            name, but don't warn about a function declaration followed by a
2205            definition.  */
2206       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
2207             && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
2208             /* Don't warn about extern decl followed by definition.  */
2209             && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
2210             /* Don't warn if at least one is/was hidden.  */
2211             && !(hiding || was_hidden)
2212             /* Don't warn about declaration followed by specialization.  */
2213             && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
2214                 || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
2215           {
2216             auto_diagnostic_group d;
2217             if (warning_at (newdecl_loc,
2218                                 OPT_Wredundant_decls,
2219                                 "redundant redeclaration of %qD in same scope",
2220                                 newdecl))
2221               inform (olddecl_loc,
2222                         "previous declaration of %qD", olddecl);
2223           }
2224 
2225       /* [dcl.fct.def.delete] A deleted definition of a function shall be the
2226            first declaration of the function or, for an explicit specialization
2227            of a function template, the first declaration of that
2228            specialization.  */
2229       if (!(DECL_TEMPLATE_INSTANTIATION (olddecl)
2230               && DECL_TEMPLATE_SPECIALIZATION (newdecl)))
2231           {
2232             if (DECL_DELETED_FN (newdecl))
2233               {
2234                 auto_diagnostic_group d;
2235                 if (pedwarn (newdecl_loc, 0, "deleted definition of %qD "
2236                                  "is not first declaration", newdecl))
2237                     inform (olddecl_loc,
2238                               "previous declaration of %qD", olddecl);
2239               }
2240             DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
2241           }
2242     }
2243 
2244   /* Deal with C++: must preserve virtual function table size.  */
2245   if (TREE_CODE (olddecl) == TYPE_DECL)
2246     {
2247       tree newtype = TREE_TYPE (newdecl);
2248       tree oldtype = TREE_TYPE (olddecl);
2249 
2250       if (newtype != error_mark_node && oldtype != error_mark_node
2251             && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
2252           CLASSTYPE_FRIEND_CLASSES (newtype)
2253             = CLASSTYPE_FRIEND_CLASSES (oldtype);
2254 
2255       DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
2256     }
2257 
2258   /* Copy all the DECL_... slots specified in the new decl except for
2259      any that we copy here from the old type.  */
2260   if (merge_attr)
2261     DECL_ATTRIBUTES (newdecl)
2262       = (*targetm.merge_decl_attributes) (olddecl, newdecl);
2263   else
2264     DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2265 
2266   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2267     {
2268       tree old_result = DECL_TEMPLATE_RESULT (olddecl);
2269       tree new_result = DECL_TEMPLATE_RESULT (newdecl);
2270       TREE_TYPE (olddecl) = TREE_TYPE (old_result);
2271 
2272       /* The new decl should not already have gathered any
2273            specializations.  */
2274       gcc_assert (!DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
2275 
2276       DECL_ATTRIBUTES (old_result)
2277           = (*targetm.merge_decl_attributes) (old_result, new_result);
2278 
2279       if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2280           {
2281             if (DECL_SOURCE_LOCATION (newdecl)
2282                 != DECL_SOURCE_LOCATION (olddecl))
2283               {
2284                 /* Per C++11 8.3.6/4, default arguments cannot be added in
2285                      later declarations of a function template.  */
2286                 check_redeclaration_no_default_args (newdecl);
2287                 /* C++17 11.3.6/4: "If a friend declaration specifies a default
2288                      argument expression, that declaration... shall be the only
2289                      declaration of the function or function template in the
2290                      translation unit."  */
2291                 check_no_redeclaration_friend_default_args
2292                     (old_result, new_result);
2293 
2294                 tree new_parms = DECL_INNERMOST_TEMPLATE_PARMS (newdecl);
2295                 tree old_parms = DECL_INNERMOST_TEMPLATE_PARMS (olddecl);
2296                 merge_default_template_args (new_parms, old_parms,
2297                                                      /*class_p=*/false);
2298               }
2299             if (!DECL_UNIQUE_FRIEND_P (new_result))
2300               DECL_UNIQUE_FRIEND_P (old_result) = false;
2301 
2302             check_default_args (newdecl);
2303 
2304             if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
2305                 && DECL_INITIAL (new_result))
2306               {
2307                 if (DECL_INITIAL (old_result))
2308                     DECL_UNINLINABLE (old_result) = 1;
2309                 else
2310                     DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
2311                 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
2312                 DECL_NOT_REALLY_EXTERN (old_result)
2313                     = DECL_NOT_REALLY_EXTERN (new_result);
2314                 DECL_INTERFACE_KNOWN (old_result)
2315                     = DECL_INTERFACE_KNOWN (new_result);
2316                 DECL_DECLARED_INLINE_P (old_result)
2317                     = DECL_DECLARED_INLINE_P (new_result);
2318                 DECL_DISREGARD_INLINE_LIMITS (old_result)
2319                   |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2320 
2321               }
2322             else
2323               {
2324                 DECL_DECLARED_INLINE_P (old_result)
2325                     |= DECL_DECLARED_INLINE_P (new_result);
2326                 DECL_DISREGARD_INLINE_LIMITS (old_result)
2327                   |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2328                 check_redeclaration_exception_specification (newdecl, olddecl);
2329 
2330                 merge_attribute_bits (new_result, old_result);
2331               }
2332           }
2333 
2334       /* If the new declaration is a definition, update the file and
2335            line information on the declaration, and also make
2336            the old declaration the same definition.  */
2337       if (DECL_INITIAL (new_result) != NULL_TREE)
2338           {
2339             DECL_SOURCE_LOCATION (olddecl)
2340               = DECL_SOURCE_LOCATION (old_result)
2341               = DECL_SOURCE_LOCATION (newdecl);
2342             DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
2343             if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2344               {
2345                 tree parm;
2346                 DECL_ARGUMENTS (old_result)
2347                     = DECL_ARGUMENTS (new_result);
2348                 for (parm = DECL_ARGUMENTS (old_result); parm;
2349                        parm = DECL_CHAIN (parm))
2350                     DECL_CONTEXT (parm) = old_result;
2351 
2352                 if (tree fc = DECL_FRIEND_CONTEXT (new_result))
2353                     SET_DECL_FRIEND_CONTEXT (old_result, fc);
2354               }
2355           }
2356 
2357       return olddecl;
2358     }
2359 
2360   if (types_match)
2361     {
2362       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2363           check_redeclaration_exception_specification (newdecl, olddecl);
2364 
2365       /* Automatically handles default parameters.  */
2366       tree oldtype = TREE_TYPE (olddecl);
2367       tree newtype;
2368 
2369       /* For typedefs use the old type, as the new type's DECL_NAME points
2370            at newdecl, which will be ggc_freed.  */
2371       if (TREE_CODE (newdecl) == TYPE_DECL)
2372           {
2373             /* But NEWTYPE might have an attribute, honor that.  */
2374             tree tem = TREE_TYPE (newdecl);
2375             newtype = oldtype;
2376 
2377             if (TYPE_USER_ALIGN (tem))
2378               {
2379                 if (TYPE_ALIGN (tem) > TYPE_ALIGN (newtype))
2380                     SET_TYPE_ALIGN (newtype, TYPE_ALIGN (tem));
2381                 TYPE_USER_ALIGN (newtype) = true;
2382               }
2383 
2384             /* And remove the new type from the variants list.  */
2385             if (TYPE_NAME (TREE_TYPE (newdecl)) == newdecl)
2386               {
2387                 tree remove = TREE_TYPE (newdecl);
2388                 if (TYPE_MAIN_VARIANT (remove) == remove)
2389                     {
2390                       gcc_assert (TYPE_NEXT_VARIANT (remove) == NULL_TREE);
2391                       /* If remove is the main variant, no need to remove that
2392                          from the list.  One of the DECL_ORIGINAL_TYPE
2393                          variants, e.g. created for aligned attribute, might still
2394                          refer to the newdecl TYPE_DECL though, so remove that one
2395                          in that case.  */
2396                       if (tree orig = DECL_ORIGINAL_TYPE (newdecl))
2397                         if (orig != remove)
2398                           for (tree t = TYPE_MAIN_VARIANT (orig); t;
2399                                  t = TYPE_MAIN_VARIANT (t))
2400                               if (TYPE_NAME (TYPE_NEXT_VARIANT (t)) == newdecl)
2401                                 {
2402                                   TYPE_NEXT_VARIANT (t)
2403                                     = TYPE_NEXT_VARIANT (TYPE_NEXT_VARIANT (t));
2404                                   break;
2405                                 }
2406                     }
2407                 else
2408                     for (tree t = TYPE_MAIN_VARIANT (remove); ;
2409                          t = TYPE_NEXT_VARIANT (t))
2410                       if (TYPE_NEXT_VARIANT (t) == remove)
2411                         {
2412                           TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove);
2413                           break;
2414                         }
2415               }
2416           }
2417       else if (merge_attr)
2418           newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
2419       else
2420           newtype = TREE_TYPE (newdecl);
2421 
2422       if (VAR_P (newdecl))
2423           {
2424             DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
2425             /* For already initialized vars, TREE_READONLY could have been
2426                cleared in cp_finish_decl, because the var needs runtime
2427                initialization or destruction.  Make sure not to set
2428                TREE_READONLY on it again.  */
2429             if (DECL_INITIALIZED_P (olddecl)
2430                 && !DECL_EXTERNAL (olddecl)
2431                 && !TREE_READONLY (olddecl))
2432               TREE_READONLY (newdecl) = 0;
2433             DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
2434             DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
2435               |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
2436             if (DECL_DEPENDENT_INIT_P (olddecl))
2437               SET_DECL_DEPENDENT_INIT_P (newdecl, true);
2438             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
2439               |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
2440             DECL_DECLARED_CONSTEXPR_P (newdecl)
2441               |= DECL_DECLARED_CONSTEXPR_P (olddecl);
2442             DECL_DECLARED_CONSTINIT_P (newdecl)
2443               |= DECL_DECLARED_CONSTINIT_P (olddecl);
2444 
2445             /* Merge the threadprivate attribute from OLDDECL into NEWDECL.  */
2446             if (DECL_LANG_SPECIFIC (olddecl)
2447                 && CP_DECL_THREADPRIVATE_P (olddecl))
2448               {
2449                 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed.  */
2450                 retrofit_lang_decl (newdecl);
2451                 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
2452               }
2453           }
2454 
2455       /* An explicit specialization of a function template or of a member
2456            function of a class template can be declared transaction_safe
2457            independently of whether the corresponding template entity is declared
2458            transaction_safe. */
2459       if (flag_tm && TREE_CODE (newdecl) == FUNCTION_DECL
2460             && DECL_TEMPLATE_INSTANTIATION (olddecl)
2461             && DECL_TEMPLATE_SPECIALIZATION (newdecl)
2462             && tx_safe_fn_type_p (newtype)
2463             && !tx_safe_fn_type_p (TREE_TYPE (newdecl)))
2464           newtype = tx_unsafe_fn_variant (newtype);
2465 
2466       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
2467 
2468       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2469           check_default_args (newdecl);
2470 
2471       /* Lay the type out, unless already done.  */
2472       if (! same_type_p (newtype, oldtype)
2473             && TREE_TYPE (newdecl) != error_mark_node
2474             && !(processing_template_decl && uses_template_parms (newdecl)))
2475           layout_type (TREE_TYPE (newdecl));
2476 
2477       if ((VAR_P (newdecl)
2478              || TREE_CODE (newdecl) == PARM_DECL
2479              || TREE_CODE (newdecl) == RESULT_DECL
2480              || TREE_CODE (newdecl) == FIELD_DECL
2481              || TREE_CODE (newdecl) == TYPE_DECL)
2482             && !(processing_template_decl && uses_template_parms (newdecl)))
2483           layout_decl (newdecl, 0);
2484 
2485       /* Merge deprecatedness.  */
2486       if (TREE_DEPRECATED (newdecl))
2487           TREE_DEPRECATED (olddecl) = 1;
2488 
2489       /* Merge unavailability.  */
2490       if (TREE_UNAVAILABLE (newdecl))
2491           TREE_UNAVAILABLE (olddecl) = 1;
2492 
2493       /* Preserve function specific target and optimization options */
2494       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2495           {
2496             if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2497                 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2498               DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2499                 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2500 
2501             if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2502                 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2503               DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2504                 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2505 
2506             if (!DECL_UNIQUE_FRIEND_P (olddecl))
2507               DECL_UNIQUE_FRIEND_P (newdecl) = false;
2508           }
2509       else
2510           {
2511             /* Merge the const type qualifier.  */
2512             if (TREE_READONLY (newdecl))
2513               TREE_READONLY (olddecl) = 1;
2514             /* Merge the volatile type qualifier.  */
2515             if (TREE_THIS_VOLATILE (newdecl))
2516               TREE_THIS_VOLATILE (olddecl) = 1;
2517           }
2518 
2519       /* Merge the initialization information.  */
2520       if (DECL_INITIAL (newdecl) == NULL_TREE
2521             && DECL_INITIAL (olddecl) != NULL_TREE)
2522           {
2523             DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2524             DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2525             if (TREE_CODE (newdecl) == FUNCTION_DECL)
2526               {
2527                 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2528                 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2529               }
2530           }
2531 
2532       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2533           {
2534             DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2535               |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2536             DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2537             if (DECL_IS_OPERATOR_NEW_P (olddecl))
2538               DECL_SET_IS_OPERATOR_NEW (newdecl, true);
2539             DECL_LOOPING_CONST_OR_PURE_P (newdecl)
2540               |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2541             DECL_IS_REPLACEABLE_OPERATOR (newdecl)
2542               |= DECL_IS_REPLACEABLE_OPERATOR (olddecl);
2543 
2544             if (merge_attr)
2545               merge_attribute_bits (newdecl, olddecl);
2546             else
2547               {
2548                 /* Merge the noreturn bit.  */
2549                 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2550                 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2551                 TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2552                 DECL_IS_MALLOC (olddecl) = DECL_IS_MALLOC (newdecl);
2553                 DECL_PURE_P (olddecl) = DECL_PURE_P (newdecl);
2554               }
2555             /* Keep the old RTL.  */
2556             COPY_DECL_RTL (olddecl, newdecl);
2557           }
2558       else if (VAR_P (newdecl)
2559                  && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2560           {
2561             /* Keep the old RTL.  We cannot keep the old RTL if the old
2562                declaration was for an incomplete object and the new
2563                declaration is not since many attributes of the RTL will
2564                change.  */
2565             COPY_DECL_RTL (olddecl, newdecl);
2566           }
2567     }
2568   /* If cannot merge, then use the new type and qualifiers,
2569      and don't preserve the old rtl.  */
2570   else
2571     {
2572       /* Clean out any memory we had of the old declaration.  */
2573       tree oldstatic = value_member (olddecl, static_aggregates);
2574       if (oldstatic)
2575           TREE_VALUE (oldstatic) = error_mark_node;
2576 
2577       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2578       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2579       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2580       TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2581       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2582     }
2583 
2584   /* Merge the storage class information.  */
2585   merge_weak (newdecl, olddecl);
2586 
2587   DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2588   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2589   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2590   if (! DECL_EXTERNAL (olddecl))
2591     DECL_EXTERNAL (newdecl) = 0;
2592   if (! DECL_COMDAT (olddecl))
2593     DECL_COMDAT (newdecl) = 0;
2594 
2595   if (VAR_OR_FUNCTION_DECL_P (newdecl) && DECL_LOCAL_DECL_P (newdecl))
2596     {
2597       if (!DECL_LOCAL_DECL_P (olddecl))
2598           /* This can happen if olddecl was brought in from the
2599              enclosing namespace via a using-decl.  The new decl is
2600              then not a block-scope extern at all.  */
2601           DECL_LOCAL_DECL_P (newdecl) = false;
2602       else
2603           {
2604             retrofit_lang_decl (newdecl);
2605             tree alias = DECL_LOCAL_DECL_ALIAS (newdecl)
2606               = DECL_LOCAL_DECL_ALIAS (olddecl);
2607             DECL_ATTRIBUTES (alias)
2608               = (*targetm.merge_decl_attributes) (alias, newdecl);
2609             if (TREE_CODE (newdecl) == FUNCTION_DECL)
2610               merge_attribute_bits (newdecl, alias);
2611           }
2612     }
2613 
2614   new_template_info = NULL_TREE;
2615   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2616     {
2617       bool new_redefines_gnu_inline = false;
2618 
2619       if (new_defines_function
2620             && ((DECL_INTERFACE_KNOWN (olddecl)
2621                  && TREE_CODE (olddecl) == FUNCTION_DECL)
2622                 || (TREE_CODE (olddecl) == TEMPLATE_DECL
2623                       && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2624                           == FUNCTION_DECL))))
2625           new_redefines_gnu_inline = GNU_INLINE_P (STRIP_TEMPLATE (olddecl));
2626 
2627       if (!new_redefines_gnu_inline)
2628           {
2629             DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2630             DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2631             DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2632           }
2633 
2634       if (TREE_CODE (newdecl) != TYPE_DECL)
2635           {
2636             DECL_TEMPLATE_INSTANTIATED (newdecl)
2637               |= DECL_TEMPLATE_INSTANTIATED (olddecl);
2638             DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2639 
2640             /* If the OLDDECL is an instantiation and/or specialization,
2641                then the NEWDECL must be too.  But, it may not yet be marked
2642                as such if the caller has created NEWDECL, but has not yet
2643                figured out that it is a redeclaration.  */
2644             if (!DECL_USE_TEMPLATE (newdecl))
2645               DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2646 
2647             if (!DECL_TEMPLATE_SPECIALIZATION (newdecl))
2648               DECL_INITIALIZED_IN_CLASS_P (newdecl)
2649                 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2650           }
2651 
2652       /* Don't really know how much of the language-specific
2653            values we should copy from old to new.  */
2654       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2655 
2656       if (LANG_DECL_HAS_MIN (newdecl))
2657           {
2658             DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
2659             if (DECL_TEMPLATE_INFO (newdecl))
2660               {
2661                 new_template_info = DECL_TEMPLATE_INFO (newdecl);
2662                 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2663                       && DECL_TEMPLATE_SPECIALIZATION (newdecl))
2664                     /* Remember the presence of explicit specialization args.  */
2665                     TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (olddecl))
2666                       = TINFO_USED_TEMPLATE_ID (new_template_info);
2667               }
2668 
2669             /* We don't want to copy template info from a non-templated friend
2670                (PR105761), but these shouldn't have DECL_TEMPLATE_INFO now.  */
2671             gcc_checking_assert (!DECL_TEMPLATE_INFO (olddecl)
2672                                      || !non_templated_friend_p (olddecl));
2673             DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2674           }
2675 
2676       if (DECL_DECLARES_FUNCTION_P (newdecl))
2677           {
2678             /* Only functions have these fields.  */
2679             DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2680             DECL_BEFRIENDING_CLASSES (newdecl)
2681               = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2682                            DECL_BEFRIENDING_CLASSES (olddecl));
2683             /* DECL_THUNKS is only valid for virtual functions,
2684                otherwise it is a DECL_FRIEND_CONTEXT.  */
2685             if (DECL_VIRTUAL_P (newdecl))
2686               SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2687             else if (tree fc = DECL_FRIEND_CONTEXT (newdecl))
2688               SET_DECL_FRIEND_CONTEXT (olddecl, fc);
2689           }
2690       else if (VAR_P (newdecl))
2691           {
2692             /* Only variables have this field.  */
2693             if (VAR_HAD_UNKNOWN_BOUND (olddecl))
2694               SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2695           }
2696     }
2697 
2698   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2699     {
2700       tree parm;
2701 
2702       /* Merge parameter attributes. */
2703       tree oldarg, newarg;
2704       for (oldarg = DECL_ARGUMENTS(olddecl), newarg = DECL_ARGUMENTS(newdecl);
2705            oldarg && newarg;
2706            oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg))
2707           {
2708           DECL_ATTRIBUTES (newarg)
2709               = (*targetm.merge_decl_attributes) (oldarg, newarg);
2710           DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2711           }
2712 
2713       if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2714             && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2715           {
2716             /* If newdecl is not a specialization, then it is not a
2717                template-related function at all.  And that means that we
2718                should have exited above, returning 0.  */
2719             gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2720 
2721             if (DECL_ODR_USED (olddecl))
2722               /* From [temp.expl.spec]:
2723 
2724                  If a template, a member template or the member of a class
2725                  template is explicitly specialized then that
2726                  specialization shall be declared before the first use of
2727                  that specialization that would cause an implicit
2728                  instantiation to take place, in every translation unit in
2729                  which such a use occurs.  */
2730               error ("explicit specialization of %qD after first use",
2731                           olddecl);
2732 
2733             SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2734             DECL_COMDAT (newdecl) = (TREE_PUBLIC (newdecl)
2735                                            && DECL_DECLARED_INLINE_P (newdecl));
2736 
2737             /* Don't propagate visibility from the template to the
2738                specialization here.  We'll do that in determine_visibility if
2739                appropriate.  */
2740             DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2741 
2742             /* [temp.expl.spec/14] We don't inline explicit specialization
2743                just because the primary template says so.  */
2744             gcc_assert (!merge_attr);
2745 
2746             DECL_DECLARED_INLINE_P (olddecl)
2747               = DECL_DECLARED_INLINE_P (newdecl);
2748 
2749             DECL_DISREGARD_INLINE_LIMITS (olddecl)
2750               = DECL_DISREGARD_INLINE_LIMITS (newdecl);
2751 
2752             DECL_UNINLINABLE (olddecl) = DECL_UNINLINABLE (newdecl);
2753           }
2754       else if (new_defines_function && DECL_INITIAL (olddecl))
2755           {
2756             /* Never inline re-defined extern inline functions.
2757                FIXME: this could be better handled by keeping both
2758                function as separate declarations.  */
2759             DECL_UNINLINABLE (newdecl) = 1;
2760           }
2761       else
2762           {
2763             if (DECL_PENDING_INLINE_P (olddecl))
2764               {
2765                 DECL_PENDING_INLINE_P (newdecl) = 1;
2766                 DECL_PENDING_INLINE_INFO (newdecl)
2767                     = DECL_PENDING_INLINE_INFO (olddecl);
2768               }
2769             else if (DECL_PENDING_INLINE_P (newdecl))
2770               ;
2771             else if (DECL_SAVED_AUTO_RETURN_TYPE (newdecl) == NULL)
2772               DECL_SAVED_AUTO_RETURN_TYPE (newdecl)
2773                 = DECL_SAVED_AUTO_RETURN_TYPE (olddecl);
2774 
2775             DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2776 
2777             DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2778               = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2779 
2780             DECL_DISREGARD_INLINE_LIMITS (newdecl)
2781               = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2782               = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2783                  || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2784           }
2785 
2786       /* Preserve abstractness on cloned [cd]tors.  */
2787       DECL_ABSTRACT_P (newdecl) = DECL_ABSTRACT_P (olddecl);
2788 
2789       /* Update newdecl's parms to point at olddecl.  */
2790       for (parm = DECL_ARGUMENTS (newdecl); parm;
2791              parm = DECL_CHAIN (parm))
2792           DECL_CONTEXT (parm) = olddecl;
2793 
2794       if (! types_match)
2795           {
2796             SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2797             COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2798             COPY_DECL_RTL (newdecl, olddecl);
2799           }
2800       if (! types_match || new_defines_function)
2801           {
2802             /* These need to be copied so that the names are available.
2803                Note that if the types do match, we'll preserve inline
2804                info and other bits, but if not, we won't.  */
2805             DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2806             DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2807           }
2808       /* If redeclaring a builtin function, it stays built in
2809            if newdecl is a gnu_inline definition, or if newdecl is just
2810            a declaration.  */
2811       if (fndecl_built_in_p (olddecl)
2812             && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2813           {
2814             copy_decl_built_in_function (newdecl, olddecl);
2815             /* If we're keeping the built-in definition, keep the rtl,
2816                regardless of declaration matches.  */
2817             COPY_DECL_RTL (olddecl, newdecl);
2818             if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2819               {
2820                 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2821                 if (builtin_decl_explicit_p (fncode))
2822                     {
2823                       /* A compatible prototype of these builtin functions
2824                          is seen, assume the runtime implements it with
2825                          the expected semantics.  */
2826                       switch (fncode)
2827                         {
2828                         case BUILT_IN_STPCPY:
2829                           set_builtin_decl_implicit_p (fncode, true);
2830                           break;
2831                         default:
2832                           set_builtin_decl_declared_p (fncode, true);
2833                           break;
2834                         }
2835                     }
2836 
2837                 copy_attributes_to_builtin (newdecl);
2838               }
2839           }
2840       if (new_defines_function)
2841           /* If defining a function declared with other language
2842              linkage, use the previously declared language linkage.  */
2843           SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2844       else if (types_match)
2845           {
2846             DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2847             /* Don't clear out the arguments if we're just redeclaring a
2848                function.  */
2849             if (DECL_ARGUMENTS (olddecl))
2850               DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2851           }
2852     }
2853   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2854     NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2855 
2856   /* Now preserve various other info from the definition.  */
2857   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2858   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2859   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2860   COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2861 
2862   /* Warn about conflicting visibility specifications.  */
2863   if (DECL_VISIBILITY_SPECIFIED (olddecl)
2864       && DECL_VISIBILITY_SPECIFIED (newdecl)
2865       && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2866     {
2867       auto_diagnostic_group d;
2868       if (warning_at (newdecl_loc, OPT_Wattributes,
2869                           "%qD: visibility attribute ignored because it "
2870                           "conflicts with previous declaration", newdecl))
2871           inform (olddecl_loc,
2872                     "previous declaration of %qD", olddecl);
2873     }
2874   /* Choose the declaration which specified visibility.  */
2875   if (DECL_VISIBILITY_SPECIFIED (olddecl))
2876     {
2877       DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2878       DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2879     }
2880   /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2881      so keep this behavior.  */
2882   if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2883     {
2884       SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2885       DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2886     }
2887   /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED.  */
2888   if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2889     {
2890       SET_DECL_ALIGN (newdecl, DECL_ALIGN (olddecl));
2891       DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2892     }
2893   else if (DECL_ALIGN (olddecl) == DECL_ALIGN (newdecl)
2894       && DECL_USER_ALIGN (olddecl) != DECL_USER_ALIGN (newdecl))
2895     DECL_USER_ALIGN (newdecl) = 1;
2896 
2897   DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2898   if (DECL_WARN_IF_NOT_ALIGN (olddecl)
2899       > DECL_WARN_IF_NOT_ALIGN (newdecl))
2900     SET_DECL_WARN_IF_NOT_ALIGN (newdecl,
2901                                         DECL_WARN_IF_NOT_ALIGN (olddecl));
2902   if (TREE_CODE (newdecl) == FIELD_DECL)
2903     DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2904 
2905   /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2906      with that from NEWDECL below.  */
2907   if (DECL_LANG_SPECIFIC (olddecl))
2908     {
2909       gcc_checking_assert (DECL_LANG_SPECIFIC (olddecl)
2910                                  != DECL_LANG_SPECIFIC (newdecl));
2911       ggc_free (DECL_LANG_SPECIFIC (olddecl));
2912     }
2913 
2914   /* Merge the USED information.  */
2915   if (TREE_USED (olddecl))
2916     TREE_USED (newdecl) = 1;
2917   else if (TREE_USED (newdecl))
2918     TREE_USED (olddecl) = 1;
2919 
2920   if (VAR_P (newdecl))
2921     {
2922       if (DECL_READ_P (olddecl))
2923           DECL_READ_P (newdecl) = 1;
2924       else if (DECL_READ_P (newdecl))
2925           DECL_READ_P (olddecl) = 1;
2926     }
2927 
2928   if (DECL_PRESERVE_P (olddecl))
2929     DECL_PRESERVE_P (newdecl) = 1;
2930   else if (DECL_PRESERVE_P (newdecl))
2931     DECL_PRESERVE_P (olddecl) = 1;
2932 
2933   /* Merge the DECL_FUNCTION_VERSIONED information.  newdecl will be copied
2934      to olddecl and deleted.  */
2935   if (TREE_CODE (newdecl) == FUNCTION_DECL
2936       && DECL_FUNCTION_VERSIONED (olddecl))
2937     {
2938       /* Set the flag for newdecl so that it gets copied to olddecl.  */
2939       DECL_FUNCTION_VERSIONED (newdecl) = 1;
2940       /* newdecl will be purged after copying to olddecl and is no longer
2941          a version.  */
2942       cgraph_node::delete_function_version_by_decl (newdecl);
2943     }
2944 
2945   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2946     {
2947       int function_size;
2948       struct symtab_node *snode = symtab_node::get (olddecl);
2949 
2950       function_size = sizeof (struct tree_decl_common);
2951 
2952       memcpy ((char *) olddecl + sizeof (struct tree_common),
2953                 (char *) newdecl + sizeof (struct tree_common),
2954                 function_size - sizeof (struct tree_common));
2955 
2956       memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2957                 (char *) newdecl + sizeof (struct tree_decl_common),
2958                 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2959 
2960       /* Preserve symtab node mapping.  */
2961       olddecl->decl_with_vis.symtab_node = snode;
2962 
2963       if (new_template_info)
2964           /* If newdecl is a template instantiation, it is possible that
2965              the following sequence of events has occurred:
2966 
2967              o A friend function was declared in a class template.  The
2968              class template was instantiated.
2969 
2970              o The instantiation of the friend declaration was
2971              recorded on the instantiation list, and is newdecl.
2972 
2973              o Later, however, instantiate_class_template called pushdecl
2974              on the newdecl to perform name injection.  But, pushdecl in
2975              turn called duplicate_decls when it discovered that another
2976              declaration of a global function with the same name already
2977              existed.
2978 
2979              o Here, in duplicate_decls, we decided to clobber newdecl.
2980 
2981              If we're going to do that, we'd better make sure that
2982              olddecl, and not newdecl, is on the list of
2983              instantiations so that if we try to do the instantiation
2984              again we won't get the clobbered declaration.  */
2985           reregister_specialization (newdecl,
2986                                            new_template_info,
2987                                            olddecl);
2988     }
2989   else
2990     {
2991       size_t size = tree_code_size (TREE_CODE (newdecl));
2992 
2993       memcpy ((char *) olddecl + sizeof (struct tree_common),
2994                 (char *) newdecl + sizeof (struct tree_common),
2995                 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2996 
2997       switch (TREE_CODE (newdecl))
2998           {
2999           case LABEL_DECL:
3000           case VAR_DECL:
3001           case RESULT_DECL:
3002           case PARM_DECL:
3003           case FIELD_DECL:
3004           case TYPE_DECL:
3005           case CONST_DECL:
3006             {
3007             struct symtab_node *snode = NULL;
3008 
3009               if (VAR_P (newdecl)
3010                     && (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl)
3011                         || DECL_EXTERNAL (olddecl)))
3012                 snode = symtab_node::get (olddecl);
3013               memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
3014                         (char *) newdecl + sizeof (struct tree_decl_common),
3015                         size - sizeof (struct tree_decl_common)
3016                         + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
3017               if (VAR_P (newdecl))
3018                 olddecl->decl_with_vis.symtab_node = snode;
3019             }
3020             break;
3021           default:
3022             memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
3023                       (char *) newdecl + sizeof (struct tree_decl_common),
3024                       sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
3025                       + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
3026             break;
3027           }
3028     }
3029 
3030   if (VAR_OR_FUNCTION_DECL_P (newdecl))
3031     {
3032       if (DECL_EXTERNAL (olddecl)
3033             || TREE_PUBLIC (olddecl)
3034             || TREE_STATIC (olddecl))
3035           {
3036             /* Merge the section attribute.
3037                We want to issue an error if the sections conflict but that must be
3038                done later in decl_attributes since we are called before attributes
3039                are assigned.  */
3040             if (DECL_SECTION_NAME (newdecl) != NULL)
3041               set_decl_section_name (olddecl, newdecl);
3042 
3043             if (DECL_ONE_ONLY (newdecl))
3044               {
3045                 struct symtab_node *oldsym, *newsym;
3046                 if (TREE_CODE (olddecl) == FUNCTION_DECL)
3047                     oldsym = cgraph_node::get_create (olddecl);
3048                 else
3049                     oldsym = varpool_node::get_create (olddecl);
3050                 newsym = symtab_node::get (newdecl);
3051                 oldsym->set_comdat_group (newsym->get_comdat_group ());
3052               }
3053           }
3054 
3055       if (VAR_P (newdecl)
3056             && CP_DECL_THREAD_LOCAL_P (newdecl))
3057           {
3058             CP_DECL_THREAD_LOCAL_P (olddecl) = true;
3059             if (!processing_template_decl)
3060               set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl));
3061           }
3062     }
3063 
3064   DECL_UID (olddecl) = olddecl_uid;
3065 
3066   /* NEWDECL contains the merged attribute lists.
3067      Update OLDDECL to be the same.  */
3068   DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
3069 
3070   /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
3071     so that encode_section_info has a chance to look at the new decl
3072     flags and attributes.  */
3073   if (DECL_RTL_SET_P (olddecl)
3074       && (TREE_CODE (olddecl) == FUNCTION_DECL
3075             || (VAR_P (olddecl)
3076                 && TREE_STATIC (olddecl))))
3077     make_decl_rtl (olddecl);
3078 
3079   /* The NEWDECL will no longer be needed.  Because every out-of-class
3080      declaration of a member results in a call to duplicate_decls,
3081      freeing these nodes represents in a significant savings.
3082 
3083      Before releasing the node, be sore to remove function from symbol
3084      table that might have been inserted there to record comdat group.
3085      Be sure to however do not free DECL_STRUCT_FUNCTION because this
3086      structure is shared in between newdecl and oldecl.  */
3087   if (TREE_CODE (newdecl) == FUNCTION_DECL)
3088     DECL_STRUCT_FUNCTION (newdecl) = NULL;
3089   if (VAR_OR_FUNCTION_DECL_P (newdecl))
3090     {
3091       struct symtab_node *snode = symtab_node::get (newdecl);
3092       if (snode)
3093           snode->remove ();
3094     }
3095 
3096   if (TREE_CODE (olddecl) == FUNCTION_DECL)
3097     {
3098       tree clone;
3099       FOR_EACH_CLONE (clone, olddecl)
3100           {
3101             DECL_ATTRIBUTES (clone) = DECL_ATTRIBUTES (olddecl);
3102             DECL_PRESERVE_P (clone) |= DECL_PRESERVE_P (olddecl);
3103           }
3104     }
3105 
3106   /* Remove the associated constraints for newdecl, if any, before
3107      reclaiming memory. */
3108   if (flag_concepts)
3109     remove_constraints (newdecl);
3110 
3111   ggc_free (newdecl);
3112 
3113   return olddecl;
3114 }
3115 
3116 /* Return zero if the declaration NEWDECL is valid
3117    when the declaration OLDDECL (assumed to be for the same name)
3118    has already been seen.
3119    Otherwise return an error message format string with a %s
3120    where the identifier should go.  */
3121 
3122 static const char *
redeclaration_error_message(tree newdecl,tree olddecl)3123 redeclaration_error_message (tree newdecl, tree olddecl)
3124 {
3125   if (TREE_CODE (newdecl) == TYPE_DECL)
3126     {
3127       /* Because C++ can put things into name space for free,
3128            constructs like "typedef struct foo { ... } foo"
3129            would look like an erroneous redeclaration.  */
3130       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
3131           return NULL;
3132       else
3133           return G_("redefinition of %q#D");
3134     }
3135   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
3136     {
3137       /* If this is a pure function, its olddecl will actually be
3138            the original initialization to `0' (which we force to call
3139            abort()).  Don't complain about redefinition in this case.  */
3140       if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
3141             && DECL_INITIAL (olddecl) == NULL_TREE)
3142           return NULL;
3143 
3144       /* If both functions come from different namespaces, this is not
3145            a redeclaration - this is a conflict with a used function.  */
3146       if (DECL_NAMESPACE_SCOPE_P (olddecl)
3147             && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
3148             && ! decls_match (olddecl, newdecl))
3149           return G_("%qD conflicts with used function");
3150 
3151       /* We'll complain about linkage mismatches in
3152            warn_extern_redeclared_static.  */
3153 
3154       /* Defining the same name twice is no good.  */
3155       if (decl_defined_p (olddecl)
3156             && decl_defined_p (newdecl))
3157           {
3158             if (DECL_NAME (olddecl) == NULL_TREE)
3159               return G_("%q#D not declared in class");
3160             else if (!GNU_INLINE_P (olddecl)
3161                        || GNU_INLINE_P (newdecl))
3162               return G_("redefinition of %q#D");
3163           }
3164 
3165       if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
3166           {
3167             bool olda = GNU_INLINE_P (olddecl);
3168             bool newa = GNU_INLINE_P (newdecl);
3169 
3170             if (olda != newa)
3171               {
3172                 if (newa)
3173                     return G_("%q+D redeclared inline with "
3174                                 "%<gnu_inline%> attribute");
3175                 else
3176                     return G_("%q+D redeclared inline without "
3177                                 "%<gnu_inline%> attribute");
3178               }
3179           }
3180 
3181       if (deduction_guide_p (olddecl)
3182             && deduction_guide_p (newdecl))
3183           return G_("deduction guide %q+D redeclared");
3184 
3185       /* [class.compare.default]: A definition of a comparison operator as
3186            defaulted that appears in a class shall be the first declaration of
3187            that function.  */
3188       special_function_kind sfk = special_function_p (olddecl);
3189       if (sfk == sfk_comparison && DECL_DEFAULTED_FN (newdecl))
3190           return G_("comparison operator %q+D defaulted after "
3191                       "its first declaration");
3192 
3193       check_abi_tag_redeclaration
3194           (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
3195            lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
3196 
3197       return NULL;
3198     }
3199   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3200     {
3201       tree nt, ot;
3202 
3203       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == CONCEPT_DECL)
3204         return G_("redefinition of %q#D");
3205 
3206       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL)
3207           return redeclaration_error_message (DECL_TEMPLATE_RESULT (newdecl),
3208                                                       DECL_TEMPLATE_RESULT (olddecl));
3209 
3210       if (DECL_TEMPLATE_RESULT (newdecl) == DECL_TEMPLATE_RESULT (olddecl))
3211           return NULL;
3212 
3213       nt = DECL_TEMPLATE_RESULT (newdecl);
3214       if (DECL_TEMPLATE_INFO (nt))
3215           nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
3216       ot = DECL_TEMPLATE_RESULT (olddecl);
3217       if (DECL_TEMPLATE_INFO (ot))
3218           ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
3219       if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
3220             && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
3221           return G_("redefinition of %q#D");
3222 
3223       if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
3224           {
3225             bool olda = GNU_INLINE_P (ot);
3226             bool newa = GNU_INLINE_P (nt);
3227 
3228             if (olda != newa)
3229               {
3230                 if (newa)
3231                     return G_("%q+D redeclared inline with "
3232                                 "%<gnu_inline%> attribute");
3233                 else
3234                     return G_("%q+D redeclared inline without "
3235                                 "%<gnu_inline%> attribute");
3236               }
3237           }
3238 
3239       if (deduction_guide_p (olddecl)
3240             && deduction_guide_p (newdecl))
3241           return G_("deduction guide %q+D redeclared");
3242 
3243       /* Core issue #226 (C++11):
3244 
3245            If a friend function template declaration specifies a
3246            default template-argument, that declaration shall be a
3247            definition and shall be the only declaration of the
3248            function template in the translation unit.  */
3249       if ((cxx_dialect != cxx98)
3250           && TREE_CODE (ot) == FUNCTION_DECL && DECL_UNIQUE_FRIEND_P (ot)
3251             && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
3252                                        /*is_primary=*/true,
3253                                                /*is_partial=*/false,
3254                                        /*is_friend_decl=*/2))
3255         return G_("redeclaration of friend %q#D "
3256                       "may not have default template arguments");
3257 
3258       return NULL;
3259     }
3260   else if (VAR_P (newdecl)
3261              && (CP_DECL_THREAD_LOCAL_P (newdecl)
3262                  != CP_DECL_THREAD_LOCAL_P (olddecl))
3263              && (! DECL_LANG_SPECIFIC (olddecl)
3264                  || ! CP_DECL_THREADPRIVATE_P (olddecl)
3265                  || CP_DECL_THREAD_LOCAL_P (newdecl)))
3266     {
3267       /* Only variables can be thread-local, and all declarations must
3268            agree on this property.  */
3269       if (CP_DECL_THREAD_LOCAL_P (newdecl))
3270           return G_("thread-local declaration of %q#D follows "
3271                     "non-thread-local declaration");
3272       else
3273           return G_("non-thread-local declaration of %q#D follows "
3274                     "thread-local declaration");
3275     }
3276   else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
3277     {
3278       /* The objects have been declared at namespace scope.  If either
3279            is a member of an anonymous union, then this is an invalid
3280            redeclaration.  For example:
3281 
3282              int i;
3283              union { int i; };
3284 
3285              is invalid.  */
3286       if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
3287             || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
3288           return G_("redeclaration of %q#D");
3289       /* If at least one declaration is a reference, there is no
3290            conflict.  For example:
3291 
3292              int i = 3;
3293              extern int i;
3294 
3295            is valid.  */
3296       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
3297           return NULL;
3298 
3299       /* Static data member declared outside a class definition
3300            if the variable is defined within the class with constexpr
3301            specifier is declaration rather than definition (and
3302            deprecated).  */
3303       if (cxx_dialect >= cxx17
3304             && VAR_P (olddecl)
3305             && DECL_CLASS_SCOPE_P (olddecl)
3306             && DECL_DECLARED_CONSTEXPR_P (olddecl)
3307             && !DECL_INITIAL (newdecl))
3308           {
3309             DECL_EXTERNAL (newdecl) = 1;
3310             /* For now, only warn with explicit -Wdeprecated.  */
3311             if (OPTION_SET_P (warn_deprecated))
3312               {
3313                 auto_diagnostic_group d;
3314                 if (warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wdeprecated,
3315                                         "redundant redeclaration of %<constexpr%> "
3316                                         "static data member %qD", newdecl))
3317                     inform (DECL_SOURCE_LOCATION (olddecl),
3318                                 "previous declaration of %qD", olddecl);
3319               }
3320             return NULL;
3321           }
3322 
3323       /* Reject two definitions.  */
3324       return G_("redefinition of %q#D");
3325     }
3326   else
3327     {
3328       /* Objects declared with block scope:  */
3329       /* Reject two definitions, and reject a definition
3330            together with an external reference.  */
3331       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
3332           return G_("redeclaration of %q#D");
3333       return NULL;
3334     }
3335 }
3336 
3337 
3338 /* Hash and equality functions for the named_label table.  */
3339 
3340 hashval_t
hash(const value_type entry)3341 named_label_hash::hash (const value_type entry)
3342 {
3343   return IDENTIFIER_HASH_VALUE (entry->name);
3344 }
3345 
3346 bool
equal(const value_type entry,compare_type name)3347 named_label_hash::equal (const value_type entry, compare_type name)
3348 {
3349   return name == entry->name;
3350 }
3351 
3352 /* Look for a label named ID in the current function.  If one cannot
3353    be found, create one.  Return the named_label_entry, or NULL on
3354    failure.  */
3355 
3356 static named_label_entry *
lookup_label_1(tree id,bool making_local_p)3357 lookup_label_1 (tree id, bool making_local_p)
3358 {
3359   auto_cond_timevar tv (TV_NAME_LOOKUP);
3360 
3361   /* You can't use labels at global scope.  */
3362   if (current_function_decl == NULL_TREE)
3363     {
3364       error ("label %qE referenced outside of any function", id);
3365       return NULL;
3366     }
3367 
3368   if (!named_labels)
3369     named_labels = hash_table<named_label_hash>::create_ggc (13);
3370 
3371   hashval_t hash = IDENTIFIER_HASH_VALUE (id);
3372   named_label_entry **slot
3373     = named_labels->find_slot_with_hash (id, hash, INSERT);
3374   named_label_entry *old = *slot;
3375 
3376   if (old && old->label_decl)
3377     {
3378       if (!making_local_p)
3379           return old;
3380 
3381       if (old->binding_level == current_binding_level)
3382           {
3383             error ("local label %qE conflicts with existing label", id);
3384             inform (DECL_SOURCE_LOCATION (old->label_decl), "previous label");
3385             return NULL;
3386           }
3387     }
3388 
3389   /* We are making a new decl, create or reuse the named_label_entry  */
3390   named_label_entry *ent = NULL;
3391   if (old && !old->label_decl)
3392     ent = old;
3393   else
3394     {
3395       ent = ggc_cleared_alloc<named_label_entry> ();
3396       ent->name = id;
3397       ent->outer = old;
3398       *slot = ent;
3399     }
3400 
3401   /* Now create the LABEL_DECL.  */
3402   tree decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
3403 
3404   DECL_CONTEXT (decl) = current_function_decl;
3405   SET_DECL_MODE (decl, VOIDmode);
3406   if (making_local_p)
3407     {
3408       C_DECLARED_LABEL_FLAG (decl) = true;
3409       DECL_CHAIN (decl) = current_binding_level->names;
3410       current_binding_level->names = decl;
3411     }
3412 
3413   ent->label_decl = decl;
3414 
3415   return ent;
3416 }
3417 
3418 /* Wrapper for lookup_label_1.  */
3419 
3420 tree
lookup_label(tree id)3421 lookup_label (tree id)
3422 {
3423   named_label_entry *ent = lookup_label_1 (id, false);
3424   return ent ? ent->label_decl : NULL_TREE;
3425 }
3426 
3427 tree
declare_local_label(tree id)3428 declare_local_label (tree id)
3429 {
3430   named_label_entry *ent = lookup_label_1 (id, true);
3431   return ent ? ent->label_decl : NULL_TREE;
3432 }
3433 
3434 /* Returns nonzero if it is ill-formed to jump past the declaration of
3435    DECL.  Returns 2 if it's also a real problem.  */
3436 
3437 static int
decl_jump_unsafe(tree decl)3438 decl_jump_unsafe (tree decl)
3439 {
3440   /* [stmt.dcl]/3: A program that jumps from a point where a local variable
3441      with automatic storage duration is not in scope to a point where it is
3442      in scope is ill-formed unless the variable has scalar type, class type
3443      with a trivial default constructor and a trivial destructor, a
3444      cv-qualified version of one of these types, or an array of one of the
3445      preceding types and is declared without an initializer (8.5).  */
3446   tree type = TREE_TYPE (decl);
3447 
3448   if (!VAR_P (decl) || TREE_STATIC (decl)
3449       || type == error_mark_node)
3450     return 0;
3451 
3452   if (DECL_NONTRIVIALLY_INITIALIZED_P (decl)
3453       || variably_modified_type_p (type, NULL_TREE))
3454     return 2;
3455 
3456   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3457     return 1;
3458 
3459   return 0;
3460 }
3461 
3462 /* A subroutine of check_previous_goto_1 and check_goto to identify a branch
3463    to the user.  */
3464 
3465 static bool
identify_goto(tree decl,location_t loc,const location_t * locus,diagnostic_t diag_kind)3466 identify_goto (tree decl, location_t loc, const location_t *locus,
3467                  diagnostic_t diag_kind)
3468 {
3469   bool complained
3470     = emit_diagnostic (diag_kind, loc, 0,
3471                            decl ? N_("jump to label %qD")
3472                            : N_("jump to case label"), decl);
3473   if (complained && locus)
3474     inform (*locus, "  from here");
3475   return complained;
3476 }
3477 
3478 /* Check that a single previously seen jump to a newly defined label
3479    is OK.  DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
3480    the jump context; NAMES are the names in scope in LEVEL at the jump
3481    context; LOCUS is the source position of the jump or 0.  Returns
3482    true if all is well.  */
3483 
3484 static bool
check_previous_goto_1(tree decl,cp_binding_level * level,tree names,bool exited_omp,const location_t * locus)3485 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
3486                            bool exited_omp, const location_t *locus)
3487 {
3488   cp_binding_level *b;
3489   bool complained = false;
3490   int identified = 0;
3491   bool saw_eh = false, saw_omp = false, saw_tm = false, saw_cxif = false;
3492   bool saw_ceif = false;
3493 
3494   if (exited_omp)
3495     {
3496       complained = identify_goto (decl, input_location, locus, DK_ERROR);
3497       if (complained)
3498           inform (input_location, "  exits OpenMP structured block");
3499       saw_omp = true;
3500       identified = 2;
3501     }
3502 
3503   for (b = current_binding_level; b ; b = b->level_chain)
3504     {
3505       tree new_decls, old_decls = (b == level ? names : NULL_TREE);
3506 
3507       for (new_decls = b->names; new_decls != old_decls;
3508              new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
3509                               : TREE_CHAIN (new_decls)))
3510           {
3511             int problem = decl_jump_unsafe (new_decls);
3512             if (! problem)
3513               continue;
3514 
3515             if (!identified)
3516               {
3517                 complained = identify_goto (decl, input_location, locus,
3518                                                     problem > 1
3519                                                     ? DK_ERROR : DK_PERMERROR);
3520                 identified = 1;
3521               }
3522             if (complained)
3523               {
3524                 if (problem > 1)
3525                     inform (DECL_SOURCE_LOCATION (new_decls),
3526                               "  crosses initialization of %q#D", new_decls);
3527                 else
3528                     inform (DECL_SOURCE_LOCATION (new_decls),
3529                               "  enters scope of %q#D, which has "
3530                               "non-trivial destructor", new_decls);
3531               }
3532           }
3533 
3534       if (b == level)
3535           break;
3536 
3537       const char *inf = NULL;
3538       location_t loc = input_location;
3539       switch (b->kind)
3540           {
3541           case sk_try:
3542             if (!saw_eh)
3543               inf = G_("  enters %<try%> block");
3544             saw_eh = true;
3545             break;
3546 
3547           case sk_catch:
3548             if (!saw_eh)
3549               inf = G_("  enters %<catch%> block");
3550             saw_eh = true;
3551             break;
3552 
3553           case sk_omp:
3554             if (!saw_omp)
3555               inf = G_("  enters OpenMP structured block");
3556             saw_omp = true;
3557             break;
3558 
3559           case sk_transaction:
3560             if (!saw_tm)
3561               inf = G_("  enters synchronized or atomic statement");
3562             saw_tm = true;
3563             break;
3564 
3565           case sk_block:
3566             if (!saw_cxif && level_for_constexpr_if (b->level_chain))
3567               {
3568                 inf = G_("  enters %<constexpr if%> statement");
3569                 loc = EXPR_LOCATION (b->level_chain->this_entity);
3570                 saw_cxif = true;
3571               }
3572             else if (!saw_ceif && level_for_consteval_if (b->level_chain))
3573               {
3574                 inf = G_("  enters %<consteval if%> statement");
3575                 loc = EXPR_LOCATION (b->level_chain->this_entity);
3576                 saw_ceif = true;
3577               }
3578             break;
3579 
3580           default:
3581             break;
3582           }
3583 
3584       if (inf)
3585           {
3586             if (identified < 2)
3587               complained = identify_goto (decl, input_location, locus, DK_ERROR);
3588             identified = 2;
3589             if (complained)
3590               inform (loc, inf);
3591           }
3592     }
3593 
3594   return !identified;
3595 }
3596 
3597 static void
check_previous_goto(tree decl,struct named_label_use_entry * use)3598 check_previous_goto (tree decl, struct named_label_use_entry *use)
3599 {
3600   check_previous_goto_1 (decl, use->binding_level,
3601                                use->names_in_scope, use->in_omp_scope,
3602                                &use->o_goto_locus);
3603 }
3604 
3605 static bool
check_switch_goto(cp_binding_level * level)3606 check_switch_goto (cp_binding_level* level)
3607 {
3608   return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
3609 }
3610 
3611 /* Check that a new jump to a label DECL is OK.  Called by
3612    finish_goto_stmt.  */
3613 
3614 void
check_goto(tree decl)3615 check_goto (tree decl)
3616 {
3617   /* We can't know where a computed goto is jumping.
3618      So we assume that it's OK.  */
3619   if (TREE_CODE (decl) != LABEL_DECL)
3620     return;
3621 
3622   /* We didn't record any information about this label when we created it,
3623      and there's not much point since it's trivial to analyze as a return.  */
3624   if (decl == cdtor_label)
3625     return;
3626 
3627   hashval_t hash = IDENTIFIER_HASH_VALUE (DECL_NAME (decl));
3628   named_label_entry **slot
3629     = named_labels->find_slot_with_hash (DECL_NAME (decl), hash, NO_INSERT);
3630   named_label_entry *ent = *slot;
3631 
3632   /* If the label hasn't been defined yet, defer checking.  */
3633   if (! DECL_INITIAL (decl))
3634     {
3635       /* Don't bother creating another use if the last goto had the
3636            same data, and will therefore create the same set of errors.  */
3637       if (ent->uses
3638             && ent->uses->names_in_scope == current_binding_level->names)
3639           return;
3640 
3641       named_label_use_entry *new_use
3642           = ggc_alloc<named_label_use_entry> ();
3643       new_use->binding_level = current_binding_level;
3644       new_use->names_in_scope = current_binding_level->names;
3645       new_use->o_goto_locus = input_location;
3646       new_use->in_omp_scope = false;
3647 
3648       new_use->next = ent->uses;
3649       ent->uses = new_use;
3650       return;
3651     }
3652 
3653   cp_function_chain->backward_goto = true;
3654 
3655   bool saw_catch = false, complained = false;
3656   int identified = 0;
3657   tree bad;
3658   unsigned ix;
3659 
3660   if (ent->in_try_scope || ent->in_catch_scope || ent->in_transaction_scope
3661       || ent->in_constexpr_if || ent->in_consteval_if
3662       || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
3663     {
3664       diagnostic_t diag_kind = DK_PERMERROR;
3665       if (ent->in_try_scope || ent->in_catch_scope || ent->in_constexpr_if
3666             || ent->in_consteval_if || ent->in_transaction_scope
3667             || ent->in_omp_scope)
3668           diag_kind = DK_ERROR;
3669       complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3670                                           &input_location, diag_kind);
3671       identified = 1 + (diag_kind == DK_ERROR);
3672     }
3673 
3674   FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
3675     {
3676       int u = decl_jump_unsafe (bad);
3677 
3678       if (u > 1 && DECL_ARTIFICIAL (bad))
3679           {
3680             /* Can't skip init of __exception_info.  */
3681             if (identified == 1)
3682               {
3683                 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3684                                                     &input_location, DK_ERROR);
3685                 identified = 2;
3686               }
3687             if (complained)
3688               inform (DECL_SOURCE_LOCATION (bad), "  enters %<catch%> block");
3689             saw_catch = true;
3690           }
3691       else if (complained)
3692           {
3693             if (u > 1)
3694               inform (DECL_SOURCE_LOCATION (bad),
3695                         "  skips initialization of %q#D", bad);
3696             else
3697               inform (DECL_SOURCE_LOCATION (bad),
3698                         "  enters scope of %q#D which has "
3699                         "non-trivial destructor", bad);
3700           }
3701     }
3702 
3703   if (complained)
3704     {
3705       if (ent->in_try_scope)
3706           inform (input_location, "  enters %<try%> block");
3707       else if (ent->in_catch_scope && !saw_catch)
3708           inform (input_location, "  enters %<catch%> block");
3709       else if (ent->in_transaction_scope)
3710           inform (input_location, "  enters synchronized or atomic statement");
3711       else if (ent->in_constexpr_if)
3712           inform (input_location, "  enters %<constexpr if%> statement");
3713       else if (ent->in_consteval_if)
3714           inform (input_location, "  enters %<consteval if%> statement");
3715     }
3716 
3717   if (ent->in_omp_scope)
3718     {
3719       if (complained)
3720           inform (input_location, "  enters OpenMP structured block");
3721     }
3722   else if (flag_openmp)
3723     for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3724       {
3725           if (b == ent->binding_level)
3726             break;
3727           if (b->kind == sk_omp)
3728             {
3729               if (identified < 2)
3730                 {
3731                     complained = identify_goto (decl,
3732                                                       DECL_SOURCE_LOCATION (decl),
3733                                                       &input_location, DK_ERROR);
3734                     identified = 2;
3735                 }
3736               if (complained)
3737                 inform (input_location, "  exits OpenMP structured block");
3738               break;
3739             }
3740       }
3741 }
3742 
3743 /* Check that a return is ok wrt OpenMP structured blocks.
3744    Called by finish_return_stmt.  Returns true if all is well.  */
3745 
3746 bool
check_omp_return(void)3747 check_omp_return (void)
3748 {
3749   for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3750     if (b->kind == sk_omp)
3751       {
3752           error ("invalid exit from OpenMP structured block");
3753           return false;
3754       }
3755     else if (b->kind == sk_function_parms)
3756       break;
3757   return true;
3758 }
3759 
3760 /* Define a label, specifying the location in the source file.
3761    Return the LABEL_DECL node for the label.  */
3762 
3763 tree
define_label(location_t location,tree name)3764 define_label (location_t location, tree name)
3765 {
3766   auto_cond_timevar tv (TV_NAME_LOOKUP);
3767 
3768   /* After labels, make any new cleanups in the function go into their
3769      own new (temporary) binding contour.  */
3770   for (cp_binding_level *p = current_binding_level;
3771        p->kind != sk_function_parms;
3772        p = p->level_chain)
3773     p->more_cleanups_ok = 0;
3774 
3775   named_label_entry *ent = lookup_label_1 (name, false);
3776   tree decl = ent->label_decl;
3777 
3778   if (DECL_INITIAL (decl) != NULL_TREE)
3779     {
3780       error ("duplicate label %qD", decl);
3781       return error_mark_node;
3782     }
3783   else
3784     {
3785       /* Mark label as having been defined.  */
3786       DECL_INITIAL (decl) = error_mark_node;
3787       /* Say where in the source.  */
3788       DECL_SOURCE_LOCATION (decl) = location;
3789 
3790       ent->binding_level = current_binding_level;
3791       ent->names_in_scope = current_binding_level->names;
3792 
3793       for (named_label_use_entry *use = ent->uses; use; use = use->next)
3794           check_previous_goto (decl, use);
3795       ent->uses = NULL;
3796     }
3797 
3798   return decl;
3799 }
3800 
3801 struct cp_switch
3802 {
3803   cp_binding_level *level;
3804   struct cp_switch *next;
3805   /* The SWITCH_STMT being built.  */
3806   tree switch_stmt;
3807   /* A splay-tree mapping the low element of a case range to the high
3808      element, or NULL_TREE if there is no high element.  Used to
3809      determine whether or not a new case label duplicates an old case
3810      label.  We need a tree, rather than simply a hash table, because
3811      of the GNU case range extension.  */
3812   splay_tree cases;
3813   /* Remember whether a default: case label has been seen.  */
3814   bool has_default_p;
3815   /* Remember whether a BREAK_STMT has been seen in this SWITCH_STMT.  */
3816   bool break_stmt_seen_p;
3817   /* Set if inside of {FOR,DO,WHILE}_BODY nested inside of a switch,
3818      where BREAK_STMT doesn't belong to the SWITCH_STMT.  */
3819   bool in_loop_body_p;
3820 };
3821 
3822 /* A stack of the currently active switch statements.  The innermost
3823    switch statement is on the top of the stack.  There is no need to
3824    mark the stack for garbage collection because it is only active
3825    during the processing of the body of a function, and we never
3826    collect at that point.  */
3827 
3828 static struct cp_switch *switch_stack;
3829 
3830 /* Called right after a switch-statement condition is parsed.
3831    SWITCH_STMT is the switch statement being parsed.  */
3832 
3833 void
push_switch(tree switch_stmt)3834 push_switch (tree switch_stmt)
3835 {
3836   struct cp_switch *p = XNEW (struct cp_switch);
3837   p->level = current_binding_level;
3838   p->next = switch_stack;
3839   p->switch_stmt = switch_stmt;
3840   p->cases = splay_tree_new (case_compare, NULL, NULL);
3841   p->has_default_p = false;
3842   p->break_stmt_seen_p = false;
3843   p->in_loop_body_p = false;
3844   switch_stack = p;
3845 }
3846 
3847 void
pop_switch(void)3848 pop_switch (void)
3849 {
3850   struct cp_switch *cs = switch_stack;
3851 
3852   /* Emit warnings as needed.  */
3853   location_t switch_location = cp_expr_loc_or_input_loc (cs->switch_stmt);
3854   tree cond = SWITCH_STMT_COND (cs->switch_stmt);
3855   const bool bool_cond_p
3856     = (SWITCH_STMT_TYPE (cs->switch_stmt)
3857        && TREE_CODE (SWITCH_STMT_TYPE (cs->switch_stmt)) == BOOLEAN_TYPE);
3858   if (!processing_template_decl)
3859     c_do_switch_warnings (cs->cases, switch_location,
3860                                 SWITCH_STMT_TYPE (cs->switch_stmt), cond,
3861                                 bool_cond_p);
3862 
3863   /* For the benefit of block_may_fallthru remember if the switch body
3864      case labels cover all possible values and if there are break; stmts.  */
3865   if (cs->has_default_p
3866       || (!processing_template_decl
3867             && c_switch_covers_all_cases_p (cs->cases,
3868                                                     SWITCH_STMT_TYPE (cs->switch_stmt))))
3869     SWITCH_STMT_ALL_CASES_P (cs->switch_stmt) = 1;
3870   if (!cs->break_stmt_seen_p)
3871     SWITCH_STMT_NO_BREAK_P (cs->switch_stmt) = 1;
3872   /* Now that we're done with the switch warnings, set the switch type
3873      to the type of the condition if the index type was of scoped enum type.
3874      (Such types don't participate in the integer promotions.)  We do this
3875      because of bit-fields whose declared type is a scoped enum type:
3876      gimplification will use the lowered index type, but convert the
3877      case values to SWITCH_STMT_TYPE, which would have been the declared type
3878      and verify_gimple_switch doesn't accept that.  */
3879   if (is_bitfield_expr_with_lowered_type (cond))
3880     SWITCH_STMT_TYPE (cs->switch_stmt) = TREE_TYPE (cond);
3881   gcc_assert (!cs->in_loop_body_p);
3882   splay_tree_delete (cs->cases);
3883   switch_stack = switch_stack->next;
3884   free (cs);
3885 }
3886 
3887 /* Note that a BREAK_STMT is about to be added.  If it is inside of
3888    a SWITCH_STMT and not inside of a loop body inside of it, note
3889    in switch_stack we've seen a BREAK_STMT.  */
3890 
3891 void
note_break_stmt(void)3892 note_break_stmt (void)
3893 {
3894   if (switch_stack && !switch_stack->in_loop_body_p)
3895     switch_stack->break_stmt_seen_p = true;
3896 }
3897 
3898 /* Note the start of processing of an iteration statement's body.
3899    The note_break_stmt function will do nothing while processing it.
3900    Return a flag that should be passed to note_iteration_stmt_body_end.  */
3901 
3902 bool
note_iteration_stmt_body_start(void)3903 note_iteration_stmt_body_start (void)
3904 {
3905   if (!switch_stack)
3906     return false;
3907   bool ret = switch_stack->in_loop_body_p;
3908   switch_stack->in_loop_body_p = true;
3909   return ret;
3910 }
3911 
3912 /* Note the end of processing of an iteration statement's body.  */
3913 
3914 void
note_iteration_stmt_body_end(bool prev)3915 note_iteration_stmt_body_end (bool prev)
3916 {
3917   if (switch_stack)
3918     switch_stack->in_loop_body_p = prev;
3919 }
3920 
3921 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3922    condition.  Note that if TYPE and VALUE are already integral we don't
3923    really do the conversion because the language-independent
3924    warning/optimization code will work better that way.  */
3925 
3926 static tree
case_conversion(tree type,tree value)3927 case_conversion (tree type, tree value)
3928 {
3929   if (value == NULL_TREE)
3930     return value;
3931 
3932   value = mark_rvalue_use (value);
3933 
3934   if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3935     type = type_promotes_to (type);
3936 
3937   tree ovalue = value;
3938   /* The constant-expression VALUE shall be a converted constant expression
3939      of the adjusted type of the switch condition, which doesn't allow
3940      narrowing conversions.  */
3941   value = build_converted_constant_expr (type, value, tf_warning_or_error);
3942 
3943   if (cxx_dialect >= cxx11
3944       && (SCOPED_ENUM_P (type)
3945             || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ovalue))))
3946     /* Use the converted value.  */;
3947   else
3948     /* The already integral case.  */
3949     value = ovalue;
3950 
3951   return cxx_constant_value (value);
3952 }
3953 
3954 /* Note that we've seen a definition of a case label, and complain if this
3955    is a bad place for one.  */
3956 
3957 tree
finish_case_label(location_t loc,tree low_value,tree high_value)3958 finish_case_label (location_t loc, tree low_value, tree high_value)
3959 {
3960   tree cond, r;
3961   cp_binding_level *p;
3962   tree type;
3963 
3964   if (low_value == NULL_TREE && high_value == NULL_TREE)
3965     switch_stack->has_default_p = true;
3966 
3967   if (processing_template_decl)
3968     {
3969       tree label;
3970 
3971       /* For templates, just add the case label; we'll do semantic
3972            analysis at instantiation-time.  */
3973       label = build_decl (loc, LABEL_DECL, NULL_TREE, void_type_node);
3974       return add_stmt (build_case_label (low_value, high_value, label));
3975     }
3976 
3977   /* Find the condition on which this switch statement depends.  */
3978   cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3979   if (cond && TREE_CODE (cond) == TREE_LIST)
3980     cond = TREE_VALUE (cond);
3981 
3982   if (!check_switch_goto (switch_stack->level))
3983     return error_mark_node;
3984 
3985   type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3986   if (type == error_mark_node)
3987     return error_mark_node;
3988 
3989   low_value = case_conversion (type, low_value);
3990   high_value = case_conversion (type, high_value);
3991 
3992   r = c_add_case_label (loc, switch_stack->cases, cond, low_value, high_value);
3993 
3994   /* After labels, make any new cleanups in the function go into their
3995      own new (temporary) binding contour.  */
3996   for (p = current_binding_level;
3997        p->kind != sk_function_parms;
3998        p = p->level_chain)
3999     p->more_cleanups_ok = 0;
4000 
4001   return r;
4002 }
4003 
4004 struct typename_info {
4005   tree scope;
4006   tree name;
4007   tree template_id;
4008   bool enum_p;
4009   bool class_p;
4010 };
4011 
4012 struct typename_hasher : ggc_ptr_hash<tree_node>
4013 {
4014   typedef typename_info *compare_type;
4015 
4016   /* Hash a TYPENAME_TYPE.  */
4017 
4018   static hashval_t
hashtypename_hasher4019   hash (tree t)
4020   {
4021     hashval_t hash;
4022 
4023     hash = (htab_hash_pointer (TYPE_CONTEXT (t))
4024               ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
4025 
4026     return hash;
4027   }
4028 
4029   /* Compare two TYPENAME_TYPEs.  */
4030 
4031   static bool
equaltypename_hasher4032   equal (tree t1, const typename_info *t2)
4033   {
4034     return (TYPE_IDENTIFIER (t1) == t2->name
4035               && TYPE_CONTEXT (t1) == t2->scope
4036               && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
4037               && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
4038               && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
4039   }
4040 };
4041 
4042 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
4043    the type of `T', NAME is the IDENTIFIER_NODE for `t'.
4044 
4045    Returns the new TYPENAME_TYPE.  */
4046 
4047 static GTY (()) hash_table<typename_hasher> *typename_htab;
4048 
4049 tree
build_typename_type(tree context,tree name,tree fullname,enum tag_types tag_type)4050 build_typename_type (tree context, tree name, tree fullname,
4051                          enum tag_types tag_type)
4052 {
4053   typename_info ti;
4054 
4055   if (typename_htab == NULL)
4056     typename_htab = hash_table<typename_hasher>::create_ggc (61);
4057 
4058   ti.scope = FROB_CONTEXT (context);
4059   ti.name = name;
4060   ti.template_id = fullname;
4061   ti.enum_p = tag_type == enum_type;
4062   ti.class_p = (tag_type == class_type
4063                     || tag_type == record_type
4064                     || tag_type == union_type);
4065   hashval_t hash =  (htab_hash_pointer (ti.scope)
4066                          ^ htab_hash_pointer (ti.name));
4067 
4068   /* See if we already have this type.  */
4069   tree *e = typename_htab->find_slot_with_hash (&ti, hash, INSERT);
4070   tree t = *e;
4071   if (*e)
4072     t = *e;
4073   else
4074     {
4075       /* Build the TYPENAME_TYPE.  */
4076       t = cxx_make_type (TYPENAME_TYPE);
4077       TYPE_CONTEXT (t) = ti.scope;
4078       TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
4079       TYPENAME_IS_ENUM_P (t) = ti.enum_p;
4080       TYPENAME_IS_CLASS_P (t) = ti.class_p;
4081 
4082       /* Build the corresponding TYPE_DECL.  */
4083       tree d = build_decl (input_location, TYPE_DECL, name, t);
4084       TYPE_NAME (t) = d;
4085       TYPE_STUB_DECL (t) = d;
4086       DECL_CONTEXT (d) = ti.scope;
4087       DECL_ARTIFICIAL (d) = 1;
4088 
4089       /* Store it in the hash table.  */
4090       *e = t;
4091 
4092       /* TYPENAME_TYPEs must always be compared structurally, because
4093            they may or may not resolve down to another type depending on
4094            the currently open classes. */
4095       SET_TYPE_STRUCTURAL_EQUALITY (t);
4096     }
4097 
4098   return t;
4099 }
4100 
4101 /* Resolve `typename CONTEXT::NAME'.  TAG_TYPE indicates the tag
4102    provided to name the type.  Returns an appropriate type, unless an
4103    error occurs, in which case error_mark_node is returned.  If we
4104    locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
4105    return that, rather than the _TYPE it corresponds to, in other
4106    cases we look through the type decl.  If TF_ERROR is set, complain
4107    about errors, otherwise be quiet.  */
4108 
4109 tree
make_typename_type(tree context,tree name,enum tag_types tag_type,tsubst_flags_t complain)4110 make_typename_type (tree context, tree name, enum tag_types tag_type,
4111                         tsubst_flags_t complain)
4112 {
4113   tree fullname;
4114   tree t;
4115   bool want_template;
4116 
4117   if (name == error_mark_node
4118       || context == NULL_TREE
4119       || context == error_mark_node)
4120     return error_mark_node;
4121 
4122   if (TYPE_P (name))
4123     {
4124       if (!(TYPE_LANG_SPECIFIC (name)
4125               && (CLASSTYPE_IS_TEMPLATE (name)
4126                     || CLASSTYPE_USE_TEMPLATE (name))))
4127           name = TYPE_IDENTIFIER (name);
4128       else
4129           /* Create a TEMPLATE_ID_EXPR for the type.  */
4130           name = build_nt (TEMPLATE_ID_EXPR,
4131                                CLASSTYPE_TI_TEMPLATE (name),
4132                                CLASSTYPE_TI_ARGS (name));
4133     }
4134   else if (TREE_CODE (name) == TYPE_DECL)
4135     name = DECL_NAME (name);
4136 
4137   fullname = name;
4138 
4139   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
4140     {
4141       name = TREE_OPERAND (name, 0);
4142       if (DECL_TYPE_TEMPLATE_P (name))
4143           name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
4144       if (TREE_CODE (name) != IDENTIFIER_NODE)
4145           {
4146             if (complain & tf_error)
4147               error ("%qD is not a type", name);
4148             return error_mark_node;
4149           }
4150     }
4151   if (TREE_CODE (name) == TEMPLATE_DECL)
4152     {
4153       if (complain & tf_error)
4154           error ("%qD used without template arguments", name);
4155       return error_mark_node;
4156     }
4157   else if (is_overloaded_fn (name))
4158     {
4159       if (complain & tf_error)
4160           error ("%qD is a function, not a type", name);
4161       return error_mark_node;
4162     }
4163   gcc_assert (identifier_p (name));
4164   gcc_assert (TYPE_P (context));
4165 
4166   if (TREE_CODE (context) == TYPE_PACK_EXPANSION)
4167     /* This can happen for C++17 variadic using (c++/88986).  */;
4168   else if (!MAYBE_CLASS_TYPE_P (context))
4169     {
4170       if (complain & tf_error)
4171           error ("%q#T is not a class", context);
4172       return error_mark_node;
4173     }
4174 
4175   /* When the CONTEXT is a dependent type,  NAME could refer to a
4176      dependent base class of CONTEXT.  But look inside it anyway
4177      if CONTEXT is a currently open scope, in case it refers to a
4178      member of the current instantiation or a non-dependent base;
4179      lookup will stop when we hit a dependent base.  */
4180   if (!dependent_scope_p (context))
4181     /* We should only set WANT_TYPE when we're a nested typename type.
4182        Then we can give better diagnostics if we find a non-type.  */
4183     t = lookup_field (context, name, 2, /*want_type=*/true);
4184   else
4185     t = NULL_TREE;
4186 
4187   if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
4188     return build_typename_type (context, name, fullname, tag_type);
4189 
4190   want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
4191 
4192   if (!t)
4193     {
4194       if (complain & tf_error)
4195           {
4196             if (!COMPLETE_TYPE_P (context))
4197               cxx_incomplete_type_error (NULL_TREE, context);
4198             else
4199               error (want_template ? G_("no class template named %q#T in %q#T")
4200                        : G_("no type named %q#T in %q#T"), name, context);
4201           }
4202       return error_mark_node;
4203     }
4204 
4205   /* Pull out the template from an injected-class-name (or multiple).  */
4206   if (want_template)
4207     t = maybe_get_template_decl_from_type_decl (t);
4208 
4209   if (TREE_CODE (t) == TREE_LIST)
4210     {
4211       if (complain & tf_error)
4212           {
4213             error ("lookup of %qT in %qT is ambiguous", name, context);
4214             print_candidates (t);
4215           }
4216       return error_mark_node;
4217     }
4218 
4219   if (want_template && !DECL_TYPE_TEMPLATE_P (t))
4220     {
4221       if (complain & tf_error)
4222           error ("%<typename %T::%D%> names %q#T, which is not a class template",
4223                  context, name, t);
4224       return error_mark_node;
4225     }
4226   if (!want_template && TREE_CODE (t) != TYPE_DECL)
4227     {
4228       if ((complain & tf_tst_ok) && cxx_dialect >= cxx17
4229             && DECL_TYPE_TEMPLATE_P (t))
4230           /* The caller permits this typename-specifier to name a template
4231              (because it appears in a CTAD-enabled context).  */;
4232       else
4233           {
4234             if (complain & tf_error)
4235               error ("%<typename %T::%D%> names %q#T, which is not a type",
4236                        context, name, t);
4237             return error_mark_node;
4238           }
4239     }
4240 
4241   if (!check_accessibility_of_qualified_id (t, /*object_type=*/NULL_TREE,
4242                                                       context, complain))
4243     return error_mark_node;
4244 
4245   if (!want_template && DECL_TYPE_TEMPLATE_P (t))
4246     return make_template_placeholder (t);
4247 
4248   if (want_template)
4249     {
4250       t = lookup_template_class (t, TREE_OPERAND (fullname, 1),
4251                                          NULL_TREE, context,
4252                                          /*entering_scope=*/0,
4253                                          complain | tf_user);
4254       if (t == error_mark_node)
4255           return error_mark_node;
4256       t = TYPE_NAME (t);
4257     }
4258 
4259   if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
4260     t = TREE_TYPE (t);
4261 
4262   maybe_record_typedef_use (t);
4263 
4264   return t;
4265 }
4266 
4267 /* Resolve `CONTEXT::template NAME'.  Returns a TEMPLATE_DECL if the name
4268    can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
4269    in which case error_mark_node is returned.
4270 
4271    If PARM_LIST is non-NULL, also make sure that the template parameter
4272    list of TEMPLATE_DECL matches.
4273 
4274    If COMPLAIN zero, don't complain about any errors that occur.  */
4275 
4276 tree
make_unbound_class_template(tree context,tree name,tree parm_list,tsubst_flags_t complain)4277 make_unbound_class_template (tree context, tree name, tree parm_list,
4278                                    tsubst_flags_t complain)
4279 {
4280   if (TYPE_P (name))
4281     name = TYPE_IDENTIFIER (name);
4282   else if (DECL_P (name))
4283     name = DECL_NAME (name);
4284   gcc_assert (identifier_p (name));
4285 
4286   if (!dependent_type_p (context)
4287       || currently_open_class (context))
4288     {
4289       tree tmpl = NULL_TREE;
4290 
4291       if (MAYBE_CLASS_TYPE_P (context))
4292           tmpl = lookup_field (context, name, 0, false);
4293 
4294       if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
4295           tmpl = maybe_get_template_decl_from_type_decl (tmpl);
4296 
4297       if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
4298           {
4299             if (complain & tf_error)
4300               error ("no class template named %q#T in %q#T", name, context);
4301             return error_mark_node;
4302           }
4303 
4304       if (parm_list
4305             && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
4306           {
4307             if (complain & tf_error)
4308               {
4309                 error ("template parameters do not match template %qD", tmpl);
4310                 inform (DECL_SOURCE_LOCATION (tmpl),
4311                           "%qD declared here", tmpl);
4312               }
4313             return error_mark_node;
4314           }
4315 
4316       if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
4317                                                     complain))
4318           return error_mark_node;
4319 
4320       return tmpl;
4321     }
4322 
4323   return make_unbound_class_template_raw (context, name, parm_list);
4324 }
4325 
4326 /* Build an UNBOUND_CLASS_TEMPLATE.  */
4327 
4328 tree
make_unbound_class_template_raw(tree context,tree name,tree parm_list)4329 make_unbound_class_template_raw (tree context, tree name, tree parm_list)
4330 {
4331   /* Build the UNBOUND_CLASS_TEMPLATE.  */
4332   tree t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
4333   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
4334   TREE_TYPE (t) = NULL_TREE;
4335   SET_TYPE_STRUCTURAL_EQUALITY (t);
4336 
4337   /* Build the corresponding TEMPLATE_DECL.  */
4338   tree d = build_decl (input_location, TEMPLATE_DECL, name, t);
4339   TYPE_NAME (t) = d;
4340   TYPE_STUB_DECL (t) = d;
4341   DECL_CONTEXT (d) = TYPE_CONTEXT (t);
4342   DECL_ARTIFICIAL (d) = 1;
4343   DECL_TEMPLATE_PARMS (d) = parm_list;
4344 
4345   return t;
4346 }
4347 
4348 
4349 
4350 /* Push the declarations of builtin types into the global namespace.
4351    RID_INDEX is the index of the builtin type in the array
4352    RID_POINTERS.  NAME is the name used when looking up the builtin
4353    type.  TYPE is the _TYPE node for the builtin type.
4354 
4355    The calls to set_global_binding below should be
4356    eliminated.  Built-in types should not be looked up name; their
4357    names are keywords that the parser can recognize.  However, there
4358    is code in c-common.cc that uses identifier_global_value to look up
4359    built-in types by name.  */
4360 
4361 void
record_builtin_type(enum rid rid_index,const char * name,tree type)4362 record_builtin_type (enum rid rid_index,
4363                          const char* name,
4364                          tree type)
4365 {
4366   tree decl = NULL_TREE;
4367 
4368   if (name)
4369     {
4370       tree tname = get_identifier (name);
4371       tree tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
4372       DECL_ARTIFICIAL (tdecl) = 1;
4373       set_global_binding (tdecl);
4374       decl = tdecl;
4375     }
4376 
4377   if ((int) rid_index < (int) RID_MAX)
4378     if (tree rname = ridpointers[(int) rid_index])
4379       if (!decl || DECL_NAME (decl) != rname)
4380           {
4381             tree rdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
4382             DECL_ARTIFICIAL (rdecl) = 1;
4383             set_global_binding (rdecl);
4384             if (!decl)
4385               decl = rdecl;
4386           }
4387 
4388   if (decl)
4389     {
4390       if (!TYPE_NAME (type))
4391           TYPE_NAME (type) = decl;
4392       debug_hooks->type_decl (decl, 0);
4393     }
4394 }
4395 
4396 /* Push a type into the namespace so that the back ends ignore it.  */
4397 
4398 static void
record_unknown_type(tree type,const char * name)4399 record_unknown_type (tree type, const char* name)
4400 {
4401   tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
4402                                             TYPE_DECL, get_identifier (name), type));
4403   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
4404   DECL_IGNORED_P (decl) = 1;
4405   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
4406   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
4407   SET_TYPE_ALIGN (type, 1);
4408   TYPE_USER_ALIGN (type) = 0;
4409   SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
4410 }
4411 
4412 /* Create all the predefined identifiers.  */
4413 
4414 static void
initialize_predefined_identifiers(void)4415 initialize_predefined_identifiers (void)
4416 {
4417   struct predefined_identifier
4418   {
4419     const char *name; /* Name.  */
4420     tree *node;  /* Node to store it in.  */
4421     cp_identifier_kind kind;  /* Kind of identifier.  */
4422   };
4423 
4424   /* A table of identifiers to create at startup.  */
4425   static const predefined_identifier predefined_identifiers[] = {
4426     {"C++", &lang_name_cplusplus, cik_normal},
4427     {"C", &lang_name_c, cik_normal},
4428     /* Some of these names have a trailing space so that it is
4429        impossible for them to conflict with names written by users.  */
4430     {"__ct ", &ctor_identifier, cik_ctor},
4431     {"__ct_base ", &base_ctor_identifier, cik_ctor},
4432     {"__ct_comp ", &complete_ctor_identifier, cik_ctor},
4433     {"__dt ", &dtor_identifier, cik_dtor},
4434     {"__dt_base ", &base_dtor_identifier, cik_dtor},
4435     {"__dt_comp ", &complete_dtor_identifier, cik_dtor},
4436     {"__dt_del ", &deleting_dtor_identifier, cik_dtor},
4437     {"__conv_op ", &conv_op_identifier, cik_conv_op},
4438     {"__in_chrg", &in_charge_identifier, cik_normal},
4439     {"__as_base ", &as_base_identifier, cik_normal},
4440     {"this", &this_identifier, cik_normal},
4441     {"__delta", &delta_identifier, cik_normal},
4442     {"__pfn", &pfn_identifier, cik_normal},
4443     {"_vptr", &vptr_identifier, cik_normal},
4444     {"__vtt_parm", &vtt_parm_identifier, cik_normal},
4445     {"::", &global_identifier, cik_normal},
4446       /* The demangler expects anonymous namespaces to be called
4447            something starting with '_GLOBAL__N_'.  It no longer needs
4448            to be unique to the TU.  */
4449     {"_GLOBAL__N_1", &anon_identifier, cik_normal},
4450     {"auto", &auto_identifier, cik_normal},
4451     {"decltype(auto)", &decltype_auto_identifier, cik_normal},
4452     {"initializer_list", &init_list_identifier, cik_normal},
4453     {"__for_range ", &for_range__identifier, cik_normal},
4454     {"__for_begin ", &for_begin__identifier, cik_normal},
4455     {"__for_end ", &for_end__identifier, cik_normal},
4456     {"__for_range", &for_range_identifier, cik_normal},
4457     {"__for_begin", &for_begin_identifier, cik_normal},
4458     {"__for_end", &for_end_identifier, cik_normal},
4459     {"abi_tag", &abi_tag_identifier, cik_normal},
4460     {"aligned", &aligned_identifier, cik_normal},
4461     {"begin", &begin_identifier, cik_normal},
4462     {"end", &end_identifier, cik_normal},
4463     {"get", &get__identifier, cik_normal},
4464     {"gnu", &gnu_identifier, cik_normal},
4465     {"tuple_element", &tuple_element_identifier, cik_normal},
4466     {"tuple_size", &tuple_size_identifier, cik_normal},
4467     {"type", &type_identifier, cik_normal},
4468     {"value", &value_identifier, cik_normal},
4469     {"_FUN", &fun_identifier, cik_normal},
4470     {"__closure", &closure_identifier, cik_normal},
4471     {"heap uninit", &heap_uninit_identifier, cik_normal},
4472     {"heap ", &heap_identifier, cik_normal},
4473     {"heap deleted", &heap_deleted_identifier, cik_normal},
4474     {"heap [] uninit", &heap_vec_uninit_identifier, cik_normal},
4475     {"heap []", &heap_vec_identifier, cik_normal},
4476     {"omp", &omp_identifier, cik_normal},
4477     {NULL, NULL, cik_normal}
4478   };
4479 
4480   for (const predefined_identifier *pid = predefined_identifiers;
4481        pid->name; ++pid)
4482     {
4483       *pid->node = get_identifier (pid->name);
4484       /* Some of these identifiers already have a special kind.  */
4485       if (pid->kind != cik_normal)
4486           set_identifier_kind (*pid->node, pid->kind);
4487     }
4488 }
4489 
4490 /* Create the predefined scalar types of C,
4491    and some nodes representing standard constants (0, 1, (void *)0).
4492    Initialize the global binding level.
4493    Make definitions for built-in primitive functions.  */
4494 
4495 void
cxx_init_decl_processing(void)4496 cxx_init_decl_processing (void)
4497 {
4498   tree void_ftype;
4499   tree void_ftype_ptr;
4500 
4501   /* Create all the identifiers we need.  */
4502   initialize_predefined_identifiers ();
4503 
4504   /* Create the global variables.  */
4505   push_to_top_level ();
4506 
4507   current_function_decl = NULL_TREE;
4508   current_binding_level = NULL;
4509   /* Enter the global namespace.  */
4510   gcc_assert (global_namespace == NULL_TREE);
4511   global_namespace = build_lang_decl (NAMESPACE_DECL, global_identifier,
4512                                               void_type_node);
4513   TREE_PUBLIC (global_namespace) = true;
4514   DECL_MODULE_EXPORT_P (global_namespace) = true;
4515   DECL_CONTEXT (global_namespace)
4516     = build_translation_unit_decl (get_identifier (main_input_filename));
4517   /* Remember whether we want the empty class passing ABI change warning
4518      in this TU.  */
4519   TRANSLATION_UNIT_WARN_EMPTY_P (DECL_CONTEXT (global_namespace))
4520     = warn_abi && abi_version_crosses (12);
4521   debug_hooks->register_main_translation_unit
4522     (DECL_CONTEXT (global_namespace));
4523   begin_scope (sk_namespace, global_namespace);
4524   current_namespace = global_namespace;
4525 
4526   if (flag_visibility_ms_compat)
4527     default_visibility = VISIBILITY_HIDDEN;
4528 
4529   /* Initially, C.  */
4530   current_lang_name = lang_name_c;
4531 
4532   /* Create the `std' namespace.  */
4533   push_namespace (get_identifier ("std"));
4534   std_node = current_namespace;
4535   pop_namespace ();
4536 
4537   flag_noexcept_type = (cxx_dialect >= cxx17);
4538 
4539   c_common_nodes_and_builtins ();
4540 
4541   tree bool_ftype = build_function_type_list (boolean_type_node, NULL_TREE);
4542   tree decl
4543     = add_builtin_function ("__builtin_is_constant_evaluated",
4544                                   bool_ftype, CP_BUILT_IN_IS_CONSTANT_EVALUATED,
4545                                   BUILT_IN_FRONTEND, NULL, NULL_TREE);
4546   set_call_expr_flags (decl, ECF_CONST | ECF_NOTHROW | ECF_LEAF);
4547 
4548   tree cptr_ftype = build_function_type_list (const_ptr_type_node, NULL_TREE);
4549   decl = add_builtin_function ("__builtin_source_location",
4550                                      cptr_ftype, CP_BUILT_IN_SOURCE_LOCATION,
4551                                      BUILT_IN_FRONTEND, NULL, NULL_TREE);
4552   set_call_expr_flags (decl, ECF_CONST | ECF_NOTHROW | ECF_LEAF);
4553 
4554   tree bool_vaftype = build_varargs_function_type_list (boolean_type_node,
4555                                                                       NULL_TREE);
4556   decl
4557     = add_builtin_function ("__builtin_is_corresponding_member",
4558                                   bool_vaftype,
4559                                   CP_BUILT_IN_IS_CORRESPONDING_MEMBER,
4560                                   BUILT_IN_FRONTEND, NULL, NULL_TREE);
4561   set_call_expr_flags (decl, ECF_CONST | ECF_NOTHROW | ECF_LEAF);
4562 
4563   decl
4564     = add_builtin_function ("__builtin_is_pointer_interconvertible_with_class",
4565                                   bool_vaftype,
4566                                   CP_BUILT_IN_IS_POINTER_INTERCONVERTIBLE_WITH_CLASS,
4567                                   BUILT_IN_FRONTEND, NULL, NULL_TREE);
4568   set_call_expr_flags (decl, ECF_CONST | ECF_NOTHROW | ECF_LEAF);
4569 
4570   integer_two_node = build_int_cst (NULL_TREE, 2);
4571 
4572   /* Guess at the initial static decls size.  */
4573   vec_alloc (static_decls, 500);
4574 
4575   /* ... and keyed classes.  */
4576   vec_alloc (keyed_classes, 100);
4577 
4578   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
4579   truthvalue_type_node = boolean_type_node;
4580   truthvalue_false_node = boolean_false_node;
4581   truthvalue_true_node = boolean_true_node;
4582 
4583   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
4584   noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
4585   noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
4586   noexcept_deferred_spec = build_tree_list (make_node (DEFERRED_NOEXCEPT),
4587                                                       NULL_TREE);
4588 
4589 #if 0
4590   record_builtin_type (RID_MAX, NULL, string_type_node);
4591 #endif
4592 
4593   delta_type_node = ptrdiff_type_node;
4594   vtable_index_type = ptrdiff_type_node;
4595 
4596   vtt_parm_type = build_pointer_type (const_ptr_type_node);
4597   void_ftype = build_function_type_list (void_type_node, NULL_TREE);
4598   void_ftype_ptr = build_function_type_list (void_type_node,
4599                                                        ptr_type_node, NULL_TREE);
4600   void_ftype_ptr
4601     = build_exception_variant (void_ftype_ptr, empty_except_spec);
4602 
4603   /* Create the conversion operator marker.  This operator's DECL_NAME
4604      is in the identifier table, so we can use identifier equality to
4605      find it.  */
4606   conv_op_marker = build_lang_decl (FUNCTION_DECL, conv_op_identifier,
4607                                             void_ftype);
4608 
4609   /* C++ extensions */
4610 
4611   unknown_type_node = make_node (LANG_TYPE);
4612   record_unknown_type (unknown_type_node, "unknown type");
4613 
4614   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
4615   TREE_TYPE (unknown_type_node) = unknown_type_node;
4616 
4617   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
4618      result.  */
4619   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
4620   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
4621 
4622   init_list_type_node = make_node (LANG_TYPE);
4623   record_unknown_type (init_list_type_node, "init list");
4624 
4625   /* Used when parsing to distinguish parameter-lists () and (void).  */
4626   explicit_void_list_node = build_void_list_node ();
4627 
4628   {
4629     /* Make sure we get a unique function type, so we can give
4630        its pointer type a name.  (This wins for gdb.) */
4631     tree vfunc_type = make_node (FUNCTION_TYPE);
4632     TREE_TYPE (vfunc_type) = integer_type_node;
4633     TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
4634     layout_type (vfunc_type);
4635 
4636     vtable_entry_type = build_pointer_type (vfunc_type);
4637   }
4638   record_builtin_type (RID_MAX, "__vtbl_ptr_type", vtable_entry_type);
4639 
4640   vtbl_type_node
4641     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
4642   layout_type (vtbl_type_node);
4643   vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
4644   record_builtin_type (RID_MAX, NULL, vtbl_type_node);
4645   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
4646   layout_type (vtbl_ptr_type_node);
4647   record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
4648 
4649   push_namespace (get_identifier ("__cxxabiv1"));
4650   abi_node = current_namespace;
4651   pop_namespace ();
4652 
4653   any_targ_node = make_node (LANG_TYPE);
4654   record_unknown_type (any_targ_node, "any type");
4655 
4656   /* Now, C++.  */
4657   current_lang_name = lang_name_cplusplus;
4658 
4659   if (aligned_new_threshold > 1
4660       && !pow2p_hwi (aligned_new_threshold))
4661     {
4662       error ("%<-faligned-new=%d%> is not a power of two",
4663                aligned_new_threshold);
4664       aligned_new_threshold = 1;
4665     }
4666   if (aligned_new_threshold == -1)
4667     aligned_new_threshold = (cxx_dialect >= cxx17) ? 1 : 0;
4668   if (aligned_new_threshold == 1)
4669     aligned_new_threshold = malloc_alignment () / BITS_PER_UNIT;
4670 
4671   {
4672     tree newattrs, extvisattr;
4673     tree newtype, deltype;
4674     tree ptr_ftype_sizetype;
4675     tree new_eh_spec;
4676 
4677     ptr_ftype_sizetype
4678       = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
4679     if (cxx_dialect == cxx98)
4680       {
4681           tree bad_alloc_id;
4682           tree bad_alloc_type_node;
4683           tree bad_alloc_decl;
4684 
4685           push_nested_namespace (std_node);
4686           bad_alloc_id = get_identifier ("bad_alloc");
4687           bad_alloc_type_node = make_class_type (RECORD_TYPE);
4688           TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
4689           bad_alloc_decl
4690             = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
4691           DECL_CONTEXT (bad_alloc_decl) = current_namespace;
4692           pop_nested_namespace (std_node);
4693 
4694           new_eh_spec
4695             = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
4696       }
4697     else
4698       new_eh_spec = noexcept_false_spec;
4699 
4700     /* Ensure attribs.cc is initialized.  */
4701     init_attributes ();
4702 
4703     extvisattr = build_tree_list (get_identifier ("externally_visible"),
4704                                           NULL_TREE);
4705     newattrs = tree_cons (get_identifier ("alloc_size"),
4706                                 build_tree_list (NULL_TREE, integer_one_node),
4707                                 extvisattr);
4708     newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
4709     newtype = build_exception_variant (newtype, new_eh_spec);
4710     deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
4711     deltype = build_exception_variant (deltype, empty_except_spec);
4712     tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4713     DECL_IS_MALLOC (opnew) = 1;
4714     DECL_SET_IS_OPERATOR_NEW (opnew, true);
4715     DECL_IS_REPLACEABLE_OPERATOR (opnew) = 1;
4716     opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4717     DECL_IS_MALLOC (opnew) = 1;
4718     DECL_SET_IS_OPERATOR_NEW (opnew, true);
4719     DECL_IS_REPLACEABLE_OPERATOR (opnew) = 1;
4720     tree opdel = push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4721     DECL_SET_IS_OPERATOR_DELETE (opdel, true);
4722     DECL_IS_REPLACEABLE_OPERATOR (opdel) = 1;
4723     opdel = push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4724     DECL_SET_IS_OPERATOR_DELETE (opdel, true);
4725     DECL_IS_REPLACEABLE_OPERATOR (opdel) = 1;
4726     if (flag_sized_deallocation)
4727       {
4728           /* Also push the sized deallocation variants:
4729                void operator delete(void*, std::size_t) throw();
4730                void operator delete[](void*, std::size_t) throw();  */
4731           tree void_ftype_ptr_size
4732             = build_function_type_list (void_type_node, ptr_type_node,
4733                                               size_type_node, NULL_TREE);
4734           deltype = cp_build_type_attribute_variant (void_ftype_ptr_size,
4735                                                                extvisattr);
4736           deltype = build_exception_variant (deltype, empty_except_spec);
4737           opdel = push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4738           DECL_SET_IS_OPERATOR_DELETE (opdel, true);
4739           DECL_IS_REPLACEABLE_OPERATOR (opdel) = 1;
4740           opdel = push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4741           DECL_SET_IS_OPERATOR_DELETE (opdel, true);
4742           DECL_IS_REPLACEABLE_OPERATOR (opdel) = 1;
4743       }
4744 
4745     if (aligned_new_threshold)
4746       {
4747           push_nested_namespace (std_node);
4748           tree align_id = get_identifier ("align_val_t");
4749           align_type_node = start_enum (align_id, NULL_TREE, size_type_node,
4750                                               NULL_TREE, /*scoped*/true, NULL);
4751           pop_nested_namespace (std_node);
4752 
4753           /* operator new (size_t, align_val_t); */
4754           newtype = build_function_type_list (ptr_type_node, size_type_node,
4755                                                       align_type_node, NULL_TREE);
4756           newtype = cp_build_type_attribute_variant (newtype, newattrs);
4757           newtype = build_exception_variant (newtype, new_eh_spec);
4758           opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4759           DECL_IS_MALLOC (opnew) = 1;
4760           DECL_SET_IS_OPERATOR_NEW (opnew, true);
4761           DECL_IS_REPLACEABLE_OPERATOR (opnew) = 1;
4762           opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4763           DECL_IS_MALLOC (opnew) = 1;
4764           DECL_SET_IS_OPERATOR_NEW (opnew, true);
4765           DECL_IS_REPLACEABLE_OPERATOR (opnew) = 1;
4766 
4767           /* operator delete (void *, align_val_t); */
4768           deltype = build_function_type_list (void_type_node, ptr_type_node,
4769                                                       align_type_node, NULL_TREE);
4770           deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4771           deltype = build_exception_variant (deltype, empty_except_spec);
4772           opdel = push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4773           DECL_SET_IS_OPERATOR_DELETE (opdel, true);
4774           DECL_IS_REPLACEABLE_OPERATOR (opdel) = 1;
4775           opdel = push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4776           DECL_SET_IS_OPERATOR_DELETE (opdel, true);
4777           DECL_IS_REPLACEABLE_OPERATOR (opdel) = 1;
4778 
4779           if (flag_sized_deallocation)
4780             {
4781               /* operator delete (void *, size_t, align_val_t); */
4782               deltype = build_function_type_list (void_type_node, ptr_type_node,
4783                                                             size_type_node, align_type_node,
4784                                                             NULL_TREE);
4785               deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4786               deltype = build_exception_variant (deltype, empty_except_spec);
4787               opdel = push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4788               DECL_SET_IS_OPERATOR_DELETE (opdel, true);
4789               DECL_IS_REPLACEABLE_OPERATOR (opdel) = 1;
4790               opdel = push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4791               DECL_SET_IS_OPERATOR_DELETE (opdel, true);
4792               DECL_IS_REPLACEABLE_OPERATOR (opdel) = 1;
4793             }
4794       }
4795 
4796     nullptr_type_node = make_node (NULLPTR_TYPE);
4797     TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
4798     TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
4799     TYPE_UNSIGNED (nullptr_type_node) = 1;
4800     TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
4801     if (abi_version_at_least (9))
4802       SET_TYPE_ALIGN (nullptr_type_node, GET_MODE_ALIGNMENT (ptr_mode));
4803     SET_TYPE_MODE (nullptr_type_node, ptr_mode);
4804     record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
4805     nullptr_node = build_int_cst (nullptr_type_node, 0);
4806   }
4807 
4808   if (! supports_one_only ())
4809     flag_weak = 0;
4810 
4811   abort_fndecl
4812     = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
4813                                   ECF_NORETURN | ECF_NOTHROW | ECF_COLD);
4814   if (flag_weak)
4815     /* If no definition is available, resolve references to NULL.  */
4816     declare_weak (abort_fndecl);
4817 
4818   /* Perform other language dependent initializations.  */
4819   init_class_processing ();
4820   init_rtti_processing ();
4821   init_template_processing ();
4822 
4823   if (flag_exceptions)
4824     init_exception_processing ();
4825 
4826   if (modules_p ())
4827     init_modules (parse_in);
4828 
4829   make_fname_decl = cp_make_fname_decl;
4830   start_fname_decls ();
4831 
4832   /* Show we use EH for cleanups.  */
4833   if (flag_exceptions)
4834     using_eh_for_cleanups ();
4835 
4836   /* Check that the hardware interference sizes are at least
4837      alignof(max_align_t), as required by the standard.  */
4838   const int max_align = max_align_t_align () / BITS_PER_UNIT;
4839   if (OPTION_SET_P (param_destruct_interfere_size))
4840     {
4841       if (param_destruct_interfere_size < max_align)
4842           error ("%<--param destructive-interference-size=%d%> is less than "
4843                  "%d", param_destruct_interfere_size, max_align);
4844       else if (param_destruct_interfere_size < param_l1_cache_line_size)
4845           warning (OPT_Winterference_size,
4846                      "%<--param destructive-interference-size=%d%> "
4847                      "is less than %<--param l1-cache-line-size=%d%>",
4848                      param_destruct_interfere_size, param_l1_cache_line_size);
4849     }
4850   else if (param_destruct_interfere_size)
4851     /* Assume the internal value is OK.  */;
4852   else if (param_l1_cache_line_size >= max_align)
4853     param_destruct_interfere_size = param_l1_cache_line_size;
4854   /* else leave it unset.  */
4855 
4856   if (OPTION_SET_P (param_construct_interfere_size))
4857     {
4858       if (param_construct_interfere_size < max_align)
4859           error ("%<--param constructive-interference-size=%d%> is less than "
4860                  "%d", param_construct_interfere_size, max_align);
4861       else if (param_construct_interfere_size > param_l1_cache_line_size
4862                  && param_l1_cache_line_size >= max_align)
4863           warning (OPT_Winterference_size,
4864                      "%<--param constructive-interference-size=%d%> "
4865                      "is greater than %<--param l1-cache-line-size=%d%>",
4866                      param_construct_interfere_size, param_l1_cache_line_size);
4867     }
4868   else if (param_construct_interfere_size)
4869     /* Assume the internal value is OK.  */;
4870   else if (param_l1_cache_line_size >= max_align)
4871     param_construct_interfere_size = param_l1_cache_line_size;
4872 }
4873 
4874 /* Enter an abi node in global-module context.  returns a cookie to
4875    give to pop_abi_namespace.  */
4876 
4877 unsigned
push_abi_namespace(tree node)4878 push_abi_namespace (tree node)
4879 {
4880   push_nested_namespace (node);
4881   push_visibility ("default", 2);
4882   unsigned flags = module_kind;
4883   module_kind = 0;
4884   return flags;
4885 }
4886 
4887 /* Pop an abi namespace, FLAGS is the cookie push_abi_namespace gave
4888    you.  */
4889 
4890 void
pop_abi_namespace(unsigned flags,tree node)4891 pop_abi_namespace (unsigned flags, tree node)
4892 {
4893   module_kind = flags;
4894   pop_visibility (2);
4895   pop_nested_namespace (node);
4896 }
4897 
4898 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
4899    the decl, LOC is the location to give the decl, NAME is the
4900    initialization string and TYPE_DEP indicates whether NAME depended
4901    on the type of the function. We make use of that to detect
4902    __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
4903    at the point of first use, so we mustn't push the decl now.  */
4904 
4905 static tree
cp_make_fname_decl(location_t loc,tree id,int type_dep)4906 cp_make_fname_decl (location_t loc, tree id, int type_dep)
4907 {
4908   tree domain = NULL_TREE;
4909   tree init = NULL_TREE;
4910 
4911   if (!(type_dep && in_template_function ()))
4912     {
4913       const char *name = NULL;
4914       bool release_name = false;
4915 
4916       if (current_function_decl == NULL_TREE)
4917           name = "top level";
4918       else if (type_dep == 0)
4919           {
4920             /* __FUNCTION__ */
4921             name = fname_as_string (type_dep);
4922             release_name = true;
4923           }
4924       else
4925           {
4926             /* __PRETTY_FUNCTION__ */
4927             gcc_checking_assert (type_dep == 1);
4928             name = cxx_printable_name (current_function_decl, 2);
4929           }
4930 
4931       size_t length = strlen (name);
4932       domain = build_index_type (size_int (length));
4933       init = build_string (length + 1, name);
4934       if (release_name)
4935           free (const_cast<char *> (name));
4936     }
4937 
4938   tree type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
4939   type = build_cplus_array_type (type, domain);
4940 
4941   if (init)
4942     TREE_TYPE (init) = type;
4943   else
4944     init = error_mark_node;
4945 
4946   tree decl = build_decl (loc, VAR_DECL, id, type);
4947 
4948   TREE_READONLY (decl) = 1;
4949   DECL_ARTIFICIAL (decl) = 1;
4950   DECL_DECLARED_CONSTEXPR_P (decl) = 1;
4951   TREE_STATIC (decl) = 1;
4952 
4953   TREE_USED (decl) = 1;
4954 
4955   SET_DECL_VALUE_EXPR (decl, init);
4956   DECL_HAS_VALUE_EXPR_P (decl) = 1;
4957   /* For decl_constant_var_p.  */
4958   DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
4959 
4960   if (current_function_decl)
4961     {
4962       DECL_CONTEXT (decl) = current_function_decl;
4963       decl = pushdecl_outermost_localscope (decl);
4964       if (decl != error_mark_node)
4965           add_decl_expr (decl);
4966     }
4967   else
4968     {
4969       DECL_THIS_STATIC (decl) = true;
4970       decl = pushdecl_top_level_and_finish (decl, NULL_TREE);
4971     }
4972 
4973   return decl;
4974 }
4975 
4976 /* Install DECL as a builtin function at current global scope.  Return
4977    the new decl (if we found an existing version).  Also installs it
4978    into ::std, if it's not '_*'.  */
4979 
4980 tree
cxx_builtin_function(tree decl)4981 cxx_builtin_function (tree decl)
4982 {
4983   retrofit_lang_decl (decl);
4984 
4985   DECL_ARTIFICIAL (decl) = 1;
4986   SET_DECL_LANGUAGE (decl, lang_c);
4987   /* Runtime library routines are, by definition, available in an
4988      external shared object.  */
4989   DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4990   DECL_VISIBILITY_SPECIFIED (decl) = 1;
4991 
4992   tree id = DECL_NAME (decl);
4993   const char *name = IDENTIFIER_POINTER (id);
4994   bool hiding = false;
4995   if (name[0] != '_' || name[1] != '_')
4996     /* In the user's namespace, it must be declared before use.  */
4997     hiding = true;
4998   else if (IDENTIFIER_LENGTH (id) > strlen ("___chk")
4999              && !startswith (name + 2, "builtin_")
5000              && 0 == memcmp (name + IDENTIFIER_LENGTH (id) - strlen ("_chk"),
5001                                  "_chk", strlen ("_chk") + 1))
5002     /* Treat __*_chk fortification functions as anticipated as well,
5003        unless they are __builtin_*_chk.  */
5004     hiding = true;
5005 
5006   /* All builtins that don't begin with an '_' should additionally
5007      go in the 'std' namespace.  */
5008   if (name[0] != '_')
5009     {
5010       tree std_decl = copy_decl (decl);
5011 
5012       push_nested_namespace (std_node);
5013       DECL_CONTEXT (std_decl) = FROB_CONTEXT (std_node);
5014       pushdecl (std_decl, hiding);
5015       pop_nested_namespace (std_node);
5016     }
5017 
5018   DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
5019   decl = pushdecl (decl, hiding);
5020 
5021   return decl;
5022 }
5023 
5024 /* Like cxx_builtin_function, but guarantee the function is added to the global
5025    scope.  This is to allow function specific options to add new machine
5026    dependent builtins when the target ISA changes via attribute((target(...)))
5027    which saves space on program startup if the program does not use non-generic
5028    ISAs.  */
5029 
5030 tree
cxx_builtin_function_ext_scope(tree decl)5031 cxx_builtin_function_ext_scope (tree decl)
5032 {
5033   push_nested_namespace (global_namespace);
5034   decl = cxx_builtin_function (decl);
5035   pop_nested_namespace (global_namespace);
5036 
5037   return decl;
5038 }
5039 
5040 /* Implement LANG_HOOKS_SIMULATE_BUILTIN_FUNCTION_DECL.  */
5041 
5042 tree
cxx_simulate_builtin_function_decl(tree decl)5043 cxx_simulate_builtin_function_decl (tree decl)
5044 {
5045   retrofit_lang_decl (decl);
5046 
5047   DECL_ARTIFICIAL (decl) = 1;
5048   SET_DECL_LANGUAGE (decl, lang_cplusplus);
5049   DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
5050   return pushdecl (decl);
5051 }
5052 
5053 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
5054    function.  Not called directly.  */
5055 
5056 static tree
build_library_fn(tree name,enum tree_code operator_code,tree type,int ecf_flags)5057 build_library_fn (tree name, enum tree_code operator_code, tree type,
5058                       int ecf_flags)
5059 {
5060   tree fn = build_lang_decl (FUNCTION_DECL, name, type);
5061   DECL_EXTERNAL (fn) = 1;
5062   TREE_PUBLIC (fn) = 1;
5063   DECL_ARTIFICIAL (fn) = 1;
5064   DECL_OVERLOADED_OPERATOR_CODE_RAW (fn)
5065     = OVL_OP_INFO (false, operator_code)->ovl_op_code;
5066   SET_DECL_LANGUAGE (fn, lang_c);
5067   /* Runtime library routines are, by definition, available in an
5068      external shared object.  */
5069   DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
5070   DECL_VISIBILITY_SPECIFIED (fn) = 1;
5071   set_call_expr_flags (fn, ecf_flags);
5072   return fn;
5073 }
5074 
5075 /* Returns the _DECL for a library function with C++ linkage.  */
5076 
5077 static tree
build_cp_library_fn(tree name,enum tree_code operator_code,tree type,int ecf_flags)5078 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
5079                          int ecf_flags)
5080 {
5081   tree fn = build_library_fn (name, operator_code, type, ecf_flags);
5082   DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
5083   SET_DECL_LANGUAGE (fn, lang_cplusplus);
5084   return fn;
5085 }
5086 
5087 /* Like build_library_fn, but takes a C string instead of an
5088    IDENTIFIER_NODE.  */
5089 
5090 tree
build_library_fn_ptr(const char * name,tree type,int ecf_flags)5091 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
5092 {
5093   return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
5094 }
5095 
5096 /* Like build_cp_library_fn, but takes a C string instead of an
5097    IDENTIFIER_NODE.  */
5098 
5099 tree
build_cp_library_fn_ptr(const char * name,tree type,int ecf_flags)5100 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
5101 {
5102   return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
5103                                     ecf_flags);
5104 }
5105 
5106 /* Like build_library_fn, but also pushes the function so that we will
5107    be able to find it via get_global_binding.  Also, the function
5108    may throw exceptions listed in RAISES.  */
5109 
5110 tree
push_library_fn(tree name,tree type,tree raises,int ecf_flags)5111 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
5112 {
5113   if (raises)
5114     type = build_exception_variant (type, raises);
5115 
5116   tree fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
5117   return pushdecl_top_level (fn);
5118 }
5119 
5120 /* Like build_cp_library_fn, but also pushes the function so that it
5121    will be found by normal lookup.  */
5122 
5123 static tree
push_cp_library_fn(enum tree_code operator_code,tree type,int ecf_flags)5124 push_cp_library_fn (enum tree_code operator_code, tree type,
5125                         int ecf_flags)
5126 {
5127   tree fn = build_cp_library_fn (ovl_op_identifier (false, operator_code),
5128                                          operator_code, type, ecf_flags);
5129   pushdecl (fn);
5130   if (flag_tm)
5131     apply_tm_attr (fn, get_identifier ("transaction_safe"));
5132   return fn;
5133 }
5134 
5135 /* Like push_library_fn, but also note that this function throws
5136    and does not return.  Used for __throw_foo and the like.  */
5137 
5138 tree
push_throw_library_fn(tree name,tree type)5139 push_throw_library_fn (tree name, tree type)
5140 {
5141   tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN | ECF_COLD);
5142   return fn;
5143 }
5144 
5145 /* When we call finish_struct for an anonymous union, we create
5146    default copy constructors and such.  But, an anonymous union
5147    shouldn't have such things; this function undoes the damage to the
5148    anonymous union type T.
5149 
5150    (The reason that we create the synthesized methods is that we don't
5151    distinguish `union { int i; }' from `typedef union { int i; } U'.
5152    The first is an anonymous union; the second is just an ordinary
5153    union type.)  */
5154 
5155 void
fixup_anonymous_aggr(tree t)5156 fixup_anonymous_aggr (tree t)
5157 {
5158   /* Wipe out memory of synthesized methods.  */
5159   TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
5160   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
5161   TYPE_HAS_COPY_CTOR (t) = 0;
5162   TYPE_HAS_CONST_COPY_CTOR (t) = 0;
5163   TYPE_HAS_COPY_ASSIGN (t) = 0;
5164   TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
5165 
5166   /* Splice the implicitly generated functions out of TYPE_FIELDS and diagnose
5167      invalid members.  */
5168   for (tree probe, *prev_p = &TYPE_FIELDS (t); (probe = *prev_p);)
5169     {
5170       if (TREE_CODE (probe) == FUNCTION_DECL && DECL_ARTIFICIAL (probe))
5171           *prev_p = DECL_CHAIN (probe);
5172       else
5173           prev_p = &DECL_CHAIN (probe);
5174 
5175       if (DECL_ARTIFICIAL (probe)
5176             && (!DECL_IMPLICIT_TYPEDEF_P (probe)
5177                 || TYPE_ANON_P (TREE_TYPE (probe))))
5178           continue;
5179 
5180       if (TREE_CODE (probe) != FIELD_DECL
5181             || (TREE_PRIVATE (probe) || TREE_PROTECTED (probe)))
5182           {
5183             /* We already complained about static data members in
5184                finish_static_data_member_decl.  */
5185             if (!VAR_P (probe))
5186               {
5187                 auto_diagnostic_group d;
5188                 if (permerror (DECL_SOURCE_LOCATION (probe),
5189                                    TREE_CODE (t) == UNION_TYPE
5190                                    ? "%q#D invalid; an anonymous union may "
5191                                    "only have public non-static data members"
5192                                    : "%q#D invalid; an anonymous struct may "
5193                                    "only have public non-static data members", probe))
5194                     {
5195                       static bool hint;
5196                       if (flag_permissive && !hint)
5197                         {
5198                           hint = true;
5199                           inform (DECL_SOURCE_LOCATION (probe),
5200                                     "this flexibility is deprecated and will be "
5201                                     "removed");
5202                         }
5203                     }
5204               }
5205           }
5206       }
5207 
5208   /* Splice all functions out of CLASSTYPE_MEMBER_VEC.  */
5209   vec<tree,va_gc>* vec = CLASSTYPE_MEMBER_VEC (t);
5210   unsigned store = 0;
5211   for (tree elt : vec)
5212     if (!is_overloaded_fn (elt))
5213       (*vec)[store++] = elt;
5214   vec_safe_truncate (vec, store);
5215 
5216   /* Wipe RTTI info.  */
5217   CLASSTYPE_TYPEINFO_VAR (t) = NULL_TREE;
5218 
5219   /* Anonymous aggregates cannot have fields with ctors, dtors or complex
5220      assignment operators (because they cannot have these methods themselves).
5221      For anonymous unions this is already checked because they are not allowed
5222      in any union, otherwise we have to check it.  */
5223   if (TREE_CODE (t) != UNION_TYPE)
5224     {
5225       tree field, type;
5226 
5227       if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)))
5228           {
5229             error_at (location_of (t), "anonymous struct with base classes");
5230             /* Avoid ICE after error on anon-struct9.C.  */
5231             TYPE_NEEDS_CONSTRUCTING (t) = false;
5232           }
5233 
5234       for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
5235           if (TREE_CODE (field) == FIELD_DECL)
5236             {
5237               type = TREE_TYPE (field);
5238               if (CLASS_TYPE_P (type))
5239                 {
5240                     if (TYPE_NEEDS_CONSTRUCTING (type))
5241                       error ("member %q+#D with constructor not allowed "
5242                                "in anonymous aggregate", field);
5243                     if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
5244                       error ("member %q+#D with destructor not allowed "
5245                                "in anonymous aggregate", field);
5246                     if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
5247                       error ("member %q+#D with copy assignment operator "
5248                                "not allowed in anonymous aggregate", field);
5249                 }
5250             }
5251     }
5252 }
5253 
5254 /* Warn for an attribute located at LOCATION that appertains to the
5255    class type CLASS_TYPE that has not been properly placed after its
5256    class-key, in it class-specifier.  */
5257 
5258 void
warn_misplaced_attr_for_class_type(location_t location,tree class_type)5259 warn_misplaced_attr_for_class_type (location_t location,
5260                                             tree class_type)
5261 {
5262   gcc_assert (OVERLOAD_TYPE_P (class_type));
5263 
5264   auto_diagnostic_group d;
5265   if (warning_at (location, OPT_Wattributes,
5266                       "attribute ignored in declaration "
5267                       "of %q#T", class_type))
5268     inform (location,
5269               "attribute for %q#T must follow the %qs keyword",
5270               class_type, class_key_or_enum_as_string (class_type));
5271 }
5272 
5273 /* Returns the cv-qualifiers that apply to the type specified
5274    by the DECLSPECS.  */
5275 
5276 static int
get_type_quals(const cp_decl_specifier_seq * declspecs)5277 get_type_quals (const cp_decl_specifier_seq *declspecs)
5278 {
5279   int type_quals = TYPE_UNQUALIFIED;
5280 
5281   if (decl_spec_seq_has_spec_p (declspecs, ds_const))
5282     type_quals |= TYPE_QUAL_CONST;
5283   if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
5284     type_quals |= TYPE_QUAL_VOLATILE;
5285   if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
5286     type_quals |= TYPE_QUAL_RESTRICT;
5287 
5288   return type_quals;
5289 }
5290 
5291 /* Make sure that a declaration with no declarator is well-formed, i.e.
5292    just declares a tagged type or anonymous union.
5293 
5294    Returns the type declared; or NULL_TREE if none.  */
5295 
5296 tree
check_tag_decl(cp_decl_specifier_seq * declspecs,bool explicit_type_instantiation_p)5297 check_tag_decl (cp_decl_specifier_seq *declspecs,
5298                     bool explicit_type_instantiation_p)
5299 {
5300   int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
5301   int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
5302   /* If a class, struct, or enum type is declared by the DECLSPECS
5303      (i.e, if a class-specifier, enum-specifier, or non-typename
5304      elaborated-type-specifier appears in the DECLSPECS),
5305      DECLARED_TYPE is set to the corresponding type.  */
5306   tree declared_type = NULL_TREE;
5307   bool error_p = false;
5308 
5309   if (declspecs->multiple_types_p)
5310     error_at (smallest_type_location (declspecs),
5311                 "multiple types in one declaration");
5312   else if (declspecs->redefined_builtin_type)
5313     {
5314       location_t loc = declspecs->locations[ds_redefined_builtin_type_spec];
5315       if (!in_system_header_at (loc))
5316           permerror (loc, "redeclaration of C++ built-in type %qT",
5317                        declspecs->redefined_builtin_type);
5318       return NULL_TREE;
5319     }
5320 
5321   if (declspecs->type
5322       && TYPE_P (declspecs->type)
5323       && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
5324              && MAYBE_CLASS_TYPE_P (declspecs->type))
5325             || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
5326     declared_type = declspecs->type;
5327   else if (declspecs->type == error_mark_node)
5328     error_p = true;
5329 
5330   if (type_uses_auto (declared_type))
5331     {
5332       error_at (declspecs->locations[ds_type_spec],
5333                     "%<auto%> can only be specified for variables "
5334                     "or function declarations");
5335       return error_mark_node;
5336     }
5337 
5338   if (declared_type && !OVERLOAD_TYPE_P (declared_type))
5339     declared_type = NULL_TREE;
5340 
5341   if (!declared_type && !saw_friend && !error_p)
5342     permerror (input_location, "declaration does not declare anything");
5343   /* Check for an anonymous union.  */
5344   else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
5345              && TYPE_UNNAMED_P (declared_type))
5346     {
5347       /* 7/3 In a simple-declaration, the optional init-declarator-list
5348            can be omitted only when declaring a class (clause 9) or
5349            enumeration (7.2), that is, when the decl-specifier-seq contains
5350            either a class-specifier, an elaborated-type-specifier with
5351            a class-key (9.1), or an enum-specifier.  In these cases and
5352            whenever a class-specifier or enum-specifier is present in the
5353            decl-specifier-seq, the identifiers in these specifiers are among
5354            the names being declared by the declaration (as class-name,
5355            enum-names, or enumerators, depending on the syntax).  In such
5356            cases, and except for the declaration of an unnamed bit-field (9.6),
5357            the decl-specifier-seq shall introduce one or more names into the
5358            program, or shall redeclare a name introduced by a previous
5359            declaration.  [Example:
5360                enum { };                          // ill-formed
5361                typedef class { };                 // ill-formed
5362            --end example]  */
5363       if (saw_typedef)
5364           {
5365             error_at (declspecs->locations[ds_typedef],
5366                         "missing type-name in typedef-declaration");
5367             return NULL_TREE;
5368           }
5369       /* Anonymous unions are objects, so they can have specifiers.  */;
5370       SET_ANON_AGGR_TYPE_P (declared_type);
5371 
5372       if (TREE_CODE (declared_type) != UNION_TYPE)
5373           pedwarn (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (declared_type)),
5374                      OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
5375     }
5376 
5377   else
5378     {
5379       if (decl_spec_seq_has_spec_p (declspecs, ds_inline))
5380           error_at (declspecs->locations[ds_inline],
5381                       "%<inline%> can only be specified for functions");
5382       else if (decl_spec_seq_has_spec_p (declspecs, ds_virtual))
5383           error_at (declspecs->locations[ds_virtual],
5384                       "%<virtual%> can only be specified for functions");
5385       else if (saw_friend
5386                  && (!current_class_type
5387                        || current_scope () != current_class_type))
5388           error_at (declspecs->locations[ds_friend],
5389                       "%<friend%> can only be specified inside a class");
5390       else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
5391           error_at (declspecs->locations[ds_explicit],
5392                       "%<explicit%> can only be specified for constructors");
5393       else if (declspecs->storage_class)
5394           error_at (declspecs->locations[ds_storage_class],
5395                       "a storage class can only be specified for objects "
5396                       "and functions");
5397       else if (decl_spec_seq_has_spec_p (declspecs, ds_const))
5398           error_at (declspecs->locations[ds_const],
5399                       "%<const%> can only be specified for objects and "
5400                       "functions");
5401       else if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
5402           error_at (declspecs->locations[ds_volatile],
5403                       "%<volatile%> can only be specified for objects and "
5404                       "functions");
5405       else if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
5406           error_at (declspecs->locations[ds_restrict],
5407                       "%<__restrict%> can only be specified for objects and "
5408                       "functions");
5409       else if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
5410           error_at (declspecs->locations[ds_thread],
5411                       "%<__thread%> can only be specified for objects "
5412                       "and functions");
5413       else if (saw_typedef)
5414           warning_at (declspecs->locations[ds_typedef], 0,
5415                         "%<typedef%> was ignored in this declaration");
5416       else if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr))
5417         error_at (declspecs->locations[ds_constexpr],
5418                       "%qs cannot be used for type declarations", "constexpr");
5419       else if (decl_spec_seq_has_spec_p (declspecs, ds_constinit))
5420           error_at (declspecs->locations[ds_constinit],
5421                       "%qs cannot be used for type declarations", "constinit");
5422       else if (decl_spec_seq_has_spec_p (declspecs, ds_consteval))
5423           error_at (declspecs->locations[ds_consteval],
5424                       "%qs cannot be used for type declarations", "consteval");
5425     }
5426 
5427   if (declspecs->attributes && warn_attributes && declared_type)
5428     {
5429       location_t loc;
5430       if (!CLASS_TYPE_P (declared_type)
5431             || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
5432           /* For a non-template class, use the name location.  */
5433           loc = location_of (declared_type);
5434       else
5435           /* For a template class (an explicit instantiation), use the
5436              current location.  */
5437           loc = input_location;
5438 
5439       if (explicit_type_instantiation_p)
5440           /* [dcl.attr.grammar]/4:
5441 
5442                  No attribute-specifier-seq shall appertain to an explicit
5443                  instantiation.  */
5444           {
5445             if (warning_at (loc, OPT_Wattributes,
5446                                 "attribute ignored in explicit instantiation %q#T",
5447                                 declared_type))
5448               inform (loc,
5449                         "no attribute can be applied to "
5450                         "an explicit instantiation");
5451           }
5452       else
5453           warn_misplaced_attr_for_class_type (loc, declared_type);
5454     }
5455 
5456   return declared_type;
5457 }
5458 
5459 /* Called when a declaration is seen that contains no names to declare.
5460    If its type is a reference to a structure, union or enum inherited
5461    from a containing scope, shadow that tag name for the current scope
5462    with a forward reference.
5463    If its type defines a new named structure or union
5464    or defines an enum, it is valid but we need not do anything here.
5465    Otherwise, it is an error.
5466 
5467    C++: may have to grok the declspecs to learn about static,
5468    complain for anonymous unions.
5469 
5470    Returns the TYPE declared -- or NULL_TREE if none.  */
5471 
5472 tree
shadow_tag(cp_decl_specifier_seq * declspecs)5473 shadow_tag (cp_decl_specifier_seq *declspecs)
5474 {
5475   tree t = check_tag_decl (declspecs,
5476                                  /*explicit_type_instantiation_p=*/false);
5477 
5478   if (!t)
5479     return NULL_TREE;
5480 
5481   t = maybe_process_partial_specialization (t);
5482   if (t == error_mark_node)
5483     return NULL_TREE;
5484 
5485   /* This is where the variables in an anonymous union are
5486      declared.  An anonymous union declaration looks like:
5487      union { ... } ;
5488      because there is no declarator after the union, the parser
5489      sends that declaration here.  */
5490   if (ANON_AGGR_TYPE_P (t))
5491     {
5492       fixup_anonymous_aggr (t);
5493 
5494       if (TYPE_FIELDS (t))
5495           {
5496             tree decl = grokdeclarator (/*declarator=*/NULL,
5497                                               declspecs, NORMAL, 0, NULL);
5498             finish_anon_union (decl);
5499           }
5500     }
5501 
5502   return t;
5503 }
5504 
5505 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
5506 
5507 tree
groktypename(cp_decl_specifier_seq * type_specifiers,const cp_declarator * declarator,bool is_template_arg)5508 groktypename (cp_decl_specifier_seq *type_specifiers,
5509                 const cp_declarator *declarator,
5510                 bool is_template_arg)
5511 {
5512   tree attrs;
5513   tree type;
5514   enum decl_context context
5515     = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
5516   attrs = type_specifiers->attributes;
5517   type_specifiers->attributes = NULL_TREE;
5518   type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
5519   if (attrs && type != error_mark_node)
5520     {
5521       if (CLASS_TYPE_P (type))
5522           warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
5523                      "outside of definition", type);
5524       else if (MAYBE_CLASS_TYPE_P (type))
5525           /* A template type parameter or other dependent type.  */
5526           warning (OPT_Wattributes, "ignoring attributes applied to dependent "
5527                      "type %qT without an associated declaration", type);
5528       else
5529           cplus_decl_attributes (&type, attrs, 0);
5530     }
5531   return type;
5532 }
5533 
5534 /* Process a DECLARATOR for a function-scope or namespace-scope
5535    variable or function declaration.
5536    (Function definitions go through start_function; class member
5537    declarations appearing in the body of the class go through
5538    grokfield.)  The DECL corresponding to the DECLARATOR is returned.
5539    If an error occurs, the error_mark_node is returned instead.
5540 
5541    DECLSPECS are the decl-specifiers for the declaration.  INITIALIZED is
5542    SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
5543    for an explicitly defaulted function, or SD_DELETED for an explicitly
5544    deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
5545    implicitly initialized via a default constructor.  It can also be
5546    SD_DECOMPOSITION which behaves much like SD_INITIALIZED, but we also
5547    mark the new decl as DECL_DECOMPOSITION_P.
5548 
5549    ATTRIBUTES and PREFIX_ATTRIBUTES are GNU attributes associated with this
5550    declaration.
5551 
5552    The scope represented by the context of the returned DECL is pushed
5553    (if it is not the global namespace) and is assigned to
5554    *PUSHED_SCOPE_P.  The caller is then responsible for calling
5555    pop_scope on *PUSHED_SCOPE_P if it is set.  */
5556 
5557 tree
start_decl(const cp_declarator * declarator,cp_decl_specifier_seq * declspecs,int initialized,tree attributes,tree prefix_attributes,tree * pushed_scope_p)5558 start_decl (const cp_declarator *declarator,
5559               cp_decl_specifier_seq *declspecs,
5560               int initialized,
5561               tree attributes,
5562               tree prefix_attributes,
5563               tree *pushed_scope_p)
5564 {
5565   tree decl;
5566   tree context;
5567   bool was_public;
5568   int flags;
5569   bool alias;
5570   tree initial;
5571 
5572   *pushed_scope_p = NULL_TREE;
5573 
5574   if (prefix_attributes != error_mark_node)
5575     attributes = chainon (attributes, prefix_attributes);
5576 
5577   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
5578                                &attributes);
5579 
5580   if (decl == NULL_TREE || VOID_TYPE_P (decl)
5581       || decl == error_mark_node
5582       || prefix_attributes == error_mark_node)
5583     return error_mark_node;
5584 
5585   context = CP_DECL_CONTEXT (decl);
5586   if (context != global_namespace)
5587     *pushed_scope_p = push_scope (context);
5588 
5589   if (initialized && TREE_CODE (decl) == TYPE_DECL)
5590     {
5591       error_at (DECL_SOURCE_LOCATION (decl),
5592                     "typedef %qD is initialized (use %qs instead)",
5593                     decl, "decltype");
5594       return error_mark_node;
5595     }
5596 
5597   /* Save the DECL_INITIAL value in case it gets clobbered to assist
5598      with attribute validation.  */
5599   initial = DECL_INITIAL (decl);
5600 
5601   if (initialized)
5602     {
5603       if (! toplevel_bindings_p ()
5604             && DECL_EXTERNAL (decl))
5605           warning (0, "declaration of %q#D has %<extern%> and is initialized",
5606                      decl);
5607       DECL_EXTERNAL (decl) = 0;
5608       if (toplevel_bindings_p ())
5609           TREE_STATIC (decl) = 1;
5610       /* Tell 'cplus_decl_attributes' this is an initialized decl,
5611            even though we might not yet have the initializer expression.  */
5612       if (!DECL_INITIAL (decl))
5613           DECL_INITIAL (decl) = error_mark_node;
5614     }
5615   alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
5616 
5617   if (alias && TREE_CODE (decl) == FUNCTION_DECL)
5618     record_key_method_defined (decl);
5619 
5620   /* If this is a typedef that names the class for linkage purposes
5621      (7.1.3p8), apply any attributes directly to the type.  */
5622   if (TREE_CODE (decl) == TYPE_DECL
5623       && OVERLOAD_TYPE_P (TREE_TYPE (decl))
5624       && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
5625     flags = ATTR_FLAG_TYPE_IN_PLACE;
5626   else
5627     flags = 0;
5628 
5629   /* Set attributes here so if duplicate decl, will have proper attributes.  */
5630   cplus_decl_attributes (&decl, attributes, flags);
5631 
5632   /* Restore the original DECL_INITIAL that we may have clobbered earlier to
5633      assist with attribute validation.  */
5634   DECL_INITIAL (decl) = initial;
5635 
5636   /* Dllimported symbols cannot be defined.  Static data members (which
5637      can be initialized in-class and dllimported) go through grokfield,
5638      not here, so we don't need to exclude those decls when checking for
5639      a definition.  */
5640   if (initialized && DECL_DLLIMPORT_P (decl))
5641     {
5642       error_at (DECL_SOURCE_LOCATION (decl),
5643                     "definition of %q#D is marked %<dllimport%>", decl);
5644       DECL_DLLIMPORT_P (decl) = 0;
5645     }
5646 
5647   /* If #pragma weak was used, mark the decl weak now.  */
5648   if (!processing_template_decl && !DECL_DECOMPOSITION_P (decl))
5649     maybe_apply_pragma_weak (decl);
5650 
5651   if (TREE_CODE (decl) == FUNCTION_DECL
5652       && DECL_DECLARED_INLINE_P (decl)
5653       && DECL_UNINLINABLE (decl)
5654       && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
5655     warning_at (DECL_SOURCE_LOCATION (decl), 0,
5656                     "inline function %qD given attribute %qs", decl, "noinline");
5657 
5658   if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
5659     {
5660       bool this_tmpl = (current_template_depth
5661                               > template_class_depth (context));
5662       if (VAR_P (decl))
5663           {
5664             tree field = lookup_field (context, DECL_NAME (decl), 0, false);
5665             if (field == NULL_TREE
5666                 || !(VAR_P (field) || variable_template_p (field)))
5667               error ("%q+#D is not a static data member of %q#T", decl, context);
5668             else if (variable_template_p (field)
5669                        && (DECL_LANG_SPECIFIC (decl)
5670                            && DECL_TEMPLATE_SPECIALIZATION (decl)))
5671               /* OK, specialization was already checked.  */;
5672             else if (variable_template_p (field) && !this_tmpl)
5673               {
5674                 error_at (DECL_SOURCE_LOCATION (decl),
5675                               "non-member-template declaration of %qD", decl);
5676                 inform (DECL_SOURCE_LOCATION (field), "does not match "
5677                           "member template declaration here");
5678                 return error_mark_node;
5679               }
5680             else
5681               {
5682                 if (variable_template_p (field))
5683                     field = DECL_TEMPLATE_RESULT (field);
5684 
5685                 if (DECL_CONTEXT (field) != context)
5686                     {
5687                       if (!same_type_p (DECL_CONTEXT (field), context))
5688                         permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
5689                                      "to be defined as %<%T::%D%>",
5690                                      DECL_CONTEXT (field), DECL_NAME (decl),
5691                                      context, DECL_NAME (decl));
5692                       DECL_CONTEXT (decl) = DECL_CONTEXT (field);
5693                     }
5694                 /* Static data member are tricky; an in-class initialization
5695                      still doesn't provide a definition, so the in-class
5696                      declaration will have DECL_EXTERNAL set, but will have an
5697                      initialization.  Thus, duplicate_decls won't warn
5698                      about this situation, and so we check here.  */
5699                 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
5700                     error ("duplicate initialization of %qD", decl);
5701                 field = duplicate_decls (decl, field);
5702                 if (field == error_mark_node)
5703                     return error_mark_node;
5704                 else if (field)
5705                     decl = field;
5706               }
5707           }
5708       else
5709           {
5710             tree field = check_classfn (context, decl,
5711                                               this_tmpl
5712                                               ? current_template_parms
5713                                               : NULL_TREE);
5714             if (field && field != error_mark_node
5715                 && duplicate_decls (decl, field))
5716               decl = field;
5717           }
5718 
5719       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
5720       DECL_IN_AGGR_P (decl) = 0;
5721       /* Do not mark DECL as an explicit specialization if it was not
5722            already marked as an instantiation; a declaration should
5723            never be marked as a specialization unless we know what
5724            template is being specialized.  */
5725       if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
5726           {
5727             SET_DECL_TEMPLATE_SPECIALIZATION (decl);
5728             if (TREE_CODE (decl) == FUNCTION_DECL)
5729               DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
5730                                           && DECL_DECLARED_INLINE_P (decl));
5731             else
5732               DECL_COMDAT (decl) = false;
5733 
5734             /* [temp.expl.spec] An explicit specialization of a static data
5735                member of a template is a definition if the declaration
5736                includes an initializer; otherwise, it is a declaration.
5737 
5738                We check for processing_specialization so this only applies
5739                to the new specialization syntax.  */
5740             if (!initialized && processing_specialization)
5741               DECL_EXTERNAL (decl) = 1;
5742           }
5743 
5744       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
5745             /* Aliases are definitions. */
5746             && !alias)
5747           permerror (declarator->id_loc,
5748                        "declaration of %q#D outside of class is not definition",
5749                        decl);
5750     }
5751 
5752   /* Create a DECL_LANG_SPECIFIC so that DECL_DECOMPOSITION_P works.  */
5753   if (initialized == SD_DECOMPOSITION)
5754     fit_decomposition_lang_decl (decl, NULL_TREE);
5755 
5756   was_public = TREE_PUBLIC (decl);
5757 
5758   if ((DECL_EXTERNAL (decl) || TREE_CODE (decl) == FUNCTION_DECL)
5759       && current_function_decl)
5760     {
5761       /* A function-scope decl of some namespace-scope decl.  */
5762       DECL_LOCAL_DECL_P (decl) = true;
5763       if (named_module_purview_p ())
5764           error_at (declarator->id_loc,
5765                       "block-scope extern declaration %q#D not permitted"
5766                       " in module purview", decl);
5767     }
5768 
5769   /* Enter this declaration into the symbol table.  Don't push the plain
5770      VAR_DECL for a variable template.  */
5771   if (!template_parm_scope_p ()
5772       || !VAR_P (decl))
5773     decl = maybe_push_decl (decl);
5774 
5775   if (processing_template_decl)
5776     decl = push_template_decl (decl);
5777 
5778   if (decl == error_mark_node)
5779     return error_mark_node;
5780 
5781   if (VAR_P (decl)
5782       && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
5783       && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl)
5784       /* But not templated variables.  */
5785       && !(DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)))
5786     {
5787       /* This is a const variable with implicit 'static'.  Set
5788            DECL_THIS_STATIC so we can tell it from variables that are
5789            !TREE_PUBLIC because of the anonymous namespace.  */
5790       gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
5791       DECL_THIS_STATIC (decl) = 1;
5792     }
5793 
5794   if (current_function_decl && VAR_P (decl)
5795       && DECL_DECLARED_CONSTEXPR_P (current_function_decl)
5796       && cxx_dialect < cxx23)
5797     {
5798       bool ok = false;
5799       if (CP_DECL_THREAD_LOCAL_P (decl) && !DECL_REALLY_EXTERN (decl))
5800           error_at (DECL_SOURCE_LOCATION (decl),
5801                       "%qD defined %<thread_local%> in %qs function only "
5802                       "available with %<-std=c++2b%> or %<-std=gnu++2b%>", decl,
5803                       DECL_IMMEDIATE_FUNCTION_P (current_function_decl)
5804                       ? "consteval" : "constexpr");
5805       else if (TREE_STATIC (decl))
5806           error_at (DECL_SOURCE_LOCATION (decl),
5807                       "%qD defined %<static%> in %qs function only available "
5808                       "with %<-std=c++2b%> or %<-std=gnu++2b%>", decl,
5809                       DECL_IMMEDIATE_FUNCTION_P (current_function_decl)
5810                       ? "consteval" : "constexpr");
5811       else
5812           ok = true;
5813       if (!ok)
5814           cp_function_chain->invalid_constexpr = true;
5815     }
5816 
5817   if (!processing_template_decl && VAR_P (decl))
5818     start_decl_1 (decl, initialized);
5819 
5820   return decl;
5821 }
5822 
5823 /* Process the declaration of a variable DECL.  INITIALIZED is true
5824    iff DECL is explicitly initialized.  (INITIALIZED is false if the
5825    variable is initialized via an implicitly-called constructor.)
5826    This function must be called for ordinary variables (including, for
5827    example, implicit instantiations of templates), but must not be
5828    called for template declarations.  */
5829 
5830 void
start_decl_1(tree decl,bool initialized)5831 start_decl_1 (tree decl, bool initialized)
5832 {
5833   gcc_checking_assert (!processing_template_decl);
5834 
5835   if (error_operand_p (decl))
5836     return;
5837 
5838   gcc_checking_assert (VAR_P (decl));
5839 
5840   tree type = TREE_TYPE (decl);
5841   bool complete_p = COMPLETE_TYPE_P (type);
5842   bool aggregate_definition_p
5843     = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
5844 
5845   /* If an explicit initializer is present, or if this is a definition
5846      of an aggregate, then we need a complete type at this point.
5847      (Scalars are always complete types, so there is nothing to
5848      check.)  This code just sets COMPLETE_P; errors (if necessary)
5849      are issued below.  */
5850   if ((initialized || aggregate_definition_p)
5851       && !complete_p
5852       && COMPLETE_TYPE_P (complete_type (type)))
5853     {
5854       complete_p = true;
5855       /* We will not yet have set TREE_READONLY on DECL if the type
5856            was "const", but incomplete, before this point.  But, now, we
5857            have a complete type, so we can try again.  */
5858       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
5859     }
5860 
5861   if (initialized)
5862     /* Is it valid for this decl to have an initializer at all?  */
5863     {
5864       /* Don't allow initializations for incomplete types except for
5865            arrays which might be completed by the initialization.  */
5866       if (complete_p)
5867           ;                             /* A complete type is ok.  */
5868       else if (type_uses_auto (type))
5869           ;                             /* An auto type is ok.  */
5870       else if (TREE_CODE (type) != ARRAY_TYPE)
5871           {
5872             error ("variable %q#D has initializer but incomplete type", decl);
5873             type = TREE_TYPE (decl) = error_mark_node;
5874           }
5875       else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5876           {
5877             if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
5878               error ("elements of array %q#D have incomplete type", decl);
5879             /* else we already gave an error in start_decl.  */
5880           }
5881     }
5882   else if (aggregate_definition_p && !complete_p)
5883     {
5884       if (type_uses_auto (type))
5885           gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (type));
5886       else
5887           {
5888             error ("aggregate %q#D has incomplete type and cannot be defined",
5889                      decl);
5890             /* Change the type so that assemble_variable will give
5891                DECL an rtl we can live with: (mem (const_int 0)).  */
5892             type = TREE_TYPE (decl) = error_mark_node;
5893           }
5894     }
5895 
5896   /* Create a new scope to hold this declaration if necessary.
5897      Whether or not a new scope is necessary cannot be determined
5898      until after the type has been completed; if the type is a
5899      specialization of a class template it is not until after
5900      instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
5901      will be set correctly.  */
5902   maybe_push_cleanup_level (type);
5903 }
5904 
5905 /* Given a parenthesized list of values INIT, create a CONSTRUCTOR to handle
5906    C++20 P0960.  TYPE is the type of the object we're initializing.  */
5907 
5908 tree
do_aggregate_paren_init(tree init,tree type)5909 do_aggregate_paren_init (tree init, tree type)
5910 {
5911   tree val = TREE_VALUE (init);
5912 
5913   if (TREE_CHAIN (init) == NULL_TREE)
5914     {
5915       /* If the list has a single element and it's a string literal,
5916            then it's the initializer for the array as a whole.  */
5917       if (TREE_CODE (type) == ARRAY_TYPE
5918             && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type)))
5919             && TREE_CODE (tree_strip_any_location_wrapper (val))
5920                == STRING_CST)
5921           return val;
5922       /* Handle non-standard extensions like compound literals.  This also
5923            prevents triggering aggregate parenthesized-initialization in
5924            compiler-generated code for =default.  */
5925       else if (same_type_ignoring_top_level_qualifiers_p (type,
5926                                                                         TREE_TYPE (val)))
5927           return val;
5928     }
5929 
5930   init = build_constructor_from_list (init_list_type_node, init);
5931   CONSTRUCTOR_IS_DIRECT_INIT (init) = true;
5932   CONSTRUCTOR_IS_PAREN_INIT (init) = true;
5933   return init;
5934 }
5935 
5936 /* Handle initialization of references.  DECL, TYPE, and INIT have the
5937    same meaning as in cp_finish_decl.  *CLEANUP must be NULL on entry,
5938    but will be set to a new CLEANUP_STMT if a temporary is created
5939    that must be destroyed subsequently.
5940 
5941    Returns an initializer expression to use to initialize DECL, or
5942    NULL if the initialization can be performed statically.
5943 
5944    Quotes on semantics can be found in ARM 8.4.3.  */
5945 
5946 static tree
grok_reference_init(tree decl,tree type,tree init,int flags)5947 grok_reference_init (tree decl, tree type, tree init, int flags)
5948 {
5949   if (init == NULL_TREE)
5950     {
5951       if ((DECL_LANG_SPECIFIC (decl) == 0
5952              || DECL_IN_AGGR_P (decl) == 0)
5953             && ! DECL_THIS_EXTERN (decl))
5954           error_at (DECL_SOURCE_LOCATION (decl),
5955                       "%qD declared as reference but not initialized", decl);
5956       return NULL_TREE;
5957     }
5958 
5959   tree ttype = TREE_TYPE (type);
5960   if (TREE_CODE (init) == TREE_LIST)
5961     {
5962       /* This handles (C++20 only) code like
5963 
5964              const A& r(1, 2, 3);
5965 
5966            where we treat the parenthesized list as a CONSTRUCTOR.  */
5967       if (TREE_TYPE (init) == NULL_TREE
5968             && CP_AGGREGATE_TYPE_P (ttype)
5969             && !DECL_DECOMPOSITION_P (decl)
5970             && (cxx_dialect >= cxx20))
5971           {
5972             /* We don't know yet if we should treat const A& r(1) as
5973                const A& r{1}.  */
5974             if (list_length (init) == 1)
5975               {
5976                 flags |= LOOKUP_AGGREGATE_PAREN_INIT;
5977                 init = build_x_compound_expr_from_list (init, ELK_INIT,
5978                                                                   tf_warning_or_error);
5979               }
5980             /* If the list had more than one element, the code is ill-formed
5981                pre-C++20, so we can build a constructor right away.  */
5982             else
5983               init = do_aggregate_paren_init (init, ttype);
5984           }
5985       else
5986           init = build_x_compound_expr_from_list (init, ELK_INIT,
5987                                                             tf_warning_or_error);
5988     }
5989 
5990   if (TREE_CODE (ttype) != ARRAY_TYPE
5991       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
5992     /* Note: default conversion is only called in very special cases.  */
5993     init = decay_conversion (init, tf_warning_or_error);
5994 
5995   /* check_initializer handles this for non-reference variables, but for
5996      references we need to do it here or the initializer will get the
5997      incomplete array type and confuse later calls to
5998      cp_complete_array_type.  */
5999   if (TREE_CODE (ttype) == ARRAY_TYPE
6000       && TYPE_DOMAIN (ttype) == NULL_TREE
6001       && (BRACE_ENCLOSED_INITIALIZER_P (init)
6002             || TREE_CODE (init) == STRING_CST))
6003     {
6004       cp_complete_array_type (&ttype, init, false);
6005       if (ttype != TREE_TYPE (type))
6006           type = cp_build_reference_type (ttype, TYPE_REF_IS_RVALUE (type));
6007     }
6008 
6009   /* Convert INIT to the reference type TYPE.  This may involve the
6010      creation of a temporary, whose lifetime must be the same as that
6011      of the reference.  If so, a DECL_EXPR for the temporary will be
6012      added just after the DECL_EXPR for DECL.  That's why we don't set
6013      DECL_INITIAL for local references (instead assigning to them
6014      explicitly); we need to allow the temporary to be initialized
6015      first.  */
6016   return initialize_reference (type, init, flags,
6017                                      tf_warning_or_error);
6018 }
6019 
6020 /* Designated initializers in arrays are not supported in GNU C++.
6021    The parser cannot detect this error since it does not know whether
6022    a given brace-enclosed initializer is for a class type or for an
6023    array.  This function checks that CE does not use a designated
6024    initializer.  If it does, an error is issued.  Returns true if CE
6025    is valid, i.e., does not have a designated initializer.  */
6026 
6027 bool
check_array_designated_initializer(constructor_elt * ce,unsigned HOST_WIDE_INT index)6028 check_array_designated_initializer (constructor_elt *ce,
6029                                             unsigned HOST_WIDE_INT index)
6030 {
6031   /* Designated initializers for array elements are not supported.  */
6032   if (ce->index)
6033     {
6034       /* The parser only allows identifiers as designated
6035            initializers.  */
6036       if (ce->index == error_mark_node)
6037           {
6038             error ("name used in a GNU-style designated "
6039                      "initializer for an array");
6040             return false;
6041           }
6042       else if (identifier_p (ce->index))
6043           {
6044             error ("name %qD used in a GNU-style designated "
6045                      "initializer for an array", ce->index);
6046             return false;
6047           }
6048 
6049       tree ce_index = build_expr_type_conversion (WANT_INT | WANT_ENUM,
6050                                                               ce->index, true);
6051       if (ce_index
6052             && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index))
6053             && (TREE_CODE (ce_index = fold_non_dependent_expr (ce_index))
6054                 == INTEGER_CST))
6055           {
6056             /* A C99 designator is OK if it matches the current index.  */
6057             if (wi::to_wide (ce_index) == index)
6058               {
6059                 ce->index = ce_index;
6060                 return true;
6061               }
6062             else
6063               sorry ("non-trivial designated initializers not supported");
6064           }
6065       else
6066           error_at (cp_expr_loc_or_input_loc (ce->index),
6067                       "C99 designator %qE is not an integral constant-expression",
6068                       ce->index);
6069 
6070       return false;
6071     }
6072 
6073   return true;
6074 }
6075 
6076 /* When parsing `int a[] = {1, 2};' we don't know the size of the
6077    array until we finish parsing the initializer.  If that's the
6078    situation we're in, update DECL accordingly.  */
6079 
6080 static void
maybe_deduce_size_from_array_init(tree decl,tree init)6081 maybe_deduce_size_from_array_init (tree decl, tree init)
6082 {
6083   tree type = TREE_TYPE (decl);
6084 
6085   if (TREE_CODE (type) == ARRAY_TYPE
6086       && TYPE_DOMAIN (type) == NULL_TREE
6087       && TREE_CODE (decl) != TYPE_DECL)
6088     {
6089       /* do_default is really a C-ism to deal with tentative definitions.
6090            But let's leave it here to ease the eventual merge.  */
6091       int do_default = !DECL_EXTERNAL (decl);
6092       tree initializer = init ? init : DECL_INITIAL (decl);
6093       int failure = 0;
6094 
6095       /* Check that there are no designated initializers in INIT, as
6096            those are not supported in GNU C++, and as the middle-end
6097            will crash if presented with a non-numeric designated
6098            initializer.  */
6099       if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
6100           {
6101             vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
6102             constructor_elt *ce;
6103             HOST_WIDE_INT i;
6104             FOR_EACH_VEC_SAFE_ELT (v, i, ce)
6105               {
6106                 if (instantiation_dependent_expression_p (ce->index))
6107                     return;
6108                 if (!check_array_designated_initializer (ce, i))
6109                     failure = 1;
6110                 /* If an un-designated initializer is type-dependent, we can't
6111                      check brace elision yet.  */
6112                 if (ce->index == NULL_TREE
6113                       && type_dependent_expression_p (ce->value))
6114                     return;
6115               }
6116           }
6117 
6118       if (failure)
6119           TREE_TYPE (decl) = error_mark_node;
6120       else
6121           {
6122             failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
6123                                                       do_default);
6124             if (failure == 1)
6125               {
6126                 error_at (cp_expr_loc_or_loc (initializer,
6127                                                    DECL_SOURCE_LOCATION (decl)),
6128                               "initializer fails to determine size of %qD", decl);
6129               }
6130             else if (failure == 2)
6131               {
6132                 if (do_default)
6133                     {
6134                       error_at (DECL_SOURCE_LOCATION (decl),
6135                                   "array size missing in %qD", decl);
6136                     }
6137                 /* If a `static' var's size isn't known, make it extern as
6138                      well as static, so it does not get allocated.  If it's not
6139                      `static', then don't mark it extern; finish_incomplete_decl
6140                      will give it a default size and it will get allocated.  */
6141                 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
6142                     DECL_EXTERNAL (decl) = 1;
6143               }
6144             else if (failure == 3)
6145               {
6146                 error_at (DECL_SOURCE_LOCATION (decl),
6147                               "zero-size array %qD", decl);
6148               }
6149           }
6150 
6151       cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
6152 
6153       relayout_decl (decl);
6154     }
6155 }
6156 
6157 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
6158    any appropriate error messages regarding the layout.  */
6159 
6160 static void
layout_var_decl(tree decl)6161 layout_var_decl (tree decl)
6162 {
6163   tree type;
6164 
6165   type = TREE_TYPE (decl);
6166   if (type == error_mark_node)
6167     return;
6168 
6169   /* If we haven't already laid out this declaration, do so now.
6170      Note that we must not call complete type for an external object
6171      because it's type might involve templates that we are not
6172      supposed to instantiate yet.  (And it's perfectly valid to say
6173      `extern X x' for some incomplete type `X'.)  */
6174   if (!DECL_EXTERNAL (decl))
6175     complete_type (type);
6176   if (!DECL_SIZE (decl)
6177       && TREE_TYPE (decl) != error_mark_node
6178       && complete_or_array_type_p (type))
6179     layout_decl (decl, 0);
6180 
6181   if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
6182     {
6183       /* An automatic variable with an incomplete type: that is an error.
6184            Don't talk about array types here, since we took care of that
6185            message in grokdeclarator.  */
6186       error_at (DECL_SOURCE_LOCATION (decl),
6187                     "storage size of %qD isn%'t known", decl);
6188       TREE_TYPE (decl) = error_mark_node;
6189     }
6190 #if 0
6191   /* Keep this code around in case we later want to control debug info
6192      based on whether a type is "used".  (jason 1999-11-11) */
6193 
6194   else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
6195     /* Let debugger know it should output info for this type.  */
6196     note_debug_info_needed (ttype);
6197 
6198   if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
6199     note_debug_info_needed (DECL_CONTEXT (decl));
6200 #endif
6201 
6202   if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
6203       && DECL_SIZE (decl) != NULL_TREE
6204       && ! TREE_CONSTANT (DECL_SIZE (decl)))
6205     {
6206       if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST
6207             && !DECL_LOCAL_DECL_P (decl))
6208           constant_expression_warning (DECL_SIZE (decl));
6209       else
6210           {
6211             error_at (DECL_SOURCE_LOCATION (decl),
6212                         "storage size of %qD isn%'t constant", decl);
6213             TREE_TYPE (decl) = error_mark_node;
6214             type = error_mark_node;
6215           }
6216     }
6217 
6218   /* If the final element initializes a flexible array field, add the size of
6219      that initializer to DECL's size.  */
6220   if (type != error_mark_node
6221       && DECL_INITIAL (decl)
6222       && TREE_CODE (DECL_INITIAL (decl)) == CONSTRUCTOR
6223       && !vec_safe_is_empty (CONSTRUCTOR_ELTS (DECL_INITIAL (decl)))
6224       && DECL_SIZE (decl) != NULL_TREE
6225       && TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST
6226       && TYPE_SIZE (type) != NULL_TREE
6227       && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
6228       && tree_int_cst_equal (DECL_SIZE (decl), TYPE_SIZE (type)))
6229     {
6230       constructor_elt &elt = CONSTRUCTOR_ELTS (DECL_INITIAL (decl))->last ();
6231       if (elt.index)
6232           {
6233             tree itype = TREE_TYPE (elt.index);
6234             tree vtype = TREE_TYPE (elt.value);
6235             if (TREE_CODE (itype) == ARRAY_TYPE
6236                 && TYPE_DOMAIN (itype) == NULL
6237                 && TREE_CODE (vtype) == ARRAY_TYPE
6238                 && COMPLETE_TYPE_P (vtype))
6239               {
6240                 DECL_SIZE (decl)
6241                     = size_binop (PLUS_EXPR, DECL_SIZE (decl), TYPE_SIZE (vtype));
6242                 DECL_SIZE_UNIT (decl)
6243                     = size_binop (PLUS_EXPR, DECL_SIZE_UNIT (decl),
6244                                     TYPE_SIZE_UNIT (vtype));
6245               }
6246           }
6247     }
6248 }
6249 
6250 /* If a local static variable is declared in an inline function, or if
6251    we have a weak definition, we must endeavor to create only one
6252    instance of the variable at link-time.  */
6253 
6254 void
maybe_commonize_var(tree decl)6255 maybe_commonize_var (tree decl)
6256 {
6257   /* Don't mess with __FUNCTION__ and similar.  */
6258   if (DECL_ARTIFICIAL (decl))
6259     return;
6260 
6261   /* Static data in a function with comdat linkage also has comdat
6262      linkage.  */
6263   if ((TREE_STATIC (decl)
6264        && DECL_FUNCTION_SCOPE_P (decl)
6265        && vague_linkage_p (DECL_CONTEXT (decl)))
6266       || (TREE_PUBLIC (decl) && DECL_INLINE_VAR_P (decl)))
6267     {
6268       if (flag_weak)
6269           {
6270             /* With weak symbols, we simply make the variable COMDAT;
6271                that will cause copies in multiple translations units to
6272                be merged.  */
6273             comdat_linkage (decl);
6274           }
6275       else
6276           {
6277             if (DECL_INITIAL (decl) == NULL_TREE
6278                 || DECL_INITIAL (decl) == error_mark_node)
6279               {
6280                 /* Without weak symbols, we can use COMMON to merge
6281                      uninitialized variables.  */
6282                 TREE_PUBLIC (decl) = 1;
6283                 DECL_COMMON (decl) = 1;
6284               }
6285             else
6286               {
6287                 /* While for initialized variables, we must use internal
6288                      linkage -- which means that multiple copies will not
6289                      be merged.  */
6290                 TREE_PUBLIC (decl) = 0;
6291                 DECL_COMMON (decl) = 0;
6292                 DECL_INTERFACE_KNOWN (decl) = 1;
6293                 const char *msg;
6294                 if (DECL_INLINE_VAR_P (decl))
6295                     msg = G_("sorry: semantics of inline variable "
6296                                "%q#D are wrong (you%'ll wind up with "
6297                                "multiple copies)");
6298                 else
6299                     msg = G_("sorry: semantics of inline function "
6300                                "static data %q#D are wrong (you%'ll wind "
6301                                "up with multiple copies)");
6302                 if (warning_at (DECL_SOURCE_LOCATION (decl), 0,
6303                                     msg, decl))
6304                     inform (DECL_SOURCE_LOCATION (decl),
6305                               "you can work around this by removing the initializer");
6306               }
6307           }
6308     }
6309 }
6310 
6311 /* Issue an error message if DECL is an uninitialized const variable.
6312    CONSTEXPR_CONTEXT_P is true when the function is called in a constexpr
6313    context from potential_constant_expression.  Returns true if all is well,
6314    false otherwise.  */
6315 
6316 bool
check_for_uninitialized_const_var(tree decl,bool constexpr_context_p,tsubst_flags_t complain)6317 check_for_uninitialized_const_var (tree decl, bool constexpr_context_p,
6318                                            tsubst_flags_t complain)
6319 {
6320   tree type = strip_array_types (TREE_TYPE (decl));
6321 
6322   /* ``Unless explicitly declared extern, a const object does not have
6323      external linkage and must be initialized. ($8.4; $12.1)'' ARM
6324      7.1.6 */
6325   if (VAR_P (decl)
6326       && !TYPE_REF_P (type)
6327       && (CP_TYPE_CONST_P (type)
6328             /* C++20 permits trivial default initialization in constexpr
6329                context (P1331R2).  */
6330             || (cxx_dialect < cxx20
6331                 && (constexpr_context_p
6332                       || var_in_constexpr_fn (decl))))
6333       && !DECL_NONTRIVIALLY_INITIALIZED_P (decl))
6334     {
6335       tree field = default_init_uninitialized_part (type);
6336       if (!field)
6337           return true;
6338 
6339       bool show_notes = true;
6340 
6341       if (!constexpr_context_p || cxx_dialect >= cxx20)
6342           {
6343             if (CP_TYPE_CONST_P (type))
6344               {
6345                 if (complain & tf_error)
6346                     show_notes = permerror (DECL_SOURCE_LOCATION (decl),
6347                                                 "uninitialized %<const %D%>", decl);
6348               }
6349             else
6350               {
6351                 if (!is_instantiation_of_constexpr (current_function_decl)
6352                       && (complain & tf_error))
6353                     error_at (DECL_SOURCE_LOCATION (decl),
6354                                 "uninitialized variable %qD in %<constexpr%> "
6355                                 "function", decl);
6356                 else
6357                     show_notes = false;
6358                 cp_function_chain->invalid_constexpr = true;
6359               }
6360           }
6361       else if (complain & tf_error)
6362           error_at (DECL_SOURCE_LOCATION (decl),
6363                       "uninitialized variable %qD in %<constexpr%> context",
6364                       decl);
6365 
6366       if (show_notes && CLASS_TYPE_P (type) && (complain & tf_error))
6367           {
6368             tree defaulted_ctor;
6369 
6370             inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
6371                       "%q#T has no user-provided default constructor", type);
6372             defaulted_ctor = in_class_defaulted_default_constructor (type);
6373             if (defaulted_ctor)
6374               inform (DECL_SOURCE_LOCATION (defaulted_ctor),
6375                         "constructor is not user-provided because it is "
6376                         "explicitly defaulted in the class body");
6377             inform (DECL_SOURCE_LOCATION (field),
6378                       "and the implicitly-defined constructor does not "
6379                       "initialize %q#D", field);
6380           }
6381 
6382       return false;
6383     }
6384 
6385   return true;
6386 }
6387 
6388 /* Structure holding the current initializer being processed by reshape_init.
6389    CUR is a pointer to the current element being processed, END is a pointer
6390    after the last element present in the initializer.  */
6391 struct reshape_iter
6392 {
6393   constructor_elt *cur;
6394   constructor_elt *end;
6395 };
6396 
6397 static tree reshape_init_r (tree, reshape_iter *, tree, tsubst_flags_t);
6398 
6399 /* FIELD is an element of TYPE_FIELDS or NULL.  In the former case, the value
6400    returned is the next FIELD_DECL (possibly FIELD itself) that can be
6401    initialized.  If there are no more such fields, the return value
6402    will be NULL.  */
6403 
6404 tree
next_initializable_field(tree field)6405 next_initializable_field (tree field)
6406 {
6407   while (field
6408            && (TREE_CODE (field) != FIELD_DECL
6409                || DECL_UNNAMED_BIT_FIELD (field)
6410                || (DECL_ARTIFICIAL (field)
6411                      /* In C++17, don't skip base class fields.  */
6412                      && !(cxx_dialect >= cxx17 && DECL_FIELD_IS_BASE (field))
6413                      /* Don't skip vptr fields.  We might see them when we're
6414                         called from reduced_constant_expression_p.  */
6415                      && !DECL_VIRTUAL_P (field))))
6416     field = DECL_CHAIN (field);
6417 
6418   return field;
6419 }
6420 
6421 /* FIELD is an element of TYPE_FIELDS or NULL.  In the former case, the value
6422    returned is the next FIELD_DECL (possibly FIELD itself) that corresponds
6423    to a subobject.  If there are no more such fields, the return value will be
6424    NULL.  */
6425 
6426 tree
next_subobject_field(tree field)6427 next_subobject_field (tree field)
6428 {
6429   while (field
6430            && (TREE_CODE (field) != FIELD_DECL
6431                || DECL_UNNAMED_BIT_FIELD (field)
6432                || (DECL_ARTIFICIAL (field)
6433                      && !DECL_FIELD_IS_BASE (field)
6434                      && !DECL_VIRTUAL_P (field))))
6435      field = DECL_CHAIN (field);
6436 
6437   return field;
6438 }
6439 
6440 /* Return true for [dcl.init.list] direct-list-initialization from
6441    single element of enumeration with a fixed underlying type.  */
6442 
6443 bool
is_direct_enum_init(tree type,tree init)6444 is_direct_enum_init (tree type, tree init)
6445 {
6446   if (cxx_dialect >= cxx17
6447       && TREE_CODE (type) == ENUMERAL_TYPE
6448       && ENUM_FIXED_UNDERLYING_TYPE_P (type)
6449       && TREE_CODE (init) == CONSTRUCTOR
6450       && CONSTRUCTOR_IS_DIRECT_INIT (init)
6451       && CONSTRUCTOR_NELTS (init) == 1
6452       /* DR 2374: The single element needs to be implicitly
6453            convertible to the underlying type of the enum.  */
6454       && can_convert_arg (ENUM_UNDERLYING_TYPE (type),
6455                                 TREE_TYPE (CONSTRUCTOR_ELT (init, 0)->value),
6456                                 CONSTRUCTOR_ELT (init, 0)->value,
6457                                 LOOKUP_IMPLICIT, tf_none))
6458     return true;
6459   return false;
6460 }
6461 
6462 /* Subroutine of reshape_init_array and reshape_init_vector, which does
6463    the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
6464    INTEGER_CST representing the size of the array minus one (the maximum index),
6465    or NULL_TREE if the array was declared without specifying the size. D is
6466    the iterator within the constructor.  */
6467 
6468 static tree
reshape_init_array_1(tree elt_type,tree max_index,reshape_iter * d,tree first_initializer_p,tsubst_flags_t complain)6469 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
6470                           tree first_initializer_p, tsubst_flags_t complain)
6471 {
6472   tree new_init;
6473   bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
6474   unsigned HOST_WIDE_INT max_index_cst = 0;
6475   unsigned HOST_WIDE_INT index;
6476 
6477   /* The initializer for an array is always a CONSTRUCTOR.  If this is the
6478      outermost CONSTRUCTOR and the element type is non-aggregate, we don't need
6479      to build a new one.  But don't reuse if not complaining; if this is
6480      tentative, we might also reshape to another type (95319).  */
6481   bool reuse = (first_initializer_p
6482                     && (complain & tf_error)
6483                     && !CP_AGGREGATE_TYPE_P (elt_type)
6484                     && !TREE_SIDE_EFFECTS (first_initializer_p));
6485   if (reuse)
6486     new_init = first_initializer_p;
6487   else
6488     new_init = build_constructor (init_list_type_node, NULL);
6489 
6490   if (sized_array_p)
6491     {
6492       /* Minus 1 is used for zero sized arrays.  */
6493       if (integer_all_onesp (max_index))
6494           return new_init;
6495 
6496       if (tree_fits_uhwi_p (max_index))
6497           max_index_cst = tree_to_uhwi (max_index);
6498       /* sizetype is sign extended, not zero extended.  */
6499       else
6500           max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
6501     }
6502 
6503   /* Loop until there are no more initializers.  */
6504   for (index = 0;
6505        d->cur != d->end && (!sized_array_p || index <= max_index_cst);
6506        ++index)
6507     {
6508       tree elt_init;
6509       constructor_elt *old_cur = d->cur;
6510 
6511       if (d->cur->index)
6512           CONSTRUCTOR_IS_DESIGNATED_INIT (new_init) = true;
6513       check_array_designated_initializer (d->cur, index);
6514       elt_init = reshape_init_r (elt_type, d,
6515                                          /*first_initializer_p=*/NULL_TREE,
6516                                          complain);
6517       if (elt_init == error_mark_node)
6518           return error_mark_node;
6519       tree idx = size_int (index);
6520       if (reuse)
6521           {
6522             old_cur->index = idx;
6523             old_cur->value = elt_init;
6524           }
6525       else
6526           CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
6527                                         idx, elt_init);
6528       if (!TREE_CONSTANT (elt_init))
6529           TREE_CONSTANT (new_init) = false;
6530 
6531       /* This can happen with an invalid initializer (c++/54501).  */
6532       if (d->cur == old_cur && !sized_array_p)
6533           break;
6534     }
6535 
6536   return new_init;
6537 }
6538 
6539 /* Subroutine of reshape_init_r, processes the initializers for arrays.
6540    Parameters are the same of reshape_init_r.  */
6541 
6542 static tree
reshape_init_array(tree type,reshape_iter * d,tree first_initializer_p,tsubst_flags_t complain)6543 reshape_init_array (tree type, reshape_iter *d, tree first_initializer_p,
6544                         tsubst_flags_t complain)
6545 {
6546   tree max_index = NULL_TREE;
6547 
6548   gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
6549 
6550   if (TYPE_DOMAIN (type))
6551     max_index = array_type_nelts (type);
6552 
6553   return reshape_init_array_1 (TREE_TYPE (type), max_index, d,
6554                                      first_initializer_p, complain);
6555 }
6556 
6557 /* Subroutine of reshape_init_r, processes the initializers for vectors.
6558    Parameters are the same of reshape_init_r.  */
6559 
6560 static tree
reshape_init_vector(tree type,reshape_iter * d,tsubst_flags_t complain)6561 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
6562 {
6563   tree max_index = NULL_TREE;
6564 
6565   gcc_assert (VECTOR_TYPE_P (type));
6566 
6567   if (COMPOUND_LITERAL_P (d->cur->value))
6568     {
6569       tree value = d->cur->value;
6570       if (!same_type_p (TREE_TYPE (value), type))
6571           {
6572             if (complain & tf_error)
6573               error ("invalid type %qT as initializer for a vector of type %qT",
6574                        TREE_TYPE (d->cur->value), type);
6575             value = error_mark_node;
6576           }
6577       ++d->cur;
6578       return value;
6579     }
6580 
6581   /* For a vector, we initialize it as an array of the appropriate size.  */
6582   if (VECTOR_TYPE_P (type))
6583     max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
6584 
6585   return reshape_init_array_1 (TREE_TYPE (type), max_index, d,
6586                                      NULL_TREE, complain);
6587 }
6588 
6589 /* Subroutine of reshape_init*: We're initializing an element with TYPE from
6590    INIT, in isolation from any designator or other initializers.  */
6591 
6592 static tree
reshape_single_init(tree type,tree init,tsubst_flags_t complain)6593 reshape_single_init (tree type, tree init, tsubst_flags_t complain)
6594 {
6595   /* We could also implement this by wrapping init in a new CONSTRUCTOR and
6596      calling reshape_init, but this way can just live on the stack.  */
6597   constructor_elt elt = { /*index=*/NULL_TREE, init };
6598   reshape_iter iter = { &elt, &elt + 1 };
6599   return reshape_init_r (type, &iter,
6600                                /*first_initializer_p=*/NULL_TREE,
6601                                complain);
6602 }
6603 
6604 /* Subroutine of reshape_init_r, processes the initializers for classes
6605    or union. Parameters are the same of reshape_init_r.  */
6606 
6607 static tree
reshape_init_class(tree type,reshape_iter * d,bool first_initializer_p,tsubst_flags_t complain)6608 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
6609                         tsubst_flags_t complain)
6610 {
6611   tree field;
6612   tree new_init;
6613 
6614   gcc_assert (CLASS_TYPE_P (type));
6615 
6616   /* The initializer for a class is always a CONSTRUCTOR.  */
6617   new_init = build_constructor (init_list_type_node, NULL);
6618 
6619   int binfo_idx = -1;
6620   tree binfo = TYPE_BINFO (type);
6621   tree base_binfo = NULL_TREE;
6622   if (cxx_dialect >= cxx17 && uses_template_parms (type))
6623     {
6624       /* We get here from maybe_aggr_guide for C++20 class template argument
6625            deduction.  In this case we need to look through the binfo because a
6626            template doesn't have base fields.  */
6627       binfo_idx = 0;
6628       BINFO_BASE_ITERATE (binfo, binfo_idx, base_binfo);
6629     }
6630   if (base_binfo)
6631     field = base_binfo;
6632   else
6633     field = next_initializable_field (TYPE_FIELDS (type));
6634 
6635   if (!field)
6636     {
6637       /* [dcl.init.aggr]
6638 
6639           An initializer for an aggregate member that is an
6640           empty class shall have the form of an empty
6641           initializer-list {}.  */
6642       if (!first_initializer_p)
6643           {
6644             if (complain & tf_error)
6645               error ("initializer for %qT must be brace-enclosed", type);
6646             return error_mark_node;
6647           }
6648       return new_init;
6649     }
6650 
6651   /* For C++20 CTAD, handle pack expansions in the base list.  */
6652   tree last_was_pack_expansion = NULL_TREE;
6653 
6654   /* Loop through the initializable fields, gathering initializers.  */
6655   while (d->cur != d->end)
6656     {
6657       tree field_init;
6658       constructor_elt *old_cur = d->cur;
6659       bool direct_desig = false;
6660 
6661       /* Handle C++20 designated initializers.  */
6662       if (d->cur->index)
6663           {
6664             if (d->cur->index == error_mark_node)
6665               return error_mark_node;
6666 
6667             if (TREE_CODE (d->cur->index) == FIELD_DECL)
6668               {
6669                 /* We already reshaped this.  */
6670                 if (field != d->cur->index)
6671                     {
6672                       if (tree id = DECL_NAME (d->cur->index))
6673                         gcc_checking_assert (d->cur->index
6674                                                    == get_class_binding (type, id));
6675                       field = d->cur->index;
6676                     }
6677               }
6678             else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
6679               {
6680                 CONSTRUCTOR_IS_DESIGNATED_INIT (new_init) = true;
6681                 field = get_class_binding (type, d->cur->index);
6682                 direct_desig = true;
6683               }
6684             else
6685               {
6686                 if (complain & tf_error)
6687                     error ("%<[%E] =%> used in a GNU-style designated initializer"
6688                            " for class %qT", d->cur->index, type);
6689                 return error_mark_node;
6690               }
6691 
6692             if (!field && ANON_AGGR_TYPE_P (type))
6693               /* Apparently the designator isn't for a member of this anonymous
6694                  struct, so head back to the enclosing class.  */
6695               break;
6696 
6697             if (!field || TREE_CODE (field) != FIELD_DECL)
6698               {
6699                 if (complain & tf_error)
6700                     error ("%qT has no non-static data member named %qD", type,
6701                            d->cur->index);
6702                 return error_mark_node;
6703               }
6704 
6705             /* If the element is an anonymous union object and the initializer
6706                list is a designated-initializer-list, the anonymous union object
6707                is initialized by the designated-initializer-list { D }, where D
6708                is the designated-initializer-clause naming a member of the
6709                anonymous union object.  */
6710             tree ictx = DECL_CONTEXT (field);
6711             if (!same_type_ignoring_top_level_qualifiers_p (ictx, type))
6712               {
6713                 /* Find the anon aggr that is a direct member of TYPE.  */
6714                 while (ANON_AGGR_TYPE_P (ictx))
6715                     {
6716                       tree cctx = TYPE_CONTEXT (ictx);
6717                       if (same_type_ignoring_top_level_qualifiers_p (cctx, type))
6718                         goto found;
6719                       ictx = cctx;
6720                     }
6721 
6722                 /* Not found, e.g. FIELD is a member of a base class.  */
6723                 if (complain & tf_error)
6724                     error ("%qD is not a direct member of %qT", field, type);
6725                 return error_mark_node;
6726 
6727               found:
6728                 /* Now find the TYPE member with that anon aggr type.  */
6729                 tree aafield = TYPE_FIELDS (type);
6730                 for (; aafield; aafield = TREE_CHAIN (aafield))
6731                     if (TREE_TYPE (aafield) == ictx)
6732                       break;
6733                 gcc_assert (aafield);
6734                 field = aafield;
6735                 direct_desig = false;
6736               }
6737           }
6738 
6739       /* If we processed all the member of the class, we are done.  */
6740       if (!field)
6741           break;
6742 
6743       last_was_pack_expansion = (PACK_EXPANSION_P (TREE_TYPE (field))
6744                                          ? field : NULL_TREE);
6745       if (last_was_pack_expansion)
6746           /* Each non-trailing aggregate element that is a pack expansion is
6747              assumed to correspond to no elements of the initializer list.  */
6748           goto continue_;
6749 
6750       if (direct_desig)
6751           {
6752             /* The designated field F is initialized from this one element.
6753 
6754                Note that we don't want to do this if we found the designator
6755                inside an anon aggr above; we use the normal code to implement:
6756 
6757                "If the element is an anonymous union member and the initializer
6758                list is a brace-enclosed designated- initializer-list, the element
6759                is initialized by the designated-initializer-list { D }, where D
6760                is the designated- initializer-clause naming a member of the
6761                anonymous union member."  */
6762             field_init = reshape_single_init (TREE_TYPE (field),
6763                                                       d->cur->value, complain);
6764             d->cur++;
6765           }
6766       else
6767           field_init = reshape_init_r (TREE_TYPE (field), d,
6768                                              /*first_initializer_p=*/NULL_TREE,
6769                                              complain);
6770 
6771       if (field_init == error_mark_node)
6772           return error_mark_node;
6773 
6774       if (d->cur == old_cur && d->cur->index)
6775           {
6776             /* This can happen with an invalid initializer for a flexible
6777                array member (c++/54441).  */
6778             if (complain & tf_error)
6779               error ("invalid initializer for %q#D", field);
6780             return error_mark_node;
6781           }
6782 
6783       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
6784 
6785       /* [dcl.init.aggr]
6786 
6787           When a union  is  initialized with a brace-enclosed
6788           initializer, the braces shall only contain an
6789           initializer for the first member of the union.  */
6790       if (TREE_CODE (type) == UNION_TYPE)
6791           break;
6792 
6793     continue_:
6794       if (base_binfo)
6795           {
6796             if (BINFO_BASE_ITERATE (binfo, ++binfo_idx, base_binfo))
6797               field = base_binfo;
6798             else
6799               field = next_initializable_field (TYPE_FIELDS (type));
6800           }
6801       else
6802           field = next_initializable_field (DECL_CHAIN (field));
6803     }
6804 
6805   /* A trailing aggregate element that is a pack expansion is assumed to
6806      correspond to all remaining elements of the initializer list (if any).  */
6807   if (last_was_pack_expansion)
6808     {
6809       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
6810                                     last_was_pack_expansion, d->cur->value);
6811       while (d->cur != d->end)
6812           d->cur++;
6813     }
6814 
6815   return new_init;
6816 }
6817 
6818 /* Subroutine of reshape_init_r.  We're in a context where C99 initializer
6819    designators are not valid; either complain or return true to indicate
6820    that reshape_init_r should return error_mark_node.  */
6821 
6822 static bool
has_designator_problem(reshape_iter * d,tsubst_flags_t complain)6823 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
6824 {
6825   if (d->cur->index)
6826     {
6827       if (complain & tf_error)
6828           error_at (cp_expr_loc_or_input_loc (d->cur->index),
6829                       "C99 designator %qE outside aggregate initializer",
6830                       d->cur->index);
6831       else
6832           return true;
6833     }
6834   return false;
6835 }
6836 
6837 /* Subroutine of reshape_init, which processes a single initializer (part of
6838    a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
6839    iterator within the CONSTRUCTOR which points to the initializer to process.
6840    If this is the first initializer of the outermost CONSTRUCTOR node,
6841    FIRST_INITIALIZER_P is that CONSTRUCTOR; otherwise, it is NULL_TREE.  */
6842 
6843 static tree
reshape_init_r(tree type,reshape_iter * d,tree first_initializer_p,tsubst_flags_t complain)6844 reshape_init_r (tree type, reshape_iter *d, tree first_initializer_p,
6845                     tsubst_flags_t complain)
6846 {
6847   tree init = d->cur->value;
6848 
6849   if (error_operand_p (init))
6850     return error_mark_node;
6851 
6852   if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
6853       && has_designator_problem (d, complain))
6854     return error_mark_node;
6855 
6856   tree stripped_init = tree_strip_any_location_wrapper (init);
6857 
6858   if (TREE_CODE (type) == COMPLEX_TYPE)
6859     {
6860       /* A complex type can be initialized from one or two initializers,
6861            but braces are not elided.  */
6862       d->cur++;
6863       if (BRACE_ENCLOSED_INITIALIZER_P (stripped_init))
6864           {
6865             if (CONSTRUCTOR_NELTS (stripped_init) > 2)
6866               {
6867                 if (complain & tf_error)
6868                     error ("too many initializers for %qT", type);
6869                 else
6870                     return error_mark_node;
6871               }
6872           }
6873       else if (first_initializer_p && d->cur != d->end)
6874           {
6875             vec<constructor_elt, va_gc> *v = 0;
6876             CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
6877             CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
6878             if (has_designator_problem (d, complain))
6879               return error_mark_node;
6880             d->cur++;
6881             init = build_constructor (init_list_type_node, v);
6882           }
6883       return init;
6884     }
6885 
6886   /* A non-aggregate type is always initialized with a single
6887      initializer.  */
6888   if (!CP_AGGREGATE_TYPE_P (type)
6889       /* As is an array with dependent bound, which we can see
6890            during C++20 aggregate CTAD.  */
6891       || (cxx_dialect >= cxx20
6892             && TREE_CODE (type) == ARRAY_TYPE
6893             && uses_template_parms (TYPE_DOMAIN (type))))
6894     {
6895       /* It is invalid to initialize a non-aggregate type with a
6896            brace-enclosed initializer before C++0x.
6897            We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
6898            of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
6899            a CONSTRUCTOR (with a record type).  */
6900       if (TREE_CODE (stripped_init) == CONSTRUCTOR
6901             /* Don't complain about a capture-init.  */
6902             && !CONSTRUCTOR_IS_DIRECT_INIT (stripped_init)
6903             && BRACE_ENCLOSED_INITIALIZER_P (stripped_init))  /* p7626.C */
6904           {
6905             if (SCALAR_TYPE_P (type))
6906               {
6907                 if (cxx_dialect < cxx11)
6908                     {
6909                       if (complain & tf_error)
6910                         error ("braces around scalar initializer for type %qT",
6911                                  type);
6912                       init = error_mark_node;
6913                     }
6914                 else if (first_initializer_p
6915                            || (CONSTRUCTOR_NELTS (stripped_init) > 0
6916                                  && (BRACE_ENCLOSED_INITIALIZER_P
6917                                      (CONSTRUCTOR_ELT (stripped_init,0)->value))))
6918                     {
6919                       if (complain & tf_error)
6920                         error ("too many braces around scalar initializer "
6921                                "for type %qT", type);
6922                       init = error_mark_node;
6923                     }
6924               }
6925             else
6926               maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6927           }
6928 
6929       d->cur++;
6930       return init;
6931     }
6932 
6933   /* "If T is a class type and the initializer list has a single element of
6934      type cv U, where U is T or a class derived from T, the object is
6935      initialized from that element."  Even if T is an aggregate.  */
6936   if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
6937       && first_initializer_p
6938       /* But not if it's a designated init.  */
6939       && !d->cur->index
6940       && d->end - d->cur == 1
6941       && reference_related_p (type, TREE_TYPE (init)))
6942     {
6943       d->cur++;
6944       return init;
6945     }
6946 
6947   /* [dcl.init.aggr]
6948 
6949      All implicit type conversions (clause _conv_) are considered when
6950      initializing the aggregate member with an initializer from an
6951      initializer-list.  If the initializer can initialize a member,
6952      the member is initialized.  Otherwise, if the member is itself a
6953      non-empty subaggregate, brace elision is assumed and the
6954      initializer is considered for the initialization of the first
6955      member of the subaggregate.  */
6956   if ((TREE_CODE (init) != CONSTRUCTOR || COMPOUND_LITERAL_P (init))
6957       /* But don't try this for the first initializer, since that would be
6958            looking through the outermost braces; A a2 = { a1 }; is not a
6959            valid aggregate initialization.  */
6960       && !first_initializer_p
6961       && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
6962             || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
6963                                     complain)))
6964     {
6965       d->cur++;
6966       return init;
6967     }
6968 
6969   /* [dcl.init.string]
6970 
6971       A char array (whether plain char, signed char, or unsigned char)
6972       can be initialized by a string-literal (optionally enclosed in
6973       braces); a wchar_t array can be initialized by a wide
6974       string-literal (optionally enclosed in braces).  */
6975   if (TREE_CODE (type) == ARRAY_TYPE
6976       && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
6977     {
6978       tree str_init = init;
6979       tree stripped_str_init = stripped_init;
6980       reshape_iter stripd = {};
6981 
6982       /* Strip one level of braces if and only if they enclose a single
6983            element (as allowed by [dcl.init.string]).  */
6984       if (!first_initializer_p
6985             && TREE_CODE (stripped_str_init) == CONSTRUCTOR
6986             && CONSTRUCTOR_NELTS (stripped_str_init) == 1)
6987           {
6988             stripd.cur = CONSTRUCTOR_ELT (stripped_str_init, 0);
6989             str_init = stripd.cur->value;
6990             stripped_str_init = tree_strip_any_location_wrapper (str_init);
6991           }
6992 
6993       /* If it's a string literal, then it's the initializer for the array
6994            as a whole. Otherwise, continue with normal initialization for
6995            array types (one value per array element).  */
6996       if (TREE_CODE (stripped_str_init) == STRING_CST)
6997           {
6998             if ((first_initializer_p && has_designator_problem (d, complain))
6999                 || (stripd.cur && has_designator_problem (&stripd, complain)))
7000               return error_mark_node;
7001             d->cur++;
7002             return str_init;
7003           }
7004     }
7005 
7006   /* The following cases are about aggregates. If we are not within a full
7007      initializer already, and there is not a CONSTRUCTOR, it means that there
7008      is a missing set of braces (that is, we are processing the case for
7009      which reshape_init exists).  */
7010   bool braces_elided_p = false;
7011   if (!first_initializer_p)
7012     {
7013       if (TREE_CODE (stripped_init) == CONSTRUCTOR)
7014           {
7015             tree init_type = TREE_TYPE (init);
7016             if (init_type && TYPE_PTRMEMFUNC_P (init_type))
7017               /* There is no need to call reshape_init for pointer-to-member
7018                  function initializers, as they are always constructed correctly
7019                  by the front end.  Here we have e.g. {.__pfn=0B, .__delta=0},
7020                  which is missing outermost braces.  We should warn below, and
7021                  one of the routines below will wrap it in additional { }.  */;
7022             /* For a nested compound literal, proceed to specialized routines,
7023                to handle initialization of arrays and similar.  */
7024             else if (COMPOUND_LITERAL_P (stripped_init))
7025               gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (stripped_init));
7026             /* If we have an unresolved designator, we need to find the member it
7027                designates within TYPE, so proceed to the routines below.  For
7028                FIELD_DECL or INTEGER_CST designators, we're already initializing
7029                the designated element.  */
7030             else if (d->cur->index
7031                        && TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
7032               /* Brace elision with designators is only permitted for anonymous
7033                  aggregates.  */
7034               gcc_checking_assert (ANON_AGGR_TYPE_P (type));
7035             /* A CONSTRUCTOR of the target's type is a previously
7036                digested initializer.  */
7037             else if (same_type_ignoring_top_level_qualifiers_p (type, init_type))
7038               {
7039                 ++d->cur;
7040                 return init;
7041               }
7042             else
7043               {
7044                 /* Something that hasn't been reshaped yet.  */
7045                 ++d->cur;
7046                 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (stripped_init));
7047                 return reshape_init (type, init, complain);
7048               }
7049           }
7050 
7051       if (complain & tf_warning)
7052           warning (OPT_Wmissing_braces,
7053                      "missing braces around initializer for %qT",
7054                      type);
7055       braces_elided_p = true;
7056     }
7057 
7058   /* Dispatch to specialized routines.  */
7059   tree new_init;
7060   if (CLASS_TYPE_P (type))
7061     new_init = reshape_init_class (type, d, first_initializer_p, complain);
7062   else if (TREE_CODE (type) == ARRAY_TYPE)
7063     new_init = reshape_init_array (type, d, first_initializer_p, complain);
7064   else if (VECTOR_TYPE_P (type))
7065     new_init = reshape_init_vector (type, d, complain);
7066   else
7067     gcc_unreachable();
7068 
7069   if (braces_elided_p
7070       && TREE_CODE (new_init) == CONSTRUCTOR)
7071     CONSTRUCTOR_BRACES_ELIDED_P (new_init) = true;
7072 
7073   return new_init;
7074 }
7075 
7076 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
7077    brace-enclosed aggregate initializer.
7078 
7079    INIT is the CONSTRUCTOR containing the list of initializers describing
7080    a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
7081    It may not presently match the shape of the TYPE; for example:
7082 
7083      struct S { int a; int b; };
7084      struct S a[] = { 1, 2, 3, 4 };
7085 
7086    Here INIT will hold a vector of four elements, rather than a
7087    vector of two elements, each itself a vector of two elements.  This
7088    routine transforms INIT from the former form into the latter.  The
7089    revised CONSTRUCTOR node is returned.  */
7090 
7091 tree
reshape_init(tree type,tree init,tsubst_flags_t complain)7092 reshape_init (tree type, tree init, tsubst_flags_t complain)
7093 {
7094   vec<constructor_elt, va_gc> *v;
7095   reshape_iter d;
7096   tree new_init;
7097 
7098   gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
7099 
7100   v = CONSTRUCTOR_ELTS (init);
7101 
7102   /* An empty constructor does not need reshaping, and it is always a valid
7103      initializer.  */
7104   if (vec_safe_is_empty (v))
7105     return init;
7106 
7107   /* Brace elision is not performed for a CONSTRUCTOR representing
7108      parenthesized aggregate initialization.  */
7109   if (CONSTRUCTOR_IS_PAREN_INIT (init))
7110     {
7111       tree elt = (*v)[0].value;
7112       /* If we're initializing a char array from a string-literal that is
7113            enclosed in braces, unwrap it here.  */
7114       if (TREE_CODE (type) == ARRAY_TYPE
7115             && vec_safe_length (v) == 1
7116             && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type)))
7117             && TREE_CODE (tree_strip_any_location_wrapper (elt)) == STRING_CST)
7118           return elt;
7119       return init;
7120     }
7121 
7122   /* Handle [dcl.init.list] direct-list-initialization from
7123      single element of enumeration with a fixed underlying type.  */
7124   if (is_direct_enum_init (type, init))
7125     {
7126       tree elt = CONSTRUCTOR_ELT (init, 0)->value;
7127       type = cv_unqualified (type);
7128       if (check_narrowing (ENUM_UNDERLYING_TYPE (type), elt, complain))
7129           {
7130             warning_sentinel w (warn_useless_cast);
7131             warning_sentinel w2 (warn_ignored_qualifiers);
7132             return cp_build_c_cast (input_location, type, elt,
7133                                           tf_warning_or_error);
7134           }
7135       else
7136           return error_mark_node;
7137     }
7138 
7139   /* Recurse on this CONSTRUCTOR.  */
7140   d.cur = &(*v)[0];
7141   d.end = d.cur + v->length ();
7142 
7143   new_init = reshape_init_r (type, &d, init, complain);
7144   if (new_init == error_mark_node)
7145     return error_mark_node;
7146 
7147   /* Make sure all the element of the constructor were used. Otherwise,
7148      issue an error about exceeding initializers.  */
7149   if (d.cur != d.end)
7150     {
7151       if (complain & tf_error)
7152           error ("too many initializers for %qT", type);
7153       return error_mark_node;
7154     }
7155 
7156   if (CONSTRUCTOR_IS_DIRECT_INIT (init)
7157       && BRACE_ENCLOSED_INITIALIZER_P (new_init))
7158     CONSTRUCTOR_IS_DIRECT_INIT (new_init) = true;
7159   if (CONSTRUCTOR_IS_DESIGNATED_INIT (init)
7160       && BRACE_ENCLOSED_INITIALIZER_P (new_init))
7161     CONSTRUCTOR_IS_DESIGNATED_INIT (new_init) = true;
7162 
7163   return new_init;
7164 }
7165 
7166 /* Verify array initializer.  Returns true if errors have been reported.  */
7167 
7168 bool
check_array_initializer(tree decl,tree type,tree init)7169 check_array_initializer (tree decl, tree type, tree init)
7170 {
7171   tree element_type = TREE_TYPE (type);
7172 
7173   /* Structured binding when initialized with an array type needs
7174      to have complete type.  */
7175   if (decl
7176       && DECL_DECOMPOSITION_P (decl)
7177       && !DECL_DECOMP_BASE (decl)
7178       && !COMPLETE_TYPE_P (type))
7179     {
7180       error_at (DECL_SOURCE_LOCATION (decl),
7181                     "structured binding has incomplete type %qT", type);
7182       TREE_TYPE (decl) = error_mark_node;
7183       return true;
7184     }
7185 
7186   /* The array type itself need not be complete, because the
7187      initializer may tell us how many elements are in the array.
7188      But, the elements of the array must be complete.  */
7189   if (!COMPLETE_TYPE_P (complete_type (element_type)))
7190     {
7191       if (decl)
7192           error_at (DECL_SOURCE_LOCATION (decl),
7193                       "elements of array %q#D have incomplete type", decl);
7194       else
7195           error ("elements of array %q#T have incomplete type", type);
7196       return true;
7197     }
7198 
7199   location_t loc = (decl ? location_of (decl) : input_location);
7200   if (!verify_type_context (loc, TCTX_ARRAY_ELEMENT, element_type))
7201     return true;
7202 
7203   /* A compound literal can't have variable size.  */
7204   if (init && !decl
7205       && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
7206             || !TREE_CONSTANT (TYPE_SIZE (element_type))))
7207     {
7208       error ("variable-sized compound literal");
7209       return true;
7210     }
7211   return false;
7212 }
7213 
7214 /* Subroutine of check_initializer; args are passed down from that function.
7215    Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init.  */
7216 
7217 static tree
build_aggr_init_full_exprs(tree decl,tree init,int flags)7218 build_aggr_init_full_exprs (tree decl, tree init, int flags)
7219 
7220 {
7221   gcc_assert (stmts_are_full_exprs_p ());
7222   return build_aggr_init (decl, init, flags, tf_warning_or_error);
7223 }
7224 
7225 /* Verify INIT (the initializer for DECL), and record the
7226    initialization in DECL_INITIAL, if appropriate.  CLEANUP is as for
7227    grok_reference_init.
7228 
7229    If the return value is non-NULL, it is an expression that must be
7230    evaluated dynamically to initialize DECL.  */
7231 
7232 static tree
check_initializer(tree decl,tree init,int flags,vec<tree,va_gc> ** cleanups)7233 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
7234 {
7235   tree type;
7236   tree init_code = NULL;
7237   tree core_type;
7238 
7239   /* Things that are going to be initialized need to have complete
7240      type.  */
7241   TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
7242 
7243   if (DECL_HAS_VALUE_EXPR_P (decl))
7244     {
7245       /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
7246            it doesn't have storage to be initialized.  */
7247       gcc_assert (init == NULL_TREE);
7248       return NULL_TREE;
7249     }
7250 
7251   if (type == error_mark_node)
7252     /* We will have already complained.  */
7253     return NULL_TREE;
7254 
7255   if (TREE_CODE (type) == ARRAY_TYPE)
7256     {
7257       if (check_array_initializer (decl, type, init))
7258           return NULL_TREE;
7259     }
7260   else if (!COMPLETE_TYPE_P (type))
7261     {
7262       error_at (DECL_SOURCE_LOCATION (decl),
7263                     "%q#D has incomplete type", decl);
7264       TREE_TYPE (decl) = error_mark_node;
7265       return NULL_TREE;
7266     }
7267   else
7268     /* There is no way to make a variable-sized class type in GNU C++.  */
7269     gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
7270 
7271   if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
7272     {
7273       int init_len = CONSTRUCTOR_NELTS (init);
7274       if (SCALAR_TYPE_P (type))
7275           {
7276             if (init_len == 0)
7277               {
7278                 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
7279                 init = build_zero_init (type, NULL_TREE, false);
7280               }
7281             else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
7282               {
7283                 error_at (cp_expr_loc_or_loc (init, DECL_SOURCE_LOCATION (decl)),
7284                               "scalar object %qD requires one element in "
7285                               "initializer", decl);
7286                 TREE_TYPE (decl) = error_mark_node;
7287                 return NULL_TREE;
7288               }
7289           }
7290     }
7291 
7292   if (TREE_CODE (decl) == CONST_DECL)
7293     {
7294       gcc_assert (!TYPE_REF_P (type));
7295 
7296       DECL_INITIAL (decl) = init;
7297 
7298       gcc_assert (init != NULL_TREE);
7299       init = NULL_TREE;
7300     }
7301   else if (!init && DECL_REALLY_EXTERN (decl))
7302     ;
7303   else if (init || type_build_ctor_call (type)
7304              || TYPE_REF_P (type))
7305     {
7306       if (TYPE_REF_P (type))
7307           {
7308             init = grok_reference_init (decl, type, init, flags);
7309             flags |= LOOKUP_ALREADY_DIGESTED;
7310           }
7311       else if (!init)
7312           check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
7313                                                      tf_warning_or_error);
7314       /* Do not reshape constructors of vectors (they don't need to be
7315            reshaped.  */
7316       else if (BRACE_ENCLOSED_INITIALIZER_P (init))
7317           {
7318             if (is_std_init_list (type))
7319               {
7320                 init = perform_implicit_conversion (type, init,
7321                                                               tf_warning_or_error);
7322                 flags |= LOOKUP_ALREADY_DIGESTED;
7323               }
7324             else if (TYPE_NON_AGGREGATE_CLASS (type))
7325               {
7326                 /* Don't reshape if the class has constructors.  */
7327                 if (cxx_dialect == cxx98)
7328                     error_at (cp_expr_loc_or_loc (init, DECL_SOURCE_LOCATION (decl)),
7329                                 "in C++98 %qD must be initialized by "
7330                                 "constructor, not by %<{...}%>",
7331                                 decl);
7332               }
7333             else if (VECTOR_TYPE_P (type) && TYPE_VECTOR_OPAQUE (type))
7334               {
7335                 error ("opaque vector types cannot be initialized");
7336                 init = error_mark_node;
7337               }
7338             else
7339               {
7340                 init = reshape_init (type, init, tf_warning_or_error);
7341                 flags |= LOOKUP_NO_NARROWING;
7342               }
7343           }
7344       /* [dcl.init] "Otherwise, if the destination type is an array, the object
7345            is initialized as follows..."  So handle things like
7346 
7347             int a[](1, 2, 3);
7348 
7349            which is permitted in C++20 by P0960.  */
7350       else if (TREE_CODE (init) == TREE_LIST
7351                  && TREE_TYPE (init) == NULL_TREE
7352                  && TREE_CODE (type) == ARRAY_TYPE
7353                  && !DECL_DECOMPOSITION_P (decl)
7354                  && (cxx_dialect >= cxx20))
7355           init = do_aggregate_paren_init (init, type);
7356       else if (TREE_CODE (init) == TREE_LIST
7357                  && TREE_TYPE (init) != unknown_type_node
7358                  && !MAYBE_CLASS_TYPE_P (type))
7359           {
7360             gcc_assert (TREE_CODE (decl) != RESULT_DECL);
7361 
7362             /* We get here with code like `int a (2);' */
7363             init = build_x_compound_expr_from_list (init, ELK_INIT,
7364                                                               tf_warning_or_error);
7365           }
7366 
7367       /* If DECL has an array type without a specific bound, deduce the
7368            array size from the initializer.  */
7369       maybe_deduce_size_from_array_init (decl, init);
7370       type = TREE_TYPE (decl);
7371       if (type == error_mark_node)
7372           return NULL_TREE;
7373 
7374       if (((type_build_ctor_call (type) || CLASS_TYPE_P (type))
7375              && !(flags & LOOKUP_ALREADY_DIGESTED)
7376              && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
7377                     && CP_AGGREGATE_TYPE_P (type)
7378                     && (CLASS_TYPE_P (type)
7379                         /* The call to build_aggr_init below could end up
7380                            calling build_vec_init, which may break when we
7381                            are processing a template.  */
7382                         || processing_template_decl
7383                         || !TYPE_NEEDS_CONSTRUCTING (type)
7384                         || type_has_extended_temps (type))))
7385             || (DECL_DECOMPOSITION_P (decl) && TREE_CODE (type) == ARRAY_TYPE))
7386           {
7387             init_code = build_aggr_init_full_exprs (decl, init, flags);
7388 
7389             /* A constructor call is a non-trivial initializer even if
7390                it isn't explicitly written.  */
7391             if (TREE_SIDE_EFFECTS (init_code))
7392               DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
7393 
7394             /* If this is a constexpr initializer, expand_default_init will
7395                have returned an INIT_EXPR rather than a CALL_EXPR.  In that
7396                case, pull the initializer back out and pass it down into
7397                store_init_value.  */
7398             while (true)
7399               {
7400                 if (TREE_CODE (init_code) == EXPR_STMT
7401                       || TREE_CODE (init_code) == STMT_EXPR
7402                       || TREE_CODE (init_code) == CONVERT_EXPR)
7403                     init_code = TREE_OPERAND (init_code, 0);
7404                 else if (TREE_CODE (init_code) == BIND_EXPR)
7405                     init_code = BIND_EXPR_BODY (init_code);
7406                 else
7407                     break;
7408               }
7409             if (TREE_CODE (init_code) == INIT_EXPR)
7410               {
7411                 /* In C++20, the call to build_aggr_init could have created
7412                      an INIT_EXPR with a CONSTRUCTOR as the RHS to handle
7413                      A(1, 2).  */
7414                 tree rhs = TREE_OPERAND (init_code, 1);
7415                 if (processing_template_decl && TREE_CODE (rhs) == TARGET_EXPR)
7416                     /* Avoid leaking TARGET_EXPR into template trees.  */
7417                     rhs = build_implicit_conv_flags (type, init, flags);
7418                 init = rhs;
7419 
7420                 init_code = NULL_TREE;
7421                 /* Don't call digest_init; it's unnecessary and will complain
7422                      about aggregate initialization of non-aggregate classes.  */
7423                 flags |= LOOKUP_ALREADY_DIGESTED;
7424               }
7425             else if (DECL_DECLARED_CONSTEXPR_P (decl)
7426                        || DECL_DECLARED_CONSTINIT_P (decl))
7427               {
7428                 /* Declared constexpr or constinit, but no suitable initializer;
7429                      massage init appropriately so we can pass it into
7430                      store_init_value for the error.  */
7431                 tree new_init = NULL_TREE;
7432                 if (!processing_template_decl
7433                       && TREE_CODE (init_code) == CALL_EXPR)
7434                     new_init = build_cplus_new (type, init_code, tf_none);
7435                 else if (CLASS_TYPE_P (type)
7436                            && (!init || TREE_CODE (init) == TREE_LIST))
7437                     new_init = build_functional_cast (input_location, type,
7438                                                               init, tf_none);
7439                 if (new_init)
7440                     {
7441                       init = new_init;
7442                       if (TREE_CODE (init) == TARGET_EXPR
7443                           && !(flags & LOOKUP_ONLYCONVERTING))
7444                         TARGET_EXPR_DIRECT_INIT_P (init) = true;
7445                     }
7446                 init_code = NULL_TREE;
7447               }
7448             else
7449               init = NULL_TREE;
7450           }
7451 
7452       if (init && TREE_CODE (init) != TREE_VEC)
7453           {
7454             init_code = store_init_value (decl, init, cleanups, flags);
7455 
7456             if (DECL_INITIAL (decl)
7457                 && TREE_CODE (DECL_INITIAL (decl)) == CONSTRUCTOR
7458                 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (DECL_INITIAL (decl))))
7459               {
7460                 tree elt = CONSTRUCTOR_ELTS (DECL_INITIAL (decl))->last ().value;
7461                 if (TREE_CODE (TREE_TYPE (elt)) == ARRAY_TYPE
7462                       && TYPE_SIZE (TREE_TYPE (elt)) == NULL_TREE)
7463                     cp_complete_array_type (&TREE_TYPE (elt), elt, false);
7464               }
7465 
7466             if (pedantic && TREE_CODE (type) == ARRAY_TYPE
7467                 && DECL_INITIAL (decl)
7468                 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
7469                 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
7470               warning_at (cp_expr_loc_or_loc (DECL_INITIAL (decl),
7471                                                    DECL_SOURCE_LOCATION (decl)),
7472                               0, "array %qD initialized by parenthesized "
7473                               "string literal %qE",
7474                               decl, DECL_INITIAL (decl));
7475             init = NULL_TREE;
7476           }
7477     }
7478   else
7479     {
7480       if (CLASS_TYPE_P (core_type = strip_array_types (type))
7481             && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
7482                 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
7483           diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
7484                                                               /*complain=*/true);
7485 
7486       check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
7487                                                    tf_warning_or_error);
7488     }
7489 
7490   if (init && init != error_mark_node)
7491     init_code = build2 (INIT_EXPR, type, decl, init);
7492 
7493   if (init_code && !TREE_SIDE_EFFECTS (init_code)
7494       && init_code != error_mark_node)
7495     init_code = NULL_TREE;
7496 
7497   if (init_code)
7498     {
7499       /* We might have set these in cp_finish_decl.  */
7500       DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
7501       TREE_CONSTANT (decl) = false;
7502     }
7503 
7504   if (init_code
7505       && DECL_IN_AGGR_P (decl)
7506       && DECL_INITIALIZED_IN_CLASS_P (decl))
7507     {
7508       static int explained = 0;
7509 
7510       if (cxx_dialect < cxx11)
7511           error ("initializer invalid for static member with constructor");
7512       else if (cxx_dialect < cxx17)
7513           error ("non-constant in-class initialization invalid for static "
7514                  "member %qD", decl);
7515       else
7516           error ("non-constant in-class initialization invalid for non-inline "
7517                  "static member %qD", decl);
7518       if (!explained)
7519           {
7520             inform (input_location,
7521                       "(an out of class initialization is required)");
7522             explained = 1;
7523           }
7524       return NULL_TREE;
7525     }
7526 
7527   return init_code;
7528 }
7529 
7530 /* If DECL is not a local variable, give it RTL.  */
7531 
7532 static void
make_rtl_for_nonlocal_decl(tree decl,tree init,const char * asmspec)7533 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
7534 {
7535   int toplev = toplevel_bindings_p ();
7536   int defer_p;
7537 
7538   /* Set the DECL_ASSEMBLER_NAME for the object.  */
7539   if (asmspec)
7540     {
7541       /* The `register' keyword, when used together with an
7542            asm-specification, indicates that the variable should be
7543            placed in a particular register.  */
7544       if (VAR_P (decl) && DECL_REGISTER (decl))
7545           {
7546             set_user_assembler_name (decl, asmspec);
7547             DECL_HARD_REGISTER (decl) = 1;
7548           }
7549       else
7550           {
7551             if (TREE_CODE (decl) == FUNCTION_DECL
7552                 && fndecl_built_in_p (decl, BUILT_IN_NORMAL))
7553               set_builtin_user_assembler_name (decl, asmspec);
7554             set_user_assembler_name (decl, asmspec);
7555             if (DECL_LOCAL_DECL_P (decl))
7556               if (auto ns_decl = DECL_LOCAL_DECL_ALIAS (decl))
7557                 /* We have to propagate the name to the ns-alias.
7558                      This is horrible, as we're affecting a
7559                      possibly-shared decl.  Again, a one-true-decl
7560                      model breaks down.  */
7561                 if (ns_decl != error_mark_node)
7562                     set_user_assembler_name (ns_decl, asmspec);
7563           }
7564     }
7565 
7566   /* Handle non-variables up front.  */
7567   if (!VAR_P (decl))
7568     {
7569       rest_of_decl_compilation (decl, toplev, at_eof);
7570       return;
7571     }
7572 
7573   /* If we see a class member here, it should be a static data
7574      member.  */
7575   if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
7576     {
7577       gcc_assert (TREE_STATIC (decl));
7578       /* An in-class declaration of a static data member should be
7579            external; it is only a declaration, and not a definition.  */
7580       if (init == NULL_TREE)
7581           gcc_assert (DECL_EXTERNAL (decl)
7582                         || !TREE_PUBLIC (decl));
7583     }
7584 
7585   /* We don't create any RTL for local variables.  */
7586   if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
7587     return;
7588 
7589   /* We defer emission of local statics until the corresponding
7590      DECL_EXPR is expanded.  But with constexpr its function might never
7591      be expanded, so go ahead and tell cgraph about the variable now.  */
7592   defer_p = ((DECL_FUNCTION_SCOPE_P (decl)
7593                 && !var_in_maybe_constexpr_fn (decl))
7594                || DECL_VIRTUAL_P (decl));
7595 
7596   /* Defer template instantiations.  */
7597   if (DECL_LANG_SPECIFIC (decl)
7598       && DECL_IMPLICIT_INSTANTIATION (decl))
7599     defer_p = 1;
7600 
7601   /* If we're not deferring, go ahead and assemble the variable.  */
7602   if (!defer_p)
7603     rest_of_decl_compilation (decl, toplev, at_eof);
7604 }
7605 
7606 /* walk_tree helper for wrap_temporary_cleanups, below.  */
7607 
7608 static tree
wrap_cleanups_r(tree * stmt_p,int * walk_subtrees,void * data)7609 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
7610 {
7611   /* Stop at types or full-expression boundaries.  */
7612   if (TYPE_P (*stmt_p)
7613       || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
7614     {
7615       *walk_subtrees = 0;
7616       return NULL_TREE;
7617     }
7618 
7619   if (TREE_CODE (*stmt_p) == TARGET_EXPR)
7620     {
7621       tree guard = (tree)data;
7622       tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
7623 
7624       if (tcleanup && !CLEANUP_EH_ONLY (*stmt_p)
7625             && !expr_noexcept_p (tcleanup, tf_none))
7626           {
7627             tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
7628             /* Tell honor_protect_cleanup_actions to handle this as a separate
7629                cleanup.  */
7630             TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
7631             TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
7632           }
7633     }
7634 
7635   return NULL_TREE;
7636 }
7637 
7638 /* We're initializing a local variable which has a cleanup GUARD.  If there
7639    are any temporaries used in the initializer INIT of this variable, we
7640    need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
7641    variable will be cleaned up properly if one of them throws.
7642 
7643    Unfortunately, there's no way to express this properly in terms of
7644    nesting, as the regions for the temporaries overlap the region for the
7645    variable itself; if there are two temporaries, the variable needs to be
7646    the first thing destroyed if either of them throws.  However, we only
7647    want to run the variable's cleanup if it actually got constructed.  So
7648    we need to guard the temporary cleanups with the variable's cleanup if
7649    they are run on the normal path, but not if they are run on the
7650    exceptional path.  We implement this by telling
7651    honor_protect_cleanup_actions to strip the variable cleanup from the
7652    exceptional path.
7653 
7654    Another approach could be to make the variable cleanup region enclose
7655    initialization, but depend on a flag to indicate that the variable is
7656    initialized; that's effectively what we do for arrays.  But the current
7657    approach works fine for non-arrays, and has no code overhead in the usual
7658    case where the temporary destructors are noexcept.  */
7659 
7660 static void
wrap_temporary_cleanups(tree init,tree guard)7661 wrap_temporary_cleanups (tree init, tree guard)
7662 {
7663   if (TREE_CODE (guard) == BIND_EXPR)
7664     {
7665       /* An array cleanup region already encloses any temporary cleanups,
7666            don't wrap it around them again.  */
7667       gcc_checking_assert (BIND_EXPR_VEC_DTOR (guard));
7668       return;
7669     }
7670   cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
7671 }
7672 
7673 /* Generate code to initialize DECL (a local variable).  */
7674 
7675 static void
initialize_local_var(tree decl,tree init)7676 initialize_local_var (tree decl, tree init)
7677 {
7678   tree type = TREE_TYPE (decl);
7679   tree cleanup;
7680   int already_used;
7681 
7682   gcc_assert (VAR_P (decl)
7683                 || TREE_CODE (decl) == RESULT_DECL);
7684   gcc_assert (!TREE_STATIC (decl));
7685 
7686   if (DECL_SIZE (decl) == NULL_TREE)
7687     {
7688       /* If we used it already as memory, it must stay in memory.  */
7689       DECL_INITIAL (decl) = NULL_TREE;
7690       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7691       return;
7692     }
7693 
7694   if (type == error_mark_node)
7695     return;
7696 
7697   /* Compute and store the initial value.  */
7698   already_used = TREE_USED (decl) || TREE_USED (type);
7699   if (TREE_USED (type))
7700     DECL_READ_P (decl) = 1;
7701 
7702   /* Generate a cleanup, if necessary.  */
7703   cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
7704 
7705   /* Perform the initialization.  */
7706   if (init)
7707     {
7708       tree rinit = (TREE_CODE (init) == INIT_EXPR
7709                         ? TREE_OPERAND (init, 1) : NULL_TREE);
7710       if (rinit && !TREE_SIDE_EFFECTS (rinit)
7711             && TREE_OPERAND (init, 0) == decl)
7712           {
7713             /* Stick simple initializers in DECL_INITIAL so that
7714                -Wno-init-self works (c++/34772).  */
7715             DECL_INITIAL (decl) = rinit;
7716 
7717             if (warn_init_self && TYPE_REF_P (type))
7718               {
7719                 STRIP_NOPS (rinit);
7720                 if (rinit == decl)
7721                     warning_at (DECL_SOURCE_LOCATION (decl),
7722                                   OPT_Winit_self,
7723                                   "reference %qD is initialized with itself", decl);
7724               }
7725           }
7726       else
7727           {
7728             int saved_stmts_are_full_exprs_p;
7729 
7730             /* If we're only initializing a single object, guard the
7731                destructors of any temporaries used in its initializer with
7732                its destructor.  */
7733             if (cleanup)
7734               wrap_temporary_cleanups (init, cleanup);
7735 
7736             gcc_assert (building_stmt_list_p ());
7737             saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
7738             current_stmt_tree ()->stmts_are_full_exprs_p = 1;
7739             finish_expr_stmt (init);
7740             current_stmt_tree ()->stmts_are_full_exprs_p =
7741               saved_stmts_are_full_exprs_p;
7742           }
7743     }
7744 
7745   /* Set this to 0 so we can tell whether an aggregate which was
7746      initialized was ever used.  Don't do this if it has a
7747      destructor, so we don't complain about the 'resource
7748      allocation is initialization' idiom.  Now set
7749      attribute((unused)) on types so decls of that type will be
7750      marked used. (see TREE_USED, above.)  */
7751   if (TYPE_NEEDS_CONSTRUCTING (type)
7752       && ! already_used
7753       && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
7754       && DECL_NAME (decl))
7755     TREE_USED (decl) = 0;
7756   else if (already_used)
7757     TREE_USED (decl) = 1;
7758 
7759   if (cleanup)
7760     finish_decl_cleanup (decl, cleanup);
7761 }
7762 
7763 /* DECL is a VAR_DECL for a compiler-generated variable with static
7764    storage duration (like a virtual table) whose initializer is a
7765    compile-time constant.  Initialize the variable and provide it to the
7766    back end.  */
7767 
7768 void
initialize_artificial_var(tree decl,vec<constructor_elt,va_gc> * v)7769 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
7770 {
7771   tree init;
7772   gcc_assert (DECL_ARTIFICIAL (decl));
7773   init = build_constructor (TREE_TYPE (decl), v);
7774   gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
7775   DECL_INITIAL (decl) = init;
7776   DECL_INITIALIZED_P (decl) = 1;
7777   /* Mark the decl as constexpr so that we can access its content
7778      at compile time.  */
7779   DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = true;
7780   DECL_DECLARED_CONSTEXPR_P (decl) = true;
7781   determine_visibility (decl);
7782   layout_var_decl (decl);
7783   maybe_commonize_var (decl);
7784   make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
7785 }
7786 
7787 /* INIT is the initializer for a variable, as represented by the
7788    parser.  Returns true iff INIT is value-dependent.  */
7789 
7790 static bool
value_dependent_init_p(tree init)7791 value_dependent_init_p (tree init)
7792 {
7793   if (TREE_CODE (init) == TREE_LIST)
7794     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
7795     return any_value_dependent_elements_p (init);
7796   else if (TREE_CODE (init) == CONSTRUCTOR)
7797   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
7798     {
7799       if (dependent_type_p (TREE_TYPE (init)))
7800           return true;
7801 
7802       vec<constructor_elt, va_gc> *elts;
7803       size_t nelts;
7804       size_t i;
7805 
7806       elts = CONSTRUCTOR_ELTS (init);
7807       nelts = vec_safe_length (elts);
7808       for (i = 0; i < nelts; ++i)
7809           if (value_dependent_init_p ((*elts)[i].value))
7810             return true;
7811     }
7812   else
7813     /* It must be a simple expression, e.g., int i = 3;  */
7814     return value_dependent_expression_p (init);
7815 
7816   return false;
7817 }
7818 
7819 // Returns true if a DECL is VAR_DECL with the concept specifier.
7820 static inline bool
is_concept_var(tree decl)7821 is_concept_var (tree decl)
7822 {
7823   return (VAR_P (decl)
7824             // Not all variables have DECL_LANG_SPECIFIC.
7825           && DECL_LANG_SPECIFIC (decl)
7826           && DECL_DECLARED_CONCEPT_P (decl));
7827 }
7828 
7829 /* A helper function to be called via walk_tree.  If any label exists
7830    under *TP, it is (going to be) forced.  Set has_forced_label_in_static.  */
7831 
7832 static tree
notice_forced_label_r(tree * tp,int * walk_subtrees,void *)7833 notice_forced_label_r (tree *tp, int *walk_subtrees, void *)
7834 {
7835   if (TYPE_P (*tp))
7836     *walk_subtrees = 0;
7837   if (TREE_CODE (*tp) == LABEL_DECL)
7838     cfun->has_forced_label_in_static = 1;
7839   return NULL_TREE;
7840 }
7841 
7842 /* Return true if DECL has either a trivial destructor, or for C++20
7843    is constexpr and has a constexpr destructor.  */
7844 
7845 static bool
decl_maybe_constant_destruction(tree decl,tree type)7846 decl_maybe_constant_destruction (tree decl, tree type)
7847 {
7848   return (TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
7849             || (cxx_dialect >= cxx20
7850                 && VAR_P (decl)
7851                 && DECL_DECLARED_CONSTEXPR_P (decl)
7852                 && type_has_constexpr_destructor (strip_array_types (type))));
7853 }
7854 
7855 static tree declare_simd_adjust_this (tree *, int *, void *);
7856 
7857 /* Helper function of omp_declare_variant_finalize.  Finalize one
7858    "omp declare variant base" attribute.  Return true if it should be
7859    removed.  */
7860 
7861 static bool
omp_declare_variant_finalize_one(tree decl,tree attr)7862 omp_declare_variant_finalize_one (tree decl, tree attr)
7863 {
7864   if (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7865     {
7866       walk_tree (&TREE_VALUE (TREE_VALUE (attr)), declare_simd_adjust_this,
7867                      DECL_ARGUMENTS (decl), NULL);
7868       walk_tree (&TREE_PURPOSE (TREE_VALUE (attr)), declare_simd_adjust_this,
7869                      DECL_ARGUMENTS (decl), NULL);
7870     }
7871 
7872   tree ctx = TREE_VALUE (TREE_VALUE (attr));
7873   tree simd = omp_get_context_selector (ctx, "construct", "simd");
7874   if (simd)
7875     {
7876       TREE_VALUE (simd)
7877           = c_omp_declare_simd_clauses_to_numbers (DECL_ARGUMENTS (decl),
7878                                                              TREE_VALUE (simd));
7879       /* FIXME, adjusting simd args unimplemented.  */
7880       return true;
7881     }
7882 
7883   tree chain = TREE_CHAIN (TREE_VALUE (attr));
7884   location_t varid_loc
7885     = cp_expr_loc_or_input_loc (TREE_PURPOSE (TREE_CHAIN (chain)));
7886   location_t match_loc = cp_expr_loc_or_input_loc (TREE_PURPOSE (chain));
7887   cp_id_kind idk = (cp_id_kind) tree_to_uhwi (TREE_VALUE (chain));
7888   tree variant = TREE_PURPOSE (TREE_VALUE (attr));
7889 
7890   location_t save_loc = input_location;
7891   input_location = varid_loc;
7892 
7893   releasing_vec args;
7894   tree parm = DECL_ARGUMENTS (decl);
7895   if (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7896     parm = DECL_CHAIN (parm);
7897   for (; parm; parm = DECL_CHAIN (parm))
7898     if (type_dependent_expression_p (parm))
7899       vec_safe_push (args, build_constructor (TREE_TYPE (parm), NULL));
7900     else if (MAYBE_CLASS_TYPE_P (TREE_TYPE (parm)))
7901       vec_safe_push (args, build_local_temp (TREE_TYPE (parm)));
7902     else
7903       vec_safe_push (args, build_zero_cst (TREE_TYPE (parm)));
7904 
7905   bool koenig_p = false;
7906   if (idk == CP_ID_KIND_UNQUALIFIED || idk == CP_ID_KIND_TEMPLATE_ID)
7907     {
7908       if (identifier_p (variant)
7909             /* In C++20, we may need to perform ADL for a template
7910                name.  */
7911             || (TREE_CODE (variant) == TEMPLATE_ID_EXPR
7912                 && identifier_p (TREE_OPERAND (variant, 0))))
7913           {
7914             if (!args->is_empty ())
7915               {
7916                 koenig_p = true;
7917                 if (!any_type_dependent_arguments_p (args))
7918                     variant = perform_koenig_lookup (variant, args,
7919                                                              tf_warning_or_error);
7920               }
7921             else
7922               variant = unqualified_fn_lookup_error (variant);
7923           }
7924       else if (!args->is_empty () && is_overloaded_fn (variant))
7925           {
7926             tree fn = get_first_fn (variant);
7927             fn = STRIP_TEMPLATE (fn);
7928             if (!((TREE_CODE (fn) == USING_DECL && DECL_DEPENDENT_P (fn))
7929                      || DECL_FUNCTION_MEMBER_P (fn)
7930                      || DECL_LOCAL_DECL_P (fn)))
7931               {
7932                 koenig_p = true;
7933                 if (!any_type_dependent_arguments_p (args))
7934                     variant = perform_koenig_lookup (variant, args,
7935                                                              tf_warning_or_error);
7936               }
7937           }
7938     }
7939 
7940   if (idk == CP_ID_KIND_QUALIFIED)
7941     variant = finish_call_expr (variant, &args, /*disallow_virtual=*/true,
7942                                         koenig_p, tf_warning_or_error);
7943   else
7944     variant = finish_call_expr (variant, &args, /*disallow_virtual=*/false,
7945                                         koenig_p, tf_warning_or_error);
7946   if (variant == error_mark_node && !processing_template_decl)
7947     return true;
7948 
7949   variant = cp_get_callee_fndecl_nofold (variant);
7950   input_location = save_loc;
7951 
7952   if (variant)
7953     {
7954       const char *varname = IDENTIFIER_POINTER (DECL_NAME (variant));
7955       if (!comptypes (TREE_TYPE (decl), TREE_TYPE (variant), 0))
7956           {
7957             error_at (varid_loc, "variant %qD and base %qD have incompatible "
7958                                      "types", variant, decl);
7959             return true;
7960           }
7961       if (fndecl_built_in_p (variant)
7962             && (startswith (varname, "__builtin_")
7963                 || startswith (varname, "__sync_")
7964                 || startswith (varname, "__atomic_")))
7965           {
7966             error_at (varid_loc, "variant %qD is a built-in", variant);
7967             return true;
7968           }
7969       else
7970           {
7971             tree construct = omp_get_context_selector (ctx, "construct", NULL);
7972             omp_mark_declare_variant (match_loc, variant, construct);
7973             if (!omp_context_selector_matches (ctx))
7974               return true;
7975             TREE_PURPOSE (TREE_VALUE (attr)) = variant;
7976           }
7977     }
7978   else if (!processing_template_decl)
7979     {
7980       error_at (varid_loc, "could not find variant declaration");
7981       return true;
7982     }
7983 
7984   return false;
7985 }
7986 
7987 /* Helper function, finish up "omp declare variant base" attribute
7988    now that there is a DECL.  ATTR is the first "omp declare variant base"
7989    attribute.  */
7990 
7991 void
omp_declare_variant_finalize(tree decl,tree attr)7992 omp_declare_variant_finalize (tree decl, tree attr)
7993 {
7994   size_t attr_len = strlen ("omp declare variant base");
7995   tree *list = &DECL_ATTRIBUTES (decl);
7996   bool remove_all = false;
7997   location_t match_loc = DECL_SOURCE_LOCATION (decl);
7998   if (TREE_CHAIN (TREE_VALUE (attr))
7999       && TREE_PURPOSE (TREE_CHAIN (TREE_VALUE (attr)))
8000       && EXPR_HAS_LOCATION (TREE_PURPOSE (TREE_CHAIN (TREE_VALUE (attr)))))
8001     match_loc = EXPR_LOCATION (TREE_PURPOSE (TREE_CHAIN (TREE_VALUE (attr))));
8002   if (DECL_CONSTRUCTOR_P (decl))
8003     {
8004       error_at (match_loc, "%<declare variant%> on constructor %qD", decl);
8005       remove_all = true;
8006     }
8007   else if (DECL_DESTRUCTOR_P (decl))
8008     {
8009       error_at (match_loc, "%<declare variant%> on destructor %qD", decl);
8010       remove_all = true;
8011     }
8012   else if (DECL_DEFAULTED_FN (decl))
8013     {
8014       error_at (match_loc, "%<declare variant%> on defaulted %qD", decl);
8015       remove_all = true;
8016     }
8017   else if (DECL_DELETED_FN (decl))
8018     {
8019       error_at (match_loc, "%<declare variant%> on deleted %qD", decl);
8020       remove_all = true;
8021     }
8022   else if (DECL_VIRTUAL_P (decl))
8023     {
8024       error_at (match_loc, "%<declare variant%> on virtual %qD", decl);
8025       remove_all = true;
8026     }
8027   /* This loop is like private_lookup_attribute, except that it works
8028      with tree * rather than tree, as we might want to remove the
8029      attributes that are diagnosed as errorneous.  */
8030   while (*list)
8031     {
8032       tree attr = get_attribute_name (*list);
8033       size_t ident_len = IDENTIFIER_LENGTH (attr);
8034       if (cmp_attribs ("omp declare variant base", attr_len,
8035                            IDENTIFIER_POINTER (attr), ident_len))
8036           {
8037             if (remove_all || omp_declare_variant_finalize_one (decl, *list))
8038               {
8039                 *list = TREE_CHAIN (*list);
8040                 continue;
8041               }
8042           }
8043       list = &TREE_CHAIN (*list);
8044     }
8045 }
8046 
8047 /* Finish processing of a declaration;
8048    install its line number and initial value.
8049    If the length of an array type is not known before,
8050    it must be determined now, from the initial value, or it is an error.
8051 
8052    INIT is the initializer (if any) for DECL.  If INIT_CONST_EXPR_P is
8053    true, then INIT is an integral constant expression.
8054 
8055    FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
8056    if the (init) syntax was used.  */
8057 
8058 void
cp_finish_decl(tree decl,tree init,bool init_const_expr_p,tree asmspec_tree,int flags)8059 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
8060                     tree asmspec_tree, int flags)
8061 {
8062   tree type;
8063   vec<tree, va_gc> *cleanups = NULL;
8064   const char *asmspec = NULL;
8065   int was_readonly = 0;
8066   bool var_definition_p = false;
8067   tree auto_node;
8068 
8069   if (decl == error_mark_node)
8070     return;
8071   else if (! decl)
8072     {
8073       if (init)
8074           error ("assignment (not initialization) in declaration");
8075       return;
8076     }
8077 
8078   gcc_assert (TREE_CODE (decl) != RESULT_DECL);
8079   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
8080   gcc_assert (TREE_CODE (decl) != PARM_DECL);
8081 
8082   type = TREE_TYPE (decl);
8083   if (type == error_mark_node)
8084     return;
8085 
8086   if (VAR_P (decl) && is_copy_initialization (init))
8087     flags |= LOOKUP_ONLYCONVERTING;
8088 
8089   /* Warn about register storage specifiers except when in GNU global
8090      or local register variable extension.  */
8091   if (VAR_P (decl) && DECL_REGISTER (decl) && asmspec_tree == NULL_TREE)
8092     {
8093       if (cxx_dialect >= cxx17)
8094           pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
8095                      "ISO C++17 does not allow %<register%> storage "
8096                      "class specifier");
8097       else
8098           warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
8099                         "%<register%> storage class specifier used");
8100     }
8101 
8102   /* If a name was specified, get the string.  */
8103   if (at_namespace_scope_p ())
8104     asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
8105   if (asmspec_tree && asmspec_tree != error_mark_node)
8106     asmspec = TREE_STRING_POINTER (asmspec_tree);
8107 
8108   bool in_class_decl
8109     = (current_class_type
8110        && CP_DECL_CONTEXT (decl) == current_class_type
8111        && TYPE_BEING_DEFINED (current_class_type)
8112        && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type));
8113 
8114   if (in_class_decl
8115       && (DECL_INITIAL (decl) || init))
8116     DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
8117 
8118   if (TREE_CODE (decl) != FUNCTION_DECL
8119       && (auto_node = type_uses_auto (type)))
8120     {
8121       tree d_init;
8122       if (init == NULL_TREE)
8123           {
8124             if (DECL_LANG_SPECIFIC (decl)
8125                 && DECL_TEMPLATE_INSTANTIATION (decl)
8126                 && !DECL_TEMPLATE_INSTANTIATED (decl))
8127               {
8128                 /* init is null because we're deferring instantiating the
8129                      initializer until we need it.  Well, we need it now.  */
8130                 instantiate_decl (decl, /*defer_ok*/true, /*expl*/false);
8131                 return;
8132               }
8133 
8134             gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (auto_node));
8135           }
8136       d_init = init;
8137       if (d_init)
8138           {
8139             if (TREE_CODE (d_init) == TREE_LIST
8140                 && !CLASS_PLACEHOLDER_TEMPLATE (auto_node))
8141               d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
8142                                                                   tf_warning_or_error);
8143             d_init = resolve_nondeduced_context (d_init, tf_warning_or_error);
8144             /* Force auto deduction now.  Use tf_none to avoid redundant warnings
8145                on deprecated-14.C.  */
8146             mark_single_function (d_init, tf_none);
8147           }
8148       enum auto_deduction_context adc = adc_variable_type;
8149       if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
8150           adc = adc_decomp_type;
8151       tree outer_targs = NULL_TREE;
8152       if (PLACEHOLDER_TYPE_CONSTRAINTS_INFO (auto_node)
8153             && VAR_P (decl)
8154             && DECL_LANG_SPECIFIC (decl)
8155             && DECL_TEMPLATE_INFO (decl)
8156             && !DECL_FUNCTION_SCOPE_P (decl))
8157           /* The outer template arguments might be needed for satisfaction.
8158              (For function scope variables, do_auto_deduction will obtain the
8159              outer template arguments from current_function_decl.)  */
8160           outer_targs = DECL_TI_ARGS (decl);
8161       type = TREE_TYPE (decl) = do_auto_deduction (type, d_init, auto_node,
8162                                                                tf_warning_or_error, adc,
8163                                                                outer_targs, flags);
8164       if (type == error_mark_node)
8165           return;
8166       if (TREE_CODE (type) == FUNCTION_TYPE)
8167           {
8168             error ("initializer for %<decltype(auto) %D%> has function type; "
8169                      "did you forget the %<()%>?", decl);
8170             TREE_TYPE (decl) = error_mark_node;
8171             return;
8172           }
8173       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
8174     }
8175 
8176   if (ensure_literal_type_for_constexpr_object (decl) == error_mark_node)
8177     {
8178       DECL_DECLARED_CONSTEXPR_P (decl) = 0;
8179       if (VAR_P (decl) && DECL_CLASS_SCOPE_P (decl))
8180           {
8181             init = NULL_TREE;
8182             DECL_EXTERNAL (decl) = 1;
8183           }
8184     }
8185 
8186   if (VAR_P (decl)
8187       && DECL_CLASS_SCOPE_P (decl)
8188       && verify_type_context (DECL_SOURCE_LOCATION (decl),
8189                                     TCTX_STATIC_STORAGE, type)
8190       && DECL_INITIALIZED_IN_CLASS_P (decl))
8191     check_static_variable_definition (decl, type);
8192 
8193   if (!processing_template_decl && VAR_P (decl) && is_global_var (decl))
8194     {
8195       type_context_kind context = (DECL_THREAD_LOCAL_P (decl)
8196                                            ? TCTX_THREAD_STORAGE
8197                                            : TCTX_STATIC_STORAGE);
8198       verify_type_context (input_location, context, TREE_TYPE (decl));
8199     }
8200 
8201   if (init && TREE_CODE (decl) == FUNCTION_DECL)
8202     {
8203       tree clone;
8204       if (init == ridpointers[(int)RID_DELETE])
8205           {
8206             /* FIXME check this is 1st decl.  */
8207             DECL_DELETED_FN (decl) = 1;
8208             DECL_DECLARED_INLINE_P (decl) = 1;
8209             DECL_INITIAL (decl) = error_mark_node;
8210             FOR_EACH_CLONE (clone, decl)
8211               {
8212                 DECL_DELETED_FN (clone) = 1;
8213                 DECL_DECLARED_INLINE_P (clone) = 1;
8214                 DECL_INITIAL (clone) = error_mark_node;
8215               }
8216             init = NULL_TREE;
8217           }
8218       else if (init == ridpointers[(int)RID_DEFAULT])
8219           {
8220             if (defaultable_fn_check (decl))
8221               DECL_DEFAULTED_FN (decl) = 1;
8222             else
8223               DECL_INITIAL (decl) = NULL_TREE;
8224           }
8225     }
8226 
8227   if (init && VAR_P (decl))
8228     {
8229       DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
8230       /* If DECL is a reference, then we want to know whether init is a
8231            reference constant; init_const_expr_p as passed tells us whether
8232            it's an rvalue constant.  */
8233       if (TYPE_REF_P (type))
8234           init_const_expr_p = potential_constant_expression (init);
8235       if (init_const_expr_p)
8236           {
8237             /* Set these flags now for templates.  We'll update the flags in
8238                store_init_value for instantiations.  */
8239             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
8240             if (decl_maybe_constant_var_p (decl)
8241                 /* FIXME setting TREE_CONSTANT on refs breaks the back end.  */
8242                 && !TYPE_REF_P (type))
8243               TREE_CONSTANT (decl) = 1;
8244           }
8245       /* This is handled mostly by gimplify.cc, but we have to deal with
8246            not warning about int x = x; as it is a GCC extension to turn off
8247            this warning but only if warn_init_self is zero.  */
8248       if (!DECL_EXTERNAL (decl)
8249             && !TREE_STATIC (decl)
8250             && decl == tree_strip_any_location_wrapper (init)
8251             && !warning_enabled_at (DECL_SOURCE_LOCATION (decl), OPT_Winit_self))
8252           suppress_warning (decl, OPT_Winit_self);
8253     }
8254 
8255   if (flag_openmp
8256       && TREE_CODE (decl) == FUNCTION_DECL
8257       /* #pragma omp declare variant on methods handled in finish_struct
8258            instead.  */
8259       && (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl)
8260             || COMPLETE_TYPE_P (DECL_CONTEXT (decl))))
8261     if (tree attr = lookup_attribute ("omp declare variant base",
8262                                               DECL_ATTRIBUTES (decl)))
8263       omp_declare_variant_finalize (decl, attr);
8264 
8265   if (processing_template_decl)
8266     {
8267       bool type_dependent_p;
8268 
8269       /* Add this declaration to the statement-tree.  */
8270       if (at_function_scope_p ())
8271           add_decl_expr (decl);
8272 
8273       type_dependent_p = dependent_type_p (type);
8274 
8275       if (check_for_bare_parameter_packs (init))
8276           {
8277             init = NULL_TREE;
8278             DECL_INITIAL (decl) = NULL_TREE;
8279           }
8280 
8281       /* Generally, initializers in templates are expanded when the
8282            template is instantiated.  But, if DECL is a variable constant
8283            then it can be used in future constant expressions, so its value
8284            must be available. */
8285 
8286       bool dep_init = false;
8287 
8288       if (!VAR_P (decl) || type_dependent_p)
8289           /* We can't do anything if the decl has dependent type.  */;
8290       else if (!init && is_concept_var (decl))
8291           {
8292             error ("variable concept has no initializer");
8293             init = boolean_true_node;
8294           }
8295       else if (init
8296                  && (init_const_expr_p || DECL_DECLARED_CONSTEXPR_P (decl))
8297                  && !TYPE_REF_P (type)
8298                  && decl_maybe_constant_var_p (decl)
8299                  && !(dep_init = value_dependent_init_p (init)))
8300           {
8301             /* This variable seems to be a non-dependent constant, so process
8302                its initializer.  If check_initializer returns non-null the
8303                initialization wasn't constant after all.  */
8304             tree init_code;
8305             cleanups = make_tree_vector ();
8306             init_code = check_initializer (decl, init, flags, &cleanups);
8307             if (init_code == NULL_TREE)
8308               init = NULL_TREE;
8309             release_tree_vector (cleanups);
8310           }
8311       else
8312           {
8313             gcc_assert (!DECL_PRETTY_FUNCTION_P (decl));
8314             /* Try to deduce array size.  */
8315             maybe_deduce_size_from_array_init (decl, init);
8316             /* And complain about multiple initializers.  */
8317             if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
8318                 && !MAYBE_CLASS_TYPE_P (type))
8319               init = build_x_compound_expr_from_list (init, ELK_INIT,
8320                                                                 tf_warning_or_error);
8321           }
8322 
8323       if (init)
8324           DECL_INITIAL (decl) = init;
8325 
8326       if (dep_init)
8327           {
8328             retrofit_lang_decl (decl);
8329             SET_DECL_DEPENDENT_INIT_P (decl, true);
8330           }
8331 
8332       if (VAR_P (decl) && DECL_REGISTER (decl) && asmspec)
8333           {
8334             set_user_assembler_name (decl, asmspec);
8335             DECL_HARD_REGISTER (decl) = 1;
8336           }
8337       return;
8338     }
8339 
8340   /* Just store non-static data member initializers for later.  */
8341   if (init && TREE_CODE (decl) == FIELD_DECL)
8342     DECL_INITIAL (decl) = init;
8343 
8344   /* Take care of TYPE_DECLs up front.  */
8345   if (TREE_CODE (decl) == TYPE_DECL)
8346     {
8347       if (type != error_mark_node
8348             && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
8349           {
8350             if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
8351               warning (0, "shadowing previous type declaration of %q#D", decl);
8352             set_identifier_type_value (DECL_NAME (decl), decl);
8353           }
8354 
8355       /* If we have installed this as the canonical typedef for this
8356            type, and that type has not been defined yet, delay emitting
8357            the debug information for it, as we will emit it later.  */
8358       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
8359             && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
8360           TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
8361 
8362       rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
8363                                         at_eof);
8364       return;
8365     }
8366 
8367   /* A reference will be modified here, as it is initialized.  */
8368   if (! DECL_EXTERNAL (decl)
8369       && TREE_READONLY (decl)
8370       && TYPE_REF_P (type))
8371     {
8372       was_readonly = 1;
8373       TREE_READONLY (decl) = 0;
8374     }
8375 
8376   /* This needs to happen before extend_ref_init_temps.  */
8377   if (VAR_OR_FUNCTION_DECL_P (decl))
8378     {
8379       if (VAR_P (decl))
8380           maybe_commonize_var (decl);
8381       determine_visibility (decl);
8382     }
8383 
8384   if (VAR_P (decl))
8385     {
8386       duration_kind dk = decl_storage_duration (decl);
8387       /* [dcl.constinit]/1 "The constinit specifier shall be applied
8388            only to a declaration of a variable with static or thread storage
8389            duration."  */
8390       if (DECL_DECLARED_CONSTINIT_P (decl)
8391             && !(dk == dk_thread || dk == dk_static))
8392           {
8393             error_at (DECL_SOURCE_LOCATION (decl),
8394                         "%<constinit%> can only be applied to a variable with "
8395                         "static or thread storage duration");
8396             return;
8397           }
8398 
8399       /* If this is a local variable that will need a mangled name,
8400            register it now.  We must do this before processing the
8401            initializer for the variable, since the initialization might
8402            require a guard variable, and since the mangled name of the
8403            guard variable will depend on the mangled name of this
8404            variable.  */
8405       if (DECL_FUNCTION_SCOPE_P (decl)
8406             && TREE_STATIC (decl)
8407             && !DECL_ARTIFICIAL (decl))
8408           {
8409             /* The variable holding an anonymous union will have had its
8410                discriminator set in finish_anon_union, after which it's
8411                NAME will have been cleared.  */
8412             if (DECL_NAME (decl))
8413               determine_local_discriminator (decl);
8414             /* Normally has_forced_label_in_static is set during GIMPLE
8415                lowering, but [cd]tors are never actually compiled directly.
8416                We need to set this early so we can deal with the label
8417                address extension.  */
8418             if ((DECL_CONSTRUCTOR_P (current_function_decl)
8419                  || DECL_DESTRUCTOR_P (current_function_decl))
8420                 && init)
8421               {
8422                 walk_tree (&init, notice_forced_label_r, NULL, NULL);
8423                 add_local_decl (cfun, decl);
8424               }
8425             /* And make sure it's in the symbol table for
8426                c_parse_final_cleanups to find.  */
8427             varpool_node::get_create (decl);
8428           }
8429 
8430       /* Convert the initializer to the type of DECL, if we have not
8431            already initialized DECL.  */
8432       if (!DECL_INITIALIZED_P (decl)
8433             /* If !DECL_EXTERNAL then DECL is being defined.  In the
8434                case of a static data member initialized inside the
8435                class-specifier, there can be an initializer even if DECL
8436                is *not* defined.  */
8437             && (!DECL_EXTERNAL (decl) || init))
8438           {
8439             cleanups = make_tree_vector ();
8440             init = check_initializer (decl, init, flags, &cleanups);
8441 
8442             /* Handle:
8443 
8444                [dcl.init]
8445 
8446                The memory occupied by any object of static storage
8447                duration is zero-initialized at program startup before
8448                any other initialization takes place.
8449 
8450                We cannot create an appropriate initializer until after
8451                the type of DECL is finalized.  If DECL_INITIAL is set,
8452                then the DECL is statically initialized, and any
8453                necessary zero-initialization has already been performed.  */
8454             if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
8455               DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
8456                                                                /*nelts=*/NULL_TREE,
8457                                                                /*static_storage_p=*/true);
8458             /* Remember that the initialization for this variable has
8459                taken place.  */
8460             DECL_INITIALIZED_P (decl) = 1;
8461             /* This declaration is the definition of this variable,
8462                unless we are initializing a static data member within
8463                the class specifier.  */
8464             if (!DECL_EXTERNAL (decl))
8465               var_definition_p = true;
8466           }
8467       /* If the variable has an array type, lay out the type, even if
8468            there is no initializer.  It is valid to index through the
8469            array, and we must get TYPE_ALIGN set correctly on the array
8470            type.  */
8471       else if (TREE_CODE (type) == ARRAY_TYPE)
8472           layout_type (type);
8473 
8474       if (TREE_STATIC (decl)
8475             && !at_function_scope_p ()
8476             && current_function_decl == NULL)
8477           /* So decl is a global variable or a static member of a
8478              non local class. Record the types it uses
8479              so that we can decide later to emit debug info for them.  */
8480           record_types_used_by_current_var_decl (decl);
8481     }
8482 
8483   /* Add this declaration to the statement-tree.  This needs to happen
8484      after the call to check_initializer so that the DECL_EXPR for a
8485      reference temp is added before the DECL_EXPR for the reference itself.  */
8486   if (DECL_FUNCTION_SCOPE_P (decl))
8487     {
8488       /* If we're building a variable sized type, and we might be
8489            reachable other than via the top of the current binding
8490            level, then create a new BIND_EXPR so that we deallocate
8491            the object at the right time.  */
8492       if (VAR_P (decl)
8493             && DECL_SIZE (decl)
8494             && !TREE_CONSTANT (DECL_SIZE (decl))
8495             && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
8496           {
8497             tree bind;
8498             bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
8499             TREE_SIDE_EFFECTS (bind) = 1;
8500             add_stmt (bind);
8501             BIND_EXPR_BODY (bind) = push_stmt_list ();
8502           }
8503       add_decl_expr (decl);
8504     }
8505 
8506   /* Let the middle end know about variables and functions -- but not
8507      static data members in uninstantiated class templates.  */
8508   if (VAR_OR_FUNCTION_DECL_P (decl))
8509     {
8510       if (VAR_P (decl))
8511           {
8512             layout_var_decl (decl);
8513             if (!flag_weak)
8514               /* Check again now that we have an initializer.  */
8515               maybe_commonize_var (decl);
8516             /* A class-scope constexpr variable with an out-of-class declaration.
8517                C++17 makes them implicitly inline, but still force it out.  */
8518             if (DECL_INLINE_VAR_P (decl)
8519                 && !DECL_VAR_DECLARED_INLINE_P (decl)
8520                 && !DECL_TEMPLATE_INSTANTIATION (decl)
8521                 && !in_class_decl)
8522               mark_needed (decl);
8523           }
8524 
8525       if (var_definition_p
8526             /* With -fmerge-all-constants, gimplify_init_constructor
8527                might add TREE_STATIC to aggregate variables.  */
8528             && (TREE_STATIC (decl)
8529                 || (flag_merge_constants >= 2
8530                       && AGGREGATE_TYPE_P (type))))
8531           {
8532             /* If a TREE_READONLY variable needs initialization
8533                at runtime, it is no longer readonly and we need to
8534                avoid MEM_READONLY_P being set on RTL created for it.  */
8535             if (init)
8536               {
8537                 if (TREE_READONLY (decl))
8538                     TREE_READONLY (decl) = 0;
8539                 was_readonly = 0;
8540               }
8541             else if (was_readonly)
8542               TREE_READONLY (decl) = 1;
8543 
8544             /* Likewise if it needs destruction.  */
8545             if (!decl_maybe_constant_destruction (decl, type))
8546               TREE_READONLY (decl) = 0;
8547           }
8548       else if (VAR_P (decl)
8549                  && CP_DECL_THREAD_LOCAL_P (decl)
8550                  && (!DECL_EXTERNAL (decl) || flag_extern_tls_init)
8551                  && (was_readonly || TREE_READONLY (decl))
8552                  && var_needs_tls_wrapper (decl))
8553           {
8554             /* TLS variables need dynamic initialization by the TLS wrapper
8555                function, we don't want to hoist accesses to it before the
8556                wrapper.  */
8557             was_readonly = 0;
8558             TREE_READONLY (decl) = 0;
8559           }
8560 
8561       make_rtl_for_nonlocal_decl (decl, init, asmspec);
8562 
8563       /* Check for abstractness of the type.  */
8564       if (var_definition_p)
8565           abstract_virtuals_error (decl, type);
8566 
8567       if (TREE_TYPE (decl) == error_mark_node)
8568           /* No initialization required.  */
8569           ;
8570       else if (TREE_CODE (decl) == FUNCTION_DECL)
8571           {
8572             if (init)
8573               {
8574                 if (init == ridpointers[(int)RID_DEFAULT])
8575                     {
8576                       /* An out-of-class default definition is defined at
8577                          the point where it is explicitly defaulted.  */
8578                       if (DECL_DELETED_FN (decl))
8579                         maybe_explain_implicit_delete (decl);
8580                       else if (DECL_INITIAL (decl) == error_mark_node)
8581                         synthesize_method (decl);
8582                     }
8583                 else
8584                     error_at (cp_expr_loc_or_loc (init,
8585                                                         DECL_SOURCE_LOCATION (decl)),
8586                                 "function %q#D is initialized like a variable",
8587                                 decl);
8588               }
8589             /* else no initialization required.  */
8590           }
8591       else if (DECL_EXTERNAL (decl)
8592                  && ! (DECL_LANG_SPECIFIC (decl)
8593                          && DECL_NOT_REALLY_EXTERN (decl)))
8594           {
8595             /* check_initializer will have done any constant initialization.  */
8596           }
8597       /* A variable definition.  */
8598       else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
8599           /* Initialize the local variable.  */
8600           initialize_local_var (decl, init);
8601 
8602       /* If a variable is defined, and then a subsequent
8603            definition with external linkage is encountered, we will
8604            get here twice for the same variable.  We want to avoid
8605            calling expand_static_init more than once.  For variables
8606            that are not static data members, we can call
8607            expand_static_init only when we actually process the
8608            initializer.  It is not legal to redeclare a static data
8609            member, so this issue does not arise in that case.  */
8610       else if (var_definition_p && TREE_STATIC (decl))
8611           expand_static_init (decl, init);
8612     }
8613 
8614   /* If a CLEANUP_STMT was created to destroy a temporary bound to a
8615      reference, insert it in the statement-tree now.  */
8616   if (cleanups)
8617     {
8618       for (tree t : *cleanups)
8619           {
8620             push_cleanup (NULL_TREE, t, false);
8621             /* As in initialize_local_var.  */
8622             wrap_temporary_cleanups (init, t);
8623           }
8624       release_tree_vector (cleanups);
8625     }
8626 
8627   if (was_readonly)
8628     TREE_READONLY (decl) = 1;
8629 
8630   if (flag_openmp
8631       && VAR_P (decl)
8632       && lookup_attribute ("omp declare target implicit",
8633                                  DECL_ATTRIBUTES (decl)))
8634     {
8635       DECL_ATTRIBUTES (decl)
8636           = remove_attribute ("omp declare target implicit",
8637                                   DECL_ATTRIBUTES (decl));
8638       complete_type (TREE_TYPE (decl));
8639       if (!cp_omp_mappable_type (TREE_TYPE (decl)))
8640           {
8641             error ("%q+D in declare target directive does not have mappable"
8642                      " type", decl);
8643             cp_omp_emit_unmappable_type_notes (TREE_TYPE (decl));
8644           }
8645       else if (!lookup_attribute ("omp declare target",
8646                                           DECL_ATTRIBUTES (decl))
8647                  && !lookup_attribute ("omp declare target link",
8648                                              DECL_ATTRIBUTES (decl)))
8649           {
8650             DECL_ATTRIBUTES (decl)
8651               = tree_cons (get_identifier ("omp declare target"),
8652                                NULL_TREE, DECL_ATTRIBUTES (decl));
8653             symtab_node *node = symtab_node::get (decl);
8654             if (node != NULL)
8655               {
8656                 node->offloadable = 1;
8657                 if (ENABLE_OFFLOADING)
8658                     {
8659                       g->have_offload = true;
8660                       if (is_a <varpool_node *> (node))
8661                         vec_safe_push (offload_vars, decl);
8662                     }
8663               }
8664           }
8665     }
8666 
8667   /* This is the last point we can lower alignment so give the target the
8668      chance to do so.  */
8669   if (VAR_P (decl)
8670       && !is_global_var (decl)
8671       && !DECL_HARD_REGISTER (decl))
8672     targetm.lower_local_decl_alignment (decl);
8673 
8674   invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
8675 }
8676 
8677 /* For class TYPE return itself or some its bases that contain
8678    any direct non-static data members.  Return error_mark_node if an
8679    error has been diagnosed.  */
8680 
8681 static tree
find_decomp_class_base(location_t loc,tree type,tree ret)8682 find_decomp_class_base (location_t loc, tree type, tree ret)
8683 {
8684   bool member_seen = false;
8685   for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
8686     if (TREE_CODE (field) != FIELD_DECL
8687           || DECL_ARTIFICIAL (field)
8688           || DECL_UNNAMED_BIT_FIELD (field))
8689       continue;
8690     else if (ret)
8691       return type;
8692     else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
8693       {
8694           if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
8695             error_at (loc, "cannot decompose class type %qT because it has an "
8696                                "anonymous struct member", type);
8697           else
8698             error_at (loc, "cannot decompose class type %qT because it has an "
8699                                "anonymous union member", type);
8700           inform (DECL_SOURCE_LOCATION (field), "declared here");
8701           return error_mark_node;
8702       }
8703     else if (!accessible_p (type, field, true))
8704       {
8705           error_at (loc, "cannot decompose inaccessible member %qD of %qT",
8706                       field, type);
8707           inform (DECL_SOURCE_LOCATION (field),
8708                     TREE_PRIVATE (field)
8709                     ? G_("declared private here")
8710                     : G_("declared protected here"));
8711           return error_mark_node;
8712       }
8713     else
8714       member_seen = true;
8715 
8716   tree base_binfo, binfo;
8717   tree orig_ret = ret;
8718   int i;
8719   if (member_seen)
8720     ret = type;
8721   for (binfo = TYPE_BINFO (type), i = 0;
8722        BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
8723     {
8724       tree t = find_decomp_class_base (loc, TREE_TYPE (base_binfo), ret);
8725       if (t == error_mark_node)
8726           return error_mark_node;
8727       if (t != NULL_TREE && t != ret)
8728           {
8729             if (ret == type)
8730               {
8731                 error_at (loc, "cannot decompose class type %qT: both it and "
8732                                    "its base class %qT have non-static data members",
8733                               type, t);
8734                 return error_mark_node;
8735               }
8736             else if (orig_ret != NULL_TREE)
8737               return t;
8738             else if (ret != NULL_TREE)
8739               {
8740                 error_at (loc, "cannot decompose class type %qT: its base "
8741                                    "classes %qT and %qT have non-static data "
8742                                    "members", type, ret, t);
8743                 return error_mark_node;
8744               }
8745             else
8746               ret = t;
8747           }
8748     }
8749   return ret;
8750 }
8751 
8752 /* Return std::tuple_size<TYPE>::value.  */
8753 
8754 static tree
get_tuple_size(tree type)8755 get_tuple_size (tree type)
8756 {
8757   tree args = make_tree_vec (1);
8758   TREE_VEC_ELT (args, 0) = type;
8759   tree inst = lookup_template_class (tuple_size_identifier, args,
8760                                              /*in_decl*/NULL_TREE,
8761                                              /*context*/std_node,
8762                                              /*entering_scope*/false, tf_none);
8763   inst = complete_type (inst);
8764   if (inst == error_mark_node || !COMPLETE_TYPE_P (inst))
8765     return NULL_TREE;
8766   tree val = lookup_qualified_name (inst, value_identifier,
8767                                             LOOK_want::NORMAL, /*complain*/false);
8768   if (TREE_CODE (val) == VAR_DECL || TREE_CODE (val) == CONST_DECL)
8769     val = maybe_constant_value (val);
8770   if (TREE_CODE (val) == INTEGER_CST)
8771     return val;
8772   else
8773     return error_mark_node;
8774 }
8775 
8776 /* Return std::tuple_element<I,TYPE>::type.  */
8777 
8778 static tree
get_tuple_element_type(tree type,unsigned i)8779 get_tuple_element_type (tree type, unsigned i)
8780 {
8781   tree args = make_tree_vec (2);
8782   TREE_VEC_ELT (args, 0) = build_int_cst (integer_type_node, i);
8783   TREE_VEC_ELT (args, 1) = type;
8784   tree inst = lookup_template_class (tuple_element_identifier, args,
8785                                              /*in_decl*/NULL_TREE,
8786                                              /*context*/std_node,
8787                                              /*entering_scope*/false,
8788                                              tf_warning_or_error);
8789   return make_typename_type (inst, type_identifier,
8790                                    none_type, tf_warning_or_error);
8791 }
8792 
8793 /* Return e.get<i>() or get<i>(e).  */
8794 
8795 static tree
get_tuple_decomp_init(tree decl,unsigned i)8796 get_tuple_decomp_init (tree decl, unsigned i)
8797 {
8798   tree targs = make_tree_vec (1);
8799   TREE_VEC_ELT (targs, 0) = build_int_cst (integer_type_node, i);
8800 
8801   tree etype = TREE_TYPE (decl);
8802   tree e = convert_from_reference (decl);
8803 
8804   /* [The id-expression] e is an lvalue if the type of the entity e is an
8805      lvalue reference and an xvalue otherwise.  */
8806   if (!TYPE_REF_P (etype)
8807       || TYPE_REF_IS_RVALUE (etype))
8808     e = move (e);
8809 
8810   tree fns = lookup_qualified_name (TREE_TYPE (e), get__identifier,
8811                                             LOOK_want::NORMAL, /*complain*/false);
8812   bool use_member_get = false;
8813 
8814   /* To use a member get, member lookup must find at least one
8815      declaration that is a function template
8816      whose first template parameter is a non-type parameter.  */
8817   for (lkp_iterator iter (MAYBE_BASELINK_FUNCTIONS (fns)); iter; ++iter)
8818     {
8819       tree fn = *iter;
8820       if (TREE_CODE (fn) == TEMPLATE_DECL)
8821           {
8822             tree tparms = DECL_TEMPLATE_PARMS (fn);
8823             tree parm = TREE_VEC_ELT (INNERMOST_TEMPLATE_PARMS (tparms), 0);
8824             if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
8825               {
8826                 use_member_get = true;
8827                 break;
8828               }
8829           }
8830     }
8831 
8832   if (use_member_get)
8833     {
8834       fns = lookup_template_function (fns, targs);
8835       return build_new_method_call (e, fns, /*args*/NULL,
8836                                             /*path*/NULL_TREE, LOOKUP_NORMAL,
8837                                             /*fn_p*/NULL, tf_warning_or_error);
8838     }
8839   else
8840     {
8841       releasing_vec args (make_tree_vector_single (e));
8842       fns = lookup_template_function (get__identifier, targs);
8843       fns = perform_koenig_lookup (fns, args, tf_warning_or_error);
8844       return finish_call_expr (fns, &args, /*novirt*/false,
8845                                      /*koenig*/true, tf_warning_or_error);
8846     }
8847 }
8848 
8849 /* It's impossible to recover the decltype of a tuple decomposition variable
8850    based on the actual type of the variable, so store it in a hash table.  */
8851 
8852 static GTY((cache)) decl_tree_cache_map *decomp_type_table;
8853 
8854 tree
lookup_decomp_type(tree v)8855 lookup_decomp_type (tree v)
8856 {
8857   return *decomp_type_table->get (v);
8858 }
8859 
8860 /* Mangle a decomposition declaration if needed.  Arguments like
8861    in cp_finish_decomp.  */
8862 
8863 void
cp_maybe_mangle_decomp(tree decl,tree first,unsigned int count)8864 cp_maybe_mangle_decomp (tree decl, tree first, unsigned int count)
8865 {
8866   if (!processing_template_decl
8867       && !error_operand_p (decl)
8868       && TREE_STATIC (decl))
8869     {
8870       auto_vec<tree, 16> v;
8871       v.safe_grow (count, true);
8872       tree d = first;
8873       for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
8874           v[count - i - 1] = d;
8875       SET_DECL_ASSEMBLER_NAME (decl, mangle_decomp (decl, v));
8876       maybe_apply_pragma_weak (decl);
8877     }
8878 }
8879 
8880 /* Finish a decomposition declaration.  DECL is the underlying declaration
8881    "e", FIRST is the head of a chain of decls for the individual identifiers
8882    chained through DECL_CHAIN in reverse order and COUNT is the number of
8883    those decls.  */
8884 
8885 void
cp_finish_decomp(tree decl,tree first,unsigned int count)8886 cp_finish_decomp (tree decl, tree first, unsigned int count)
8887 {
8888   if (error_operand_p (decl))
8889     {
8890      error_out:
8891       while (count--)
8892           {
8893             TREE_TYPE (first) = error_mark_node;
8894             if (DECL_HAS_VALUE_EXPR_P (first))
8895               {
8896                 SET_DECL_VALUE_EXPR (first, NULL_TREE);
8897                 DECL_HAS_VALUE_EXPR_P (first) = 0;
8898               }
8899             first = DECL_CHAIN (first);
8900           }
8901       if (DECL_P (decl) && DECL_NAMESPACE_SCOPE_P (decl))
8902           SET_DECL_ASSEMBLER_NAME (decl, get_identifier ("<decomp>"));
8903       return;
8904     }
8905 
8906   location_t loc = DECL_SOURCE_LOCATION (decl);
8907   if (type_dependent_expression_p (decl)
8908       /* This happens for range for when not in templates.
8909            Still add the DECL_VALUE_EXPRs for later processing.  */
8910       || (!processing_template_decl
8911             && type_uses_auto (TREE_TYPE (decl))))
8912     {
8913       for (unsigned int i = 0; i < count; i++)
8914           {
8915             if (!DECL_HAS_VALUE_EXPR_P (first))
8916               {
8917                 tree v = build_nt (ARRAY_REF, decl,
8918                                          size_int (count - i - 1),
8919                                          NULL_TREE, NULL_TREE);
8920                 SET_DECL_VALUE_EXPR (first, v);
8921                 DECL_HAS_VALUE_EXPR_P (first) = 1;
8922               }
8923             if (processing_template_decl)
8924               fit_decomposition_lang_decl (first, decl);
8925             first = DECL_CHAIN (first);
8926           }
8927       return;
8928     }
8929 
8930   auto_vec<tree, 16> v;
8931   v.safe_grow (count, true);
8932   tree d = first;
8933   for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
8934     {
8935       v[count - i - 1] = d;
8936       fit_decomposition_lang_decl (d, decl);
8937     }
8938 
8939   tree type = TREE_TYPE (decl);
8940   tree dexp = decl;
8941 
8942   if (TYPE_REF_P (type))
8943     {
8944       dexp = convert_from_reference (dexp);
8945       type = complete_type (TREE_TYPE (type));
8946       if (type == error_mark_node)
8947           goto error_out;
8948       if (!COMPLETE_TYPE_P (type))
8949           {
8950             error_at (loc, "structured binding refers to incomplete type %qT",
8951                         type);
8952             goto error_out;
8953           }
8954     }
8955 
8956   tree eltype = NULL_TREE;
8957   unsigned HOST_WIDE_INT eltscnt = 0;
8958   if (TREE_CODE (type) == ARRAY_TYPE)
8959     {
8960       tree nelts;
8961       nelts = array_type_nelts_top (type);
8962       if (nelts == error_mark_node)
8963           goto error_out;
8964       if (!tree_fits_uhwi_p (nelts))
8965           {
8966             error_at (loc, "cannot decompose variable length array %qT", type);
8967             goto error_out;
8968           }
8969       eltscnt = tree_to_uhwi (nelts);
8970       if (count != eltscnt)
8971           {
8972        cnt_mismatch:
8973             if (count > eltscnt)
8974               error_n (loc, count,
8975                          "%u name provided for structured binding",
8976                          "%u names provided for structured binding", count);
8977             else
8978               error_n (loc, count,
8979                          "only %u name provided for structured binding",
8980                          "only %u names provided for structured binding", count);
8981             inform_n (loc, eltscnt,
8982                         "while %qT decomposes into %wu element",
8983                         "while %qT decomposes into %wu elements",
8984                         type, eltscnt);
8985             goto error_out;
8986           }
8987       eltype = TREE_TYPE (type);
8988       for (unsigned int i = 0; i < count; i++)
8989           {
8990             TREE_TYPE (v[i]) = eltype;
8991             layout_decl (v[i], 0);
8992             if (processing_template_decl)
8993               continue;
8994             tree t = unshare_expr (dexp);
8995             t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
8996                                 eltype, t, size_int (i), NULL_TREE,
8997                                 NULL_TREE);
8998             SET_DECL_VALUE_EXPR (v[i], t);
8999             DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
9000           }
9001     }
9002   /* 2 GNU extensions.  */
9003   else if (TREE_CODE (type) == COMPLEX_TYPE)
9004     {
9005       eltscnt = 2;
9006       if (count != eltscnt)
9007           goto cnt_mismatch;
9008       eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
9009       for (unsigned int i = 0; i < count; i++)
9010           {
9011             TREE_TYPE (v[i]) = eltype;
9012             layout_decl (v[i], 0);
9013             if (processing_template_decl)
9014               continue;
9015             tree t = unshare_expr (dexp);
9016             t = build1_loc (DECL_SOURCE_LOCATION (v[i]),
9017                                 i ? IMAGPART_EXPR : REALPART_EXPR, eltype,
9018                                 t);
9019             SET_DECL_VALUE_EXPR (v[i], t);
9020             DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
9021           }
9022     }
9023   else if (TREE_CODE (type) == VECTOR_TYPE)
9024     {
9025       if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&eltscnt))
9026           {
9027             error_at (loc, "cannot decompose variable length vector %qT", type);
9028             goto error_out;
9029           }
9030       if (count != eltscnt)
9031           goto cnt_mismatch;
9032       eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
9033       for (unsigned int i = 0; i < count; i++)
9034           {
9035             TREE_TYPE (v[i]) = eltype;
9036             layout_decl (v[i], 0);
9037             if (processing_template_decl)
9038               continue;
9039             tree t = unshare_expr (dexp);
9040             convert_vector_to_array_for_subscript (DECL_SOURCE_LOCATION (v[i]),
9041                                                              &t, size_int (i));
9042             t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
9043                                 eltype, t, size_int (i), NULL_TREE,
9044                                 NULL_TREE);
9045             SET_DECL_VALUE_EXPR (v[i], t);
9046             DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
9047           }
9048     }
9049   else if (tree tsize = get_tuple_size (type))
9050     {
9051       if (tsize == error_mark_node)
9052           {
9053             error_at (loc, "%<std::tuple_size<%T>::value%> is not an integral "
9054                                "constant expression", type);
9055             goto error_out;
9056           }
9057       if (!tree_fits_uhwi_p (tsize))
9058           {
9059             error_n (loc, count,
9060                        "%u name provided for structured binding",
9061                        "%u names provided for structured binding", count);
9062             inform (loc, "while %qT decomposes into %E elements",
9063                       type, tsize);
9064             goto error_out;
9065           }
9066       eltscnt = tree_to_uhwi (tsize);
9067       if (count != eltscnt)
9068           goto cnt_mismatch;
9069       int save_read = DECL_READ_P (decl);
9070       for (unsigned i = 0; i < count; ++i)
9071           {
9072             location_t sloc = input_location;
9073             location_t dloc = DECL_SOURCE_LOCATION (v[i]);
9074 
9075             input_location = dloc;
9076             tree init = get_tuple_decomp_init (decl, i);
9077             tree eltype = (init == error_mark_node ? error_mark_node
9078                                : get_tuple_element_type (type, i));
9079             input_location = sloc;
9080 
9081             if (VOID_TYPE_P (eltype))
9082               {
9083                 error ("%<std::tuple_element<%u, %T>::type%> is %<void%>",
9084                          i, type);
9085                 eltype = error_mark_node;
9086               }
9087             if (init == error_mark_node || eltype == error_mark_node)
9088               {
9089                 inform (dloc, "in initialization of structured binding "
9090                           "variable %qD", v[i]);
9091                 goto error_out;
9092               }
9093             /* Save the decltype away before reference collapse.  */
9094             hash_map_safe_put<hm_ggc> (decomp_type_table, v[i], eltype);
9095             eltype = cp_build_reference_type (eltype, !lvalue_p (init));
9096             TREE_TYPE (v[i]) = eltype;
9097             layout_decl (v[i], 0);
9098             if (DECL_HAS_VALUE_EXPR_P (v[i]))
9099               {
9100                 /* In this case the names are variables, not just proxies.  */
9101                 SET_DECL_VALUE_EXPR (v[i], NULL_TREE);
9102                 DECL_HAS_VALUE_EXPR_P (v[i]) = 0;
9103               }
9104             if (!processing_template_decl)
9105               {
9106                 copy_linkage (v[i], decl);
9107                 cp_finish_decl (v[i], init, /*constexpr*/false,
9108                                     /*asm*/NULL_TREE, LOOKUP_NORMAL);
9109               }
9110           }
9111       /* Ignore reads from the underlying decl performed during initialization
9112            of the individual variables.  If those will be read, we'll mark
9113            the underlying decl as read at that point.  */
9114       DECL_READ_P (decl) = save_read;
9115     }
9116   else if (TREE_CODE (type) == UNION_TYPE)
9117     {
9118       error_at (loc, "cannot decompose union type %qT", type);
9119       goto error_out;
9120     }
9121   else if (!CLASS_TYPE_P (type))
9122     {
9123       error_at (loc, "cannot decompose non-array non-class type %qT", type);
9124       goto error_out;
9125     }
9126   else if (LAMBDA_TYPE_P (type))
9127     {
9128       error_at (loc, "cannot decompose lambda closure type %qT", type);
9129       goto error_out;
9130     }
9131   else if (processing_template_decl && complete_type (type) == error_mark_node)
9132     goto error_out;
9133   else if (processing_template_decl && !COMPLETE_TYPE_P (type))
9134     pedwarn (loc, 0, "structured binding refers to incomplete class type %qT",
9135                type);
9136   else
9137     {
9138       tree btype = find_decomp_class_base (loc, type, NULL_TREE);
9139       if (btype == error_mark_node)
9140           goto error_out;
9141       else if (btype == NULL_TREE)
9142           {
9143             error_at (loc, "cannot decompose class type %qT without non-static "
9144                                "data members", type);
9145             goto error_out;
9146           }
9147       for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
9148           if (TREE_CODE (field) != FIELD_DECL
9149               || DECL_ARTIFICIAL (field)
9150               || DECL_UNNAMED_BIT_FIELD (field))
9151             continue;
9152           else
9153             eltscnt++;
9154       if (count != eltscnt)
9155           goto cnt_mismatch;
9156       tree t = dexp;
9157       if (type != btype)
9158           {
9159             t = convert_to_base (t, btype, /*check_access*/true,
9160                                      /*nonnull*/false, tf_warning_or_error);
9161             type = btype;
9162           }
9163       unsigned int i = 0;
9164       for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
9165           if (TREE_CODE (field) != FIELD_DECL
9166               || DECL_ARTIFICIAL (field)
9167               || DECL_UNNAMED_BIT_FIELD (field))
9168             continue;
9169           else
9170             {
9171               tree tt = finish_non_static_data_member (field, unshare_expr (t),
9172                                                                  NULL_TREE);
9173               if (REFERENCE_REF_P (tt))
9174                 tt = TREE_OPERAND (tt, 0);
9175               TREE_TYPE (v[i]) = TREE_TYPE (tt);
9176               layout_decl (v[i], 0);
9177               if (!processing_template_decl)
9178                 {
9179                     SET_DECL_VALUE_EXPR (v[i], tt);
9180                     DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
9181                 }
9182               i++;
9183             }
9184     }
9185   if (processing_template_decl)
9186     {
9187       for (unsigned int i = 0; i < count; i++)
9188           if (!DECL_HAS_VALUE_EXPR_P (v[i]))
9189             {
9190               tree a = build_nt (ARRAY_REF, decl, size_int (i),
9191                                      NULL_TREE, NULL_TREE);
9192               SET_DECL_VALUE_EXPR (v[i], a);
9193               DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
9194             }
9195     }
9196 }
9197 
9198 /* Returns a declaration for a VAR_DECL as if:
9199 
9200      extern "C" TYPE NAME;
9201 
9202    had been seen.  Used to create compiler-generated global
9203    variables.  */
9204 
9205 static tree
declare_global_var(tree name,tree type)9206 declare_global_var (tree name, tree type)
9207 {
9208   auto cookie = push_abi_namespace (global_namespace);
9209   tree decl = build_decl (input_location, VAR_DECL, name, type);
9210   TREE_PUBLIC (decl) = 1;
9211   DECL_EXTERNAL (decl) = 1;
9212   DECL_ARTIFICIAL (decl) = 1;
9213   DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
9214   /* If the user has explicitly declared this variable (perhaps
9215      because the code we are compiling is part of a low-level runtime
9216      library), then it is possible that our declaration will be merged
9217      with theirs by pushdecl.  */
9218   decl = pushdecl (decl);
9219   cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
9220   pop_abi_namespace (cookie, global_namespace);
9221 
9222   return decl;
9223 }
9224 
9225 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
9226    if "__cxa_atexit" is not being used) corresponding to the function
9227    to be called when the program exits.  */
9228 
9229 static tree
get_atexit_fn_ptr_type(void)9230 get_atexit_fn_ptr_type (void)
9231 {
9232   tree fn_type;
9233 
9234   if (!atexit_fn_ptr_type_node)
9235     {
9236       tree arg_type;
9237       if (flag_use_cxa_atexit
9238             && !targetm.cxx.use_atexit_for_cxa_atexit ())
9239           /* The parameter to "__cxa_atexit" is "void (*)(void *)".  */
9240           arg_type = ptr_type_node;
9241       else
9242           /* The parameter to "atexit" is "void (*)(void)".  */
9243           arg_type = NULL_TREE;
9244 
9245       fn_type = build_function_type_list (void_type_node,
9246                                                     arg_type, NULL_TREE);
9247       atexit_fn_ptr_type_node = build_pointer_type (fn_type);
9248     }
9249 
9250   return atexit_fn_ptr_type_node;
9251 }
9252 
9253 /* Returns a pointer to the `atexit' function.  Note that if
9254    FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
9255    `__cxa_atexit' function specified in the IA64 C++ ABI.  */
9256 
9257 static tree
get_atexit_node(void)9258 get_atexit_node (void)
9259 {
9260   tree atexit_fndecl;
9261   tree fn_type;
9262   tree fn_ptr_type;
9263   const char *name;
9264   bool use_aeabi_atexit;
9265   tree ctx = global_namespace;
9266 
9267   if (atexit_node)
9268     return atexit_node;
9269 
9270   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
9271     {
9272       /* The declaration for `__cxa_atexit' is:
9273 
9274              int __cxa_atexit (void (*)(void *), void *, void *)
9275 
9276            We build up the argument types and then the function type
9277            itself.  */
9278       tree argtype0, argtype1, argtype2;
9279 
9280       use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
9281       /* First, build the pointer-to-function type for the first
9282            argument.  */
9283       fn_ptr_type = get_atexit_fn_ptr_type ();
9284       /* Then, build the rest of the argument types.  */
9285       argtype2 = ptr_type_node;
9286       if (use_aeabi_atexit)
9287           {
9288             argtype1 = fn_ptr_type;
9289             argtype0 = ptr_type_node;
9290           }
9291       else
9292           {
9293             argtype1 = ptr_type_node;
9294             argtype0 = fn_ptr_type;
9295           }
9296       /* And the final __cxa_atexit type.  */
9297       fn_type = build_function_type_list (integer_type_node,
9298                                                     argtype0, argtype1, argtype2,
9299                                                     NULL_TREE);
9300       /* ... which needs noexcept.  */
9301       fn_type = build_exception_variant (fn_type, noexcept_true_spec);
9302       if (use_aeabi_atexit)
9303           {
9304             name = "__aeabi_atexit";
9305             push_to_top_level ();
9306             int n = push_namespace (get_identifier ("__aeabiv1"), false);
9307             ctx = current_namespace;
9308             while (n--)
9309               pop_namespace ();
9310             pop_from_top_level ();
9311           }
9312       else
9313           {
9314             name = "__cxa_atexit";
9315             ctx = abi_node;
9316           }
9317     }
9318   else
9319     {
9320       /* The declaration for `atexit' is:
9321 
9322              int atexit (void (*)());
9323 
9324            We build up the argument types and then the function type
9325            itself.  */
9326       fn_ptr_type = get_atexit_fn_ptr_type ();
9327       /* Build the final atexit type.  */
9328       fn_type = build_function_type_list (integer_type_node,
9329                                                     fn_ptr_type, NULL_TREE);
9330       /* ... which needs noexcept.  */
9331       fn_type = build_exception_variant (fn_type, noexcept_true_spec);
9332       name = "atexit";
9333     }
9334 
9335   /* Now, build the function declaration.  */
9336   push_lang_context (lang_name_c);
9337   auto cookie = push_abi_namespace (ctx);
9338   atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
9339   DECL_CONTEXT (atexit_fndecl) = FROB_CONTEXT (current_namespace);
9340   /* Install as hidden builtin so we're (a) more relaxed about
9341     exception spec matching and (b) will not give a confusing location
9342     in diagnostic and (c) won't magically appear in user-visible name
9343     lookups.  */
9344   DECL_SOURCE_LOCATION (atexit_fndecl) = BUILTINS_LOCATION;
9345   atexit_fndecl = pushdecl (atexit_fndecl, /*hiding=*/true);
9346   pop_abi_namespace (cookie, ctx);
9347   mark_used (atexit_fndecl);
9348   pop_lang_context ();
9349   atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
9350 
9351   return atexit_node;
9352 }
9353 
9354 /* Like get_atexit_node, but for thread-local cleanups.  */
9355 
9356 static tree
get_thread_atexit_node(void)9357 get_thread_atexit_node (void)
9358 {
9359   /* The declaration for `__cxa_thread_atexit' is:
9360 
9361      int __cxa_thread_atexit (void (*)(void *), void *, void *) */
9362   tree fn_type = build_function_type_list (integer_type_node,
9363                                                      get_atexit_fn_ptr_type (),
9364                                                      ptr_type_node, ptr_type_node,
9365                                                      NULL_TREE);
9366 
9367   /* Now, build the function declaration.  */
9368   tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
9369                                                        ECF_LEAF | ECF_NOTHROW);
9370   return decay_conversion (atexit_fndecl, tf_warning_or_error);
9371 }
9372 
9373 /* Returns the __dso_handle VAR_DECL.  */
9374 
9375 static tree
get_dso_handle_node(void)9376 get_dso_handle_node (void)
9377 {
9378   if (dso_handle_node)
9379     return dso_handle_node;
9380 
9381   /* Declare the variable.  */
9382   dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
9383                                                   ptr_type_node);
9384 
9385 #ifdef HAVE_GAS_HIDDEN
9386   if (dso_handle_node != error_mark_node)
9387     {
9388       DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
9389       DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
9390     }
9391 #endif
9392 
9393   return dso_handle_node;
9394 }
9395 
9396 /* Begin a new function with internal linkage whose job will be simply
9397    to destroy some particular variable.  */
9398 
9399 static GTY(()) int start_cleanup_cnt;
9400 
9401 static tree
start_cleanup_fn(void)9402 start_cleanup_fn (void)
9403 {
9404   char name[32];
9405 
9406   push_to_top_level ();
9407 
9408   /* No need to mangle this.  */
9409   push_lang_context (lang_name_c);
9410 
9411   /* Build the name of the function.  */
9412   sprintf (name, "__tcf_%d", start_cleanup_cnt++);
9413   /* Build the function declaration.  */
9414   tree fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
9415   tree fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
9416   DECL_CONTEXT (fndecl) = FROB_CONTEXT (current_namespace);
9417   /* It's a function with internal linkage, generated by the
9418      compiler.  */
9419   TREE_PUBLIC (fndecl) = 0;
9420   DECL_ARTIFICIAL (fndecl) = 1;
9421   /* Make the function `inline' so that it is only emitted if it is
9422      actually needed.  It is unlikely that it will be inlined, since
9423      it is only called via a function pointer, but we avoid unnecessary
9424      emissions this way.  */
9425   DECL_DECLARED_INLINE_P (fndecl) = 1;
9426   DECL_INTERFACE_KNOWN (fndecl) = 1;
9427   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
9428     {
9429       /* Build the parameter.  */
9430       tree parmdecl = cp_build_parm_decl (fndecl, NULL_TREE, ptr_type_node);
9431       TREE_USED (parmdecl) = 1;
9432       DECL_READ_P (parmdecl) = 1;
9433       DECL_ARGUMENTS (fndecl) = parmdecl;
9434     }
9435 
9436   fndecl = pushdecl (fndecl, /*hidden=*/true);
9437   start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
9438 
9439   pop_lang_context ();
9440 
9441   return current_function_decl;
9442 }
9443 
9444 /* Finish the cleanup function begun by start_cleanup_fn.  */
9445 
9446 static void
end_cleanup_fn(void)9447 end_cleanup_fn (void)
9448 {
9449   expand_or_defer_fn (finish_function (/*inline_p=*/false));
9450 
9451   pop_from_top_level ();
9452 }
9453 
9454 /* Generate code to handle the destruction of DECL, an object with
9455    static storage duration.  */
9456 
9457 tree
register_dtor_fn(tree decl)9458 register_dtor_fn (tree decl)
9459 {
9460   tree cleanup;
9461   tree addr;
9462   tree compound_stmt;
9463   tree fcall;
9464   tree type;
9465   bool ob_parm, dso_parm, use_dtor;
9466   tree arg0, arg1, arg2;
9467   tree atex_node;
9468 
9469   type = TREE_TYPE (decl);
9470   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
9471     return void_node;
9472 
9473   if (decl_maybe_constant_destruction (decl, type)
9474       && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl))
9475     {
9476       cxx_maybe_build_cleanup (decl, tf_warning_or_error);
9477       return void_node;
9478     }
9479 
9480   /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
9481      "__aeabi_atexit"), and DECL is a class object, we can just pass the
9482      destructor to "__cxa_atexit"; we don't have to build a temporary
9483      function to do the cleanup.  */
9484   dso_parm = (flag_use_cxa_atexit
9485                 && !targetm.cxx.use_atexit_for_cxa_atexit ());
9486   ob_parm = (CP_DECL_THREAD_LOCAL_P (decl) || dso_parm);
9487   use_dtor = ob_parm && CLASS_TYPE_P (type);
9488   if (use_dtor)
9489     {
9490       cleanup = get_class_binding (type, complete_dtor_identifier);
9491 
9492       /* Make sure it is accessible.  */
9493       perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
9494                                              tf_warning_or_error);
9495     }
9496   else
9497     {
9498       /* Call build_cleanup before we enter the anonymous function so
9499            that any access checks will be done relative to the current
9500            scope, rather than the scope of the anonymous function.  */
9501       build_cleanup (decl);
9502 
9503       /* Now start the function.  */
9504       cleanup = start_cleanup_fn ();
9505 
9506       /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
9507            to the original function, rather than the anonymous one.  That
9508            will make the back end think that nested functions are in use,
9509            which causes confusion.  */
9510       push_deferring_access_checks (dk_no_check);
9511       fcall = build_cleanup (decl);
9512       pop_deferring_access_checks ();
9513 
9514       /* Create the body of the anonymous function.  */
9515       compound_stmt = begin_compound_stmt (BCS_FN_BODY);
9516       finish_expr_stmt (fcall);
9517       finish_compound_stmt (compound_stmt);
9518       end_cleanup_fn ();
9519     }
9520 
9521   /* Call atexit with the cleanup function.  */
9522   mark_used (cleanup);
9523   cleanup = build_address (cleanup);
9524 
9525   if (CP_DECL_THREAD_LOCAL_P (decl))
9526     atex_node = get_thread_atexit_node ();
9527   else
9528     atex_node = get_atexit_node ();
9529 
9530   if (use_dtor)
9531     {
9532       /* We must convert CLEANUP to the type that "__cxa_atexit"
9533            expects.  */
9534       cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
9535       /* "__cxa_atexit" will pass the address of DECL to the
9536            cleanup function.  */
9537       mark_used (decl);
9538       addr = build_address (decl);
9539       /* The declared type of the parameter to "__cxa_atexit" is
9540            "void *".  For plain "T*", we could just let the
9541            machinery in cp_build_function_call convert it -- but if the
9542            type is "cv-qualified T *", then we need to convert it
9543            before passing it in, to avoid spurious errors.  */
9544       addr = build_nop (ptr_type_node, addr);
9545     }
9546   else
9547     /* Since the cleanup functions we build ignore the address
9548        they're given, there's no reason to pass the actual address
9549        in, and, in general, it's cheaper to pass NULL than any
9550        other value.  */
9551     addr = null_pointer_node;
9552 
9553   if (dso_parm)
9554     arg2 = cp_build_addr_expr (get_dso_handle_node (),
9555                                      tf_warning_or_error);
9556   else if (ob_parm)
9557     /* Just pass NULL to the dso handle parm if we don't actually
9558        have a DSO handle on this target.  */
9559     arg2 = null_pointer_node;
9560   else
9561     arg2 = NULL_TREE;
9562 
9563   if (ob_parm)
9564     {
9565       if (!CP_DECL_THREAD_LOCAL_P (decl)
9566             && targetm.cxx.use_aeabi_atexit ())
9567           {
9568             arg1 = cleanup;
9569             arg0 = addr;
9570           }
9571       else
9572           {
9573             arg1 = addr;
9574             arg0 = cleanup;
9575           }
9576     }
9577   else
9578     {
9579       arg0 = cleanup;
9580       arg1 = NULL_TREE;
9581     }
9582   return cp_build_function_call_nary (atex_node, tf_warning_or_error,
9583                                               arg0, arg1, arg2, NULL_TREE);
9584 }
9585 
9586 /* DECL is a VAR_DECL with static storage duration.  INIT, if present,
9587    is its initializer.  Generate code to handle the construction
9588    and destruction of DECL.  */
9589 
9590 static void
expand_static_init(tree decl,tree init)9591 expand_static_init (tree decl, tree init)
9592 {
9593   gcc_assert (VAR_P (decl));
9594   gcc_assert (TREE_STATIC (decl));
9595 
9596   /* Some variables require no dynamic initialization.  */
9597   if (decl_maybe_constant_destruction (decl, TREE_TYPE (decl)))
9598     {
9599       /* Make sure the destructor is callable.  */
9600       cxx_maybe_build_cleanup (decl, tf_warning_or_error);
9601       if (!init)
9602           return;
9603     }
9604 
9605   if (CP_DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
9606       && !DECL_FUNCTION_SCOPE_P (decl))
9607     {
9608       location_t dloc = DECL_SOURCE_LOCATION (decl);
9609       if (init)
9610           error_at (dloc, "non-local variable %qD declared %<__thread%> "
9611                       "needs dynamic initialization", decl);
9612       else
9613           error_at (dloc, "non-local variable %qD declared %<__thread%> "
9614                       "has a non-trivial destructor", decl);
9615       static bool informed;
9616       if (!informed)
9617           {
9618             inform (dloc, "C++11 %<thread_local%> allows dynamic "
9619                       "initialization and destruction");
9620             informed = true;
9621           }
9622       return;
9623     }
9624 
9625   if (DECL_FUNCTION_SCOPE_P (decl))
9626     {
9627       /* Emit code to perform this initialization but once.  */
9628       tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
9629       tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
9630       tree guard, guard_addr;
9631       tree flag, begin;
9632       /* We don't need thread-safety code for thread-local vars.  */
9633       bool thread_guard = (flag_threadsafe_statics
9634                                  && !CP_DECL_THREAD_LOCAL_P (decl));
9635 
9636       /* Emit code to perform this initialization but once.  This code
9637            looks like:
9638 
9639              static <type> guard;
9640              if (!__atomic_load (guard.first_byte)) {
9641                if (__cxa_guard_acquire (&guard)) {
9642                  bool flag = false;
9643                  try {
9644                      // Do initialization.
9645                      flag = true; __cxa_guard_release (&guard);
9646                      // Register variable for destruction at end of program.
9647                  } catch {
9648                      if (!flag) __cxa_guard_abort (&guard);
9649                  }
9650                }
9651              }
9652 
9653            Note that the `flag' variable is only set to 1 *after* the
9654            initialization is complete.  This ensures that an exception,
9655            thrown during the construction, will cause the variable to
9656            reinitialized when we pass through this code again, as per:
9657 
9658              [stmt.dcl]
9659 
9660              If the initialization exits by throwing an exception, the
9661              initialization is not complete, so it will be tried again
9662              the next time control enters the declaration.
9663 
9664            This process should be thread-safe, too; multiple threads
9665            should not be able to initialize the variable more than
9666            once.  */
9667 
9668       /* Create the guard variable.  */
9669       guard = get_guard (decl);
9670 
9671       /* Begin the conditional initialization.  */
9672       if_stmt = begin_if_stmt ();
9673 
9674       finish_if_stmt_cond (get_guard_cond (guard, thread_guard), if_stmt);
9675       then_clause = begin_compound_stmt (BCS_NO_SCOPE);
9676 
9677       if (thread_guard)
9678           {
9679             tree vfntype = NULL_TREE;
9680             tree acquire_name, release_name, abort_name;
9681             tree acquire_fn, release_fn, abort_fn;
9682             guard_addr = build_address (guard);
9683 
9684             acquire_name = get_identifier ("__cxa_guard_acquire");
9685             release_name = get_identifier ("__cxa_guard_release");
9686             abort_name = get_identifier ("__cxa_guard_abort");
9687             acquire_fn = get_global_binding (acquire_name);
9688             release_fn = get_global_binding (release_name);
9689             abort_fn = get_global_binding (abort_name);
9690             if (!acquire_fn)
9691               acquire_fn = push_library_fn
9692                 (acquire_name, build_function_type_list (integer_type_node,
9693                                                                    TREE_TYPE (guard_addr),
9694                                                                    NULL_TREE),
9695                  NULL_TREE, ECF_NOTHROW);
9696             if (!release_fn || !abort_fn)
9697               vfntype = build_function_type_list (void_type_node,
9698                                                             TREE_TYPE (guard_addr),
9699                                                             NULL_TREE);
9700             if (!release_fn)
9701               release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
9702                                                     ECF_NOTHROW);
9703             if (!abort_fn)
9704               abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
9705                                                   ECF_NOTHROW | ECF_LEAF);
9706 
9707             inner_if_stmt = begin_if_stmt ();
9708             finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
9709                                      inner_if_stmt);
9710 
9711             inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
9712             begin = get_target_expr (boolean_false_node);
9713             flag = TARGET_EXPR_SLOT (begin);
9714 
9715             TARGET_EXPR_CLEANUP (begin)
9716               = build3 (COND_EXPR, void_type_node, flag,
9717                           void_node,
9718                           build_call_n (abort_fn, 1, guard_addr));
9719             CLEANUP_EH_ONLY (begin) = 1;
9720 
9721             /* Do the initialization itself.  */
9722             init = add_stmt_to_compound (begin, init);
9723             init = add_stmt_to_compound (init,
9724                                                build2 (MODIFY_EXPR, void_type_node,
9725                                                          flag, boolean_true_node));
9726 
9727             /* Use atexit to register a function for destroying this static
9728                variable.  Do this before calling __cxa_guard_release.  */
9729             init = add_stmt_to_compound (init, register_dtor_fn (decl));
9730 
9731             init = add_stmt_to_compound (init, build_call_n (release_fn, 1,
9732                                                                          guard_addr));
9733           }
9734       else
9735           {
9736             init = add_stmt_to_compound (init, set_guard (guard));
9737 
9738             /* Use atexit to register a function for destroying this static
9739                variable.  */
9740             init = add_stmt_to_compound (init, register_dtor_fn (decl));
9741           }
9742 
9743       finish_expr_stmt (init);
9744 
9745       if (thread_guard)
9746           {
9747             finish_compound_stmt (inner_then_clause);
9748             finish_then_clause (inner_if_stmt);
9749             finish_if_stmt (inner_if_stmt);
9750           }
9751 
9752       finish_compound_stmt (then_clause);
9753       finish_then_clause (if_stmt);
9754       finish_if_stmt (if_stmt);
9755     }
9756   else if (CP_DECL_THREAD_LOCAL_P (decl))
9757     tls_aggregates = tree_cons (init, decl, tls_aggregates);
9758   else
9759     static_aggregates = tree_cons (init, decl, static_aggregates);
9760 }
9761 
9762 
9763 /* Make TYPE a complete type based on INITIAL_VALUE.
9764    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
9765    2 if there was no information (in which case assume 0 if DO_DEFAULT),
9766    3 if the initializer list is empty (in pedantic mode). */
9767 
9768 int
cp_complete_array_type(tree * ptype,tree initial_value,bool do_default)9769 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
9770 {
9771   int failure;
9772   tree type, elt_type;
9773 
9774   /* Don't get confused by a CONSTRUCTOR for some other type.  */
9775   if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
9776       && !BRACE_ENCLOSED_INITIALIZER_P (initial_value)
9777       && TREE_CODE (TREE_TYPE (initial_value)) != ARRAY_TYPE)
9778     return 1;
9779 
9780   if (initial_value)
9781     {
9782       /* An array of character type can be initialized from a
9783            brace-enclosed string constant so call reshape_init to
9784            remove the optional braces from a braced string literal.  */
9785       if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
9786             && BRACE_ENCLOSED_INITIALIZER_P (initial_value))
9787           initial_value = reshape_init (*ptype, initial_value,
9788                                               tf_warning_or_error);
9789 
9790       /* If any of the elements are parameter packs, we can't actually
9791            complete this type now because the array size is dependent.  */
9792       if (TREE_CODE (initial_value) == CONSTRUCTOR)
9793           for (auto &e: CONSTRUCTOR_ELTS (initial_value))
9794             if (PACK_EXPANSION_P (e.value))
9795               return 0;
9796     }
9797 
9798   failure = complete_array_type (ptype, initial_value, do_default);
9799 
9800   /* We can create the array before the element type is complete, which
9801      means that we didn't have these two bits set in the original type
9802      either.  In completing the type, we are expected to propagate these
9803      bits.  See also complete_type which does the same thing for arrays
9804      of fixed size.  */
9805   type = *ptype;
9806   if (type != error_mark_node && TYPE_DOMAIN (type))
9807     {
9808       elt_type = TREE_TYPE (type);
9809       TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
9810       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
9811           = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
9812     }
9813 
9814   return failure;
9815 }
9816 
9817 /* As above, but either give an error or reject zero-size arrays, depending
9818    on COMPLAIN.  */
9819 
9820 int
cp_complete_array_type_or_error(tree * ptype,tree initial_value,bool do_default,tsubst_flags_t complain)9821 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
9822                                          bool do_default, tsubst_flags_t complain)
9823 {
9824   int failure;
9825   bool sfinae = !(complain & tf_error);
9826   /* In SFINAE context we can't be lenient about zero-size arrays.  */
9827   if (sfinae)
9828     ++pedantic;
9829   failure = cp_complete_array_type (ptype, initial_value, do_default);
9830   if (sfinae)
9831     --pedantic;
9832   if (failure)
9833     {
9834       if (sfinae)
9835           /* Not an error.  */;
9836       else if (failure == 1)
9837           error ("initializer fails to determine size of %qT", *ptype);
9838       else if (failure == 2)
9839           {
9840             if (do_default)
9841               error ("array size missing in %qT", *ptype);
9842           }
9843       else if (failure == 3)
9844           error ("zero-size array %qT", *ptype);
9845       *ptype = error_mark_node;
9846     }
9847   return failure;
9848 }
9849 
9850 /* Return zero if something is declared to be a member of type
9851    CTYPE when in the context of CUR_TYPE.  STRING is the error
9852    message to print in that case.  Otherwise, quietly return 1.  */
9853 
9854 static int
member_function_or_else(tree ctype,tree cur_type,enum overload_flags flags)9855 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
9856 {
9857   if (ctype && ctype != cur_type)
9858     {
9859       if (flags == DTOR_FLAG)
9860           error ("destructor for alien class %qT cannot be a member", ctype);
9861       else
9862           error ("constructor for alien class %qT cannot be a member", ctype);
9863       return 0;
9864     }
9865   return 1;
9866 }
9867 
9868 /* Subroutine of `grokdeclarator'.  */
9869 
9870 /* Generate errors possibly applicable for a given set of specifiers.
9871    This is for ARM $7.1.2.  */
9872 
9873 static void
bad_specifiers(tree object,enum bad_spec_place type,int virtualp,int quals,int inlinep,int friendp,int raises,const location_t * locations)9874 bad_specifiers (tree object,
9875                     enum bad_spec_place type,
9876                     int virtualp,
9877                     int quals,
9878                     int inlinep,
9879                     int friendp,
9880                     int raises,
9881                     const location_t* locations)
9882 {
9883   switch (type)
9884     {
9885       case BSP_VAR:
9886           if (virtualp)
9887             error_at (locations[ds_virtual],
9888                         "%qD declared as a %<virtual%> variable", object);
9889           if (quals)
9890             error ("%<const%> and %<volatile%> function specifiers on "
9891                    "%qD invalid in variable declaration", object);
9892           break;
9893       case BSP_PARM:
9894           if (virtualp)
9895             error_at (locations[ds_virtual],
9896                         "%qD declared as a %<virtual%> parameter", object);
9897           if (inlinep)
9898             error_at (locations[ds_inline],
9899                         "%qD declared as an %<inline%> parameter", object);
9900           if (quals)
9901             error ("%<const%> and %<volatile%> function specifiers on "
9902                      "%qD invalid in parameter declaration", object);
9903           break;
9904       case BSP_TYPE:
9905           if (virtualp)
9906             error_at (locations[ds_virtual],
9907                         "%qD declared as a %<virtual%> type", object);
9908           if (inlinep)
9909             error_at (locations[ds_inline],
9910                         "%qD declared as an %<inline%> type", object);
9911           if (quals)
9912             error ("%<const%> and %<volatile%> function specifiers on "
9913                      "%qD invalid in type declaration", object);
9914           break;
9915       case BSP_FIELD:
9916           if (virtualp)
9917             error_at (locations[ds_virtual],
9918                         "%qD declared as a %<virtual%> field", object);
9919           if (inlinep)
9920             error_at (locations[ds_inline],
9921                         "%qD declared as an %<inline%> field", object);
9922           if (quals)
9923             error ("%<const%> and %<volatile%> function specifiers on "
9924                      "%qD invalid in field declaration", object);
9925           break;
9926       default:
9927         gcc_unreachable();
9928     }
9929   if (friendp)
9930     error ("%q+D declared as a friend", object);
9931   if (raises
9932       && !flag_noexcept_type
9933       && (TREE_CODE (object) == TYPE_DECL
9934             || (!TYPE_PTRFN_P (TREE_TYPE (object))
9935                 && !TYPE_REFFN_P (TREE_TYPE (object))
9936                 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
9937     error ("%q+D declared with an exception specification", object);
9938 }
9939 
9940 /* DECL is a member function or static data member and is presently
9941    being defined.  Check that the definition is taking place in a
9942    valid namespace.  */
9943 
9944 static void
check_class_member_definition_namespace(tree decl)9945 check_class_member_definition_namespace (tree decl)
9946 {
9947   /* These checks only apply to member functions and static data
9948      members.  */
9949   gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
9950   /* We check for problems with specializations in pt.cc in
9951      check_specialization_namespace, where we can issue better
9952      diagnostics.  */
9953   if (processing_specialization)
9954     return;
9955   /* We check this in check_explicit_instantiation_namespace.  */
9956   if (processing_explicit_instantiation)
9957     return;
9958   /* [class.mfct]
9959 
9960      A member function definition that appears outside of the
9961      class definition shall appear in a namespace scope enclosing
9962      the class definition.
9963 
9964      [class.static.data]
9965 
9966      The definition for a static data member shall appear in a
9967      namespace scope enclosing the member's class definition.  */
9968   if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
9969     permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
9970                  decl, DECL_CONTEXT (decl));
9971 }
9972 
9973 /* Build a PARM_DECL for the "this" parameter of FN.  TYPE is the
9974    METHOD_TYPE for a non-static member function; QUALS are the
9975    cv-qualifiers that apply to the function.  */
9976 
9977 tree
build_this_parm(tree fn,tree type,cp_cv_quals quals)9978 build_this_parm (tree fn, tree type, cp_cv_quals quals)
9979 {
9980   tree this_type;
9981   tree qual_type;
9982   tree parm;
9983   cp_cv_quals this_quals;
9984 
9985   if (CLASS_TYPE_P (type))
9986     {
9987       this_type
9988           = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
9989       this_type = build_pointer_type (this_type);
9990     }
9991   else
9992     this_type = type_of_this_parm (type);
9993   /* The `this' parameter is implicitly `const'; it cannot be
9994      assigned to.  */
9995   this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
9996   qual_type = cp_build_qualified_type (this_type, this_quals);
9997   parm = build_artificial_parm (fn, this_identifier, qual_type);
9998   cp_apply_type_quals_to_decl (this_quals, parm);
9999   return parm;
10000 }
10001 
10002 /* DECL is a static member function.  Complain if it was declared
10003    with function-cv-quals.  */
10004 
10005 static void
check_static_quals(tree decl,cp_cv_quals quals)10006 check_static_quals (tree decl, cp_cv_quals quals)
10007 {
10008   if (quals != TYPE_UNQUALIFIED)
10009     error ("static member function %q#D declared with type qualifiers",
10010              decl);
10011 }
10012 
10013 // Check that FN takes no arguments and returns bool.
10014 static void
check_concept_fn(tree fn)10015 check_concept_fn (tree fn)
10016 {
10017   // A constraint is nullary.
10018   if (DECL_ARGUMENTS (fn))
10019     error_at (DECL_SOURCE_LOCATION (fn),
10020                 "concept %q#D declared with function parameters", fn);
10021 
10022   // The declared return type of the concept shall be bool, and
10023   // it shall not be deduced from it definition.
10024   tree type = TREE_TYPE (TREE_TYPE (fn));
10025   if (is_auto (type))
10026     error_at (DECL_SOURCE_LOCATION (fn),
10027                 "concept %q#D declared with a deduced return type", fn);
10028   else if (type != boolean_type_node)
10029     error_at (DECL_SOURCE_LOCATION (fn),
10030                 "concept %q#D with non-%<bool%> return type %qT", fn, type);
10031 }
10032 
10033 /* Helper function.  Replace the temporary this parameter injected
10034    during cp_finish_omp_declare_simd with the real this parameter.  */
10035 
10036 static tree
declare_simd_adjust_this(tree * tp,int * walk_subtrees,void * data)10037 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
10038 {
10039   tree this_parm = (tree) data;
10040   if (TREE_CODE (*tp) == PARM_DECL
10041       && DECL_NAME (*tp) == this_identifier
10042       && *tp != this_parm)
10043     *tp = this_parm;
10044   else if (TYPE_P (*tp))
10045     *walk_subtrees = 0;
10046   return NULL_TREE;
10047 }
10048 
10049 /* CTYPE is class type, or null if non-class.
10050    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
10051    or METHOD_TYPE.
10052    DECLARATOR is the function's name.
10053    PARMS is a chain of PARM_DECLs for the function.
10054    VIRTUALP is truthvalue of whether the function is virtual or not.
10055    FLAGS are to be passed through to `grokclassfn'.
10056    QUALS are qualifiers indicating whether the function is `const'
10057    or `volatile'.
10058    RAISES is a list of exceptions that this function can raise.
10059    CHECK is 1 if we must find this method in CTYPE, 0 if we should
10060    not look, and -1 if we should not call `grokclassfn' at all.
10061 
10062    SFK is the kind of special function (if any) for the new function.
10063 
10064    Returns `NULL_TREE' if something goes wrong, after issuing
10065    applicable error messages.  */
10066 
10067 static tree
grokfndecl(tree ctype,tree type,tree declarator,tree parms,tree orig_declarator,const cp_decl_specifier_seq * declspecs,tree decl_reqs,int virtualp,enum overload_flags flags,cp_cv_quals quals,cp_ref_qualifier rqual,tree raises,int check,int friendp,int publicp,int inlinep,bool deletedp,special_function_kind sfk,bool funcdef_flag,bool late_return_type_p,int template_count,tree in_namespace,tree * attrlist,location_t location)10068 grokfndecl (tree ctype,
10069               tree type,
10070               tree declarator,
10071               tree parms,
10072               tree orig_declarator,
10073               const cp_decl_specifier_seq *declspecs,
10074               tree decl_reqs,
10075               int virtualp,
10076               enum overload_flags flags,
10077               cp_cv_quals quals,
10078               cp_ref_qualifier rqual,
10079               tree raises,
10080               int check,
10081               int friendp,
10082               int publicp,
10083               int inlinep,
10084               bool deletedp,
10085               special_function_kind sfk,
10086               bool funcdef_flag,
10087               bool late_return_type_p,
10088               int template_count,
10089               tree in_namespace,
10090               tree* attrlist,
10091               location_t location)
10092 {
10093   tree decl;
10094   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
10095   tree t;
10096 
10097   if (location == UNKNOWN_LOCATION)
10098     location = input_location;
10099 
10100   /* Was the concept specifier present?  */
10101   bool concept_p = inlinep & 4;
10102 
10103   /* Concept declarations must have a corresponding definition.  */
10104   if (concept_p && !funcdef_flag)
10105     {
10106       error_at (location, "concept %qD has no definition", declarator);
10107       return NULL_TREE;
10108     }
10109 
10110   type = build_cp_fntype_variant (type, rqual, raises, late_return_type_p);
10111 
10112   decl = build_lang_decl_loc (location, FUNCTION_DECL, declarator, type);
10113 
10114   /* Set the constraints on the declaration. */
10115   if (flag_concepts)
10116     {
10117       tree tmpl_reqs = NULL_TREE;
10118       tree ctx = friendp ? current_class_type : ctype;
10119       bool block_local = TREE_CODE (current_scope ()) == FUNCTION_DECL;
10120       bool memtmpl = (!block_local
10121                           && (current_template_depth
10122                                 > template_class_depth (ctx)));
10123       if (memtmpl)
10124           {
10125             if (!current_template_parms)
10126               /* If there are no template parameters, something must have
10127                  gone wrong.  */
10128               gcc_assert (seen_error ());
10129             else
10130               tmpl_reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
10131           }
10132       tree ci = build_constraints (tmpl_reqs, decl_reqs);
10133       if (concept_p && ci)
10134         {
10135           error_at (location, "a function concept cannot be constrained");
10136           ci = NULL_TREE;
10137         }
10138       /* C++20 CA378: Remove non-templated constrained functions.  */
10139       if (ci
10140             && (block_local
10141                 || (!flag_concepts_ts
10142                       && (!processing_template_decl
10143                           || (friendp && !memtmpl && !funcdef_flag)))))
10144           {
10145             error_at (location, "constraints on a non-templated function");
10146             ci = NULL_TREE;
10147           }
10148       set_constraints (decl, ci);
10149     }
10150 
10151   if (TREE_CODE (type) == METHOD_TYPE)
10152     {
10153       tree parm = build_this_parm (decl, type, quals);
10154       DECL_CHAIN (parm) = parms;
10155       parms = parm;
10156 
10157       /* Allocate space to hold the vptr bit if needed.  */
10158       SET_DECL_ALIGN (decl, MINIMUM_METHOD_BOUNDARY);
10159     }
10160 
10161   DECL_ARGUMENTS (decl) = parms;
10162   for (t = parms; t; t = DECL_CHAIN (t))
10163     DECL_CONTEXT (t) = decl;
10164 
10165   /* Propagate volatile out from type to decl.  */
10166   if (TYPE_VOLATILE (type))
10167     TREE_THIS_VOLATILE (decl) = 1;
10168 
10169   /* Setup decl according to sfk.  */
10170   switch (sfk)
10171     {
10172     case sfk_constructor:
10173     case sfk_copy_constructor:
10174     case sfk_move_constructor:
10175       DECL_CXX_CONSTRUCTOR_P (decl) = 1;
10176       DECL_NAME (decl) = ctor_identifier;
10177       break;
10178     case sfk_destructor:
10179       DECL_CXX_DESTRUCTOR_P (decl) = 1;
10180       DECL_NAME (decl) = dtor_identifier;
10181       break;
10182     default:
10183       break;
10184     }
10185 
10186   if (friendp && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
10187     {
10188       if (funcdef_flag)
10189           error_at (location,
10190                       "defining explicit specialization %qD in friend declaration",
10191                       orig_declarator);
10192       else
10193           {
10194             tree fns = TREE_OPERAND (orig_declarator, 0);
10195             tree args = TREE_OPERAND (orig_declarator, 1);
10196 
10197             if (PROCESSING_REAL_TEMPLATE_DECL_P ())
10198               {
10199                 /* Something like `template <class T> friend void f<T>()'.  */
10200                 error_at (location,
10201                               "invalid use of template-id %qD in declaration "
10202                               "of primary template",
10203                               orig_declarator);
10204                 return NULL_TREE;
10205               }
10206 
10207 
10208             /* A friend declaration of the form friend void f<>().  Record
10209                the information in the TEMPLATE_ID_EXPR.  */
10210             SET_DECL_IMPLICIT_INSTANTIATION (decl);
10211 
10212             gcc_assert (identifier_p (fns) || OVL_P (fns));
10213             DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
10214 
10215             for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
10216               if (TREE_PURPOSE (t)
10217                     && TREE_CODE (TREE_PURPOSE (t)) == DEFERRED_PARSE)
10218               {
10219                 error_at (defparse_location (TREE_PURPOSE (t)),
10220                               "default arguments are not allowed in declaration "
10221                               "of friend template specialization %qD",
10222                               decl);
10223                 return NULL_TREE;
10224               }
10225 
10226             if (inlinep & 1)
10227               {
10228                 error_at (declspecs->locations[ds_inline],
10229                               "%<inline%> is not allowed in declaration of friend "
10230                               "template specialization %qD",
10231                               decl);
10232                 return NULL_TREE;
10233               }
10234           }
10235     }
10236 
10237   /* C++17 11.3.6/4: "If a friend declaration specifies a default argument
10238      expression, that declaration shall be a definition..."  */
10239   if (friendp && !funcdef_flag)
10240     {
10241       for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
10242              t && t != void_list_node; t = TREE_CHAIN (t))
10243           if (TREE_PURPOSE (t))
10244             {
10245               permerror (DECL_SOURCE_LOCATION (decl),
10246                            "friend declaration of %qD specifies default "
10247                            "arguments and isn%'t a definition", decl);
10248               break;
10249             }
10250     }
10251 
10252   /* If this decl has namespace scope, set that up.  */
10253   if (in_namespace)
10254     set_decl_namespace (decl, in_namespace, friendp);
10255   else if (ctype)
10256     DECL_CONTEXT (decl) = ctype;
10257   else
10258     DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
10259 
10260   /* `main' and builtins have implicit 'C' linkage.  */
10261   if (ctype == NULL_TREE
10262       && DECL_FILE_SCOPE_P (decl)
10263       && current_lang_name == lang_name_cplusplus
10264       && (MAIN_NAME_P (declarator)
10265             || (IDENTIFIER_LENGTH (declarator) > 10
10266                 && IDENTIFIER_POINTER (declarator)[0] == '_'
10267                 && IDENTIFIER_POINTER (declarator)[1] == '_'
10268                 && startswith (IDENTIFIER_POINTER (declarator) + 2,
10269                                    "builtin_"))
10270             || (targetcm.cxx_implicit_extern_c
10271                 && (targetcm.cxx_implicit_extern_c
10272                       (IDENTIFIER_POINTER (declarator))))))
10273     SET_DECL_LANGUAGE (decl, lang_c);
10274 
10275   /* Should probably propagate const out from type to decl I bet (mrs).  */
10276   if (staticp)
10277     {
10278       DECL_STATIC_FUNCTION_P (decl) = 1;
10279       DECL_CONTEXT (decl) = ctype;
10280     }
10281 
10282   if (deletedp)
10283     DECL_DELETED_FN (decl) = 1;
10284 
10285   if (ctype && funcdef_flag)
10286     check_class_member_definition_namespace (decl);
10287 
10288   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
10289     {
10290       if (PROCESSING_REAL_TEMPLATE_DECL_P())
10291           error_at (location, "cannot declare %<::main%> to be a template");
10292       if (inlinep & 1)
10293           error_at (declspecs->locations[ds_inline],
10294                       "cannot declare %<::main%> to be inline");
10295       if (inlinep & 2)
10296           error_at (declspecs->locations[ds_constexpr],
10297                       "cannot declare %<::main%> to be %qs", "constexpr");
10298       if (inlinep & 8)
10299           error_at (declspecs->locations[ds_consteval],
10300                       "cannot declare %<::main%> to be %qs", "consteval");
10301       if (!publicp)
10302           error_at (location, "cannot declare %<::main%> to be static");
10303       inlinep = 0;
10304       publicp = 1;
10305     }
10306 
10307   /* Members of anonymous types and local classes have no linkage; make
10308      them internal.  If a typedef is made later, this will be changed.  */
10309   if (ctype && (!TREE_PUBLIC (TYPE_MAIN_DECL (ctype))
10310                     || decl_function_context (TYPE_MAIN_DECL (ctype))))
10311     publicp = 0;
10312 
10313   if (publicp && cxx_dialect == cxx98)
10314     {
10315       /* [basic.link]: A name with no linkage (notably, the name of a class
10316            or enumeration declared in a local scope) shall not be used to
10317            declare an entity with linkage.
10318 
10319            DR 757 relaxes this restriction for C++0x.  */
10320       no_linkage_error (decl);
10321     }
10322 
10323   TREE_PUBLIC (decl) = publicp;
10324   if (! publicp)
10325     {
10326       DECL_INTERFACE_KNOWN (decl) = 1;
10327       DECL_NOT_REALLY_EXTERN (decl) = 1;
10328     }
10329 
10330   /* If the declaration was declared inline, mark it as such.  */
10331   if (inlinep)
10332     {
10333       DECL_DECLARED_INLINE_P (decl) = 1;
10334       if (publicp)
10335           DECL_COMDAT (decl) = 1;
10336     }
10337   if (inlinep & 2)
10338     DECL_DECLARED_CONSTEXPR_P (decl) = true;
10339   else if (inlinep & 8)
10340     {
10341       DECL_DECLARED_CONSTEXPR_P (decl) = true;
10342       SET_DECL_IMMEDIATE_FUNCTION_P (decl);
10343     }
10344 
10345   // If the concept declaration specifier was found, check
10346   // that the declaration satisfies the necessary requirements.
10347   if (concept_p)
10348     {
10349       DECL_DECLARED_CONCEPT_P (decl) = true;
10350       check_concept_fn (decl);
10351     }
10352 
10353   DECL_EXTERNAL (decl) = 1;
10354   if (TREE_CODE (type) == FUNCTION_TYPE)
10355     {
10356       if (quals || rqual)
10357           TREE_TYPE (decl) = apply_memfn_quals (TREE_TYPE (decl),
10358                                                         TYPE_UNQUALIFIED,
10359                                                         REF_QUAL_NONE);
10360 
10361       if (quals)
10362           {
10363             error (ctype
10364                      ? G_("static member function %qD cannot have cv-qualifier")
10365                      : G_("non-member function %qD cannot have cv-qualifier"),
10366                      decl);
10367             quals = TYPE_UNQUALIFIED;
10368           }
10369 
10370       if (rqual)
10371           {
10372             error (ctype
10373                      ? G_("static member function %qD cannot have ref-qualifier")
10374                      : G_("non-member function %qD cannot have ref-qualifier"),
10375                      decl);
10376             rqual = REF_QUAL_NONE;
10377           }
10378     }
10379 
10380   if (deduction_guide_p (decl))
10381     {
10382       tree type = TREE_TYPE (DECL_NAME (decl));
10383       if (in_namespace == NULL_TREE
10384             && CP_DECL_CONTEXT (decl) != CP_TYPE_CONTEXT (type))
10385           {
10386             error_at (location, "deduction guide %qD must be declared in the "
10387                                     "same scope as %qT", decl, type);
10388             inform (location_of (type), "  declared here");
10389             return NULL_TREE;
10390           }
10391       if (DECL_CLASS_SCOPE_P (decl)
10392             && current_access_specifier != declared_access (TYPE_NAME (type)))
10393           {
10394             error_at (location, "deduction guide %qD must have the same access "
10395                                     "as %qT", decl, type);
10396             inform (location_of (type), "  declared here");
10397           }
10398       if (funcdef_flag)
10399           error_at (location,
10400                       "deduction guide %qD must not have a function body", decl);
10401     }
10402   else if (IDENTIFIER_ANY_OP_P (DECL_NAME (decl))
10403              && !grok_op_properties (decl, /*complain=*/true))
10404     return NULL_TREE;
10405   else if (UDLIT_OPER_P (DECL_NAME (decl)))
10406     {
10407       bool long_long_unsigned_p;
10408       bool long_double_p;
10409       const char *suffix = NULL;
10410       /* [over.literal]/6: Literal operators shall not have C linkage. */
10411       if (DECL_LANGUAGE (decl) == lang_c)
10412           {
10413             error_at (location, "literal operator with C linkage");
10414             maybe_show_extern_c_location ();
10415             return NULL_TREE;
10416           }
10417 
10418       if (DECL_NAMESPACE_SCOPE_P (decl))
10419           {
10420             if (!check_literal_operator_args (decl, &long_long_unsigned_p,
10421                                                       &long_double_p))
10422               {
10423                 error_at (location, "%qD has invalid argument list", decl);
10424                 return NULL_TREE;
10425               }
10426 
10427             suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
10428             if (long_long_unsigned_p)
10429               {
10430                 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
10431                     warning_at (location, 0, "integer suffix %qs"
10432                                   " shadowed by implementation", suffix);
10433               }
10434             else if (long_double_p)
10435               {
10436                 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
10437                     warning_at (location, 0, "floating-point suffix %qs"
10438                                   " shadowed by implementation", suffix);
10439               }
10440             /* 17.6.3.3.5  */
10441             if (suffix[0] != '_'
10442                 && !current_function_decl && !(friendp && !funcdef_flag))
10443               warning_at (location, OPT_Wliteral_suffix,
10444                               "literal operator suffixes not preceded by %<_%>"
10445                               " are reserved for future standardization");
10446           }
10447       else
10448           {
10449             error_at (location, "%qD must be a non-member function", decl);
10450             return NULL_TREE;
10451           }
10452     }
10453 
10454   if (funcdef_flag)
10455     /* Make the init_value nonzero so pushdecl knows this is not
10456        tentative.  error_mark_node is replaced later with the BLOCK.  */
10457     DECL_INITIAL (decl) = error_mark_node;
10458 
10459   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
10460     TREE_NOTHROW (decl) = 1;
10461 
10462   if (flag_openmp || flag_openmp_simd)
10463     {
10464       /* Adjust "omp declare simd" attributes.  */
10465       tree ods = lookup_attribute ("omp declare simd", *attrlist);
10466       if (ods)
10467           {
10468             tree attr;
10469             for (attr = ods; attr;
10470                  attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
10471               {
10472                 if (TREE_CODE (type) == METHOD_TYPE)
10473                     walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
10474                                  DECL_ARGUMENTS (decl), NULL);
10475                 if (TREE_VALUE (attr) != NULL_TREE)
10476                     {
10477                       tree cl = TREE_VALUE (TREE_VALUE (attr));
10478                       cl = c_omp_declare_simd_clauses_to_numbers
10479                                                             (DECL_ARGUMENTS (decl), cl);
10480                       if (cl)
10481                         TREE_VALUE (TREE_VALUE (attr)) = cl;
10482                       else
10483                         TREE_VALUE (attr) = NULL_TREE;
10484                     }
10485               }
10486           }
10487     }
10488 
10489   /* Caller will do the rest of this.  */
10490   if (check < 0)
10491     return decl;
10492 
10493   if (ctype != NULL_TREE)
10494     grokclassfn (ctype, decl, flags);
10495 
10496   /* 12.4/3  */
10497   if (cxx_dialect >= cxx11
10498       && DECL_DESTRUCTOR_P (decl)
10499       && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
10500       && !processing_template_decl)
10501     deduce_noexcept_on_destructor (decl);
10502 
10503   set_originating_module (decl);
10504 
10505   decl = check_explicit_specialization (orig_declarator, decl,
10506                                                   template_count,
10507                                                   2 * funcdef_flag +
10508                                                   4 * (friendp != 0) +
10509                                           8 * concept_p,
10510                                                   *attrlist);
10511   if (decl == error_mark_node)
10512     return NULL_TREE;
10513 
10514   if (DECL_STATIC_FUNCTION_P (decl))
10515     check_static_quals (decl, quals);
10516 
10517   if (attrlist)
10518     {
10519       cplus_decl_attributes (&decl, *attrlist, 0);
10520       *attrlist = NULL_TREE;
10521     }
10522 
10523   /* Check main's type after attributes have been applied.  */
10524   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
10525     {
10526       if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
10527                               integer_type_node))
10528           {
10529             tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
10530             tree newtype;
10531             error_at (declspecs->locations[ds_type_spec],
10532                         "%<::main%> must return %<int%>");
10533             newtype = build_function_type (integer_type_node, oldtypeargs);
10534             TREE_TYPE (decl) = newtype;
10535           }
10536       if (warn_main)
10537           check_main_parameter_types (decl);
10538     }
10539 
10540   if (ctype != NULL_TREE && check)
10541     {
10542       tree old_decl = check_classfn (ctype, decl,
10543                                              (current_template_depth
10544                                               > template_class_depth (ctype))
10545                                              ? current_template_parms
10546                                              : NULL_TREE);
10547 
10548       if (old_decl == error_mark_node)
10549           return NULL_TREE;
10550 
10551       if (old_decl)
10552           {
10553             tree ok;
10554             tree pushed_scope;
10555 
10556             if (TREE_CODE (old_decl) == TEMPLATE_DECL)
10557               /* Because grokfndecl is always supposed to return a
10558                  FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
10559                  here.  We depend on our callers to figure out that its
10560                  really a template that's being returned.  */
10561               old_decl = DECL_TEMPLATE_RESULT (old_decl);
10562 
10563             if (DECL_STATIC_FUNCTION_P (old_decl)
10564                 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
10565               {
10566                 /* Remove the `this' parm added by grokclassfn.  */
10567                 revert_static_member_fn (decl);
10568                 check_static_quals (decl, quals);
10569               }
10570             if (DECL_ARTIFICIAL (old_decl))
10571               {
10572                 error ("definition of implicitly-declared %qD", old_decl);
10573                 return NULL_TREE;
10574               }
10575             else if (DECL_DEFAULTED_FN (old_decl))
10576               {
10577                 error ("definition of explicitly-defaulted %q+D", decl);
10578                 inform (DECL_SOURCE_LOCATION (old_decl),
10579                           "%q#D explicitly defaulted here", old_decl);
10580                 return NULL_TREE;
10581               }
10582 
10583             /* Since we've smashed OLD_DECL to its
10584                DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
10585             if (TREE_CODE (decl) == TEMPLATE_DECL)
10586               decl = DECL_TEMPLATE_RESULT (decl);
10587 
10588             /* Attempt to merge the declarations.  This can fail, in
10589                the case of some invalid specialization declarations.  */
10590             pushed_scope = push_scope (ctype);
10591             ok = duplicate_decls (decl, old_decl);
10592             if (pushed_scope)
10593               pop_scope (pushed_scope);
10594             if (!ok)
10595               {
10596                 error ("no %q#D member function declared in class %qT",
10597                          decl, ctype);
10598                 return NULL_TREE;
10599               }
10600             if (ok == error_mark_node)
10601               return NULL_TREE;
10602             return old_decl;
10603           }
10604     }
10605 
10606   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
10607     return NULL_TREE;
10608 
10609   if (ctype == NULL_TREE || check)
10610     return decl;
10611 
10612   if (virtualp)
10613     DECL_VIRTUAL_P (decl) = 1;
10614 
10615   return decl;
10616 }
10617 
10618 /* decl is a FUNCTION_DECL.
10619    specifiers are the parsed virt-specifiers.
10620 
10621    Set flags to reflect the virt-specifiers.
10622 
10623    Returns decl.  */
10624 
10625 static tree
set_virt_specifiers(tree decl,cp_virt_specifiers specifiers)10626 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
10627 {
10628   if (decl == NULL_TREE)
10629     return decl;
10630   if (specifiers & VIRT_SPEC_OVERRIDE)
10631     DECL_OVERRIDE_P (decl) = 1;
10632   if (specifiers & VIRT_SPEC_FINAL)
10633     DECL_FINAL_P (decl) = 1;
10634   return decl;
10635 }
10636 
10637 /* DECL is a VAR_DECL for a static data member.  Set flags to reflect
10638    the linkage that DECL will receive in the object file.  */
10639 
10640 static void
set_linkage_for_static_data_member(tree decl)10641 set_linkage_for_static_data_member (tree decl)
10642 {
10643   /* A static data member always has static storage duration and
10644      external linkage.  Note that static data members are forbidden in
10645      local classes -- the only situation in which a class has
10646      non-external linkage.  */
10647   TREE_PUBLIC (decl) = 1;
10648   TREE_STATIC (decl) = 1;
10649   /* For non-template classes, static data members are always put
10650      out in exactly those files where they are defined, just as
10651      with ordinary namespace-scope variables.  */
10652   if (!processing_template_decl)
10653     DECL_INTERFACE_KNOWN (decl) = 1;
10654 }
10655 
10656 /* Create a VAR_DECL named NAME with the indicated TYPE.
10657 
10658    If SCOPE is non-NULL, it is the class type or namespace containing
10659    the variable.  If SCOPE is NULL, the variable should is created in
10660    the innermost enclosing scope.  */
10661 
10662 static tree
grokvardecl(tree type,tree name,tree orig_declarator,const cp_decl_specifier_seq * declspecs,int initialized,int type_quals,int inlinep,bool conceptp,int template_count,tree scope,location_t location)10663 grokvardecl (tree type,
10664                tree name,
10665                tree orig_declarator,
10666                const cp_decl_specifier_seq *declspecs,
10667                int initialized,
10668                int type_quals,
10669                int inlinep,
10670                bool conceptp,
10671                int template_count,
10672                tree scope,
10673                location_t location)
10674 {
10675   tree decl;
10676   tree explicit_scope;
10677 
10678   gcc_assert (!name || identifier_p (name));
10679 
10680   bool constp = (type_quals & TYPE_QUAL_CONST) != 0;
10681   bool volatilep = (type_quals & TYPE_QUAL_VOLATILE) != 0;
10682 
10683   /* Compute the scope in which to place the variable, but remember
10684      whether or not that scope was explicitly specified by the user.   */
10685   explicit_scope = scope;
10686   if (!scope)
10687     {
10688       /* An explicit "extern" specifier indicates a namespace-scope
10689            variable.  */
10690       if (declspecs->storage_class == sc_extern)
10691           scope = current_decl_namespace ();
10692       else if (!at_function_scope_p ())
10693           scope = current_scope ();
10694     }
10695 
10696   if (scope
10697       && (/* If the variable is a namespace-scope variable declared in a
10698                template, we need DECL_LANG_SPECIFIC.  */
10699             (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
10700             /* Similarly for namespace-scope variables with language linkage
10701                other than C++.  */
10702             || (TREE_CODE (scope) == NAMESPACE_DECL
10703                 && current_lang_name != lang_name_cplusplus)
10704             /* Similarly for static data members.  */
10705             || TYPE_P (scope)
10706             /* Similarly for explicit specializations.  */
10707             || (orig_declarator
10708                 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
10709     decl = build_lang_decl_loc (location, VAR_DECL, name, type);
10710   else
10711     decl = build_decl (location, VAR_DECL, name, type);
10712 
10713   if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
10714     set_decl_namespace (decl, explicit_scope, 0);
10715   else
10716     DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
10717 
10718   if (declspecs->storage_class == sc_extern)
10719     {
10720       DECL_THIS_EXTERN (decl) = 1;
10721       DECL_EXTERNAL (decl) = !initialized;
10722     }
10723 
10724   if (DECL_CLASS_SCOPE_P (decl))
10725     {
10726       set_linkage_for_static_data_member (decl);
10727       /* This function is only called with out-of-class definitions.  */
10728       DECL_EXTERNAL (decl) = 0;
10729       check_class_member_definition_namespace (decl);
10730     }
10731   /* At top level, either `static' or no s.c. makes a definition
10732      (perhaps tentative), and absence of `static' makes it public.  */
10733   else if (toplevel_bindings_p ())
10734     {
10735       TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
10736                                   && (DECL_THIS_EXTERN (decl)
10737                                         || ! constp
10738                                         || volatilep
10739                                         || inlinep));
10740       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
10741     }
10742   /* Not at top level, only `static' makes a static definition.  */
10743   else
10744     {
10745       TREE_STATIC (decl) = declspecs->storage_class == sc_static;
10746       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
10747     }
10748 
10749   set_originating_module (decl);
10750 
10751   if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
10752     {
10753       if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
10754           {
10755             CP_DECL_THREAD_LOCAL_P (decl) = true;
10756             if (!processing_template_decl)
10757               set_decl_tls_model (decl, decl_default_tls_model (decl));
10758           }
10759       if (declspecs->gnu_thread_keyword_p)
10760           SET_DECL_GNU_TLS_P (decl);
10761     }
10762 
10763   /* If the type of the decl has no linkage, make sure that we'll
10764      notice that in mark_used.  */
10765   if (cxx_dialect > cxx98
10766       && decl_linkage (decl) != lk_none
10767       && DECL_LANG_SPECIFIC (decl) == NULL
10768       && !DECL_EXTERN_C_P (decl)
10769       && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
10770     retrofit_lang_decl (decl);
10771 
10772   if (TREE_PUBLIC (decl))
10773     {
10774       /* [basic.link]: A name with no linkage (notably, the name of a class
10775            or enumeration declared in a local scope) shall not be used to
10776            declare an entity with linkage.
10777 
10778            DR 757 relaxes this restriction for C++0x.  */
10779       if (cxx_dialect < cxx11)
10780           no_linkage_error (decl);
10781     }
10782   else
10783     DECL_INTERFACE_KNOWN (decl) = 1;
10784 
10785   if (DECL_NAME (decl)
10786       && MAIN_NAME_P (DECL_NAME (decl))
10787       && scope == global_namespace)
10788     error_at (DECL_SOURCE_LOCATION (decl),
10789                 "cannot declare %<::main%> to be a global variable");
10790 
10791   /* Check that the variable can be safely declared as a concept.
10792      Note that this also forbids explicit specializations.  */
10793   if (conceptp)
10794     {
10795       if (!processing_template_decl)
10796         {
10797           error_at (declspecs->locations[ds_concept],
10798                         "a non-template variable cannot be %<concept%>");
10799           return NULL_TREE;
10800         }
10801       else if (!at_namespace_scope_p ())
10802           {
10803             error_at (declspecs->locations[ds_concept],
10804                         "concept must be defined at namespace scope");
10805             return NULL_TREE;
10806           }
10807       else
10808         DECL_DECLARED_CONCEPT_P (decl) = true;
10809       if (!same_type_ignoring_top_level_qualifiers_p (type, boolean_type_node))
10810           error_at (declspecs->locations[ds_type_spec],
10811                       "concept must have type %<bool%>");
10812       if (TEMPLATE_PARMS_CONSTRAINTS (current_template_parms))
10813         {
10814           error_at (location, "a variable concept cannot be constrained");
10815           TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = NULL_TREE;
10816         }
10817     }
10818   else if (flag_concepts
10819              && current_template_depth > template_class_depth (scope))
10820     {
10821       tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
10822       tree ci = build_constraints (reqs, NULL_TREE);
10823 
10824       set_constraints (decl, ci);
10825     }
10826 
10827   // Handle explicit specializations and instantiations of variable templates.
10828   if (orig_declarator)
10829     decl = check_explicit_specialization (orig_declarator, decl,
10830                                                     template_count, conceptp * 8);
10831 
10832   return decl != error_mark_node ? decl : NULL_TREE;
10833 }
10834 
10835 /* Create and return a canonical pointer to member function type, for
10836    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
10837 
10838 tree
build_ptrmemfunc_type(tree type)10839 build_ptrmemfunc_type (tree type)
10840 {
10841   tree field, fields;
10842   tree t;
10843 
10844   if (type == error_mark_node)
10845     return type;
10846 
10847   /* Make sure that we always have the unqualified pointer-to-member
10848      type first.  */
10849   if (cp_cv_quals quals = cp_type_quals (type))
10850     {
10851       tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
10852       return cp_build_qualified_type (unqual, quals);
10853     }
10854 
10855   /* If a canonical type already exists for this type, use it.  We use
10856      this method instead of type_hash_canon, because it only does a
10857      simple equality check on the list of field members.  */
10858 
10859   t = TYPE_PTRMEMFUNC_TYPE (type);
10860   if (t)
10861     return t;
10862 
10863   t = make_node (RECORD_TYPE);
10864 
10865   /* Let the front end know this is a pointer to member function.  */
10866   TYPE_PTRMEMFUNC_FLAG (t) = 1;
10867 
10868   field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
10869   DECL_NONADDRESSABLE_P (field) = 1;
10870   fields = field;
10871 
10872   field = build_decl (input_location, FIELD_DECL, delta_identifier,
10873                           delta_type_node);
10874   DECL_NONADDRESSABLE_P (field) = 1;
10875   DECL_CHAIN (field) = fields;
10876   fields = field;
10877 
10878   finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
10879 
10880   /* Zap out the name so that the back end will give us the debugging
10881      information for this anonymous RECORD_TYPE.  */
10882   TYPE_NAME (t) = NULL_TREE;
10883 
10884   /* Cache this pointer-to-member type so that we can find it again
10885      later.  */
10886   TYPE_PTRMEMFUNC_TYPE (type) = t;
10887 
10888   if (TYPE_STRUCTURAL_EQUALITY_P (type))
10889     SET_TYPE_STRUCTURAL_EQUALITY (t);
10890   else if (TYPE_CANONICAL (type) != type)
10891     TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
10892 
10893   return t;
10894 }
10895 
10896 /* Create and return a pointer to data member type.  */
10897 
10898 tree
build_ptrmem_type(tree class_type,tree member_type)10899 build_ptrmem_type (tree class_type, tree member_type)
10900 {
10901   if (TREE_CODE (member_type) == METHOD_TYPE)
10902     {
10903       cp_cv_quals quals = type_memfn_quals (member_type);
10904       cp_ref_qualifier rqual = type_memfn_rqual (member_type);
10905       member_type = build_memfn_type (member_type, class_type, quals, rqual);
10906       return build_ptrmemfunc_type (build_pointer_type (member_type));
10907     }
10908   else
10909     {
10910       gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
10911       return build_offset_type (class_type, member_type);
10912     }
10913 }
10914 
10915 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
10916    Check to see that the definition is valid.  Issue appropriate error
10917    messages.  */
10918 
10919 static void
check_static_variable_definition(tree decl,tree type)10920 check_static_variable_definition (tree decl, tree type)
10921 {
10922   /* Avoid redundant diagnostics on out-of-class definitions.  */
10923   if (!current_class_type || !TYPE_BEING_DEFINED (current_class_type))
10924     ;
10925   /* Can't check yet if we don't know the type.  */
10926   else if (dependent_type_p (type))
10927     ;
10928   /* If DECL is declared constexpr, we'll do the appropriate checks
10929      in check_initializer.  Similarly for inline static data members.  */
10930   else if (DECL_P (decl)
10931       && (DECL_DECLARED_CONSTEXPR_P (decl)
10932             || DECL_VAR_DECLARED_INLINE_P (decl)))
10933     ;
10934   else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
10935     {
10936       if (!COMPLETE_TYPE_P (type))
10937           error_at (DECL_SOURCE_LOCATION (decl),
10938                       "in-class initialization of static data member %q#D of "
10939                       "incomplete type", decl);
10940       else if (literal_type_p (type))
10941           permerror (DECL_SOURCE_LOCATION (decl),
10942                        "%<constexpr%> needed for in-class initialization of "
10943                        "static data member %q#D of non-integral type", decl);
10944       else
10945           error_at (DECL_SOURCE_LOCATION (decl),
10946                       "in-class initialization of static data member %q#D of "
10947                       "non-literal type", decl);
10948     }
10949   /* Motion 10 at San Diego: If a static const integral data member is
10950      initialized with an integral constant expression, the initializer
10951      may appear either in the declaration (within the class), or in
10952      the definition, but not both.  If it appears in the class, the
10953      member is a member constant.  The file-scope definition is always
10954      required.  */
10955   else if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
10956     error_at (DECL_SOURCE_LOCATION (decl),
10957                 "invalid in-class initialization of static data member "
10958                 "of non-integral type %qT",
10959                 type);
10960   else if (!CP_TYPE_CONST_P (type))
10961     error_at (DECL_SOURCE_LOCATION (decl),
10962                 "ISO C++ forbids in-class initialization of non-const "
10963                 "static member %qD",
10964                 decl);
10965   else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
10966     pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
10967                "ISO C++ forbids initialization of member constant "
10968                "%qD of non-integral type %qT", decl, type);
10969 }
10970 
10971 /* *expr_p is part of the TYPE_SIZE of a variably-sized array.  If any
10972    SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
10973    expressions out into temporary variables so that walk_tree doesn't
10974    step into them (c++/15764).  */
10975 
10976 static tree
stabilize_save_expr_r(tree * expr_p,int * walk_subtrees,void * data)10977 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
10978 {
10979   hash_set<tree> *pset = (hash_set<tree> *)data;
10980   tree expr = *expr_p;
10981   if (TREE_CODE (expr) == SAVE_EXPR)
10982     {
10983       tree op = TREE_OPERAND (expr, 0);
10984       cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
10985       if (TREE_SIDE_EFFECTS (op))
10986           TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
10987       *walk_subtrees = 0;
10988     }
10989   else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
10990     *walk_subtrees = 0;
10991   return NULL;
10992 }
10993 
10994 /* Entry point for the above.  */
10995 
10996 static void
stabilize_vla_size(tree size)10997 stabilize_vla_size (tree size)
10998 {
10999   hash_set<tree> pset;
11000   /* Break out any function calls into temporary variables.  */
11001   cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
11002 }
11003 
11004 /* Reduce a SIZEOF_EXPR to its value.  */
11005 
11006 tree
fold_sizeof_expr(tree t)11007 fold_sizeof_expr (tree t)
11008 {
11009   tree r;
11010   if (SIZEOF_EXPR_TYPE_P (t))
11011     r = cxx_sizeof_or_alignof_type (EXPR_LOCATION (t),
11012                                             TREE_TYPE (TREE_OPERAND (t, 0)),
11013                                             SIZEOF_EXPR, false, false);
11014   else if (TYPE_P (TREE_OPERAND (t, 0)))
11015     r = cxx_sizeof_or_alignof_type (EXPR_LOCATION (t),
11016                                             TREE_OPERAND (t, 0), SIZEOF_EXPR,
11017                                             false, false);
11018   else
11019     r = cxx_sizeof_or_alignof_expr (EXPR_LOCATION (t),
11020                                             TREE_OPERAND (t, 0), SIZEOF_EXPR,
11021                                             false, false);
11022   if (r == error_mark_node)
11023     r = size_one_node;
11024   return r;
11025 }
11026 
11027 /* Given the SIZE (i.e., number of elements) in an array, compute
11028    an appropriate index type for the array.  If non-NULL, NAME is
11029    the name of the entity being declared.  */
11030 
11031 static tree
compute_array_index_type_loc(location_t name_loc,tree name,tree size,tsubst_flags_t complain)11032 compute_array_index_type_loc (location_t name_loc, tree name, tree size,
11033                                     tsubst_flags_t complain)
11034 {
11035   if (error_operand_p (size))
11036     return error_mark_node;
11037 
11038   /* The type of the index being computed.  */
11039   tree itype;
11040 
11041   /* The original numeric size as seen in the source code before
11042      conversion to size_t.  */
11043   tree origsize = size;
11044 
11045   location_t loc = cp_expr_loc_or_loc (size, name ? name_loc : input_location);
11046 
11047   if (!type_dependent_expression_p (size))
11048     {
11049       origsize = size = mark_rvalue_use (size);
11050 
11051       if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
11052             && TREE_SIDE_EFFECTS (size))
11053           /* In C++98, we mark a non-constant array bound with a magic
11054              NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case.  */;
11055       else
11056           {
11057             size = build_converted_constant_expr (size_type_node, size, complain);
11058             /* Pedantically a constant expression is required here and so
11059                __builtin_is_constant_evaluated () should fold to true if it
11060                is successfully folded into a constant.  */
11061             size = fold_non_dependent_expr (size, complain,
11062                                                     /*manifestly_const_eval=*/true);
11063 
11064             if (!TREE_CONSTANT (size))
11065               size = origsize;
11066           }
11067 
11068       if (error_operand_p (size))
11069           return error_mark_node;
11070 
11071       /* The array bound must be an integer type.  */
11072       tree type = TREE_TYPE (size);
11073       if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
11074           {
11075             if (!(complain & tf_error))
11076               return error_mark_node;
11077             if (name)
11078               error_at (loc, "size of array %qD has non-integral type %qT",
11079                           name, type);
11080             else
11081               error_at (loc, "size of array has non-integral type %qT", type);
11082             size = integer_one_node;
11083           }
11084     }
11085 
11086   /* A type is dependent if it is...an array type constructed from any
11087      dependent type or whose size is specified by a constant expression
11088      that is value-dependent.  */
11089   /* We can only call value_dependent_expression_p on integral constant
11090      expressions.  */
11091   if (processing_template_decl
11092       && potential_constant_expression (size)
11093       && value_dependent_expression_p (size))
11094     {
11095       /* Just build the index type and mark that it requires
11096            structural equality checks.  */
11097     in_template:
11098       itype = build_index_type (build_min (MINUS_EXPR, sizetype,
11099                                                      size, size_one_node));
11100       TYPE_DEPENDENT_P (itype) = 1;
11101       TYPE_DEPENDENT_P_VALID (itype) = 1;
11102       SET_TYPE_STRUCTURAL_EQUALITY (itype);
11103       return itype;
11104     }
11105 
11106   if (TREE_CODE (size) != INTEGER_CST)
11107     {
11108       tree folded = cp_fully_fold (size);
11109       if (TREE_CODE (folded) == INTEGER_CST)
11110           {
11111             if (name)
11112               pedwarn (loc, OPT_Wpedantic, "size of array %qD is not an "
11113                          "integral constant-expression", name);
11114             else
11115               pedwarn (loc, OPT_Wpedantic,
11116                          "size of array is not an integral constant-expression");
11117           }
11118       if (TREE_CONSTANT (size) && !TREE_CONSTANT (folded))
11119           /* We might have lost the TREE_CONSTANT flag e.g. when we are
11120              folding a conversion from a pointer to integral type.  In that
11121              case issue an error below and don't treat this as a VLA.  */;
11122       else
11123           /* Use the folded result for VLAs, too; it will have resolved
11124              SIZEOF_EXPR.  */
11125           size = folded;
11126     }
11127 
11128   /* Normally, the array-bound will be a constant.  */
11129   if (TREE_CODE (size) == INTEGER_CST)
11130     {
11131       /* The size to use in diagnostics that reflects the constant
11132            size used in the source, rather than SIZE massaged above.  */
11133       tree diagsize = size;
11134 
11135       /* If the original size before conversion to size_t was signed
11136            and negative, convert it to ssizetype to restore the sign.  */
11137       if (!TYPE_UNSIGNED (TREE_TYPE (origsize))
11138             && TREE_CODE (size) == INTEGER_CST
11139             && tree_int_cst_sign_bit (size))
11140           {
11141             diagsize = fold_convert (ssizetype, size);
11142 
11143             /* Clear the overflow bit that may have been set as a result
11144                of the conversion from the sizetype of the new size to
11145                ssizetype.  */
11146             TREE_OVERFLOW (diagsize) = false;
11147           }
11148 
11149       /* Verify that the array has a positive number of elements
11150            and issue the appropriate diagnostic if it doesn't.  */
11151       if (!valid_array_size_p (loc, diagsize, name, (complain & tf_error)))
11152           {
11153             if (!(complain & tf_error))
11154               return error_mark_node;
11155             size = integer_one_node;
11156           }
11157       /* As an extension we allow zero-sized arrays.  */
11158       else if (integer_zerop (size))
11159           {
11160             if (!(complain & tf_error))
11161               /* We must fail if performing argument deduction (as
11162                  indicated by the state of complain), so that
11163                  another substitution can be found.  */
11164               return error_mark_node;
11165             else if (name)
11166               pedwarn (loc, OPT_Wpedantic,
11167                          "ISO C++ forbids zero-size array %qD", name);
11168             else
11169               pedwarn (loc, OPT_Wpedantic,
11170                          "ISO C++ forbids zero-size array");
11171           }
11172     }
11173   else if (TREE_CONSTANT (size)
11174              /* We don't allow VLAs at non-function scopes, or during
11175                 tentative template substitution.  */
11176              || !at_function_scope_p ()
11177              || !(complain & tf_error))
11178     {
11179       if (!(complain & tf_error))
11180           return error_mark_node;
11181       /* `(int) &fn' is not a valid array bound.  */
11182       if (name)
11183           error_at (loc,
11184                       "size of array %qD is not an integral constant-expression",
11185                       name);
11186       else
11187           error_at (loc, "size of array is not an integral constant-expression");
11188       size = integer_one_node;
11189     }
11190   else if (pedantic && warn_vla != 0)
11191     {
11192       if (name)
11193           pedwarn (name_loc, OPT_Wvla,
11194                      "ISO C++ forbids variable length array %qD", name);
11195       else
11196           pedwarn (input_location, OPT_Wvla,
11197                      "ISO C++ forbids variable length array");
11198     }
11199   else if (warn_vla > 0)
11200     {
11201       if (name)
11202           warning_at (name_loc, OPT_Wvla,
11203                         "variable length array %qD is used", name);
11204       else
11205           warning (OPT_Wvla,
11206                  "variable length array is used");
11207     }
11208 
11209   if (processing_template_decl && !TREE_CONSTANT (size))
11210     goto in_template;
11211   else
11212     {
11213       if (!TREE_CONSTANT (size))
11214           {
11215             /* A variable sized array.  Arrange for the SAVE_EXPR on the inside
11216                of the MINUS_EXPR, which allows the -1 to get folded with the +1
11217                that happens when building TYPE_SIZE.  */
11218             size = variable_size (size);
11219             stabilize_vla_size (size);
11220           }
11221 
11222       /* Compute the index of the largest element in the array.  It is
11223            one less than the number of elements in the array.  We save
11224            and restore PROCESSING_TEMPLATE_DECL so that computations in
11225            cp_build_binary_op will be appropriately folded.  */
11226       {
11227           processing_template_decl_sentinel s;
11228           itype = cp_build_binary_op (input_location,
11229                                             MINUS_EXPR,
11230                                             cp_convert (ssizetype, size, complain),
11231                                             cp_convert (ssizetype, integer_one_node,
11232                                                             complain),
11233                                             complain);
11234           itype = maybe_constant_value (itype, NULL_TREE, true);
11235       }
11236 
11237       if (!TREE_CONSTANT (itype))
11238           {
11239             if (sanitize_flags_p (SANITIZE_VLA)
11240                 && current_function_decl != NULL_TREE)
11241               {
11242                 /* We have to add 1 -- in the ubsan routine we generate
11243                      LE_EXPR rather than LT_EXPR.  */
11244                 tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
11245                                             build_one_cst (TREE_TYPE (itype)));
11246                 t = ubsan_instrument_vla (input_location, t);
11247                 finish_expr_stmt (t);
11248               }
11249           }
11250       /* Make sure that there was no overflow when creating to a signed
11251            index type.  (For example, on a 32-bit machine, an array with
11252            size 2^32 - 1 is too big.)  */
11253       else if (TREE_CODE (itype) == INTEGER_CST
11254                  && TREE_OVERFLOW (itype))
11255           {
11256             if (!(complain & tf_error))
11257               return error_mark_node;
11258             error ("overflow in array dimension");
11259             TREE_OVERFLOW (itype) = 0;
11260           }
11261     }
11262 
11263   /* Create and return the appropriate index type.  */
11264   itype = build_index_type (itype);
11265 
11266   /* If the index type were dependent, we would have returned early, so
11267      remember that it isn't.  */
11268   TYPE_DEPENDENT_P (itype) = 0;
11269   TYPE_DEPENDENT_P_VALID (itype) = 1;
11270   return itype;
11271 }
11272 
11273 tree
compute_array_index_type(tree name,tree size,tsubst_flags_t complain)11274 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
11275 {
11276   return compute_array_index_type_loc (input_location, name, size, complain);
11277 }
11278 
11279 /* Returns the scope (if any) in which the entity declared by
11280    DECLARATOR will be located.  If the entity was declared with an
11281    unqualified name, NULL_TREE is returned.  */
11282 
11283 tree
get_scope_of_declarator(const cp_declarator * declarator)11284 get_scope_of_declarator (const cp_declarator *declarator)
11285 {
11286   while (declarator && declarator->kind != cdk_id)
11287     declarator = declarator->declarator;
11288 
11289   /* If the declarator-id is a SCOPE_REF, the scope in which the
11290      declaration occurs is the first operand.  */
11291   if (declarator
11292       && declarator->u.id.qualifying_scope)
11293     return declarator->u.id.qualifying_scope;
11294 
11295   /* Otherwise, the declarator is not a qualified name; the entity will
11296      be declared in the current scope.  */
11297   return NULL_TREE;
11298 }
11299 
11300 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
11301    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
11302    with this type.  */
11303 
11304 static tree
create_array_type_for_decl(tree name,tree type,tree size,location_t loc)11305 create_array_type_for_decl (tree name, tree type, tree size, location_t loc)
11306 {
11307   tree itype = NULL_TREE;
11308 
11309   /* If things have already gone awry, bail now.  */
11310   if (type == error_mark_node || size == error_mark_node)
11311     return error_mark_node;
11312 
11313   /* [dcl.type.class.deduct] prohibits forming an array of placeholder
11314      for a deduced class type.  */
11315   if (template_placeholder_p (type))
11316     {
11317       if (name)
11318           error_at (loc, "%qD declared as array of template placeholder "
11319                       "type %qT", name, type);
11320       else
11321           error ("creating array of template placeholder type %qT", type);
11322       return error_mark_node;
11323     }
11324 
11325   /* If there are some types which cannot be array elements,
11326      issue an error-message and return.  */
11327   switch (TREE_CODE (type))
11328     {
11329     case VOID_TYPE:
11330       if (name)
11331           error_at (loc, "declaration of %qD as array of void", name);
11332       else
11333         error ("creating array of void");
11334       return error_mark_node;
11335 
11336     case FUNCTION_TYPE:
11337       if (name)
11338           error_at (loc, "declaration of %qD as array of functions", name);
11339       else
11340         error ("creating array of functions");
11341       return error_mark_node;
11342 
11343     case REFERENCE_TYPE:
11344       if (name)
11345           error_at (loc, "declaration of %qD as array of references", name);
11346       else
11347         error ("creating array of references");
11348       return error_mark_node;
11349 
11350     case METHOD_TYPE:
11351       if (name)
11352           error_at (loc, "declaration of %qD as array of function members",
11353                       name);
11354       else
11355         error ("creating array of function members");
11356       return error_mark_node;
11357 
11358     default:
11359       break;
11360     }
11361 
11362   if (!verify_type_context (name ? loc : input_location,
11363                                   TCTX_ARRAY_ELEMENT, type))
11364     return error_mark_node;
11365 
11366   /* [dcl.array]
11367 
11368      The constant expressions that specify the bounds of the arrays
11369      can be omitted only for the first member of the sequence.  */
11370   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
11371     {
11372       if (name)
11373           error_at (loc, "declaration of %qD as multidimensional array must "
11374                       "have bounds for all dimensions except the first",
11375                       name);
11376       else
11377           error ("multidimensional array must have bounds for all "
11378                  "dimensions except the first");
11379 
11380       return error_mark_node;
11381     }
11382 
11383   /* Figure out the index type for the array.  */
11384   if (size)
11385     {
11386       itype = compute_array_index_type_loc (loc, name, size,
11387                                                       tf_warning_or_error);
11388       if (type_uses_auto (type)
11389             && variably_modified_type_p (itype, /*fn=*/NULL_TREE))
11390           {
11391             sorry_at (loc, "variable-length array of %<auto%>");
11392             return error_mark_node;
11393           }
11394     }
11395 
11396   return build_cplus_array_type (type, itype);
11397 }
11398 
11399 /* Returns the smallest location that is not UNKNOWN_LOCATION.  */
11400 
11401 static location_t
min_location(location_t loca,location_t locb)11402 min_location (location_t loca, location_t locb)
11403 {
11404   if (loca == UNKNOWN_LOCATION
11405       || (locb != UNKNOWN_LOCATION
11406             && linemap_location_before_p (line_table, locb, loca)))
11407     return locb;
11408   return loca;
11409 }
11410 
11411 /* Returns the smallest location != UNKNOWN_LOCATION among the
11412    three stored in LOCATIONS[ds_const], LOCATIONS[ds_volatile],
11413    and LOCATIONS[ds_restrict].  */
11414 
11415 static location_t
smallest_type_quals_location(int type_quals,const location_t * locations)11416 smallest_type_quals_location (int type_quals, const location_t* locations)
11417 {
11418   location_t loc = UNKNOWN_LOCATION;
11419 
11420   if (type_quals & TYPE_QUAL_CONST)
11421     loc = locations[ds_const];
11422 
11423   if (type_quals & TYPE_QUAL_VOLATILE)
11424     loc = min_location (loc, locations[ds_volatile]);
11425 
11426   if (type_quals & TYPE_QUAL_RESTRICT)
11427     loc = min_location (loc, locations[ds_restrict]);
11428 
11429   return loc;
11430 }
11431 
11432 /* Returns the smallest among the latter and locations[ds_type_spec].  */
11433 
11434 static location_t
smallest_type_location(int type_quals,const location_t * locations)11435 smallest_type_location (int type_quals, const location_t* locations)
11436 {
11437   location_t loc = smallest_type_quals_location (type_quals, locations);
11438   return min_location (loc, locations[ds_type_spec]);
11439 }
11440 
11441 static location_t
smallest_type_location(const cp_decl_specifier_seq * declspecs)11442 smallest_type_location (const cp_decl_specifier_seq *declspecs)
11443 {
11444   int type_quals = get_type_quals (declspecs);
11445   return smallest_type_location (type_quals, declspecs->locations);
11446 }
11447 
11448 /* Check that it's OK to declare a function with the indicated TYPE
11449    and TYPE_QUALS.  SFK indicates the kind of special function (if any)
11450    that this function is.  OPTYPE is the type given in a conversion
11451    operator declaration, or the class type for a constructor/destructor.
11452    Returns the actual return type of the function; that may be different
11453    than TYPE if an error occurs, or for certain special functions.  */
11454 
11455 static tree
check_special_function_return_type(special_function_kind sfk,tree type,tree optype,int type_quals,const location_t * locations)11456 check_special_function_return_type (special_function_kind sfk,
11457                                             tree type,
11458                                             tree optype,
11459                                             int type_quals,
11460                                             const location_t* locations)
11461 {
11462   switch (sfk)
11463     {
11464     case sfk_constructor:
11465       if (type)
11466           error_at (smallest_type_location (type_quals, locations),
11467                       "return type specification for constructor invalid");
11468       else if (type_quals != TYPE_UNQUALIFIED)
11469           error_at (smallest_type_quals_location (type_quals, locations),
11470                       "qualifiers are not allowed on constructor declaration");
11471 
11472       if (targetm.cxx.cdtor_returns_this ())
11473           type = build_pointer_type (optype);
11474       else
11475           type = void_type_node;
11476       break;
11477 
11478     case sfk_destructor:
11479       if (type)
11480           error_at (smallest_type_location (type_quals, locations),
11481                       "return type specification for destructor invalid");
11482       else if (type_quals != TYPE_UNQUALIFIED)
11483           error_at (smallest_type_quals_location (type_quals, locations),
11484                       "qualifiers are not allowed on destructor declaration");
11485 
11486       /* We can't use the proper return type here because we run into
11487            problems with ambiguous bases and covariant returns.  */
11488       if (targetm.cxx.cdtor_returns_this ())
11489           type = build_pointer_type (void_type_node);
11490       else
11491           type = void_type_node;
11492       break;
11493 
11494     case sfk_conversion:
11495       if (type)
11496           error_at (smallest_type_location (type_quals, locations),
11497                       "return type specified for %<operator %T%>", optype);
11498       else if (type_quals != TYPE_UNQUALIFIED)
11499           error_at (smallest_type_quals_location (type_quals, locations),
11500                       "qualifiers are not allowed on declaration of "
11501                       "%<operator %T%>", optype);
11502 
11503       type = optype;
11504       break;
11505 
11506     case sfk_deduction_guide:
11507       if (type)
11508           error_at (smallest_type_location (type_quals, locations),
11509                       "return type specified for deduction guide");
11510       else if (type_quals != TYPE_UNQUALIFIED)
11511           error_at (smallest_type_quals_location (type_quals, locations),
11512                       "qualifiers are not allowed on declaration of "
11513                       "deduction guide");
11514       if (TREE_CODE (optype) == TEMPLATE_TEMPLATE_PARM)
11515           {
11516             error ("template template parameter %qT in declaration of "
11517                      "deduction guide", optype);
11518             type = error_mark_node;
11519           }
11520       else
11521           type = make_template_placeholder (CLASSTYPE_TI_TEMPLATE (optype));
11522       for (int i = 0; i < ds_last; ++i)
11523           if (i != ds_explicit && locations[i])
11524             error_at (locations[i],
11525                         "%<decl-specifier%> in declaration of deduction guide");
11526       break;
11527 
11528     default:
11529       gcc_unreachable ();
11530     }
11531 
11532   return type;
11533 }
11534 
11535 /* A variable or data member (whose unqualified name is IDENTIFIER)
11536    has been declared with the indicated TYPE.  If the TYPE is not
11537    acceptable, issue an error message and return a type to use for
11538    error-recovery purposes.  */
11539 
11540 tree
check_var_type(tree identifier,tree type,location_t loc)11541 check_var_type (tree identifier, tree type, location_t loc)
11542 {
11543   if (VOID_TYPE_P (type))
11544     {
11545       if (!identifier)
11546           error_at (loc, "unnamed variable or field declared void");
11547       else if (identifier_p (identifier))
11548           {
11549             gcc_assert (!IDENTIFIER_ANY_OP_P (identifier));
11550             error_at (loc, "variable or field %qE declared void",
11551                         identifier);
11552           }
11553       else
11554           error_at (loc, "variable or field declared void");
11555       type = error_mark_node;
11556     }
11557 
11558   return type;
11559 }
11560 
11561 /* Handle declaring DECL as an inline variable.  */
11562 
11563 static void
mark_inline_variable(tree decl,location_t loc)11564 mark_inline_variable (tree decl, location_t loc)
11565 {
11566   bool inlinep = true;
11567   if (! toplevel_bindings_p ())
11568     {
11569       error_at (loc, "%<inline%> specifier invalid for variable "
11570                     "%qD declared at block scope", decl);
11571       inlinep = false;
11572     }
11573   else if (cxx_dialect < cxx17)
11574     pedwarn (loc, OPT_Wc__17_extensions, "inline variables are only available "
11575                "with %<-std=c++17%> or %<-std=gnu++17%>");
11576   if (inlinep)
11577     {
11578       retrofit_lang_decl (decl);
11579       SET_DECL_VAR_DECLARED_INLINE_P (decl);
11580     }
11581 }
11582 
11583 
11584 /* Assign a typedef-given name to a class or enumeration type declared
11585    as anonymous at first.  This was split out of grokdeclarator
11586    because it is also used in libcc1.  */
11587 
11588 void
name_unnamed_type(tree type,tree decl)11589 name_unnamed_type (tree type, tree decl)
11590 {
11591   gcc_assert (TYPE_UNNAMED_P (type));
11592 
11593   /* Replace the anonymous decl with the real decl.  Be careful not to
11594      rename other typedefs (such as the self-reference) of type.  */
11595   tree orig = TYPE_NAME (type);
11596   for (tree t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
11597     if (TYPE_NAME (t) == orig)
11598       TYPE_NAME (t) = decl;
11599 
11600   /* If this is a typedef within a template class, the nested
11601      type is a (non-primary) template.  The name for the
11602      template needs updating as well.  */
11603   if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
11604     DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)) = DECL_NAME (decl);
11605 
11606   /* Adjust linkage now that we aren't unnamed anymore.  */
11607   reset_type_linkage (type);
11608 
11609   /* FIXME remangle member functions; member functions of a
11610      type with external linkage have external linkage.  */
11611 
11612   /* Check that our job is done, and that it would fail if we
11613      attempted to do it again.  */
11614   gcc_assert (!TYPE_UNNAMED_P (type));
11615 }
11616 
11617 /* Check that decltype(auto) was well-formed: only plain decltype(auto)
11618    is allowed.  TYPE might contain a decltype(auto).  Returns true if
11619    there was a problem, false otherwise.  */
11620 
11621 static bool
check_decltype_auto(location_t loc,tree type)11622 check_decltype_auto (location_t loc, tree type)
11623 {
11624   if (tree a = type_uses_auto (type))
11625     {
11626       if (AUTO_IS_DECLTYPE (a))
11627           {
11628             if (a != type)
11629               {
11630                 error_at (loc, "%qT as type rather than plain "
11631                               "%<decltype(auto)%>", type);
11632                 return true;
11633               }
11634             else if (TYPE_QUALS (type) != TYPE_UNQUALIFIED)
11635               {
11636                 error_at (loc, "%<decltype(auto)%> cannot be cv-qualified");
11637                 return true;
11638               }
11639           }
11640     }
11641   return false;
11642 }
11643 
11644 /* Given declspecs and a declarator (abstract or otherwise), determine
11645    the name and type of the object declared and construct a DECL node
11646    for it.
11647 
11648    DECLSPECS points to the representation of declaration-specifier
11649    sequence that precedes declarator.
11650 
11651    DECL_CONTEXT says which syntactic context this declaration is in:
11652      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
11653      FUNCDEF for a function definition.  Like NORMAL but a few different
11654       error messages in each case.  Return value may be zero meaning
11655       this definition is too screwy to try to parse.
11656      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
11657       handle member functions (which have FIELD context).
11658       Return value may be zero meaning this definition is too screwy to
11659       try to parse.
11660      PARM for a parameter declaration (either within a function prototype
11661       or before a function body).  Make a PARM_DECL, or return void_type_node.
11662      TPARM for a template parameter declaration.
11663      CATCHPARM for a parameter declaration before a catch clause.
11664      TYPENAME if for a typename (in a cast or sizeof).
11665       Don't make a DECL node; just return the ..._TYPE node.
11666      FIELD for a struct or union field; make a FIELD_DECL.
11667      BITFIELD for a field with specified width.
11668 
11669    INITIALIZED is as for start_decl.
11670 
11671    ATTRLIST is a pointer to the list of attributes, which may be NULL
11672    if there are none; *ATTRLIST may be modified if attributes from inside
11673    the declarator should be applied to the declaration.
11674 
11675    When this function is called, scoping variables (such as
11676    CURRENT_CLASS_TYPE) should reflect the scope in which the
11677    declaration occurs, not the scope in which the new declaration will
11678    be placed.  For example, on:
11679 
11680      void S::f() { ... }
11681 
11682    when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
11683    should not be `S'.
11684 
11685    Returns a DECL (if a declarator is present), a TYPE (if there is no
11686    declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
11687    error occurs. */
11688 
11689 tree
grokdeclarator(const cp_declarator * declarator,cp_decl_specifier_seq * declspecs,enum decl_context decl_context,int initialized,tree * attrlist)11690 grokdeclarator (const cp_declarator *declarator,
11691                     cp_decl_specifier_seq *declspecs,
11692                     enum decl_context decl_context,
11693                     int initialized,
11694                     tree* attrlist)
11695 {
11696   tree type = NULL_TREE;
11697   int longlong = 0;
11698   int explicit_intN = 0;
11699   int int_n_alt = 0;
11700   int virtualp, explicitp, friendp, inlinep, staticp;
11701   int explicit_int = 0;
11702   int explicit_char = 0;
11703   int defaulted_int = 0;
11704 
11705   tree typedef_decl = NULL_TREE;
11706   const char *name = NULL;
11707   tree typedef_type = NULL_TREE;
11708   /* True if this declarator is a function definition.  */
11709   bool funcdef_flag = false;
11710   cp_declarator_kind innermost_code = cdk_error;
11711   int bitfield = 0;
11712 #if 0
11713   /* See the code below that used this.  */
11714   tree decl_attr = NULL_TREE;
11715 #endif
11716 
11717   /* Keep track of what sort of function is being processed
11718      so that we can warn about default return values, or explicit
11719      return values which do not match prescribed defaults.  */
11720   special_function_kind sfk = sfk_none;
11721 
11722   tree dname = NULL_TREE;
11723   tree ctor_return_type = NULL_TREE;
11724   enum overload_flags flags = NO_SPECIAL;
11725   /* cv-qualifiers that apply to the declarator, for a declaration of
11726      a member function.  */
11727   cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
11728   /* virt-specifiers that apply to the declarator, for a declaration of
11729      a member function.  */
11730   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
11731   /* ref-qualifier that applies to the declarator, for a declaration of
11732      a member function.  */
11733   cp_ref_qualifier rqual = REF_QUAL_NONE;
11734   /* cv-qualifiers that apply to the type specified by the DECLSPECS.  */
11735   int type_quals = get_type_quals (declspecs);
11736   tree raises = NULL_TREE;
11737   int template_count = 0;
11738   tree returned_attrs = NULL_TREE;
11739   tree parms = NULL_TREE;
11740   const cp_declarator *id_declarator;
11741   /* The unqualified name of the declarator; either an
11742      IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
11743   tree unqualified_id;
11744   /* The class type, if any, in which this entity is located,
11745      or NULL_TREE if none.  Note that this value may be different from
11746      the current class type; for example if an attempt is made to declare
11747      "A::f" inside "B", this value will be "A".  */
11748   tree ctype = current_class_type;
11749   /* The NAMESPACE_DECL for the namespace in which this entity is
11750      located.  If an unqualified name is used to declare the entity,
11751      this value will be NULL_TREE, even if the entity is located at
11752      namespace scope.  */
11753   tree in_namespace = NULL_TREE;
11754   cp_storage_class storage_class;
11755   bool unsigned_p, signed_p, short_p, long_p, thread_p;
11756   bool type_was_error_mark_node = false;
11757   bool parameter_pack_p = declarator ? declarator->parameter_pack_p : false;
11758   bool template_type_arg = false;
11759   bool template_parm_flag = false;
11760   bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
11761   bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
11762   bool constinit_p = decl_spec_seq_has_spec_p (declspecs, ds_constinit);
11763   bool consteval_p = decl_spec_seq_has_spec_p (declspecs, ds_consteval);
11764   bool late_return_type_p = false;
11765   bool array_parameter_p = false;
11766   tree reqs = NULL_TREE;
11767 
11768   signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
11769   unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
11770   short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
11771   long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
11772   longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
11773   explicit_intN = declspecs->explicit_intN_p;
11774   int_n_alt = declspecs->int_n_alt;
11775   thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
11776 
11777   // Was concept_p specified? Note that ds_concept
11778   // implies ds_constexpr!
11779   bool concept_p = decl_spec_seq_has_spec_p (declspecs, ds_concept);
11780   if (concept_p)
11781     constexpr_p = true;
11782 
11783   if (decl_context == FUNCDEF)
11784     funcdef_flag = true, decl_context = NORMAL;
11785   else if (decl_context == MEMFUNCDEF)
11786     funcdef_flag = true, decl_context = FIELD;
11787   else if (decl_context == BITFIELD)
11788     bitfield = 1, decl_context = FIELD;
11789   else if (decl_context == TEMPLATE_TYPE_ARG)
11790     template_type_arg = true, decl_context = TYPENAME;
11791   else if (decl_context == TPARM)
11792     template_parm_flag = true, decl_context = PARM;
11793 
11794   if (initialized == SD_DEFAULTED || initialized == SD_DELETED)
11795     funcdef_flag = true;
11796 
11797   location_t typespec_loc = loc_or_input_loc (smallest_type_location
11798                                                         (type_quals,
11799                                                          declspecs->locations));
11800   location_t id_loc;
11801   location_t init_loc;
11802   if (declarator)
11803     {
11804       id_loc = loc_or_input_loc (declarator->id_loc);
11805       init_loc = loc_or_input_loc (declarator->init_loc);
11806     }
11807   else
11808     init_loc = id_loc = input_location;
11809 
11810   /* Look inside a declarator for the name being declared
11811      and get it as a string, for an error message.  */
11812   for (id_declarator = declarator;
11813        id_declarator;
11814        id_declarator = id_declarator->declarator)
11815     {
11816       if (id_declarator->kind != cdk_id)
11817           innermost_code = id_declarator->kind;
11818 
11819       switch (id_declarator->kind)
11820           {
11821           case cdk_function:
11822             if (id_declarator->declarator
11823                 && id_declarator->declarator->kind == cdk_id)
11824               {
11825                 sfk = id_declarator->declarator->u.id.sfk;
11826                 if (sfk == sfk_destructor)
11827                     flags = DTOR_FLAG;
11828               }
11829             break;
11830 
11831           case cdk_id:
11832             {
11833               tree qualifying_scope = id_declarator->u.id.qualifying_scope;
11834               tree decl = id_declarator->u.id.unqualified_name;
11835               if (!decl)
11836                 break;
11837               if (qualifying_scope)
11838                 {
11839                     if (check_for_bare_parameter_packs (qualifying_scope,
11840                                                                 id_declarator->id_loc))
11841                       return error_mark_node;
11842                     if (at_function_scope_p ())
11843                       {
11844                         /* [dcl.meaning]
11845 
11846                            A declarator-id shall not be qualified except
11847                            for ...
11848 
11849                            None of the cases are permitted in block
11850                            scope.  */
11851                         if (qualifying_scope == global_namespace)
11852                           error ("invalid use of qualified-name %<::%D%>",
11853                                    decl);
11854                         else if (TYPE_P (qualifying_scope))
11855                           error ("invalid use of qualified-name %<%T::%D%>",
11856                                    qualifying_scope, decl);
11857                         else
11858                           error ("invalid use of qualified-name %<%D::%D%>",
11859                                    qualifying_scope, decl);
11860                         return error_mark_node;
11861                       }
11862                     else if (TYPE_P (qualifying_scope))
11863                       {
11864                         ctype = qualifying_scope;
11865                         if (!MAYBE_CLASS_TYPE_P (ctype))
11866                           {
11867                               error_at (id_declarator->id_loc,
11868                                           "%q#T is not a class or namespace", ctype);
11869                               ctype = NULL_TREE;
11870                           }
11871                         else if (innermost_code != cdk_function
11872                                    && current_class_type
11873                                    && !uniquely_derived_from_p (ctype,
11874                                                                         current_class_type))
11875                           {
11876                               error_at (id_declarator->id_loc,
11877                                           "invalid use of qualified-name %<%T::%D%>",
11878                                           qualifying_scope, decl);
11879                               return error_mark_node;
11880                           }
11881                       }
11882                     else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
11883                       in_namespace = qualifying_scope;
11884                 }
11885               switch (TREE_CODE (decl))
11886                 {
11887                 case BIT_NOT_EXPR:
11888                     {
11889                       if (innermost_code != cdk_function)
11890                         {
11891                           error_at (EXPR_LOCATION (decl),
11892                                         "declaration of %qE as non-function", decl);
11893                           return error_mark_node;
11894                         }
11895                       else if (!qualifying_scope
11896                                  && !(current_class_type && at_class_scope_p ()))
11897                         {
11898                           error_at (EXPR_LOCATION (decl),
11899                                         "declaration of %qE as non-member", decl);
11900                           return error_mark_node;
11901                         }
11902 
11903                       tree type = TREE_OPERAND (decl, 0);
11904                       if (TYPE_P (type))
11905                         type = constructor_name (type);
11906                       name = identifier_to_locale (IDENTIFIER_POINTER (type));
11907                       dname = decl;
11908                     }
11909                     break;
11910 
11911                 case TEMPLATE_ID_EXPR:
11912                     {
11913                       tree fns = TREE_OPERAND (decl, 0);
11914 
11915                       dname = fns;
11916                       if (!identifier_p (dname))
11917                         dname = OVL_NAME (dname);
11918                     }
11919                     /* Fall through.  */
11920 
11921                 case IDENTIFIER_NODE:
11922                     if (identifier_p (decl))
11923                       dname = decl;
11924 
11925                     if (IDENTIFIER_KEYWORD_P (dname))
11926                       {
11927                         error ("declarator-id missing; using reserved word %qD",
11928                                  dname);
11929                         name = identifier_to_locale (IDENTIFIER_POINTER (dname));
11930                       }
11931                     else if (!IDENTIFIER_CONV_OP_P (dname))
11932                       name = identifier_to_locale (IDENTIFIER_POINTER (dname));
11933                     else
11934                       {
11935                         gcc_assert (flags == NO_SPECIAL);
11936                         flags = TYPENAME_FLAG;
11937                         sfk = sfk_conversion;
11938                         tree glob = get_global_binding (dname);
11939                         if (glob && TREE_CODE (glob) == TYPE_DECL)
11940                           name = identifier_to_locale (IDENTIFIER_POINTER (dname));
11941                         else
11942                           name = "<invalid operator>";
11943                       }
11944                     break;
11945 
11946                 default:
11947                     gcc_unreachable ();
11948                 }
11949               break;
11950             }
11951 
11952           case cdk_array:
11953           case cdk_pointer:
11954           case cdk_reference:
11955           case cdk_ptrmem:
11956             break;
11957 
11958           case cdk_decomp:
11959             name = "structured binding";
11960             break;
11961 
11962           case cdk_error:
11963             return error_mark_node;
11964 
11965           default:
11966             gcc_unreachable ();
11967           }
11968       if (id_declarator->kind == cdk_id)
11969           break;
11970     }
11971 
11972   /* [dcl.fct.edf]
11973 
11974      The declarator in a function-definition shall have the form
11975      D1 ( parameter-declaration-clause) ...  */
11976   if (funcdef_flag && innermost_code != cdk_function)
11977     {
11978       error_at (id_loc, "function definition does not declare parameters");
11979       return error_mark_node;
11980     }
11981 
11982   if (flags == TYPENAME_FLAG
11983       && innermost_code != cdk_function
11984       && ! (ctype && !declspecs->any_specifiers_p))
11985     {
11986       error_at (id_loc, "declaration of %qD as non-function", dname);
11987       return error_mark_node;
11988     }
11989 
11990   if (dname && identifier_p (dname))
11991     {
11992       if (UDLIT_OPER_P (dname)
11993             && innermost_code != cdk_function)
11994           {
11995             error_at (id_loc, "declaration of %qD as non-function", dname);
11996             return error_mark_node;
11997           }
11998 
11999       if (IDENTIFIER_ANY_OP_P (dname))
12000           {
12001             if (typedef_p)
12002               {
12003                 error_at (id_loc, "declaration of %qD as %<typedef%>", dname);
12004                 return error_mark_node;
12005               }
12006             else if (decl_context == PARM || decl_context == CATCHPARM)
12007               {
12008                 error_at (id_loc, "declaration of %qD as parameter", dname);
12009                 return error_mark_node;
12010               }
12011           }
12012     }
12013 
12014   /* Anything declared one level down from the top level
12015      must be one of the parameters of a function
12016      (because the body is at least two levels down).  */
12017 
12018   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
12019      by not allowing C++ class definitions to specify their parameters
12020      with xdecls (must be spec.d in the parmlist).
12021 
12022      Since we now wait to push a class scope until we are sure that
12023      we are in a legitimate method context, we must set oldcname
12024      explicitly (since current_class_name is not yet alive).
12025 
12026      We also want to avoid calling this a PARM if it is in a namespace.  */
12027 
12028   if (decl_context == NORMAL && !toplevel_bindings_p ())
12029     {
12030       cp_binding_level *b = current_binding_level;
12031       current_binding_level = b->level_chain;
12032       if (current_binding_level != 0 && toplevel_bindings_p ())
12033           decl_context = PARM;
12034       current_binding_level = b;
12035     }
12036 
12037   if (name == NULL)
12038     name = decl_context == PARM ? "parameter" : "type name";
12039 
12040   if (consteval_p && constexpr_p)
12041     {
12042       error_at (declspecs->locations[ds_consteval],
12043                     "both %qs and %qs specified", "constexpr", "consteval");
12044       return error_mark_node;
12045     }
12046 
12047   if (concept_p && typedef_p)
12048     {
12049       error_at (declspecs->locations[ds_concept],
12050                     "%qs cannot appear in a typedef declaration", "concept");
12051       return error_mark_node;
12052     }
12053 
12054   if (constexpr_p && typedef_p)
12055     {
12056       error_at (declspecs->locations[ds_constexpr],
12057                     "%qs cannot appear in a typedef declaration", "constexpr");
12058       return error_mark_node;
12059     }
12060 
12061   if (consteval_p && typedef_p)
12062     {
12063       error_at (declspecs->locations[ds_consteval],
12064                     "%qs cannot appear in a typedef declaration", "consteval");
12065       return error_mark_node;
12066     }
12067 
12068   if (constinit_p && typedef_p)
12069     {
12070       error_at (declspecs->locations[ds_constinit],
12071                     "%qs cannot appear in a typedef declaration", "constinit");
12072       return error_mark_node;
12073     }
12074 
12075   /* [dcl.spec]/2 "At most one of the constexpr, consteval, and constinit
12076      keywords shall appear in a decl-specifier-seq."  */
12077   if (constinit_p && constexpr_p)
12078     {
12079       gcc_rich_location richloc (declspecs->locations[ds_constinit]);
12080       richloc.add_range (declspecs->locations[ds_constexpr]);
12081       error_at (&richloc,
12082                     "can use at most one of the %<constinit%> and %<constexpr%> "
12083                     "specifiers");
12084       return error_mark_node;
12085     }
12086 
12087   /* If there were multiple types specified in the decl-specifier-seq,
12088      issue an error message.  */
12089   if (declspecs->multiple_types_p)
12090     {
12091       error_at (typespec_loc,
12092                     "two or more data types in declaration of %qs", name);
12093       return error_mark_node;
12094     }
12095 
12096   if (declspecs->conflicting_specifiers_p)
12097     {
12098       error_at (min_location (declspecs->locations[ds_typedef],
12099                                     declspecs->locations[ds_storage_class]),
12100                     "conflicting specifiers in declaration of %qs", name);
12101       return error_mark_node;
12102     }
12103 
12104   /* Extract the basic type from the decl-specifier-seq.  */
12105   type = declspecs->type;
12106   if (type == error_mark_node)
12107     {
12108       type = NULL_TREE;
12109       type_was_error_mark_node = true;
12110     }
12111 
12112   /* Ignore erroneous attributes.  */
12113   if (attrlist && *attrlist == error_mark_node)
12114     *attrlist = NULL_TREE;
12115 
12116   /* An object declared as __attribute__((unavailable)) suppresses
12117      any reports of being declared with unavailable or deprecated
12118      items.  An object declared as __attribute__((deprecated))
12119      suppresses warnings of uses of other deprecated items.  */
12120   auto ds = make_temp_override (deprecated_state);
12121   if (attrlist && lookup_attribute ("unavailable", *attrlist))
12122     deprecated_state = UNAVAILABLE_DEPRECATED_SUPPRESS;
12123   else if (attrlist && lookup_attribute ("deprecated", *attrlist))
12124     deprecated_state = DEPRECATED_SUPPRESS;
12125 
12126   cp_handle_deprecated_or_unavailable (type);
12127   if (type && TREE_CODE (type) == TYPE_DECL)
12128     {
12129       cp_warn_deprecated_use_scopes (CP_DECL_CONTEXT (type));
12130       typedef_decl = type;
12131       type = TREE_TYPE (typedef_decl);
12132       if (DECL_ARTIFICIAL (typedef_decl))
12133           cp_handle_deprecated_or_unavailable (type);
12134     }
12135   /* No type at all: default to `int', and set DEFAULTED_INT
12136      because it was not a user-defined typedef.  */
12137   if (type == NULL_TREE)
12138     {
12139       if (signed_p || unsigned_p || long_p || short_p)
12140           {
12141             /* These imply 'int'.  */
12142             type = integer_type_node;
12143             defaulted_int = 1;
12144           }
12145       /* If we just have "complex", it is equivalent to "complex double".  */
12146       else if (!longlong && !explicit_intN
12147                  && decl_spec_seq_has_spec_p (declspecs, ds_complex))
12148           {
12149             type = double_type_node;
12150             pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
12151                        "ISO C++ does not support plain %<complex%> meaning "
12152                        "%<double complex%>");
12153           }
12154     }
12155   /* Gather flags.  */
12156   explicit_int = declspecs->explicit_int_p;
12157   explicit_char = declspecs->explicit_char_p;
12158 
12159 #if 0
12160   /* See the code below that used this.  */
12161   if (typedef_decl)
12162     decl_attr = DECL_ATTRIBUTES (typedef_decl);
12163 #endif
12164   typedef_type = type;
12165 
12166   if (sfk == sfk_conversion || sfk == sfk_deduction_guide)
12167     ctor_return_type = TREE_TYPE (dname);
12168   else
12169     ctor_return_type = ctype;
12170 
12171   if (sfk != sfk_none)
12172     {
12173       type = check_special_function_return_type (sfk, type,
12174                                                              ctor_return_type,
12175                                                              type_quals,
12176                                                              declspecs->locations);
12177       type_quals = TYPE_UNQUALIFIED;
12178     }
12179   else if (type == NULL_TREE)
12180     {
12181       int is_main;
12182 
12183       explicit_int = -1;
12184 
12185       /* We handle `main' specially here, because 'main () { }' is so
12186            common.  With no options, it is allowed.  With -Wreturn-type,
12187            it is a warning.  It is only an error with -pedantic-errors.  */
12188       is_main = (funcdef_flag
12189                      && dname && identifier_p (dname)
12190                      && MAIN_NAME_P (dname)
12191                      && ctype == NULL_TREE
12192                      && in_namespace == NULL_TREE
12193                      && current_namespace == global_namespace);
12194 
12195       if (type_was_error_mark_node)
12196           /* We've already issued an error, don't complain more.  */;
12197       else if (in_system_header_at (id_loc) || flag_ms_extensions)
12198           /* Allow it, sigh.  */;
12199       else if (! is_main)
12200           permerror (id_loc, "ISO C++ forbids declaration of %qs with no type",
12201                        name);
12202       else if (pedantic)
12203           pedwarn (id_loc, OPT_Wpedantic,
12204                      "ISO C++ forbids declaration of %qs with no type", name);
12205       else
12206           warning_at (id_loc, OPT_Wreturn_type,
12207                         "ISO C++ forbids declaration of %qs with no type", name);
12208 
12209       if (type_was_error_mark_node && template_parm_flag)
12210           /* FIXME we should be able to propagate the error_mark_node as is
12211              for other contexts too.  */
12212           type = error_mark_node;
12213       else
12214           type = integer_type_node;
12215     }
12216 
12217   ctype = NULL_TREE;
12218 
12219   if (explicit_intN)
12220     {
12221       if (! int_n_enabled_p[declspecs->int_n_idx])
12222           {
12223             error_at (declspecs->locations[ds_type_spec],
12224                         "%<__int%d%> is not supported by this target",
12225                         int_n_data[declspecs->int_n_idx].bitsize);
12226             explicit_intN = false;
12227           }
12228       /* Don't pedwarn if the alternate "__intN__" form has been used instead
12229            of "__intN".  */
12230       else if (!int_n_alt && pedantic)
12231           pedwarn (declspecs->locations[ds_type_spec], OPT_Wpedantic,
12232                      "ISO C++ does not support %<__int%d%> for %qs",
12233                      int_n_data[declspecs->int_n_idx].bitsize, name);
12234     }
12235 
12236   /* Now process the modifiers that were specified
12237      and check for invalid combinations.  */
12238 
12239   /* Long double is a special combination.  */
12240   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
12241     {
12242       long_p = false;
12243       type = cp_build_qualified_type (long_double_type_node,
12244                                               cp_type_quals (type));
12245     }
12246 
12247   /* Check all other uses of type modifiers.  */
12248 
12249   if (unsigned_p || signed_p || long_p || short_p)
12250     {
12251       location_t loc;
12252       const char *key;
12253       if (unsigned_p)
12254           {
12255             key = "unsigned";
12256             loc = declspecs->locations[ds_unsigned];
12257           }
12258       else if (signed_p)
12259           {
12260             key = "signed";
12261             loc = declspecs->locations[ds_signed];
12262           }
12263       else if (longlong)
12264           {
12265             key = "long long";
12266             loc = declspecs->locations[ds_long_long];
12267           }
12268       else if (long_p)
12269           {
12270             key = "long";
12271             loc = declspecs->locations[ds_long];
12272           }
12273       else /* if (short_p) */
12274           {
12275             key = "short";
12276             loc = declspecs->locations[ds_short];
12277           }
12278 
12279       int ok = 0;
12280 
12281       if (signed_p && unsigned_p)
12282           {
12283             gcc_rich_location richloc (declspecs->locations[ds_signed]);
12284             richloc.add_range (declspecs->locations[ds_unsigned]);
12285             error_at (&richloc,
12286                         "%<signed%> and %<unsigned%> specified together");
12287           }
12288       else if (long_p && short_p)
12289           {
12290             gcc_rich_location richloc (declspecs->locations[ds_long]);
12291             richloc.add_range (declspecs->locations[ds_short]);
12292             error_at (&richloc, "%<long%> and %<short%> specified together");
12293           }
12294       else if (TREE_CODE (type) != INTEGER_TYPE
12295                  || type == char8_type_node
12296                  || type == char16_type_node
12297                  || type == char32_type_node
12298                  || ((long_p || short_p)
12299                        && (explicit_char || explicit_intN)))
12300           error_at (loc, "%qs specified with %qT", key, type);
12301       else if (!explicit_int && !defaulted_int
12302                  && !explicit_char && !explicit_intN)
12303           {
12304             if (typedef_decl)
12305               {
12306                 pedwarn (loc, OPT_Wpedantic,
12307                            "%qs specified with typedef-name %qD",
12308                            key, typedef_decl);
12309                 ok = !flag_pedantic_errors;
12310                 /* PR108099: __int128_t comes from c_common_nodes_and_builtins,
12311                      and is not built as a typedef.  */
12312                 if (is_typedef_decl (typedef_decl))
12313                     type = DECL_ORIGINAL_TYPE (typedef_decl);
12314               }
12315             else if (declspecs->decltype_p)
12316               error_at (loc, "%qs specified with %<decltype%>", key);
12317             else
12318               error_at (loc, "%qs specified with %<typeof%>", key);
12319           }
12320       else
12321           ok = 1;
12322 
12323       /* Discard the type modifiers if they are invalid.  */
12324       if (! ok)
12325           {
12326             unsigned_p = false;
12327             signed_p = false;
12328             long_p = false;
12329             short_p = false;
12330             longlong = 0;
12331           }
12332     }
12333 
12334   /* Decide whether an integer type is signed or not.
12335      Optionally treat bitfields as signed by default.  */
12336   if (unsigned_p
12337       /* [class.bit]
12338 
12339            It is implementation-defined whether a plain (neither
12340            explicitly signed or unsigned) char, short, int, or long
12341            bit-field is signed or unsigned.
12342 
12343            Naturally, we extend this to long long as well.  Note that
12344            this does not include wchar_t.  */
12345       || (bitfield && !flag_signed_bitfields
12346             && !signed_p
12347             /* A typedef for plain `int' without `signed' can be
12348                controlled just like plain `int', but a typedef for
12349                `signed int' cannot be so controlled.  */
12350             && !(typedef_decl
12351                  && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
12352             && TREE_CODE (type) == INTEGER_TYPE
12353             && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
12354     {
12355       if (explicit_intN)
12356           type = int_n_trees[declspecs->int_n_idx].unsigned_type;
12357       else if (longlong)
12358           type = long_long_unsigned_type_node;
12359       else if (long_p)
12360           type = long_unsigned_type_node;
12361       else if (short_p)
12362           type = short_unsigned_type_node;
12363       else if (type == char_type_node)
12364           type = unsigned_char_type_node;
12365       else if (typedef_decl)
12366           type = c_common_unsigned_type (type);
12367       else
12368           type = unsigned_type_node;
12369     }
12370   else if (signed_p && type == char_type_node)
12371     type = signed_char_type_node;
12372   else if (explicit_intN)
12373     type = int_n_trees[declspecs->int_n_idx].signed_type;
12374   else if (longlong)
12375     type = long_long_integer_type_node;
12376   else if (long_p)
12377     type = long_integer_type_node;
12378   else if (short_p)
12379     type = short_integer_type_node;
12380   else if (signed_p && typedef_decl)
12381     type = c_common_signed_type (type);
12382 
12383   if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
12384     {
12385       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
12386           error_at (declspecs->locations[ds_complex],
12387                       "complex invalid for %qs", name);
12388       /* If a modifier is specified, the resulting complex is the complex
12389            form of TYPE.  E.g, "complex short" is "complex short int".  */
12390       else if (type == integer_type_node)
12391           type = complex_integer_type_node;
12392       else if (type == float_type_node)
12393           type = complex_float_type_node;
12394       else if (type == double_type_node)
12395           type = complex_double_type_node;
12396       else if (type == long_double_type_node)
12397           type = complex_long_double_type_node;
12398       else
12399           type = build_complex_type (type);
12400     }
12401 
12402   /* If we're using the injected-class-name to form a compound type or a
12403      declaration, replace it with the underlying class so we don't get
12404      redundant typedefs in the debug output.  But if we are returning the
12405      type unchanged, leave it alone so that it's available to
12406      maybe_get_template_decl_from_type_decl.  */
12407   if (CLASS_TYPE_P (type)
12408       && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
12409       && type == TREE_TYPE (TYPE_NAME (type))
12410       && (declarator || type_quals))
12411     type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
12412 
12413   type_quals |= cp_type_quals (type);
12414   type = cp_build_qualified_type_real
12415     (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
12416                                 || declspecs->decltype_p)
12417                                ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
12418   /* We might have ignored or rejected some of the qualifiers.  */
12419   type_quals = cp_type_quals (type);
12420 
12421   if (cxx_dialect >= cxx17 && type && is_auto (type)
12422       && innermost_code != cdk_function
12423       && id_declarator && declarator != id_declarator)
12424     if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (type))
12425     {
12426       error_at (typespec_loc, "template placeholder type %qT must be followed "
12427                     "by a simple declarator-id", type);
12428       inform (DECL_SOURCE_LOCATION (tmpl), "%qD declared here", tmpl);
12429       type = error_mark_node;
12430     }
12431 
12432   staticp = 0;
12433   inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
12434   virtualp =  decl_spec_seq_has_spec_p (declspecs, ds_virtual);
12435   explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
12436 
12437   storage_class = declspecs->storage_class;
12438   if (storage_class == sc_static)
12439     staticp = 1 + (decl_context == FIELD);
12440   else if (decl_context == FIELD && sfk == sfk_deduction_guide)
12441     /* Treat class-scope deduction guides as static member functions
12442        so that they get a FUNCTION_TYPE instead of a METHOD_TYPE.  */
12443     staticp = 2;
12444 
12445   if (virtualp)
12446     {
12447       if (staticp == 2)
12448           {
12449             gcc_rich_location richloc (declspecs->locations[ds_virtual]);
12450             richloc.add_range (declspecs->locations[ds_storage_class]);
12451             error_at (&richloc, "member %qD cannot be declared both %<virtual%> "
12452                         "and %<static%>", dname);
12453             storage_class = sc_none;
12454             staticp = 0;
12455           }
12456       if (constexpr_p && pedantic && cxx_dialect < cxx20)
12457           {
12458             gcc_rich_location richloc (declspecs->locations[ds_virtual]);
12459             richloc.add_range (declspecs->locations[ds_constexpr]);
12460             pedwarn (&richloc, OPT_Wc__20_extensions, "member %qD can be "
12461                        "declared both %<virtual%> and %<constexpr%> only in "
12462                        "%<-std=c++20%> or %<-std=gnu++20%>", dname);
12463           }
12464     }
12465   friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
12466 
12467   /* Issue errors about use of storage classes for parameters.  */
12468   if (decl_context == PARM)
12469     {
12470       if (typedef_p)
12471           {
12472             error_at (declspecs->locations[ds_typedef],
12473                         "typedef declaration invalid in parameter declaration");
12474             return error_mark_node;
12475           }
12476       else if (template_parm_flag && storage_class != sc_none)
12477           {
12478             error_at (min_location (declspecs->locations[ds_thread],
12479                                           declspecs->locations[ds_storage_class]),
12480                         "storage class specified for template parameter %qs",
12481                         name);
12482             return error_mark_node;
12483           }
12484       else if (storage_class == sc_static
12485                  || storage_class == sc_extern
12486                  || thread_p)
12487           {
12488             error_at (min_location (declspecs->locations[ds_thread],
12489                                           declspecs->locations[ds_storage_class]),
12490                         "storage class specified for parameter %qs", name);
12491             return error_mark_node;
12492           }
12493 
12494       /* Function parameters cannot be concept. */
12495       if (concept_p)
12496           {
12497             error_at (declspecs->locations[ds_concept],
12498                         "a parameter cannot be declared %qs", "concept");
12499             concept_p = 0;
12500             constexpr_p = 0;
12501           }
12502       /* Function parameters cannot be constexpr.  If we saw one, moan
12503          and pretend it wasn't there.  */
12504       else if (constexpr_p)
12505         {
12506           error_at (declspecs->locations[ds_constexpr],
12507                         "a parameter cannot be declared %qs", "constexpr");
12508           constexpr_p = 0;
12509         }
12510       if (constinit_p)
12511           {
12512             error_at (declspecs->locations[ds_constinit],
12513                         "a parameter cannot be declared %qs", "constinit");
12514             constinit_p = 0;
12515           }
12516       if (consteval_p)
12517           {
12518             error_at (declspecs->locations[ds_consteval],
12519                         "a parameter cannot be declared %qs", "consteval");
12520             consteval_p = 0;
12521           }
12522     }
12523 
12524   /* Give error if `virtual' is used outside of class declaration.  */
12525   if (virtualp
12526       && (current_class_name == NULL_TREE || decl_context != FIELD))
12527     {
12528       error_at (declspecs->locations[ds_virtual],
12529                     "%<virtual%> outside class declaration");
12530       virtualp = 0;
12531     }
12532 
12533   if (innermost_code == cdk_decomp)
12534     {
12535       location_t loc = (declarator->kind == cdk_reference
12536                               ? declarator->declarator->id_loc : declarator->id_loc);
12537       if (inlinep)
12538           error_at (declspecs->locations[ds_inline],
12539                       "structured binding declaration cannot be %qs", "inline");
12540       if (typedef_p)
12541           error_at (declspecs->locations[ds_typedef],
12542                       "structured binding declaration cannot be %qs", "typedef");
12543       if (constexpr_p && !concept_p)
12544           error_at (declspecs->locations[ds_constexpr], "structured "
12545                       "binding declaration cannot be %qs", "constexpr");
12546       if (consteval_p)
12547           error_at (declspecs->locations[ds_consteval], "structured "
12548                       "binding declaration cannot be %qs", "consteval");
12549       if (thread_p && cxx_dialect < cxx20)
12550           pedwarn (declspecs->locations[ds_thread], OPT_Wc__20_extensions,
12551                      "structured binding declaration can be %qs only in "
12552                      "%<-std=c++20%> or %<-std=gnu++20%>",
12553                      declspecs->gnu_thread_keyword_p
12554                      ? "__thread" : "thread_local");
12555       if (concept_p)
12556           error_at (declspecs->locations[ds_concept],
12557                       "structured binding declaration cannot be %qs", "concept");
12558       /* [dcl.struct.bind] "A cv that includes volatile is deprecated."  */
12559       if (type_quals & TYPE_QUAL_VOLATILE)
12560           warning_at (declspecs->locations[ds_volatile], OPT_Wvolatile,
12561                         "%<volatile%>-qualified structured binding is deprecated");
12562       switch (storage_class)
12563           {
12564           case sc_none:
12565             break;
12566           case sc_register:
12567             error_at (loc, "structured binding declaration cannot be %qs",
12568                         "register");
12569             break;
12570           case sc_static:
12571             if (cxx_dialect < cxx20)
12572               pedwarn (loc, OPT_Wc__20_extensions,
12573                          "structured binding declaration can be %qs only in "
12574                          "%<-std=c++20%> or %<-std=gnu++20%>", "static");
12575             break;
12576           case sc_extern:
12577             error_at (loc, "structured binding declaration cannot be %qs",
12578                         "extern");
12579             break;
12580           case sc_mutable:
12581             error_at (loc, "structured binding declaration cannot be %qs",
12582                         "mutable");
12583             break;
12584           case sc_auto:
12585             error_at (loc, "structured binding declaration cannot be "
12586                         "C++98 %<auto%>");
12587             break;
12588           default:
12589             gcc_unreachable ();
12590           }
12591       if (TREE_CODE (type) != TEMPLATE_TYPE_PARM
12592             || TYPE_IDENTIFIER (type) != auto_identifier)
12593           {
12594             if (type != error_mark_node)
12595               {
12596                 error_at (loc, "structured binding declaration cannot have "
12597                               "type %qT", type);
12598                 inform (loc,
12599                           "type must be cv-qualified %<auto%> or reference to "
12600                           "cv-qualified %<auto%>");
12601               }
12602             type = build_qualified_type (make_auto (), type_quals);
12603             declspecs->type = type;
12604           }
12605       inlinep = 0;
12606       typedef_p = 0;
12607       constexpr_p = 0;
12608       consteval_p = 0;
12609       concept_p = 0;
12610       if (storage_class != sc_static)
12611           {
12612             storage_class = sc_none;
12613             declspecs->storage_class = sc_none;
12614           }
12615     }
12616 
12617   /* Static anonymous unions are dealt with here.  */
12618   if (staticp && decl_context == TYPENAME
12619       && declspecs->type
12620       && ANON_AGGR_TYPE_P (declspecs->type))
12621     decl_context = FIELD;
12622 
12623   /* Warn about storage classes that are invalid for certain
12624      kinds of declarations (parameters, typenames, etc.).  */
12625   if (thread_p
12626       && ((storage_class
12627              && storage_class != sc_extern
12628              && storage_class != sc_static)
12629             || typedef_p))
12630     {
12631       location_t loc
12632           = min_location (declspecs->locations[ds_thread],
12633                               declspecs->locations[ds_storage_class]);
12634       error_at (loc, "multiple storage classes in declaration of %qs", name);
12635       thread_p = false;
12636     }
12637   if (decl_context != NORMAL
12638       && ((storage_class != sc_none
12639              && storage_class != sc_mutable)
12640             || thread_p))
12641     {
12642       if ((decl_context == PARM || decl_context == CATCHPARM)
12643             && (storage_class == sc_register
12644                 || storage_class == sc_auto))
12645           ;
12646       else if (typedef_p)
12647           ;
12648       else if (decl_context == FIELD
12649                  /* C++ allows static class elements.  */
12650                  && storage_class == sc_static)
12651           /* C++ also allows inlines and signed and unsigned elements,
12652              but in those cases we don't come in here.  */
12653           ;
12654       else
12655           {
12656             location_t loc
12657               = min_location (declspecs->locations[ds_thread],
12658                                   declspecs->locations[ds_storage_class]);
12659             if (decl_context == FIELD)
12660               error_at (loc, "storage class specified for %qs", name);
12661             else if (decl_context == PARM || decl_context == CATCHPARM)
12662               error_at (loc, "storage class specified for parameter %qs", name);
12663             else
12664               error_at (loc, "storage class specified for typename");
12665             if (storage_class == sc_register
12666                 || storage_class == sc_auto
12667                 || storage_class == sc_extern
12668                 || thread_p)
12669               storage_class = sc_none;
12670           }
12671     }
12672   else if (storage_class == sc_extern && funcdef_flag
12673              && ! toplevel_bindings_p ())
12674     error ("nested function %qs declared %<extern%>", name);
12675   else if (toplevel_bindings_p ())
12676     {
12677       if (storage_class == sc_auto)
12678           error_at (declspecs->locations[ds_storage_class],
12679                       "top-level declaration of %qs specifies %<auto%>", name);
12680     }
12681   else if (thread_p
12682              && storage_class != sc_extern
12683              && storage_class != sc_static)
12684     {
12685       if (declspecs->gnu_thread_keyword_p)
12686           pedwarn (declspecs->locations[ds_thread],
12687                      0, "function-scope %qs implicitly auto and "
12688                      "declared %<__thread%>", name);
12689 
12690       /* When thread_local is applied to a variable of block scope the
12691            storage-class-specifier static is implied if it does not appear
12692            explicitly.  */
12693       storage_class = declspecs->storage_class = sc_static;
12694       staticp = 1;
12695     }
12696 
12697   if (storage_class && friendp)
12698     {
12699       error_at (min_location (declspecs->locations[ds_thread],
12700                                     declspecs->locations[ds_storage_class]),
12701                     "storage class specifiers invalid in friend function "
12702                     "declarations");
12703       storage_class = sc_none;
12704       staticp = 0;
12705     }
12706 
12707   if (!id_declarator)
12708     unqualified_id = NULL_TREE;
12709   else
12710     {
12711       unqualified_id = id_declarator->u.id.unqualified_name;
12712       switch (TREE_CODE (unqualified_id))
12713           {
12714           case BIT_NOT_EXPR:
12715             unqualified_id = TREE_OPERAND (unqualified_id, 0);
12716             if (TYPE_P (unqualified_id))
12717               unqualified_id = constructor_name (unqualified_id);
12718             break;
12719 
12720           case IDENTIFIER_NODE:
12721           case TEMPLATE_ID_EXPR:
12722             break;
12723 
12724           default:
12725             gcc_unreachable ();
12726           }
12727     }
12728 
12729   if (declspecs->std_attributes)
12730     {
12731       location_t attr_loc = declspecs->locations[ds_std_attribute];
12732       if (warning_at (attr_loc, OPT_Wattributes, "attribute ignored"))
12733           inform (attr_loc, "an attribute that appertains to a type-specifier "
12734                     "is ignored");
12735     }
12736 
12737   /* Determine the type of the entity declared by recurring on the
12738      declarator.  */
12739   for (; declarator; declarator = declarator->declarator)
12740     {
12741       const cp_declarator *inner_declarator;
12742       tree attrs;
12743 
12744       if (type == error_mark_node)
12745           return error_mark_node;
12746 
12747       attrs = declarator->attributes;
12748       if (attrs)
12749           {
12750             int attr_flags;
12751 
12752             attr_flags = 0;
12753             if (declarator->kind == cdk_id)
12754               attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
12755             if (declarator->kind == cdk_function)
12756               attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
12757             if (declarator->kind == cdk_array)
12758               attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
12759             tree late_attrs = NULL_TREE;
12760             if (decl_context != PARM && decl_context != TYPENAME)
12761               /* Assume that any attributes that get applied late to
12762                  templates will DTRT when applied to the declaration
12763                  as a whole.  */
12764               late_attrs = splice_template_attributes (&attrs, type);
12765             returned_attrs = decl_attributes (&type,
12766                                                       chainon (returned_attrs, attrs),
12767                                                       attr_flags);
12768             returned_attrs = chainon (late_attrs, returned_attrs);
12769           }
12770 
12771       inner_declarator = declarator->declarator;
12772 
12773       /* We don't want to warn in parameter context because we don't
12774            yet know if the parse will succeed, and this might turn out
12775            to be a constructor call.  */
12776       if (decl_context != PARM
12777             && decl_context != TYPENAME
12778             && !typedef_p
12779             && declarator->parenthesized != UNKNOWN_LOCATION
12780             /* If the type is class-like and the inner name used a
12781                global namespace qualifier, we need the parens.
12782                Unfortunately all we can tell is whether a qualified name
12783                was used or not.  */
12784             && !(inner_declarator
12785                  && inner_declarator->kind == cdk_id
12786                  && inner_declarator->u.id.qualifying_scope
12787                  && (MAYBE_CLASS_TYPE_P (type)
12788                        || TREE_CODE (type) == ENUMERAL_TYPE)))
12789           {
12790             if (warning_at (declarator->parenthesized, OPT_Wparentheses,
12791                                 "unnecessary parentheses in declaration of %qs",
12792                                 name))
12793               {
12794                 gcc_rich_location iloc (declarator->parenthesized);
12795                 iloc.add_fixit_remove (get_start (declarator->parenthesized));
12796                 iloc.add_fixit_remove (get_finish (declarator->parenthesized));
12797                 inform (&iloc, "remove parentheses");
12798               }
12799           }
12800       if (declarator->kind == cdk_id || declarator->kind == cdk_decomp)
12801           break;
12802 
12803       switch (declarator->kind)
12804           {
12805           case cdk_array:
12806             type = create_array_type_for_decl (dname, type,
12807                                                        declarator->u.array.bounds,
12808                                                        declarator->id_loc);
12809             if (!valid_array_size_p (dname
12810                                            ? declarator->id_loc : input_location,
12811                                            type, dname))
12812               type = error_mark_node;
12813 
12814             if (declarator->std_attributes)
12815               /* [dcl.array]/1:
12816 
12817                  The optional attribute-specifier-seq appertains to the
12818                  array.  */
12819               returned_attrs = chainon (returned_attrs,
12820                                               declarator->std_attributes);
12821             break;
12822 
12823           case cdk_function:
12824             {
12825               tree arg_types;
12826               int funcdecl_p;
12827 
12828               /* Declaring a function type.  */
12829 
12830               /* Pick up type qualifiers which should be applied to `this'.  */
12831               memfn_quals = declarator->u.function.qualifiers;
12832               /* Pick up virt-specifiers.  */
12833             virt_specifiers = declarator->u.function.virt_specifiers;
12834               /* And ref-qualifier, too */
12835               rqual = declarator->u.function.ref_qualifier;
12836               /* And tx-qualifier.  */
12837               tree tx_qual = declarator->u.function.tx_qualifier;
12838               /* Pick up the exception specifications.  */
12839               raises = declarator->u.function.exception_specification;
12840               /* If the exception-specification is ill-formed, let's pretend
12841                  there wasn't one.  */
12842               if (raises == error_mark_node)
12843                 raises = NULL_TREE;
12844 
12845               if (reqs)
12846                 error_at (location_of (reqs), "requires-clause on return type");
12847               reqs = declarator->u.function.requires_clause;
12848 
12849               /* Say it's a definition only for the CALL_EXPR
12850                  closest to the identifier.  */
12851               funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
12852 
12853               /* Handle a late-specified return type.  */
12854               tree late_return_type = declarator->u.function.late_return_type;
12855               if (tree auto_node = type_uses_auto (type))
12856                 {
12857                     if (!late_return_type)
12858                       {
12859                         if (!funcdecl_p)
12860                           /* auto (*fp)() = f; is OK.  */;
12861                         else if (current_class_type
12862                                    && LAMBDA_TYPE_P (current_class_type))
12863                           /* OK for C++11 lambdas.  */;
12864                         else if (cxx_dialect < cxx14)
12865                           {
12866                               error_at (typespec_loc, "%qs function uses "
12867                                           "%<auto%> type specifier without "
12868                                           "trailing return type", name);
12869                               inform (typespec_loc,
12870                                         "deduced return type only available "
12871                                         "with %<-std=c++14%> or %<-std=gnu++14%>");
12872                           }
12873                         else if (virtualp)
12874                           {
12875                               error_at (typespec_loc, "virtual function "
12876                                           "cannot have deduced return type");
12877                               virtualp = false;
12878                           }
12879                       }
12880                     else if (!is_auto (type) && sfk != sfk_conversion)
12881                       {
12882                         error_at (typespec_loc, "%qs function with trailing "
12883                                     "return type has %qT as its type rather "
12884                                     "than plain %<auto%>", name, type);
12885                         return error_mark_node;
12886                       }
12887                     else if (is_auto (type) && AUTO_IS_DECLTYPE (type))
12888                       {
12889                         if (funcdecl_p)
12890                           error_at (typespec_loc,
12891                                         "%qs function with trailing return type "
12892                                         "has %<decltype(auto)%> as its type "
12893                                         "rather than plain %<auto%>", name);
12894                         else
12895                           error_at (typespec_loc,
12896                                         "invalid use of %<decltype(auto)%>");
12897                         return error_mark_node;
12898                       }
12899                     tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node);
12900                     if (!tmpl)
12901                       if (tree late_auto = type_uses_auto (late_return_type))
12902                         tmpl = CLASS_PLACEHOLDER_TEMPLATE (late_auto);
12903                     if (tmpl)
12904                       {
12905                         if (!funcdecl_p || !dguide_name_p (unqualified_id))
12906                           {
12907                               error_at (typespec_loc, "deduced class "
12908                                           "type %qD in function return type",
12909                                           DECL_NAME (tmpl));
12910                               inform (DECL_SOURCE_LOCATION (tmpl),
12911                                         "%qD declared here", tmpl);
12912                               return error_mark_node;
12913                           }
12914                         else if (!late_return_type)
12915                           {
12916                               error_at (declarator->id_loc, "deduction guide "
12917                                           "for %qT must have trailing return "
12918                                           "type", TREE_TYPE (tmpl));
12919                               inform (DECL_SOURCE_LOCATION (tmpl),
12920                                         "%qD declared here", tmpl);
12921                               return error_mark_node;
12922                           }
12923                         else if (CLASS_TYPE_P (late_return_type)
12924                                     && CLASSTYPE_TEMPLATE_INFO (late_return_type)
12925                                     && (CLASSTYPE_TI_TEMPLATE (late_return_type)
12926                                           == tmpl))
12927                           /* OK */;
12928                         else
12929                           error ("trailing return type %qT of deduction guide "
12930                                     "is not a specialization of %qT",
12931                                     late_return_type, TREE_TYPE (tmpl));
12932                       }
12933                 }
12934               else if (late_return_type
12935                          && sfk != sfk_conversion)
12936                 {
12937                     if (late_return_type == error_mark_node)
12938                       return error_mark_node;
12939                     if (cxx_dialect < cxx11)
12940                       /* Not using maybe_warn_cpp0x because this should
12941                          always be an error.  */
12942                       error_at (typespec_loc,
12943                                   "trailing return type only available "
12944                                   "with %<-std=c++11%> or %<-std=gnu++11%>");
12945                     else
12946                       error_at (typespec_loc, "%qs function with trailing "
12947                                   "return type not declared with %<auto%> "
12948                                   "type specifier", name);
12949                     return error_mark_node;
12950                 }
12951               if (late_return_type && sfk == sfk_conversion)
12952                 {
12953                     error ("a conversion function cannot have a trailing return type");
12954                     return error_mark_node;
12955                 }
12956               type = splice_late_return_type (type, late_return_type);
12957               if (type == error_mark_node)
12958                 return error_mark_node;
12959 
12960               if (late_return_type)
12961                 {
12962                     late_return_type_p = true;
12963                     type_quals = cp_type_quals (type);
12964                 }
12965 
12966               if (type_quals != TYPE_UNQUALIFIED)
12967                 {
12968                     if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
12969                       warning_at (typespec_loc, OPT_Wignored_qualifiers, "type "
12970                                     "qualifiers ignored on function return type");
12971                     /* [dcl.fct] "A volatile-qualified return type is
12972                        deprecated."  */
12973                     if (type_quals & TYPE_QUAL_VOLATILE)
12974                       warning_at (typespec_loc, OPT_Wvolatile,
12975                                     "%<volatile%>-qualified return type is "
12976                                     "deprecated");
12977 
12978                     /* We now know that the TYPE_QUALS don't apply to the
12979                        decl, but to its return type.  */
12980                     type_quals = TYPE_UNQUALIFIED;
12981                 }
12982 
12983               /* Error about some types functions can't return.  */
12984 
12985               if (TREE_CODE (type) == FUNCTION_TYPE)
12986                 {
12987                     error_at (typespec_loc, "%qs declared as function returning "
12988                                 "a function", name);
12989                     return error_mark_node;
12990                 }
12991               if (TREE_CODE (type) == ARRAY_TYPE)
12992                 {
12993                     error_at (typespec_loc, "%qs declared as function returning "
12994                                 "an array", name);
12995                     return error_mark_node;
12996                 }
12997               if (constinit_p && funcdecl_p)
12998                 {
12999                     error_at (declspecs->locations[ds_constinit],
13000                                 "%<constinit%> on function return type is not "
13001                                 "allowed");
13002                     return error_mark_node;
13003                 }
13004 
13005               if (check_decltype_auto (typespec_loc, type))
13006                 return error_mark_node;
13007 
13008               if (ctype == NULL_TREE
13009                     && decl_context == FIELD
13010                     && funcdecl_p
13011                     && friendp == 0)
13012                 ctype = current_class_type;
13013 
13014               if (ctype && (sfk == sfk_constructor
13015                                 || sfk == sfk_destructor))
13016                 {
13017                     /* We are within a class's scope. If our declarator name
13018                        is the same as the class name, and we are defining
13019                        a function, then it is a constructor/destructor, and
13020                        therefore returns a void type.  */
13021 
13022                     /* ISO C++ 12.4/2.  A destructor may not be declared
13023                        const or volatile.  A destructor may not be static.
13024                        A destructor may not be declared with ref-qualifier.
13025 
13026                        ISO C++ 12.1.  A constructor may not be declared
13027                        const or volatile.  A constructor may not be
13028                        virtual.  A constructor may not be static.
13029                        A constructor may not be declared with ref-qualifier. */
13030                     if (staticp == 2)
13031                       error_at (declspecs->locations[ds_storage_class],
13032                                   (flags == DTOR_FLAG)
13033                                   ? G_("destructor cannot be static member "
13034                                          "function")
13035                                   : G_("constructor cannot be static member "
13036                                          "function"));
13037                     if (memfn_quals)
13038                       {
13039                         error ((flags == DTOR_FLAG)
13040                                  ? G_("destructors may not be cv-qualified")
13041                                  : G_("constructors may not be cv-qualified"));
13042                         memfn_quals = TYPE_UNQUALIFIED;
13043                       }
13044 
13045                     if (rqual)
13046                       {
13047                         maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
13048                         error ((flags == DTOR_FLAG)
13049                                  ? G_("destructors may not be ref-qualified")
13050                                  : G_("constructors may not be ref-qualified"));
13051                         rqual = REF_QUAL_NONE;
13052                       }
13053 
13054                     if (decl_context == FIELD
13055                         && !member_function_or_else (ctype,
13056                                                              current_class_type,
13057                                                              flags))
13058                       return error_mark_node;
13059 
13060                     if (flags != DTOR_FLAG)
13061                       {
13062                         /* It's a constructor.  */
13063                         if (explicitp == 1)
13064                           explicitp = 2;
13065                         if (virtualp)
13066                           {
13067                               permerror (declspecs->locations[ds_virtual],
13068                                            "constructors cannot be declared %<virtual%>");
13069                               virtualp = 0;
13070                           }
13071                         if (decl_context == FIELD
13072                               && sfk != sfk_constructor)
13073                           return error_mark_node;
13074                       }
13075                     if (decl_context == FIELD)
13076                       staticp = 0;
13077                 }
13078               else if (friendp)
13079                 {
13080                     if (virtualp)
13081                       {
13082                         /* Cannot be both friend and virtual.  */
13083                         gcc_rich_location richloc (declspecs->locations[ds_virtual]);
13084                         richloc.add_range (declspecs->locations[ds_friend]);
13085                         error_at (&richloc, "virtual functions cannot be friends");
13086                         friendp = 0;
13087                       }
13088                     if (decl_context == NORMAL)
13089                       error_at (declarator->id_loc,
13090                                   "friend declaration not in class definition");
13091                     if (current_function_decl && funcdef_flag)
13092                       {
13093                         error_at (declarator->id_loc,
13094                                     "cannot define friend function %qs in a local "
13095                                     "class definition", name);
13096                         friendp = 0;
13097                       }
13098                     /* [class.friend]/6: A function can be defined in a friend
13099                        declaration if the function name is unqualified.  */
13100                     if (funcdef_flag && in_namespace)
13101                       {
13102                         if (in_namespace == global_namespace)
13103                           error_at (declarator->id_loc,
13104                                         "friend function definition %qs cannot have "
13105                                         "a name qualified with %<::%>", name);
13106                         else
13107                           error_at (declarator->id_loc,
13108                                         "friend function definition %qs cannot have "
13109                                         "a name qualified with %<%D::%>", name,
13110                                         in_namespace);
13111                       }
13112                 }
13113               else if (ctype && sfk == sfk_conversion)
13114                 {
13115                     if (explicitp == 1)
13116                       {
13117                         maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
13118                         explicitp = 2;
13119                       }
13120                 }
13121               else if (sfk == sfk_deduction_guide)
13122                 {
13123                     if (explicitp == 1)
13124                       explicitp = 2;
13125                 }
13126 
13127               tree pushed_scope = NULL_TREE;
13128               if (funcdecl_p
13129                     && decl_context != FIELD
13130                     && inner_declarator->u.id.qualifying_scope
13131                     && CLASS_TYPE_P (inner_declarator->u.id.qualifying_scope))
13132                 pushed_scope
13133                     = push_scope (inner_declarator->u.id.qualifying_scope);
13134 
13135               arg_types = grokparms (declarator->u.function.parameters, &parms);
13136 
13137               if (pushed_scope)
13138                 pop_scope (pushed_scope);
13139 
13140               if (inner_declarator
13141                     && inner_declarator->kind == cdk_id
13142                     && inner_declarator->u.id.sfk == sfk_destructor
13143                     && arg_types != void_list_node)
13144                 {
13145                     error_at (declarator->id_loc,
13146                                 "destructors may not have parameters");
13147                     arg_types = void_list_node;
13148                     parms = NULL_TREE;
13149                 }
13150 
13151               type = build_function_type (type, arg_types);
13152 
13153               tree attrs = declarator->std_attributes;
13154               if (tx_qual)
13155                 {
13156                     tree att = build_tree_list (tx_qual, NULL_TREE);
13157                     /* transaction_safe applies to the type, but
13158                        transaction_safe_dynamic applies to the function.  */
13159                     if (is_attribute_p ("transaction_safe", tx_qual))
13160                       attrs = chainon (attrs, att);
13161                     else
13162                       returned_attrs = chainon (returned_attrs, att);
13163                 }
13164               if (attrs)
13165                 /* [dcl.fct]/2:
13166 
13167                      The optional attribute-specifier-seq appertains to
13168                      the function type.  */
13169                 cplus_decl_attributes (&type, attrs, 0);
13170 
13171               if (raises)
13172                 type = build_exception_variant (type, raises);
13173             }
13174             break;
13175 
13176           case cdk_pointer:
13177           case cdk_reference:
13178           case cdk_ptrmem:
13179             /* Filter out pointers-to-references and references-to-references.
13180                We can get these if a TYPE_DECL is used.  */
13181 
13182             if (TYPE_REF_P (type))
13183               {
13184                 if (declarator->kind != cdk_reference)
13185                     {
13186                       error ("cannot declare pointer to %q#T", type);
13187                       type = TREE_TYPE (type);
13188                     }
13189 
13190                 /* In C++0x, we allow reference to reference declarations
13191                      that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
13192                      and template type arguments [14.3.1/4 temp.arg.type]. The
13193                      check for direct reference to reference declarations, which
13194                      are still forbidden, occurs below. Reasoning behind the change
13195                      can be found in DR106, DR540, and the rvalue reference
13196                      proposals. */
13197                 else if (cxx_dialect == cxx98)
13198                     {
13199                       error ("cannot declare reference to %q#T", type);
13200                       type = TREE_TYPE (type);
13201                     }
13202               }
13203             else if (VOID_TYPE_P (type))
13204               {
13205                 if (declarator->kind == cdk_reference)
13206                     error ("cannot declare reference to %q#T", type);
13207                 else if (declarator->kind == cdk_ptrmem)
13208                     error ("cannot declare pointer to %q#T member", type);
13209               }
13210 
13211             /* We now know that the TYPE_QUALS don't apply to the decl,
13212                but to the target of the pointer.  */
13213             type_quals = TYPE_UNQUALIFIED;
13214 
13215             /* This code used to handle METHOD_TYPE, but I don't think it's
13216                possible to get it here anymore.  */
13217             gcc_assert (TREE_CODE (type) != METHOD_TYPE);
13218             if (declarator->kind == cdk_ptrmem
13219                 && TREE_CODE (type) == FUNCTION_TYPE)
13220               {
13221                 memfn_quals |= type_memfn_quals (type);
13222                 type = build_memfn_type (type,
13223                                                declarator->u.pointer.class_type,
13224                                                memfn_quals,
13225                                                rqual);
13226                 if (type == error_mark_node)
13227                     return error_mark_node;
13228 
13229                 rqual = REF_QUAL_NONE;
13230                 memfn_quals = TYPE_UNQUALIFIED;
13231               }
13232 
13233             if (TREE_CODE (type) == FUNCTION_TYPE
13234                 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
13235                       || type_memfn_rqual (type) != REF_QUAL_NONE))
13236             error (declarator->kind == cdk_reference
13237                    ? G_("cannot declare reference to qualified function type %qT")
13238                    : G_("cannot declare pointer to qualified function type %qT"),
13239                        type);
13240 
13241             /* When the pointed-to type involves components of variable size,
13242                care must be taken to ensure that the size evaluation code is
13243                emitted early enough to dominate all the possible later uses
13244                and late enough for the variables on which it depends to have
13245                been assigned.
13246 
13247                This is expected to happen automatically when the pointed-to
13248                type has a name/declaration of it's own, but special attention
13249                is required if the type is anonymous.
13250 
13251                We handle the NORMAL and FIELD contexts here by inserting a
13252                dummy statement that just evaluates the size at a safe point
13253                and ensures it is not deferred until e.g. within a deeper
13254                conditional context (c++/43555).
13255 
13256                We expect nothing to be needed here for PARM or TYPENAME.
13257                Evaluating the size at this point for TYPENAME would
13258                actually be incorrect, as we might be in the middle of an
13259                expression with side effects on the pointed-to type size
13260                "arguments" prior to the pointer declaration point and the
13261                size evaluation could end up prior to the side effects.  */
13262 
13263             if (!TYPE_NAME (type)
13264                 && (decl_context == NORMAL || decl_context == FIELD)
13265                 && at_function_scope_p ()
13266                 && variably_modified_type_p (type, NULL_TREE))
13267               {
13268                 TYPE_NAME (type) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
13269                                                        NULL_TREE, type);
13270                 add_decl_expr (TYPE_NAME (type));
13271               }
13272 
13273             if (declarator->kind == cdk_reference)
13274               {
13275                 /* In C++0x, the type we are creating a reference to might be
13276                      a typedef which is itself a reference type. In that case,
13277                      we follow the reference collapsing rules in
13278                      [7.1.3/8 dcl.typedef] to create the final reference type:
13279 
13280                      "If a typedef TD names a type that is a reference to a type
13281                      T, an attempt to create the type 'lvalue reference to cv TD'
13282                      creates the type 'lvalue reference to T,' while an attempt
13283                      to create the type "rvalue reference to cv TD' creates the
13284                      type TD."
13285               */
13286                 if (VOID_TYPE_P (type))
13287                     /* We already gave an error.  */;
13288                 else if (TYPE_REF_P (type))
13289                     {
13290                       if (declarator->u.reference.rvalue_ref)
13291                         /* Leave type alone.  */;
13292                       else
13293                         type = cp_build_reference_type (TREE_TYPE (type), false);
13294                     }
13295                 else
13296                     type = cp_build_reference_type
13297                       (type, declarator->u.reference.rvalue_ref);
13298 
13299                 /* In C++0x, we need this check for direct reference to
13300                      reference declarations, which are forbidden by
13301                      [8.3.2/5 dcl.ref]. Reference to reference declarations
13302                      are only allowed indirectly through typedefs and template
13303                      type arguments. Example:
13304 
13305                        void foo(int & &);      // invalid ref-to-ref decl
13306 
13307                        typedef int & int_ref;
13308                        void foo(int_ref &);    // valid ref-to-ref decl
13309                 */
13310                 if (inner_declarator && inner_declarator->kind == cdk_reference)
13311                     error ("cannot declare reference to %q#T, which is not "
13312                            "a typedef or a template type argument", type);
13313               }
13314             else if (TREE_CODE (type) == METHOD_TYPE)
13315               type = build_ptrmemfunc_type (build_pointer_type (type));
13316             else if (declarator->kind == cdk_ptrmem)
13317               {
13318                 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
13319                                 != NAMESPACE_DECL);
13320                 if (declarator->u.pointer.class_type == error_mark_node)
13321                     /* We will already have complained.  */
13322                     type = error_mark_node;
13323                 else
13324                     type = build_ptrmem_type (declarator->u.pointer.class_type,
13325                                                     type);
13326               }
13327             else
13328               type = build_pointer_type (type);
13329 
13330             /* Process a list of type modifier keywords (such as
13331                const or volatile) that were given inside the `*' or `&'.  */
13332 
13333             if (declarator->u.pointer.qualifiers)
13334               {
13335                 type
13336                     = cp_build_qualified_type (type,
13337                                                      declarator->u.pointer.qualifiers);
13338                 type_quals = cp_type_quals (type);
13339               }
13340 
13341             /* Apply C++11 attributes to the pointer, and not to the
13342                type pointed to.  This is unlike what is done for GNU
13343                attributes above.  It is to comply with [dcl.ptr]/1:
13344 
13345                      [the optional attribute-specifier-seq (7.6.1) appertains
13346                       to the pointer and not to the object pointed to].  */
13347             if (declarator->std_attributes)
13348               decl_attributes (&type, declarator->std_attributes,
13349                                    0);
13350 
13351             ctype = NULL_TREE;
13352             break;
13353 
13354           case cdk_error:
13355             break;
13356 
13357           default:
13358             gcc_unreachable ();
13359           }
13360     }
13361 
13362   id_loc = declarator ? declarator->id_loc : input_location;
13363 
13364   if (innermost_code != cdk_function
13365     /* Don't check this if it can be the artifical decltype(auto)
13366        we created when building a constraint in a compound-requirement:
13367        that the type-constraint is plain is going to be checked in
13368        cp_parser_compound_requirement.  */
13369       && decl_context != TYPENAME
13370       && check_decltype_auto (id_loc, type))
13371     return error_mark_node;
13372 
13373   /* A `constexpr' specifier used in an object declaration declares
13374      the object as `const'.  */
13375   if (constexpr_p && innermost_code != cdk_function)
13376     {
13377       /* DR1688 says that a `constexpr' specifier in combination with
13378            `volatile' is valid.  */
13379 
13380       if (!TYPE_REF_P (type))
13381           {
13382             type_quals |= TYPE_QUAL_CONST;
13383             type = cp_build_qualified_type (type, type_quals);
13384           }
13385     }
13386 
13387   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
13388       && !FUNC_OR_METHOD_TYPE_P (type)
13389       && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
13390     {
13391       error ("template-id %qD used as a declarator",
13392                unqualified_id);
13393       unqualified_id = dname;
13394     }
13395 
13396   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
13397      qualified with a class-name, turn it into a METHOD_TYPE, unless
13398      we know that the function is static.  We take advantage of this
13399      opportunity to do other processing that pertains to entities
13400      explicitly declared to be class members.  Note that if DECLARATOR
13401      is non-NULL, we know it is a cdk_id declarator; otherwise, we
13402      would not have exited the loop above.  */
13403   if (declarator
13404       && declarator->kind == cdk_id
13405       && declarator->u.id.qualifying_scope
13406       && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
13407     {
13408       ctype = declarator->u.id.qualifying_scope;
13409       ctype = TYPE_MAIN_VARIANT (ctype);
13410       template_count = num_template_headers_for_class (ctype);
13411 
13412       if (ctype == current_class_type)
13413           {
13414             if (friendp)
13415               {
13416                 permerror (declspecs->locations[ds_friend],
13417                                "member functions are implicitly "
13418                                "friends of their class");
13419                 friendp = 0;
13420               }
13421             else
13422               permerror (id_loc, "extra qualification %<%T::%> on member %qs",
13423                            ctype, name);
13424           }
13425       else if (/* If the qualifying type is already complete, then we
13426                       can skip the following checks.  */
13427                  !COMPLETE_TYPE_P (ctype)
13428                  && (/* If the function is being defined, then
13429                           qualifying type must certainly be complete.  */
13430                        funcdef_flag
13431                        /* A friend declaration of "T::f" is OK, even if
13432                           "T" is a template parameter.  But, if this
13433                           function is not a friend, the qualifying type
13434                           must be a class.  */
13435                        || (!friendp && !CLASS_TYPE_P (ctype))
13436                        /* For a declaration, the type need not be
13437                           complete, if either it is dependent (since there
13438                           is no meaningful definition of complete in that
13439                           case) or the qualifying class is currently being
13440                           defined.  */
13441                        || !(dependent_type_p (ctype)
13442                               || currently_open_class (ctype)))
13443                  /* Check that the qualifying type is complete.  */
13444                  && !complete_type_or_else (ctype, NULL_TREE))
13445           return error_mark_node;
13446       else if (TREE_CODE (type) == FUNCTION_TYPE)
13447           {
13448             if (current_class_type
13449                 && (!friendp || funcdef_flag || initialized))
13450               {
13451                 error_at (id_loc, funcdef_flag || initialized
13452                               ? G_("cannot define member function %<%T::%s%> "
13453                                    "within %qT")
13454                               : G_("cannot declare member function %<%T::%s%> "
13455                                    "within %qT"),
13456                               ctype, name, current_class_type);
13457                 return error_mark_node;
13458               }
13459           }
13460       else if (typedef_p && current_class_type)
13461           {
13462             error_at (id_loc, "cannot declare member %<%T::%s%> within %qT",
13463                         ctype, name, current_class_type);
13464             return error_mark_node;
13465           }
13466     }
13467 
13468   if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
13469     ctype = current_class_type;
13470 
13471   /* Now TYPE has the actual type.  */
13472 
13473   if (returned_attrs)
13474     {
13475       if (attrlist)
13476           *attrlist = chainon (returned_attrs, *attrlist);
13477       else
13478           attrlist = &returned_attrs;
13479     }
13480 
13481   if (declarator
13482       && declarator->kind == cdk_id
13483       && declarator->std_attributes
13484       && attrlist != NULL)
13485     {
13486       /* [dcl.meaning]/1: The optional attribute-specifier-seq following
13487            a declarator-id appertains to the entity that is declared.  */
13488       if (declarator->std_attributes != error_mark_node)
13489           *attrlist = chainon (*attrlist, declarator->std_attributes);
13490       else
13491           /* We should have already diagnosed the issue (c++/78344).  */
13492           gcc_assert (seen_error ());
13493     }
13494 
13495   /* Handle parameter packs. */
13496   if (parameter_pack_p)
13497     {
13498       if (decl_context == PARM)
13499         /* Turn the type into a pack expansion.*/
13500         type = make_pack_expansion (type);
13501       else
13502         error ("non-parameter %qs cannot be a parameter pack", name);
13503     }
13504 
13505   if ((decl_context == FIELD || decl_context == PARM)
13506       && !processing_template_decl
13507       && variably_modified_type_p (type, NULL_TREE))
13508     {
13509       if (decl_context == FIELD)
13510           error_at (id_loc,
13511                       "data member may not have variably modified type %qT", type);
13512       else
13513           error_at (id_loc,
13514                       "parameter may not have variably modified type %qT", type);
13515       type = error_mark_node;
13516     }
13517 
13518   if (explicitp == 1 || (explicitp && friendp))
13519     {
13520       /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
13521            in the declaration of a constructor or conversion function within
13522            a class definition.  */
13523       if (!current_class_type)
13524           error_at (declspecs->locations[ds_explicit],
13525                       "%<explicit%> outside class declaration");
13526       else if (friendp)
13527           error_at (declspecs->locations[ds_explicit],
13528                       "%<explicit%> in friend declaration");
13529       else
13530           error_at (declspecs->locations[ds_explicit],
13531                       "only declarations of constructors and conversion operators "
13532                       "can be %<explicit%>");
13533       explicitp = 0;
13534     }
13535 
13536   if (storage_class == sc_mutable)
13537     {
13538       location_t sloc = declspecs->locations[ds_storage_class];
13539       if (decl_context != FIELD || friendp)
13540           {
13541             error_at (sloc, "non-member %qs cannot be declared %<mutable%>",
13542                         name);
13543             storage_class = sc_none;
13544           }
13545       else if (decl_context == TYPENAME || typedef_p)
13546           {
13547             error_at (sloc,
13548                         "non-object member %qs cannot be declared %<mutable%>",
13549                         name);
13550             storage_class = sc_none;
13551           }
13552       else if (FUNC_OR_METHOD_TYPE_P (type))
13553           {
13554             error_at (sloc, "function %qs cannot be declared %<mutable%>",
13555                         name);
13556             storage_class = sc_none;
13557           }
13558       else if (staticp)
13559           {
13560             error_at (sloc, "%<static%> %qs cannot be declared %<mutable%>",
13561                         name);
13562             storage_class = sc_none;
13563           }
13564       else if (type_quals & TYPE_QUAL_CONST)
13565           {
13566             error_at (sloc, "%<const%> %qs cannot be declared %<mutable%>",
13567                         name);
13568             storage_class = sc_none;
13569           }
13570       else if (TYPE_REF_P (type))
13571           {
13572             permerror (sloc, "reference %qs cannot be declared %<mutable%>",
13573                          name);
13574             storage_class = sc_none;
13575           }
13576     }
13577 
13578   /* If this is declaring a typedef name, return a TYPE_DECL.  */
13579   if (typedef_p && decl_context != TYPENAME)
13580     {
13581       bool alias_p = decl_spec_seq_has_spec_p (declspecs, ds_alias);
13582       tree decl;
13583 
13584       if (funcdef_flag)
13585           {
13586             if (decl_context == NORMAL)
13587               error_at (id_loc,
13588                           "typedef may not be a function definition");
13589             else
13590               error_at (id_loc,
13591                           "typedef may not be a member function definition");
13592             return error_mark_node;
13593           }
13594 
13595       /* This declaration:
13596 
13597              typedef void f(int) const;
13598 
13599            declares a function type which is not a member of any
13600            particular class, but which is cv-qualified; for
13601            example "f S::*" declares a pointer to a const-qualified
13602            member function of S.  We record the cv-qualification in the
13603            function type.  */
13604       if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
13605         {
13606           type = apply_memfn_quals (type, memfn_quals, rqual);
13607 
13608           /* We have now dealt with these qualifiers.  */
13609           memfn_quals = TYPE_UNQUALIFIED;
13610             rqual = REF_QUAL_NONE;
13611         }
13612 
13613       if (type_uses_auto (type))
13614           {
13615             if (alias_p)
13616               error_at (declspecs->locations[ds_type_spec],
13617                           "%<auto%> not allowed in alias declaration");
13618             else
13619               error_at (declspecs->locations[ds_type_spec],
13620                           "typedef declared %<auto%>");
13621             type = error_mark_node;
13622           }
13623 
13624       if (reqs)
13625           error_at (location_of (reqs), "requires-clause on typedef");
13626 
13627       if (id_declarator && declarator->u.id.qualifying_scope)
13628           {
13629             error_at (id_loc, "typedef name may not be a nested-name-specifier");
13630             type = error_mark_node;
13631           }
13632 
13633       if (decl_context == FIELD)
13634           decl = build_lang_decl_loc (id_loc, TYPE_DECL, unqualified_id, type);
13635       else
13636           decl = build_decl (id_loc, TYPE_DECL, unqualified_id, type);
13637 
13638       if (decl_context != FIELD)
13639           {
13640             if (!current_function_decl)
13641               DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
13642             else if (DECL_MAYBE_IN_CHARGE_CDTOR_P (current_function_decl))
13643               /* The TYPE_DECL is "abstract" because there will be
13644                  clones of this constructor/destructor, and there will
13645                  be copies of this TYPE_DECL generated in those
13646                  clones.  The decloning optimization (for space) may
13647                revert this subsequently if it determines that
13648                the clones should share a common implementation.  */
13649               DECL_ABSTRACT_P (decl) = true;
13650 
13651             set_originating_module (decl);
13652           }
13653       else if (current_class_type
13654                  && constructor_name_p (unqualified_id, current_class_type))
13655           permerror (id_loc, "ISO C++ forbids nested type %qD with same name "
13656                        "as enclosing class",
13657                        unqualified_id);
13658 
13659       /* If the user declares "typedef struct {...} foo" then the
13660            struct will have an anonymous name.  Fill that name in now.
13661            Nothing can refer to it, so nothing needs know about the name
13662            change.  */
13663       if (type != error_mark_node
13664             && unqualified_id
13665             && TYPE_NAME (type)
13666             && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
13667             && TYPE_UNNAMED_P (type)
13668             && declspecs->type_definition_p
13669             && attributes_naming_typedef_ok (*attrlist)
13670             && cp_type_quals (type) == TYPE_UNQUALIFIED)
13671           name_unnamed_type (type, decl);
13672 
13673       if (signed_p
13674             || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
13675           C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
13676 
13677       bad_specifiers (decl, BSP_TYPE, virtualp,
13678                           memfn_quals != TYPE_UNQUALIFIED,
13679                           inlinep, friendp, raises != NULL_TREE,
13680                           declspecs->locations);
13681 
13682       if (alias_p)
13683           /* Acknowledge that this was written:
13684                `using analias = atype;'.  */
13685           TYPE_DECL_ALIAS_P (decl) = 1;
13686 
13687       return decl;
13688     }
13689 
13690   /* Detect the case of an array type of unspecified size
13691      which came, as such, direct from a typedef name.
13692      We must copy the type, so that the array's domain can be
13693      individually set by the object's initializer.  */
13694 
13695   if (type && typedef_type
13696       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
13697       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
13698     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
13699 
13700   /* Detect where we're using a typedef of function type to declare a
13701      function. PARMS will not be set, so we must create it now.  */
13702 
13703   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
13704     {
13705       tree decls = NULL_TREE;
13706       tree args;
13707 
13708       for (args = TYPE_ARG_TYPES (type);
13709              args && args != void_list_node;
13710              args = TREE_CHAIN (args))
13711           {
13712             tree decl = cp_build_parm_decl (NULL_TREE, NULL_TREE,
13713                                                     TREE_VALUE (args));
13714 
13715             DECL_CHAIN (decl) = decls;
13716             decls = decl;
13717           }
13718 
13719       parms = nreverse (decls);
13720 
13721       if (decl_context != TYPENAME)
13722           {
13723             /* The qualifiers on the function type become the qualifiers on
13724                the non-static member function. */
13725             memfn_quals |= type_memfn_quals (type);
13726             rqual = type_memfn_rqual (type);
13727             type_quals = TYPE_UNQUALIFIED;
13728             raises = TYPE_RAISES_EXCEPTIONS (type);
13729           }
13730     }
13731 
13732   /* If this is a type name (such as, in a cast or sizeof),
13733      compute the type and return it now.  */
13734 
13735   if (decl_context == TYPENAME)
13736     {
13737       /* Note that here we don't care about type_quals.  */
13738 
13739       /* Special case: "friend class foo" looks like a TYPENAME context.  */
13740       if (friendp)
13741           {
13742             if (inlinep)
13743               {
13744                 error ("%<inline%> specified for friend class declaration");
13745                 inlinep = 0;
13746               }
13747 
13748             if (!current_aggr)
13749               {
13750                 /* Don't allow friend declaration without a class-key.  */
13751                 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
13752                     permerror (input_location, "template parameters cannot be friends");
13753                 else if (TREE_CODE (type) == TYPENAME_TYPE)
13754                     permerror (input_location, "friend declaration requires class-key, "
13755                                  "i.e. %<friend class %T::%D%>",
13756                                  TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
13757                 else
13758                     permerror (input_location, "friend declaration requires class-key, "
13759                                  "i.e. %<friend %#T%>",
13760                                  type);
13761               }
13762 
13763             /* Only try to do this stuff if we didn't already give up.  */
13764             if (type != integer_type_node)
13765               {
13766                 /* A friendly class?  */
13767                 if (current_class_type)
13768                     make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
13769                                            /*complain=*/true);
13770                 else
13771                     error ("trying to make class %qT a friend of global scope",
13772                            type);
13773 
13774                 type = void_type_node;
13775               }
13776           }
13777       else if (memfn_quals || rqual)
13778           {
13779             if (ctype == NULL_TREE
13780                 && TREE_CODE (type) == METHOD_TYPE)
13781               ctype = TYPE_METHOD_BASETYPE (type);
13782 
13783             if (ctype)
13784               type = build_memfn_type (type, ctype, memfn_quals, rqual);
13785             /* Core issue #547: need to allow this in template type args.
13786                Allow it in general in C++11 for alias-declarations.  */
13787             else if ((template_type_arg || cxx_dialect >= cxx11)
13788                        && TREE_CODE (type) == FUNCTION_TYPE)
13789               type = apply_memfn_quals (type, memfn_quals, rqual);
13790             else
13791               error ("invalid qualifiers on non-member function type");
13792           }
13793 
13794       if (reqs)
13795           error_at (location_of (reqs), "requires-clause on type-id");
13796 
13797       return type;
13798     }
13799   else if (unqualified_id == NULL_TREE && decl_context != PARM
13800              && decl_context != CATCHPARM
13801              && TREE_CODE (type) != UNION_TYPE
13802              && ! bitfield
13803              && innermost_code != cdk_decomp)
13804     {
13805       error ("abstract declarator %qT used as declaration", type);
13806       return error_mark_node;
13807     }
13808 
13809   if (!FUNC_OR_METHOD_TYPE_P (type))
13810     {
13811       /* Only functions may be declared using an operator-function-id.  */
13812       if (dname && IDENTIFIER_ANY_OP_P (dname))
13813           {
13814             error_at (id_loc, "declaration of %qD as non-function", dname);
13815             return error_mark_node;
13816           }
13817 
13818       if (reqs)
13819           error_at (location_of (reqs),
13820                       "requires-clause on declaration of non-function type %qT",
13821                       type);
13822     }
13823 
13824   /* We don't check parameter types here because we can emit a better
13825      error message later.  */
13826   if (decl_context != PARM)
13827     {
13828       type = check_var_type (unqualified_id, type, id_loc);
13829       if (type == error_mark_node)
13830         return error_mark_node;
13831     }
13832 
13833   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
13834      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
13835 
13836   if (decl_context == PARM || decl_context == CATCHPARM)
13837     {
13838       if (ctype || in_namespace)
13839           error ("cannot use %<::%> in parameter declaration");
13840 
13841       tree auto_node = type_uses_auto (type);
13842       if (auto_node && !(cxx_dialect >= cxx17 && template_parm_flag))
13843           {
13844             if (cxx_dialect >= cxx14)
13845               {
13846                 if (decl_context == PARM && AUTO_IS_DECLTYPE (auto_node))
13847                     error_at (typespec_loc,
13848                                 "cannot declare a parameter with %<decltype(auto)%>");
13849                 else if (tree c = CLASS_PLACEHOLDER_TEMPLATE (auto_node))
13850                     {
13851                       auto_diagnostic_group g;
13852                       error_at (typespec_loc,
13853                                   "class template placeholder %qE not permitted "
13854                                   "in this context", c);
13855                       if (decl_context == PARM && cxx_dialect >= cxx20)
13856                         inform (typespec_loc, "use %<auto%> for an "
13857                                   "abbreviated function template");
13858                     }
13859                 else
13860                     error_at (typespec_loc,
13861                                 "%<auto%> parameter not permitted in this context");
13862               }
13863             else
13864               error_at (typespec_loc, "parameter declared %<auto%>");
13865             type = error_mark_node;
13866           }
13867 
13868       /* A parameter declared as an array of T is really a pointer to T.
13869            One declared as a function is really a pointer to a function.
13870            One declared as a member is really a pointer to member.  */
13871 
13872       if (TREE_CODE (type) == ARRAY_TYPE)
13873           {
13874             /* Transfer const-ness of array into that of type pointed to.  */
13875             type = build_pointer_type (TREE_TYPE (type));
13876             type_quals = TYPE_UNQUALIFIED;
13877             array_parameter_p = true;
13878           }
13879       else if (TREE_CODE (type) == FUNCTION_TYPE)
13880           type = build_pointer_type (type);
13881     }
13882 
13883   if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
13884       && !(unqualified_id
13885              && identifier_p (unqualified_id)
13886              && IDENTIFIER_NEWDEL_OP_P (unqualified_id)))
13887     {
13888       cp_cv_quals real_quals = memfn_quals;
13889       if (cxx_dialect < cxx14 && constexpr_p
13890             && sfk != sfk_constructor && sfk != sfk_destructor)
13891           real_quals |= TYPE_QUAL_CONST;
13892       type = build_memfn_type (type, ctype, real_quals, rqual);
13893     }
13894 
13895   {
13896     tree decl = NULL_TREE;
13897 
13898     if (decl_context == PARM)
13899       {
13900           decl = cp_build_parm_decl (NULL_TREE, unqualified_id, type);
13901           DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
13902 
13903           bad_specifiers (decl, BSP_PARM, virtualp,
13904                               memfn_quals != TYPE_UNQUALIFIED,
13905                               inlinep, friendp, raises != NULL_TREE,
13906                               declspecs->locations);
13907       }
13908     else if (decl_context == FIELD)
13909       {
13910           if (!staticp && !friendp && !FUNC_OR_METHOD_TYPE_P (type))
13911             if (tree auto_node = type_uses_auto (type))
13912               {
13913                 location_t tloc = declspecs->locations[ds_type_spec];
13914                 if (CLASS_PLACEHOLDER_TEMPLATE (auto_node))
13915                     error_at (tloc, "invalid use of template-name %qE without an "
13916                                 "argument list",
13917                                 CLASS_PLACEHOLDER_TEMPLATE (auto_node));
13918                 else
13919                     error_at (tloc, "non-static data member declared with "
13920                                 "placeholder %qT", auto_node);
13921                 type = error_mark_node;
13922               }
13923 
13924           /* The C99 flexible array extension.  */
13925           if (!staticp && TREE_CODE (type) == ARRAY_TYPE
13926               && TYPE_DOMAIN (type) == NULL_TREE)
13927             {
13928               if (ctype
13929                     && (TREE_CODE (ctype) == UNION_TYPE
13930                         || TREE_CODE (ctype) == QUAL_UNION_TYPE))
13931                 {
13932                     error_at (id_loc, "flexible array member in union");
13933                     type = error_mark_node;
13934                 }
13935               else
13936                 {
13937                     /* Array is a flexible member.  */
13938                     if (name)
13939                       pedwarn (id_loc, OPT_Wpedantic,
13940                                  "ISO C++ forbids flexible array member %qs", name);
13941                     else
13942                       pedwarn (input_location, OPT_Wpedantic,
13943                                  "ISO C++ forbids flexible array members");
13944 
13945                     /* Flexible array member has a null domain.  */
13946                     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
13947                 }
13948             }
13949 
13950           if (type == error_mark_node)
13951             {
13952               /* Happens when declaring arrays of sizes which
13953                  are error_mark_node, for example.  */
13954               decl = NULL_TREE;
13955             }
13956           else if (in_namespace && !friendp)
13957             {
13958               /* Something like struct S { int N::j; };  */
13959               error_at (id_loc, "invalid use of %<::%>");
13960               return error_mark_node;
13961             }
13962           else if (FUNC_OR_METHOD_TYPE_P (type) && unqualified_id)
13963             {
13964               int publicp = 0;
13965               tree function_context;
13966 
13967               if (friendp == 0)
13968                 {
13969                     /* This should never happen in pure C++ (the check
13970                        could be an assert).  It could happen in
13971                        Objective-C++ if someone writes invalid code that
13972                        uses a function declaration for an instance
13973                        variable or property (instance variables and
13974                        properties are parsed as FIELD_DECLs, but they are
13975                        part of an Objective-C class, not a C++ class).
13976                        That code is invalid and is caught by this
13977                        check.  */
13978                     if (!ctype)
13979                       {
13980                         error ("declaration of function %qD in invalid context",
13981                                  unqualified_id);
13982                         return error_mark_node;
13983                       }
13984 
13985                     /* ``A union may [ ... ] not [ have ] virtual functions.''
13986                        ARM 9.5 */
13987                     if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
13988                       {
13989                         error_at (declspecs->locations[ds_virtual],
13990                                     "function %qD declared %<virtual%> inside a union",
13991                                     unqualified_id);
13992                         return error_mark_node;
13993                       }
13994 
13995                     if (virtualp
13996                         && identifier_p (unqualified_id)
13997                         && IDENTIFIER_NEWDEL_OP_P (unqualified_id))
13998                       {
13999                         error_at (declspecs->locations[ds_virtual],
14000                                     "%qD cannot be declared %<virtual%>, since it "
14001                                     "is always static", unqualified_id);
14002                         virtualp = 0;
14003                       }
14004                 }
14005 
14006               /* Check that the name used for a destructor makes sense.  */
14007               if (sfk == sfk_destructor)
14008                 {
14009                     tree uqname = id_declarator->u.id.unqualified_name;
14010 
14011                     if (!ctype)
14012                       {
14013                         gcc_assert (friendp);
14014                         error_at (id_loc, "expected qualified name in friend "
14015                                     "declaration for destructor %qD", uqname);
14016                         return error_mark_node;
14017                       }
14018 
14019                     if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
14020                       {
14021                         error_at (id_loc, "declaration of %qD as member of %qT",
14022                                     uqname, ctype);
14023                         return error_mark_node;
14024                       }
14025                 if (concept_p)
14026                   {
14027                     error_at (declspecs->locations[ds_concept],
14028                                     "a destructor cannot be %qs", "concept");
14029                     return error_mark_node;
14030                   }
14031                     if (constexpr_p && cxx_dialect < cxx20)
14032                       {
14033                         error_at (declspecs->locations[ds_constexpr],
14034                                     "%<constexpr%> destructors only available"
14035                                     " with %<-std=c++20%> or %<-std=gnu++20%>");
14036                         return error_mark_node;
14037                       }
14038                     if (consteval_p)
14039                       {
14040                         error_at (declspecs->locations[ds_consteval],
14041                                     "a destructor cannot be %qs", "consteval");
14042                         return error_mark_node;
14043                       }
14044                 }
14045               else if (sfk == sfk_constructor && friendp && !ctype)
14046                 {
14047                     error ("expected qualified name in friend declaration "
14048                            "for constructor %qD",
14049                            id_declarator->u.id.unqualified_name);
14050                     return error_mark_node;
14051                 }
14052               if (sfk == sfk_constructor)
14053                 if (concept_p)
14054                     {
14055                       error_at (declspecs->locations[ds_concept],
14056                                   "a constructor cannot be %<concept%>");
14057                       return error_mark_node;
14058                     }
14059               if (concept_p)
14060                 {
14061                     error_at (declspecs->locations[ds_concept],
14062                                 "a concept cannot be a member function");
14063                     concept_p = false;
14064                 }
14065               else if (consteval_p
14066                          && identifier_p (unqualified_id)
14067                          && IDENTIFIER_NEWDEL_OP_P (unqualified_id))
14068                 {
14069                     error_at (declspecs->locations[ds_consteval],
14070                                 "%qD cannot be %qs", unqualified_id, "consteval");
14071                     consteval_p = false;
14072                 }
14073 
14074               if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
14075                 {
14076                     tree tmpl = TREE_OPERAND (unqualified_id, 0);
14077                     if (variable_template_p (tmpl))
14078                       {
14079                         error_at (id_loc, "specialization of variable template "
14080                                     "%qD declared as function", tmpl);
14081                         inform (DECL_SOURCE_LOCATION (tmpl),
14082                                   "variable template declared here");
14083                         return error_mark_node;
14084                       }
14085                 }
14086 
14087               /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
14088               function_context
14089                 = (ctype != NULL_TREE
14090                      ? decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE);
14091               publicp = ((! friendp || ! staticp)
14092                            && function_context == NULL_TREE);
14093 
14094               decl = grokfndecl (ctype, type,
14095                                      TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
14096                                      ? unqualified_id : dname,
14097                                      parms,
14098                                      unqualified_id,
14099                                      declspecs,
14100                                      reqs,
14101                                      virtualp, flags, memfn_quals, rqual, raises,
14102                                      friendp ? -1 : 0, friendp, publicp,
14103                                      inlinep | (2 * constexpr_p) | (4 * concept_p)
14104                                                | (8 * consteval_p),
14105                                      initialized == SD_DELETED, sfk,
14106                                      funcdef_flag, late_return_type_p,
14107                                      template_count, in_namespace,
14108                                      attrlist, id_loc);
14109             decl = set_virt_specifiers (decl, virt_specifiers);
14110               if (decl == NULL_TREE)
14111                 return error_mark_node;
14112 #if 0
14113               /* This clobbers the attrs stored in `decl' from `attrlist'.  */
14114               /* The decl and setting of decl_attr is also turned off.  */
14115               decl = build_decl_attribute_variant (decl, decl_attr);
14116 #endif
14117 
14118               /* [class.conv.ctor]
14119 
14120                  A constructor declared without the function-specifier
14121                  explicit that can be called with a single parameter
14122                  specifies a conversion from the type of its first
14123                  parameter to the type of its class.  Such a constructor
14124                  is called a converting constructor.  */
14125               if (explicitp == 2)
14126                 DECL_NONCONVERTING_P (decl) = 1;
14127 
14128               if (declspecs->explicit_specifier)
14129                 store_explicit_specifier (decl, declspecs->explicit_specifier);
14130             }
14131           else if (!staticp
14132                      && ((current_class_type
14133                           && same_type_p (type, current_class_type))
14134                          || (!dependent_type_p (type)
14135                                && !COMPLETE_TYPE_P (complete_type (type))
14136                                && (!complete_or_array_type_p (type)
14137                                    || initialized == SD_UNINITIALIZED))))
14138             {
14139               if (TREE_CODE (type) != ARRAY_TYPE
14140                     || !COMPLETE_TYPE_P (TREE_TYPE (type)))
14141                 {
14142                     if (unqualified_id)
14143                       {
14144                         error_at (id_loc, "field %qD has incomplete type %qT",
14145                                     unqualified_id, type);
14146                         cxx_incomplete_type_inform (strip_array_types (type));
14147                       }
14148                     else
14149                       error ("name %qT has incomplete type", type);
14150 
14151                     type = error_mark_node;
14152                     decl = NULL_TREE;
14153                 }
14154             }
14155           else if (!verify_type_context (input_location,
14156                                                staticp
14157                                                ? TCTX_STATIC_STORAGE
14158                                                : TCTX_FIELD, type))
14159             {
14160               type = error_mark_node;
14161               decl = NULL_TREE;
14162             }
14163           else
14164             {
14165               if (friendp)
14166                 {
14167                     if (unqualified_id)
14168                       error_at (id_loc,
14169                                   "%qE is neither function nor member function; "
14170                                   "cannot be declared friend", unqualified_id);
14171                     else
14172                       error ("unnamed field is neither function nor member "
14173                                "function; cannot be declared friend");
14174                     return error_mark_node;
14175                 }
14176               decl = NULL_TREE;
14177             }
14178 
14179           if (friendp)
14180             {
14181               /* Packages tend to use GNU attributes on friends, so we only
14182                  warn for standard attributes.  */
14183               if (attrlist && !funcdef_flag && cxx11_attribute_p (*attrlist))
14184                 {
14185                     *attrlist = NULL_TREE;
14186                     if (warning_at (id_loc, OPT_Wattributes, "attribute ignored"))
14187                       inform (id_loc, "an attribute that appertains to a friend "
14188                                 "declaration that is not a definition is ignored");
14189                 }
14190               /* Friends are treated specially.  */
14191               if (ctype == current_class_type)
14192                 ;  /* We already issued a permerror.  */
14193               else if (decl && DECL_NAME (decl))
14194                 {
14195                     set_originating_module (decl, true);
14196 
14197                     if (initialized)
14198                       /* Kludge: We need funcdef_flag to be true in do_friend for
14199                          in-class defaulted functions, but that breaks grokfndecl.
14200                          So set it here.  */
14201                       funcdef_flag = true;
14202 
14203                     if (template_class_depth (current_class_type) == 0)
14204                       {
14205                         decl = check_explicit_specialization
14206                           (unqualified_id, decl, template_count,
14207                            2 * funcdef_flag + 4);
14208                         if (decl == error_mark_node)
14209                           return error_mark_node;
14210                       }
14211 
14212                     tree scope = ctype ? ctype : in_namespace;
14213                     decl = do_friend (scope, unqualified_id, decl,
14214                                           flags, funcdef_flag);
14215                     return decl;
14216                 }
14217               else
14218                 return error_mark_node;
14219             }
14220 
14221           /* Structure field.  It may not be a function, except for C++.  */
14222 
14223           if (decl == NULL_TREE)
14224             {
14225               if (staticp)
14226                 {
14227                     /* C++ allows static class members.  All other work
14228                        for this is done by grokfield.  */
14229                     decl = build_lang_decl_loc (id_loc, VAR_DECL,
14230                                                       unqualified_id, type);
14231                     set_linkage_for_static_data_member (decl);
14232                     if (concept_p)
14233                       error_at (declspecs->locations[ds_concept],
14234                                   "static data member %qE declared %qs",
14235                                   unqualified_id, "concept");
14236                     else if (constexpr_p && !initialized)
14237                       {
14238                         error_at (DECL_SOURCE_LOCATION (decl),
14239                                     "%<constexpr%> static data member %qD must "
14240                                     "have an initializer", decl);
14241                         constexpr_p = false;
14242                       }
14243                     if (consteval_p)
14244                       error_at (declspecs->locations[ds_consteval],
14245                                   "static data member %qE declared %qs",
14246                                   unqualified_id, "consteval");
14247 
14248                     if (inlinep)
14249                       mark_inline_variable (decl, declspecs->locations[ds_inline]);
14250 
14251                     if (!DECL_VAR_DECLARED_INLINE_P (decl)
14252                         && !(cxx_dialect >= cxx17 && constexpr_p))
14253                       /* Even if there is an in-class initialization, DECL
14254                          is considered undefined until an out-of-class
14255                          definition is provided, unless this is an inline
14256                          variable.  */
14257                       DECL_EXTERNAL (decl) = 1;
14258 
14259                     if (thread_p)
14260                       {
14261                         CP_DECL_THREAD_LOCAL_P (decl) = true;
14262                         if (!processing_template_decl)
14263                           set_decl_tls_model (decl, decl_default_tls_model (decl));
14264                         if (declspecs->gnu_thread_keyword_p)
14265                           SET_DECL_GNU_TLS_P (decl);
14266                       }
14267 
14268                     /* Set the constraints on the declaration.  */
14269                     bool memtmpl = (current_template_depth
14270                                         > template_class_depth (current_class_type));
14271                     if (memtmpl)
14272                       {
14273                         tree tmpl_reqs
14274                           = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
14275                         tree ci = build_constraints (tmpl_reqs, NULL_TREE);
14276                         set_constraints (decl, ci);
14277                       }
14278                 }
14279               else
14280                 {
14281                     if (concept_p)
14282                       {
14283                         error_at (declspecs->locations[ds_concept],
14284                                     "non-static data member %qE declared %qs",
14285                                     unqualified_id, "concept");
14286                         concept_p = false;
14287                         constexpr_p = false;
14288                       }
14289                     else if (constexpr_p)
14290                       {
14291                         error_at (declspecs->locations[ds_constexpr],
14292                                     "non-static data member %qE declared %qs",
14293                                     unqualified_id, "constexpr");
14294                         constexpr_p = false;
14295                       }
14296                     if (constinit_p)
14297                       {
14298                         error_at (declspecs->locations[ds_constinit],
14299                                     "non-static data member %qE declared %qs",
14300                                     unqualified_id, "constinit");
14301                         constinit_p = false;
14302                       }
14303                     if (consteval_p)
14304                       {
14305                         error_at (declspecs->locations[ds_consteval],
14306                                     "non-static data member %qE declared %qs",
14307                                     unqualified_id, "consteval");
14308                         consteval_p = false;
14309                       }
14310                     decl = build_decl (id_loc, FIELD_DECL, unqualified_id, type);
14311                     DECL_NONADDRESSABLE_P (decl) = bitfield;
14312                     if (bitfield && !unqualified_id)
14313                       DECL_PADDING_P (decl) = 1;
14314 
14315                     if (storage_class == sc_mutable)
14316                       {
14317                         DECL_MUTABLE_P (decl) = 1;
14318                         storage_class = sc_none;
14319                       }
14320 
14321                     if (initialized)
14322                       {
14323                         /* An attempt is being made to initialize a non-static
14324                            member.  This is new in C++11.  */
14325                         maybe_warn_cpp0x (CPP0X_NSDMI, init_loc);
14326 
14327                         /* If this has been parsed with static storage class, but
14328                            errors forced staticp to be cleared, ensure NSDMI is
14329                            not present.  */
14330                         if (declspecs->storage_class == sc_static)
14331                           DECL_INITIAL (decl) = error_mark_node;
14332                       }
14333                 }
14334 
14335               bad_specifiers (decl, BSP_FIELD, virtualp,
14336                                   memfn_quals != TYPE_UNQUALIFIED,
14337                                   staticp ? false : inlinep, friendp,
14338                                   raises != NULL_TREE,
14339                                   declspecs->locations);
14340             }
14341       }
14342     else if (FUNC_OR_METHOD_TYPE_P (type))
14343       {
14344           tree original_name;
14345           int publicp = 0;
14346 
14347           if (!unqualified_id)
14348             return error_mark_node;
14349 
14350           if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
14351             original_name = dname;
14352           else
14353             original_name = unqualified_id;
14354           // FIXME:gcc_assert (original_name == dname);
14355 
14356           if (storage_class == sc_auto)
14357             error_at (declspecs->locations[ds_storage_class],
14358                         "storage class %<auto%> invalid for function %qs", name);
14359           else if (storage_class == sc_register)
14360             error_at (declspecs->locations[ds_storage_class],
14361                         "storage class %<register%> invalid for function %qs",
14362                         name);
14363           else if (thread_p)
14364             {
14365               if (declspecs->gnu_thread_keyword_p)
14366                 error_at (declspecs->locations[ds_thread],
14367                               "storage class %<__thread%> invalid for function %qs",
14368                               name);
14369               else
14370                 error_at (declspecs->locations[ds_thread],
14371                               "storage class %<thread_local%> invalid for "
14372                               "function %qs", name);
14373             }
14374 
14375         if (virt_specifiers)
14376           error ("virt-specifiers in %qs not allowed outside a class "
14377                      "definition", name);
14378           /* Function declaration not at top level.
14379              Storage classes other than `extern' are not allowed
14380              and `extern' makes no difference.  */
14381           if (! toplevel_bindings_p ()
14382               && (storage_class == sc_static
14383                     || decl_spec_seq_has_spec_p (declspecs, ds_inline))
14384               && pedantic)
14385             {
14386               if (storage_class == sc_static)
14387                 pedwarn (declspecs->locations[ds_storage_class], OPT_Wpedantic,
14388                            "%<static%> specifier invalid for function %qs "
14389                            "declared out of global scope", name);
14390               else
14391                 pedwarn (declspecs->locations[ds_inline], OPT_Wpedantic,
14392                            "%<inline%> specifier invalid for function %qs "
14393                            "declared out of global scope", name);
14394             }
14395 
14396           if (ctype == NULL_TREE)
14397             {
14398               if (virtualp)
14399                 {
14400                     error ("virtual non-class function %qs", name);
14401                     virtualp = 0;
14402                 }
14403               else if (sfk == sfk_constructor
14404                          || sfk == sfk_destructor)
14405                 {
14406                     error (funcdef_flag
14407                            ? G_("%qs defined in a non-class scope")
14408                            : G_("%qs declared in a non-class scope"), name);
14409                     sfk = sfk_none;
14410                 }
14411             }
14412           if (consteval_p
14413               && identifier_p (unqualified_id)
14414               && IDENTIFIER_NEWDEL_OP_P (unqualified_id))
14415             {
14416               error_at (declspecs->locations[ds_consteval],
14417                           "%qD cannot be %qs", unqualified_id, "consteval");
14418               consteval_p = false;
14419             }
14420 
14421           /* Record whether the function is public.  */
14422           publicp = (ctype != NULL_TREE
14423                        || storage_class != sc_static);
14424 
14425           decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
14426                                  declspecs,
14427                            reqs, virtualp, flags, memfn_quals, rqual, raises,
14428                                  1, friendp,
14429                                  publicp,
14430                                  inlinep | (2 * constexpr_p) | (4 * concept_p)
14431                                            | (8 * consteval_p),
14432                                  initialized == SD_DELETED,
14433                            sfk,
14434                            funcdef_flag,
14435                                  late_return_type_p,
14436                                  template_count, in_namespace, attrlist,
14437                                  id_loc);
14438           if (decl == NULL_TREE)
14439             return error_mark_node;
14440 
14441           if (explicitp == 2)
14442             DECL_NONCONVERTING_P (decl) = 1;
14443           if (staticp == 1)
14444             {
14445               int invalid_static = 0;
14446 
14447               /* Don't allow a static member function in a class, and forbid
14448                  declaring main to be static.  */
14449               if (TREE_CODE (type) == METHOD_TYPE)
14450                 {
14451                     permerror (input_location, "cannot declare member function %qD to have "
14452                                  "static linkage", decl);
14453                     invalid_static = 1;
14454                 }
14455               else if (current_function_decl)
14456                 {
14457                     /* 7.1.1: There can be no static function declarations within a
14458                        block.  */
14459                     error_at (declspecs->locations[ds_storage_class],
14460                                 "cannot declare static function inside another function");
14461                     invalid_static = 1;
14462                 }
14463 
14464               if (invalid_static)
14465                 {
14466                     staticp = 0;
14467                     storage_class = sc_none;
14468                 }
14469             }
14470           if (declspecs->explicit_specifier)
14471             store_explicit_specifier (decl, declspecs->explicit_specifier);
14472       }
14473     else
14474       {
14475           /* It's a variable.  */
14476 
14477           /* An uninitialized decl with `extern' is a reference.  */
14478           decl = grokvardecl (type, dname, unqualified_id,
14479                                   declspecs,
14480                                   initialized,
14481                                   type_quals,
14482                                   inlinep,
14483                                   concept_p,
14484                                   template_count,
14485                                   ctype ? ctype : in_namespace,
14486                                   id_loc);
14487           if (decl == NULL_TREE)
14488             return error_mark_node;
14489 
14490           bad_specifiers (decl, BSP_VAR, virtualp,
14491                               memfn_quals != TYPE_UNQUALIFIED,
14492                               inlinep, friendp, raises != NULL_TREE,
14493                               declspecs->locations);
14494 
14495           if (ctype)
14496             {
14497               DECL_CONTEXT (decl) = ctype;
14498               if (staticp == 1)
14499                 {
14500                     permerror (declspecs->locations[ds_storage_class],
14501                                  "%<static%> may not be used when defining "
14502                                  "(as opposed to declaring) a static data member");
14503                     staticp = 0;
14504                     storage_class = sc_none;
14505                 }
14506               if (storage_class == sc_register && TREE_STATIC (decl))
14507                 {
14508                     error ("static member %qD declared %<register%>", decl);
14509                     storage_class = sc_none;
14510                 }
14511               if (storage_class == sc_extern && pedantic)
14512                 {
14513                     pedwarn (input_location, OPT_Wpedantic,
14514                                "cannot explicitly declare member %q#D to have "
14515                                "extern linkage", decl);
14516                     storage_class = sc_none;
14517                 }
14518             }
14519           else if (constexpr_p && DECL_EXTERNAL (decl))
14520             {
14521               error_at (DECL_SOURCE_LOCATION (decl),
14522                           "declaration of %<constexpr%> variable %qD "
14523                           "is not a definition", decl);
14524               constexpr_p = false;
14525             }
14526           if (consteval_p)
14527             {
14528               error_at (DECL_SOURCE_LOCATION (decl),
14529                           "a variable cannot be declared %<consteval%>");
14530               consteval_p = false;
14531             }
14532 
14533           if (inlinep)
14534             mark_inline_variable (decl, declspecs->locations[ds_inline]);
14535           if (innermost_code == cdk_decomp)
14536             {
14537               gcc_assert (declarator && declarator->kind == cdk_decomp);
14538               DECL_SOURCE_LOCATION (decl) = id_loc;
14539               DECL_ARTIFICIAL (decl) = 1;
14540               fit_decomposition_lang_decl (decl, NULL_TREE);
14541             }
14542       }
14543 
14544     if (VAR_P (decl) && !initialized)
14545       if (tree auto_node = type_uses_auto (type))
14546           if (!CLASS_PLACEHOLDER_TEMPLATE (auto_node))
14547             {
14548               location_t loc = declspecs->locations[ds_type_spec];
14549               error_at (loc, "declaration of %q#D has no initializer", decl);
14550               TREE_TYPE (decl) = error_mark_node;
14551             }
14552 
14553     if (storage_class == sc_extern && initialized && !funcdef_flag)
14554       {
14555           if (toplevel_bindings_p ())
14556             {
14557               /* It's common practice (and completely valid) to have a const
14558                  be initialized and declared extern.  */
14559               if (!(type_quals & TYPE_QUAL_CONST))
14560                 warning_at (DECL_SOURCE_LOCATION (decl), 0,
14561                                 "%qs initialized and declared %<extern%>", name);
14562             }
14563           else
14564             {
14565               error_at (DECL_SOURCE_LOCATION (decl),
14566                           "%qs has both %<extern%> and initializer", name);
14567               return error_mark_node;
14568             }
14569       }
14570 
14571     /* Record `register' declaration for warnings on &
14572        and in case doing stupid register allocation.  */
14573 
14574     if (storage_class == sc_register)
14575       {
14576           DECL_REGISTER (decl) = 1;
14577           /* Warn about register storage specifiers on PARM_DECLs.  */
14578           if (TREE_CODE (decl) == PARM_DECL)
14579             {
14580               if (cxx_dialect >= cxx17)
14581                 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
14582                            "ISO C++17 does not allow %<register%> storage "
14583                            "class specifier");
14584               else
14585                 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
14586                                 "%<register%> storage class specifier used");
14587             }
14588       }
14589     else if (storage_class == sc_extern)
14590       DECL_THIS_EXTERN (decl) = 1;
14591     else if (storage_class == sc_static)
14592       DECL_THIS_STATIC (decl) = 1;
14593 
14594     if (VAR_P (decl))
14595       {
14596           /* Set constexpr flag on vars (functions got it in grokfndecl).  */
14597           if (constexpr_p)
14598             DECL_DECLARED_CONSTEXPR_P (decl) = true;
14599           /* And the constinit flag (which only applies to variables).  */
14600           else if (constinit_p)
14601             DECL_DECLARED_CONSTINIT_P (decl) = true;
14602       }
14603 
14604     /* Record constancy and volatility on the DECL itself .  There's
14605        no need to do this when processing a template; we'll do this
14606        for the instantiated declaration based on the type of DECL.  */
14607     if (!processing_template_decl)
14608       cp_apply_type_quals_to_decl (type_quals, decl);
14609 
14610     return decl;
14611   }
14612 }
14613 
14614 /* Subroutine of start_function.  Ensure that each of the parameter
14615    types (as listed in PARMS) is complete, as is required for a
14616    function definition.  */
14617 
14618 static void
require_complete_types_for_parms(tree parms)14619 require_complete_types_for_parms (tree parms)
14620 {
14621   for (; parms; parms = DECL_CHAIN (parms))
14622     {
14623       if (dependent_type_p (TREE_TYPE (parms)))
14624           continue;
14625       if (!VOID_TYPE_P (TREE_TYPE (parms))
14626             && complete_type_or_else (TREE_TYPE (parms), parms))
14627           {
14628             relayout_decl (parms);
14629             DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
14630 
14631             abstract_virtuals_error (parms, TREE_TYPE (parms));
14632             maybe_warn_parm_abi (TREE_TYPE (parms),
14633                                      DECL_SOURCE_LOCATION (parms));
14634           }
14635       else
14636           /* grokparms or complete_type_or_else will have already issued
14637              an error.  */
14638           TREE_TYPE (parms) = error_mark_node;
14639     }
14640 }
14641 
14642 /* Returns nonzero if T is a local variable.  */
14643 
14644 int
local_variable_p(const_tree t)14645 local_variable_p (const_tree t)
14646 {
14647   if ((VAR_P (t)
14648        && (DECL_LOCAL_DECL_P (t)
14649              || !DECL_CONTEXT (t)
14650              || TREE_CODE (DECL_CONTEXT (t)) == FUNCTION_DECL))
14651       || (TREE_CODE (t) == PARM_DECL))
14652     return 1;
14653 
14654   return 0;
14655 }
14656 
14657 /* Like local_variable_p, but suitable for use as a tree-walking
14658    function.  */
14659 
14660 static tree
local_variable_p_walkfn(tree * tp,int * walk_subtrees,void *)14661 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
14662                                void * /*data*/)
14663 {
14664   if (unevaluated_p (TREE_CODE (*tp)))
14665     {
14666       /* DR 2082 permits local variables in unevaluated contexts
14667            within a default argument.  */
14668       *walk_subtrees = 0;
14669       return NULL_TREE;
14670     }
14671 
14672   if (local_variable_p (*tp)
14673       && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
14674     return *tp;
14675   else if (TYPE_P (*tp))
14676     *walk_subtrees = 0;
14677 
14678   return NULL_TREE;
14679 }
14680 
14681 /* Check that ARG, which is a default-argument expression for a
14682    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
14683    something goes wrong.  DECL may also be a _TYPE node, rather than a
14684    DECL, if there is no DECL available.  */
14685 
14686 tree
check_default_argument(tree decl,tree arg,tsubst_flags_t complain)14687 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
14688 {
14689   tree var;
14690   tree decl_type;
14691 
14692   if (TREE_CODE (arg) == DEFERRED_PARSE)
14693     /* We get a DEFERRED_PARSE when looking at an in-class declaration
14694        with a default argument.  Ignore the argument for now; we'll
14695        deal with it after the class is complete.  */
14696     return arg;
14697 
14698   if (TYPE_P (decl))
14699     {
14700       decl_type = decl;
14701       decl = NULL_TREE;
14702     }
14703   else
14704     decl_type = TREE_TYPE (decl);
14705 
14706   if (arg == error_mark_node
14707       || decl == error_mark_node
14708       || TREE_TYPE (arg) == error_mark_node
14709       || decl_type == error_mark_node)
14710     /* Something already went wrong.  There's no need to check
14711        further.  */
14712     return error_mark_node;
14713 
14714   /* [dcl.fct.default]
14715 
14716      A default argument expression is implicitly converted to the
14717      parameter type.  */
14718   ++cp_unevaluated_operand;
14719   /* Avoid digest_init clobbering the initializer.  */
14720   tree carg = BRACE_ENCLOSED_INITIALIZER_P (arg) ? unshare_expr (arg): arg;
14721   perform_implicit_conversion_flags (decl_type, carg, complain,
14722                                              LOOKUP_IMPLICIT);
14723   --cp_unevaluated_operand;
14724 
14725   /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
14726      the call sites.  */
14727   if (TYPE_PTR_OR_PTRMEM_P (decl_type)
14728       && null_ptr_cst_p (arg)
14729       /* Don't lose side-effects as in PR90473.  */
14730       && !TREE_SIDE_EFFECTS (arg))
14731     return nullptr_node;
14732 
14733   /* [dcl.fct.default]
14734 
14735      Local variables shall not be used in default argument
14736      expressions.
14737 
14738      The keyword `this' shall not be used in a default argument of a
14739      member function.  */
14740   var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
14741   if (var)
14742     {
14743       if (complain & tf_warning_or_error)
14744           {
14745             if (DECL_NAME (var) == this_identifier)
14746               permerror (input_location, "default argument %qE uses %qD",
14747                            arg, var);
14748             else
14749               error ("default argument %qE uses local variable %qD", arg, var);
14750           }
14751       return error_mark_node;
14752     }
14753 
14754   /* All is well.  */
14755   return arg;
14756 }
14757 
14758 /* Returns a deprecated type used within TYPE, or NULL_TREE if none.  */
14759 
14760 static tree
type_is_deprecated(tree type)14761 type_is_deprecated (tree type)
14762 {
14763   enum tree_code code;
14764   if (TREE_DEPRECATED (type))
14765     return type;
14766   if (TYPE_NAME (type))
14767     {
14768       if (TREE_DEPRECATED (TYPE_NAME (type)))
14769           return type;
14770       else
14771           {
14772             cp_warn_deprecated_use_scopes (CP_DECL_CONTEXT (TYPE_NAME (type)));
14773             return NULL_TREE;
14774           }
14775     }
14776 
14777   /* Do warn about using typedefs to a deprecated class.  */
14778   if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
14779     return type_is_deprecated (TYPE_MAIN_VARIANT (type));
14780 
14781   code = TREE_CODE (type);
14782 
14783   if (code == POINTER_TYPE || code == REFERENCE_TYPE
14784       || code == OFFSET_TYPE || code == FUNCTION_TYPE
14785       || code == METHOD_TYPE || code == ARRAY_TYPE)
14786     return type_is_deprecated (TREE_TYPE (type));
14787 
14788   if (TYPE_PTRMEMFUNC_P (type))
14789     return type_is_deprecated
14790       (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
14791 
14792   return NULL_TREE;
14793 }
14794 
14795 /* Returns an unavailable type used within TYPE, or NULL_TREE if none.  */
14796 
14797 static tree
type_is_unavailable(tree type)14798 type_is_unavailable (tree type)
14799 {
14800   enum tree_code code;
14801   if (TREE_UNAVAILABLE (type))
14802     return type;
14803   if (TYPE_NAME (type))
14804     {
14805       if (TREE_UNAVAILABLE (TYPE_NAME (type)))
14806           return type;
14807       else
14808           {
14809             cp_warn_deprecated_use_scopes (CP_DECL_CONTEXT (TYPE_NAME (type)));
14810             return NULL_TREE;
14811           }
14812     }
14813 
14814   /* Do warn about using typedefs to a deprecated class.  */
14815   if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
14816     return type_is_deprecated (TYPE_MAIN_VARIANT (type));
14817 
14818   code = TREE_CODE (type);
14819 
14820   if (code == POINTER_TYPE || code == REFERENCE_TYPE
14821       || code == OFFSET_TYPE || code == FUNCTION_TYPE
14822       || code == METHOD_TYPE || code == ARRAY_TYPE)
14823     return type_is_unavailable (TREE_TYPE (type));
14824 
14825   if (TYPE_PTRMEMFUNC_P (type))
14826     return type_is_unavailable
14827       (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
14828 
14829   return NULL_TREE;
14830 }
14831 
14832 /* Decode the list of parameter types for a function type.
14833    Given the list of things declared inside the parens,
14834    return a list of types.
14835 
14836    If this parameter does not end with an ellipsis, we append
14837    void_list_node.
14838 
14839    *PARMS is set to the chain of PARM_DECLs created.  */
14840 
14841 tree
grokparms(tree parmlist,tree * parms)14842 grokparms (tree parmlist, tree *parms)
14843 {
14844   tree result = NULL_TREE;
14845   tree decls = NULL_TREE;
14846   tree parm;
14847   int any_error = 0;
14848 
14849   for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
14850     {
14851       tree type = NULL_TREE;
14852       tree init = TREE_PURPOSE (parm);
14853       tree decl = TREE_VALUE (parm);
14854 
14855       if (parm == void_list_node || parm == explicit_void_list_node)
14856           break;
14857 
14858       if (! decl || TREE_TYPE (decl) == error_mark_node)
14859           {
14860             any_error = 1;
14861             continue;
14862           }
14863 
14864       type = TREE_TYPE (decl);
14865       if (VOID_TYPE_P (type))
14866           {
14867             if (same_type_p (type, void_type_node)
14868                 && !init
14869                 && !DECL_NAME (decl) && !result
14870                 && TREE_CHAIN (parm) == void_list_node)
14871               /* DR 577: A parameter list consisting of a single
14872                  unnamed parameter of non-dependent type 'void'.  */
14873               break;
14874             else if (cv_qualified_p (type))
14875               error_at (DECL_SOURCE_LOCATION (decl),
14876                           "invalid use of cv-qualified type %qT in "
14877                           "parameter declaration", type);
14878             else
14879               error_at (DECL_SOURCE_LOCATION (decl),
14880                           "invalid use of type %<void%> in parameter "
14881                           "declaration");
14882             /* It's not a good idea to actually create parameters of
14883                type `void'; other parts of the compiler assume that a
14884                void type terminates the parameter list.  */
14885             type = error_mark_node;
14886             TREE_TYPE (decl) = error_mark_node;
14887           }
14888 
14889       if (type != error_mark_node)
14890           {
14891             if (deprecated_state != UNAVAILABLE_DEPRECATED_SUPPRESS)
14892               {
14893                 tree unavailtype = type_is_unavailable (type);
14894                 if (unavailtype)
14895                     cp_handle_deprecated_or_unavailable (unavailtype);
14896               }
14897             if (deprecated_state != DEPRECATED_SUPPRESS
14898                 && deprecated_state != UNAVAILABLE_DEPRECATED_SUPPRESS)
14899               {
14900                 tree deptype = type_is_deprecated (type);
14901                 if (deptype)
14902                     cp_handle_deprecated_or_unavailable (deptype);
14903               }
14904 
14905             /* [dcl.fct] "A parameter with volatile-qualified type is
14906                deprecated."  */
14907             if (CP_TYPE_VOLATILE_P (type))
14908               warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wvolatile,
14909                               "%<volatile%>-qualified parameter is "
14910                               "deprecated");
14911 
14912             /* Top-level qualifiers on the parameters are
14913                ignored for function types.  */
14914             type = cp_build_qualified_type (type, 0);
14915             if (TREE_CODE (type) == METHOD_TYPE)
14916               {
14917                 error ("parameter %qD invalidly declared method type", decl);
14918                 type = build_pointer_type (type);
14919                 TREE_TYPE (decl) = type;
14920               }
14921             else if (cxx_dialect < cxx17 && INDIRECT_TYPE_P (type))
14922               {
14923                 /* Before C++17 DR 393:
14924                      [dcl.fct]/6, parameter types cannot contain pointers
14925                      (references) to arrays of unknown bound.  */
14926                 tree t = TREE_TYPE (type);
14927                 int ptr = TYPE_PTR_P (type);
14928 
14929                 while (1)
14930                     {
14931                       if (TYPE_PTR_P (t))
14932                         ptr = 1;
14933                       else if (TREE_CODE (t) != ARRAY_TYPE)
14934                         break;
14935                       else if (!TYPE_DOMAIN (t))
14936                         break;
14937                       t = TREE_TYPE (t);
14938                     }
14939                 if (TREE_CODE (t) == ARRAY_TYPE)
14940                     pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
14941                                ptr
14942                                ? G_("parameter %qD includes pointer to array of "
14943                                     "unknown bound %qT")
14944                                : G_("parameter %qD includes reference to array of "
14945                                     "unknown bound %qT"),
14946                                decl, t);
14947               }
14948 
14949             if (init && !processing_template_decl)
14950               init = check_default_argument (decl, init, tf_warning_or_error);
14951           }
14952 
14953       DECL_CHAIN (decl) = decls;
14954       decls = decl;
14955       result = tree_cons (init, type, result);
14956     }
14957   decls = nreverse (decls);
14958   result = nreverse (result);
14959   if (parm)
14960     result = chainon (result, void_list_node);
14961   *parms = decls;
14962   if (any_error)
14963     result = NULL_TREE;
14964 
14965   if (any_error)
14966     /* We had parm errors, recover by giving the function (...) type.  */
14967     result = NULL_TREE;
14968 
14969   return result;
14970 }
14971 
14972 
14973 /* D is a constructor or overloaded `operator='.
14974 
14975    Let T be the class in which D is declared. Then, this function
14976    returns:
14977 
14978    -1 if D's is an ill-formed constructor or copy assignment operator
14979       whose first parameter is of type `T'.
14980    0  if D is not a copy constructor or copy assignment
14981       operator.
14982    1  if D is a copy constructor or copy assignment operator whose
14983       first parameter is a reference to non-const qualified T.
14984    2  if D is a copy constructor or copy assignment operator whose
14985       first parameter is a reference to const qualified T.
14986 
14987    This function can be used as a predicate. Positive values indicate
14988    a copy constructor and nonzero values indicate a copy assignment
14989    operator.  */
14990 
14991 int
copy_fn_p(const_tree d)14992 copy_fn_p (const_tree d)
14993 {
14994   tree args;
14995   tree arg_type;
14996   int result = 1;
14997 
14998   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
14999 
15000   if (TREE_CODE (d) == TEMPLATE_DECL
15001       || (DECL_TEMPLATE_INFO (d)
15002             && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
15003     /* Instantiations of template member functions are never copy
15004        functions.  Note that member functions of templated classes are
15005        represented as template functions internally, and we must
15006        accept those as copy functions.  */
15007     return 0;
15008 
15009   if (!DECL_CONSTRUCTOR_P (d)
15010       && DECL_NAME (d) != assign_op_identifier)
15011     return 0;
15012 
15013   args = FUNCTION_FIRST_USER_PARMTYPE (d);
15014   if (!args)
15015     return 0;
15016 
15017   arg_type = TREE_VALUE (args);
15018   if (arg_type == error_mark_node)
15019     return 0;
15020 
15021   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
15022     {
15023       /* Pass by value copy assignment operator.  */
15024       result = -1;
15025     }
15026   else if (TYPE_REF_P (arg_type)
15027              && !TYPE_REF_IS_RVALUE (arg_type)
15028              && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
15029     {
15030       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
15031           result = 2;
15032     }
15033   else
15034     return 0;
15035 
15036   args = TREE_CHAIN (args);
15037 
15038   if (args && args != void_list_node && !TREE_PURPOSE (args))
15039     /* There are more non-optional args.  */
15040     return 0;
15041 
15042   return result;
15043 }
15044 
15045 /* D is a constructor or overloaded `operator='.
15046 
15047    Let T be the class in which D is declared. Then, this function
15048    returns true when D is a move constructor or move assignment
15049    operator, false otherwise.  */
15050 
15051 bool
move_fn_p(const_tree d)15052 move_fn_p (const_tree d)
15053 {
15054   if (cxx_dialect == cxx98)
15055     /* There are no move constructors if we are in C++98 mode.  */
15056     return false;
15057 
15058   if (TREE_CODE (d) == TEMPLATE_DECL
15059       || (DECL_TEMPLATE_INFO (d)
15060          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
15061     /* Instantiations of template member functions are never move
15062        functions.  Note that member functions of templated classes are
15063        represented as template functions internally, and we must
15064        accept those as move functions.  */
15065     return 0;
15066 
15067   return move_signature_fn_p (d);
15068 }
15069 
15070 /* D is a constructor or overloaded `operator='.
15071 
15072    Then, this function returns true when D has the same signature as a move
15073    constructor or move assignment operator (because either it is such a
15074    ctor/op= or it is a template specialization with the same signature),
15075    false otherwise.  */
15076 
15077 bool
move_signature_fn_p(const_tree d)15078 move_signature_fn_p (const_tree d)
15079 {
15080   tree args;
15081   tree arg_type;
15082   bool result = false;
15083 
15084   if (!DECL_CONSTRUCTOR_P (d)
15085       && DECL_NAME (d) != assign_op_identifier)
15086     return 0;
15087 
15088   args = FUNCTION_FIRST_USER_PARMTYPE (d);
15089   if (!args)
15090     return 0;
15091 
15092   arg_type = TREE_VALUE (args);
15093   if (arg_type == error_mark_node)
15094     return 0;
15095 
15096   if (TYPE_REF_P (arg_type)
15097       && TYPE_REF_IS_RVALUE (arg_type)
15098       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
15099                       DECL_CONTEXT (d)))
15100     result = true;
15101 
15102   args = TREE_CHAIN (args);
15103 
15104   if (args && args != void_list_node && !TREE_PURPOSE (args))
15105     /* There are more non-optional args.  */
15106     return false;
15107 
15108   return result;
15109 }
15110 
15111 /* Remember any special properties of member function DECL.  */
15112 
15113 void
grok_special_member_properties(tree decl)15114 grok_special_member_properties (tree decl)
15115 {
15116   tree class_type;
15117 
15118   if (TREE_CODE (decl) == USING_DECL
15119       || !DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
15120     return;
15121 
15122   class_type = DECL_CONTEXT (decl);
15123   if (IDENTIFIER_CTOR_P (DECL_NAME (decl)))
15124     {
15125       int ctor = copy_fn_p (decl);
15126 
15127       if (!DECL_ARTIFICIAL (decl))
15128           TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
15129 
15130       if (ctor > 0)
15131           {
15132             /* [class.copy]
15133 
15134                A non-template constructor for class X is a copy
15135                constructor if its first parameter is of type X&, const
15136                X&, volatile X& or const volatile X&, and either there
15137                are no other parameters or else all other parameters have
15138                default arguments.  */
15139             TYPE_HAS_COPY_CTOR (class_type) = 1;
15140             if (ctor > 1)
15141               TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
15142           }
15143 
15144       if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
15145           TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
15146 
15147       if (is_list_ctor (decl))
15148           TYPE_HAS_LIST_CTOR (class_type) = 1;
15149 
15150       if (maybe_constexpr_fn (decl)
15151             && !ctor && !move_fn_p (decl))
15152           TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
15153     }
15154   else if (DECL_NAME (decl) == assign_op_identifier)
15155     {
15156       /* [class.copy]
15157 
15158            A non-template assignment operator for class X is a copy
15159            assignment operator if its parameter is of type X, X&, const
15160            X&, volatile X& or const volatile X&.  */
15161 
15162       int assop = copy_fn_p (decl);
15163 
15164       if (assop)
15165           {
15166             TYPE_HAS_COPY_ASSIGN (class_type) = 1;
15167             if (assop != 1)
15168               TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
15169           }
15170     }
15171   else if (IDENTIFIER_CONV_OP_P (DECL_NAME (decl)))
15172     TYPE_HAS_CONVERSION (class_type) = true;
15173 
15174   /* Destructors are handled in check_methods.  */
15175 }
15176 
15177 /* Check a constructor DECL has the correct form.  Complains
15178    if the class has a constructor of the form X(X).  */
15179 
15180 bool
grok_ctor_properties(const_tree ctype,const_tree decl)15181 grok_ctor_properties (const_tree ctype, const_tree decl)
15182 {
15183   int ctor_parm = copy_fn_p (decl);
15184 
15185   if (ctor_parm < 0)
15186     {
15187       /* [class.copy]
15188 
15189            A declaration of a constructor for a class X is ill-formed if
15190            its first parameter is of type (optionally cv-qualified) X
15191            and either there are no other parameters or else all other
15192            parameters have default arguments.
15193 
15194            We *don't* complain about member template instantiations that
15195            have this form, though; they can occur as we try to decide
15196            what constructor to use during overload resolution.  Since
15197            overload resolution will never prefer such a constructor to
15198            the non-template copy constructor (which is either explicitly
15199            or implicitly defined), there's no need to worry about their
15200            existence.  Theoretically, they should never even be
15201            instantiated, but that's hard to forestall.  */
15202       error_at (DECL_SOURCE_LOCATION (decl),
15203                     "invalid constructor; you probably meant %<%T (const %T&)%>",
15204                     ctype, ctype);
15205       return false;
15206     }
15207 
15208   return true;
15209 }
15210 
15211 /* DECL is a declaration for an overloaded or conversion operator.  If
15212    COMPLAIN is true, errors are issued for invalid declarations.  */
15213 
15214 bool
grok_op_properties(tree decl,bool complain)15215 grok_op_properties (tree decl, bool complain)
15216 {
15217   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
15218   bool methodp = TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE;
15219   tree name = DECL_NAME (decl);
15220   location_t loc = DECL_SOURCE_LOCATION (decl);
15221 
15222   tree class_type = DECL_CONTEXT (decl);
15223   if (class_type && !CLASS_TYPE_P (class_type))
15224     class_type = NULL_TREE;
15225 
15226   tree_code operator_code;
15227   unsigned op_flags;
15228   if (IDENTIFIER_CONV_OP_P (name))
15229     {
15230       /* Conversion operators are TYPE_EXPR for the purposes of this
15231            function.  */
15232       operator_code = TYPE_EXPR;
15233       op_flags = OVL_OP_FLAG_UNARY;
15234     }
15235   else
15236     {
15237       const ovl_op_info_t *ovl_op = IDENTIFIER_OVL_OP_INFO (name);
15238 
15239       operator_code = ovl_op->tree_code;
15240       op_flags = ovl_op->flags;
15241       gcc_checking_assert (operator_code != ERROR_MARK);
15242       DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
15243     }
15244 
15245   if (op_flags & OVL_OP_FLAG_ALLOC)
15246     {
15247       /* operator new and operator delete are quite special.  */
15248       if (class_type)
15249           switch (op_flags)
15250             {
15251             case OVL_OP_FLAG_ALLOC:
15252               TYPE_HAS_NEW_OPERATOR (class_type) = 1;
15253               break;
15254 
15255             case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE:
15256               TYPE_GETS_DELETE (class_type) |= 1;
15257               break;
15258 
15259             case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_VEC:
15260               TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
15261               break;
15262 
15263             case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE | OVL_OP_FLAG_VEC:
15264               TYPE_GETS_DELETE (class_type) |= 2;
15265               break;
15266 
15267             default:
15268               gcc_unreachable ();
15269             }
15270 
15271       /* [basic.std.dynamic.allocation]/1:
15272 
15273            A program is ill-formed if an allocation function is declared
15274            in a namespace scope other than global scope or declared
15275            static in global scope.
15276 
15277            The same also holds true for deallocation functions.  */
15278       if (DECL_NAMESPACE_SCOPE_P (decl))
15279           {
15280             if (CP_DECL_CONTEXT (decl) != global_namespace)
15281               {
15282                 error_at (loc, "%qD may not be declared within a namespace",
15283                               decl);
15284                 return false;
15285               }
15286 
15287             if (!TREE_PUBLIC (decl))
15288               {
15289                 error_at (loc, "%qD may not be declared as static", decl);
15290                 return false;
15291               }
15292           }
15293 
15294       if (op_flags & OVL_OP_FLAG_DELETE)
15295           {
15296             DECL_SET_IS_OPERATOR_DELETE (decl, true);
15297             coerce_delete_type (decl, loc);
15298           }
15299       else
15300           {
15301             DECL_SET_IS_OPERATOR_NEW (decl, true);
15302             TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl), loc);
15303           }
15304 
15305       return true;
15306     }
15307 
15308   /* An operator function must either be a non-static member function
15309      or have at least one parameter of a class, a reference to a class,
15310      an enumeration, or a reference to an enumeration.  13.4.0.6 */
15311   if (! methodp || DECL_STATIC_FUNCTION_P (decl))
15312     {
15313       if (operator_code == TYPE_EXPR
15314             || operator_code == CALL_EXPR
15315             || operator_code == COMPONENT_REF
15316             || operator_code == ARRAY_REF
15317             || operator_code == NOP_EXPR)
15318           {
15319             error_at (loc, "%qD must be a non-static member function", decl);
15320             return false;
15321           }
15322 
15323       if (DECL_STATIC_FUNCTION_P (decl))
15324           {
15325             error_at (loc, "%qD must be either a non-static member "
15326                         "function or a non-member function", decl);
15327             return false;
15328           }
15329 
15330       for (tree arg = argtypes; ; arg = TREE_CHAIN (arg))
15331           {
15332             if (!arg || arg == void_list_node)
15333               {
15334                 if (complain)
15335                     error_at(loc, "%qD must have an argument of class or "
15336                                "enumerated type", decl);
15337                 return false;
15338               }
15339 
15340             tree type = non_reference (TREE_VALUE (arg));
15341             if (type == error_mark_node)
15342               return false;
15343 
15344             /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
15345                because these checks are performed even on template
15346                functions.  */
15347             if (MAYBE_CLASS_TYPE_P (type)
15348                 || TREE_CODE (type) == ENUMERAL_TYPE)
15349               break;
15350           }
15351     }
15352 
15353   if (operator_code == CALL_EXPR)
15354     /* There are no further restrictions on the arguments to an overloaded
15355        "operator ()".  */
15356     return true;
15357 
15358   if (operator_code == COND_EXPR)
15359     {
15360       /* 13.4.0.3 */
15361       error_at (loc, "ISO C++ prohibits overloading %<operator ?:%>");
15362       return false;
15363     }
15364 
15365   /* Count the number of arguments and check for ellipsis.  */
15366   int arity = 0;
15367   for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
15368     {
15369       if (!arg)
15370           {
15371             /* Variadic.  */
15372             if (operator_code == ARRAY_REF && cxx_dialect >= cxx23)
15373               break;
15374 
15375             error_at (loc, "%qD must not have variable number of arguments",
15376                         decl);
15377             return false;
15378           }
15379       ++arity;
15380     }
15381 
15382   /* Verify correct number of arguments.  */
15383   switch (op_flags)
15384     {
15385     case OVL_OP_FLAG_AMBIARY:
15386       if (arity == 1)
15387           {
15388             /* We have a unary instance of an ambi-ary op.  Remap to the
15389                unary one.  */
15390             unsigned alt = ovl_op_alternate[ovl_op_mapping [operator_code]];
15391             const ovl_op_info_t *ovl_op = &ovl_op_info[false][alt];
15392             gcc_checking_assert (ovl_op->flags == OVL_OP_FLAG_UNARY);
15393             operator_code = ovl_op->tree_code;
15394             DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
15395           }
15396       else if (arity != 2)
15397           {
15398             /* This was an ambiguous operator but is invalid. */
15399             error_at (loc,
15400                         methodp
15401                         ? G_("%qD must have either zero or one argument")
15402                         : G_("%qD must have either one or two arguments"), decl);
15403             return false;
15404           }
15405       else if ((operator_code == POSTINCREMENT_EXPR
15406                     || operator_code == POSTDECREMENT_EXPR)
15407                  && ! processing_template_decl
15408                  /* x++ and x--'s second argument must be an int.  */
15409                  && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)),
15410                                          integer_type_node))
15411           {
15412             error_at (loc,
15413                         methodp
15414                         ? G_("postfix %qD must have %<int%> as its argument")
15415                         : G_("postfix %qD must have %<int%> as its second argument"),
15416                         decl);
15417             return false;
15418           }
15419       break;
15420 
15421     case OVL_OP_FLAG_UNARY:
15422       if (arity != 1)
15423           {
15424             error_at (loc,
15425                         methodp
15426                         ? G_("%qD must have no arguments")
15427                         : G_("%qD must have exactly one argument"), decl);
15428             return false;
15429           }
15430       break;
15431 
15432     case OVL_OP_FLAG_BINARY:
15433       if (arity != 2)
15434           {
15435             if (operator_code == ARRAY_REF && cxx_dialect >= cxx23)
15436               break;
15437             error_at (loc,
15438                         methodp
15439                         ? G_("%qD must have exactly one argument")
15440                         : G_("%qD must have exactly two arguments"), decl);
15441             return false;
15442           }
15443       break;
15444 
15445     default:
15446       gcc_unreachable ();
15447     }
15448 
15449   /* There can be no default arguments.  */
15450   for (tree arg = argtypes; arg && arg != void_list_node;
15451        arg = TREE_CHAIN (arg))
15452     if (TREE_PURPOSE (arg))
15453       {
15454           TREE_PURPOSE (arg) = NULL_TREE;
15455           error_at (loc, "%qD cannot have default arguments", decl);
15456           return false;
15457       }
15458 
15459   /* At this point the declaration is well-formed.  It may not be
15460      sensible though.  */
15461 
15462   /* Check member function warnings only on the in-class declaration.
15463      There's no point warning on an out-of-class definition.  */
15464   if (class_type && class_type != current_class_type)
15465     return true;
15466 
15467   /* Warn about conversion operators that will never be used.  */
15468   if (IDENTIFIER_CONV_OP_P (name)
15469       && ! DECL_TEMPLATE_INFO (decl)
15470       && warn_class_conversion)
15471     {
15472       tree t = TREE_TYPE (name);
15473       int ref = TYPE_REF_P (t);
15474 
15475       if (ref)
15476           t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
15477 
15478       if (VOID_TYPE_P (t))
15479           warning_at (loc, OPT_Wclass_conversion, "converting %qT to %<void%> "
15480                         "will never use a type conversion operator", class_type);
15481       else if (class_type)
15482           {
15483             if (same_type_ignoring_top_level_qualifiers_p (t, class_type))
15484               warning_at (loc, OPT_Wclass_conversion,
15485                               ref
15486                               ? G_("converting %qT to a reference to the same type "
15487                                    "will never use a type conversion operator")
15488                               : G_("converting %qT to the same type "
15489                                    "will never use a type conversion operator"),
15490                               class_type);
15491             /* Don't force t to be complete here.  */
15492             else if (MAYBE_CLASS_TYPE_P (t)
15493                        && COMPLETE_TYPE_P (t)
15494                        && DERIVED_FROM_P (t, class_type))
15495               warning_at (loc, OPT_Wclass_conversion,
15496                               ref
15497                               ? G_("converting %qT to a reference to a base class "
15498                                    "%qT will never use a type conversion operator")
15499                               : G_("converting %qT to a base class %qT "
15500                                    "will never use a type conversion operator"),
15501                               class_type, t);
15502           }
15503     }
15504 
15505   if (!warn_ecpp)
15506     return true;
15507 
15508   /* Effective C++ rules below.  */
15509 
15510   /* More Effective C++ rule 7.  */
15511   if (operator_code == TRUTH_ANDIF_EXPR
15512       || operator_code == TRUTH_ORIF_EXPR
15513       || operator_code == COMPOUND_EXPR)
15514     warning_at (loc, OPT_Weffc__,
15515                     "user-defined %qD always evaluates both arguments", decl);
15516 
15517   /* More Effective C++ rule 6.  */
15518   if (operator_code == POSTINCREMENT_EXPR
15519       || operator_code == POSTDECREMENT_EXPR
15520       || operator_code == PREINCREMENT_EXPR
15521       || operator_code == PREDECREMENT_EXPR)
15522     {
15523       tree arg = TREE_VALUE (argtypes);
15524       tree ret = TREE_TYPE (TREE_TYPE (decl));
15525       if (methodp || TYPE_REF_P (arg))
15526           arg = TREE_TYPE (arg);
15527       arg = TYPE_MAIN_VARIANT (arg);
15528 
15529       if (operator_code == PREINCREMENT_EXPR
15530             || operator_code == PREDECREMENT_EXPR)
15531           {
15532             if (!TYPE_REF_P (ret)
15533                 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)), arg))
15534               warning_at (loc, OPT_Weffc__, "prefix %qD should return %qT", decl,
15535                               build_reference_type (arg));
15536           }
15537       else
15538           {
15539             if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
15540               warning_at (loc, OPT_Weffc__,
15541                               "postfix %qD should return %qT", decl, arg);
15542           }
15543     }
15544 
15545   /* Effective C++ rule 23.  */
15546   if (!DECL_ASSIGNMENT_OPERATOR_P (decl)
15547       && (operator_code == PLUS_EXPR
15548             || operator_code == MINUS_EXPR
15549             || operator_code == TRUNC_DIV_EXPR
15550             || operator_code == MULT_EXPR
15551             || operator_code == TRUNC_MOD_EXPR)
15552       && TYPE_REF_P (TREE_TYPE (TREE_TYPE (decl))))
15553     warning_at (loc, OPT_Weffc__, "%qD should return by value", decl);
15554 
15555   return true;
15556 }
15557 
15558 /* Return a string giving the keyword associate with CODE.  */
15559 
15560 static const char *
tag_name(enum tag_types code)15561 tag_name (enum tag_types code)
15562 {
15563   switch (code)
15564     {
15565     case record_type:
15566       return "struct";
15567     case class_type:
15568       return "class";
15569     case union_type:
15570       return "union";
15571     case enum_type:
15572       return "enum";
15573     case typename_type:
15574       return "typename";
15575     default:
15576       gcc_unreachable ();
15577     }
15578 }
15579 
15580 /* Name lookup in an elaborated-type-specifier (after the keyword
15581    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
15582    elaborated-type-specifier is invalid, issue a diagnostic and return
15583    error_mark_node; otherwise, return the *_TYPE to which it referred.
15584    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
15585 
15586 tree
check_elaborated_type_specifier(enum tag_types tag_code,tree decl,bool allow_template_p)15587 check_elaborated_type_specifier (enum tag_types tag_code,
15588                                          tree decl,
15589                                          bool allow_template_p)
15590 {
15591   tree type;
15592 
15593   /* In the case of:
15594 
15595        struct S { struct S *p; };
15596 
15597      name lookup will find the TYPE_DECL for the implicit "S::S"
15598      typedef.  Adjust for that here.  */
15599   if (DECL_SELF_REFERENCE_P (decl))
15600     decl = TYPE_NAME (TREE_TYPE (decl));
15601 
15602   type = TREE_TYPE (decl);
15603 
15604   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
15605      is false for this case as well.  */
15606   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
15607     {
15608       error ("using template type parameter %qT after %qs",
15609                type, tag_name (tag_code));
15610       return error_mark_node;
15611     }
15612   /* Accept template template parameters.  */
15613   else if (allow_template_p
15614              && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
15615                  || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
15616     ;
15617   /*   [dcl.type.elab]
15618 
15619        If the identifier resolves to a typedef-name or the
15620        simple-template-id resolves to an alias template
15621        specialization, the elaborated-type-specifier is ill-formed.
15622 
15623      In other words, the only legitimate declaration to use in the
15624      elaborated type specifier is the implicit typedef created when
15625      the type is declared.  */
15626   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
15627              && !DECL_SELF_REFERENCE_P (decl)
15628              && tag_code != typename_type)
15629     {
15630       if (alias_template_specialization_p (type, nt_opaque))
15631           error ("using alias template specialization %qT after %qs",
15632                  type, tag_name (tag_code));
15633       else
15634           error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
15635       inform (DECL_SOURCE_LOCATION (decl),
15636                 "%qD has a previous declaration here", decl);
15637       return error_mark_node;
15638     }
15639   else if (TREE_CODE (type) != RECORD_TYPE
15640              && TREE_CODE (type) != UNION_TYPE
15641              && tag_code != enum_type
15642              && tag_code != typename_type)
15643     {
15644       error ("%qT referred to as %qs", type, tag_name (tag_code));
15645       inform (location_of (type), "%qT has a previous declaration here", type);
15646       return error_mark_node;
15647     }
15648   else if (TREE_CODE (type) != ENUMERAL_TYPE
15649              && tag_code == enum_type)
15650     {
15651       error ("%qT referred to as enum", type);
15652       inform (location_of (type), "%qT has a previous declaration here", type);
15653       return error_mark_node;
15654     }
15655   else if (!allow_template_p
15656              && TREE_CODE (type) == RECORD_TYPE
15657              && CLASSTYPE_IS_TEMPLATE (type))
15658     {
15659       /* If a class template appears as elaborated type specifier
15660            without a template header such as:
15661 
15662              template <class T> class C {};
15663              void f(class C);           // No template header here
15664 
15665            then the required template argument is missing.  */
15666       error ("template argument required for %<%s %T%>",
15667                tag_name (tag_code),
15668                DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
15669       return error_mark_node;
15670     }
15671 
15672   return type;
15673 }
15674 
15675 /* Lookup NAME of an elaborated type specifier according to SCOPE and
15676    issue diagnostics if necessary.  Return *_TYPE node upon success,
15677    NULL_TREE when the NAME is not found, and ERROR_MARK_NODE for type
15678    error.  */
15679 
15680 static tree
lookup_and_check_tag(enum tag_types tag_code,tree name,TAG_how how,bool template_header_p)15681 lookup_and_check_tag (enum tag_types tag_code, tree name,
15682                           TAG_how how, bool template_header_p)
15683 {
15684   tree decl;
15685   if (how == TAG_how::GLOBAL)
15686     {
15687       /* First try ordinary name lookup, ignoring hidden class name
15688            injected via friend declaration.  */
15689       decl = lookup_name (name, LOOK_want::TYPE);
15690       decl = strip_using_decl (decl);
15691       /* If that fails, the name will be placed in the smallest
15692            non-class, non-function-prototype scope according to 3.3.1/5.
15693            We may already have a hidden name declared as friend in this
15694            scope.  So lookup again but not ignoring hidden names.
15695            If we find one, that name will be made visible rather than
15696            creating a new tag.  */
15697       if (!decl)
15698           decl = lookup_elaborated_type (name, TAG_how::INNERMOST_NON_CLASS);
15699     }
15700   else
15701     decl = lookup_elaborated_type (name, how);
15702 
15703   if (!decl)
15704     /* We found nothing.  */
15705     return NULL_TREE;
15706 
15707   if (TREE_CODE (decl) == TREE_LIST)
15708     {
15709       error ("reference to %qD is ambiguous", name);
15710       print_candidates (decl);
15711       return error_mark_node;
15712     }
15713 
15714   if (DECL_CLASS_TEMPLATE_P (decl)
15715       && !template_header_p
15716       && how == TAG_how::CURRENT_ONLY)
15717     {
15718       error ("class template %qD redeclared as non-template", name);
15719       inform (location_of (decl), "previous declaration here");
15720       CLASSTYPE_ERRONEOUS (TREE_TYPE (decl)) = true;
15721       return error_mark_node;
15722     }
15723 
15724   if (DECL_CLASS_TEMPLATE_P (decl)
15725       /* If scope is TAG_how::CURRENT_ONLY we're defining a class,
15726            so ignore a template template parameter.  */
15727       || (how != TAG_how::CURRENT_ONLY && DECL_TEMPLATE_TEMPLATE_PARM_P (decl)))
15728     decl = DECL_TEMPLATE_RESULT (decl);
15729 
15730   if (TREE_CODE (decl) != TYPE_DECL)
15731     /* Found not-a-type.  */
15732     return NULL_TREE;
15733 
15734   /* Look for invalid nested type:
15735      class C {
15736      class C {};
15737      };  */
15738   if (how == TAG_how::CURRENT_ONLY && DECL_SELF_REFERENCE_P (decl))
15739     {
15740       error ("%qD has the same name as the class in which it is "
15741                "declared", decl);
15742       return error_mark_node;
15743     }
15744 
15745   /* Two cases we need to consider when deciding if a class
15746      template is allowed as an elaborated type specifier:
15747      1. It is a self reference to its own class.
15748      2. It comes with a template header.
15749 
15750      For example:
15751 
15752      template <class T> class C {
15753        class C *c1;           // DECL_SELF_REFERENCE_P is true
15754        class D;
15755      };
15756      template <class U> class C; // template_header_p is true
15757      template <class T> class C<T>::D {
15758        class C *c2;           // DECL_SELF_REFERENCE_P is true
15759      };  */
15760 
15761   tree t = check_elaborated_type_specifier (tag_code, decl,
15762                                                       template_header_p
15763                                                       | DECL_SELF_REFERENCE_P (decl));
15764   if (template_header_p && t && CLASS_TYPE_P (t)
15765       && (!CLASSTYPE_TEMPLATE_INFO (t)
15766             || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))))
15767     {
15768       error ("%qT is not a template", t);
15769       inform (location_of (t), "previous declaration here");
15770       if (TYPE_CLASS_SCOPE_P (t)
15771             && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t)))
15772           inform (input_location,
15773                     "perhaps you want to explicitly add %<%T::%>",
15774                     TYPE_CONTEXT (t));
15775       return error_mark_node;
15776     }
15777 
15778   return t;
15779 }
15780 
15781 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
15782    Define the tag as a forward-reference if it is not defined.
15783 
15784    If a declaration is given, process it here, and report an error if
15785    multiple declarations are not identical.
15786 
15787    SCOPE is TS_CURRENT when this is also a definition.  Only look in
15788    the current frame for the name (since C++ allows new names in any
15789    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
15790    declaration.  Only look beginning from the current scope outward up
15791    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
15792 
15793    TEMPLATE_HEADER_P is true when this declaration is preceded by
15794    a set of template parameters.  */
15795 
15796 tree
xref_tag(enum tag_types tag_code,tree name,TAG_how how,bool template_header_p)15797 xref_tag (enum tag_types tag_code, tree name,
15798             TAG_how how, bool template_header_p)
15799 {
15800   enum tree_code code;
15801   tree context = NULL_TREE;
15802 
15803   auto_cond_timevar tv (TV_NAME_LOOKUP);
15804 
15805   gcc_assert (identifier_p (name));
15806 
15807   switch (tag_code)
15808     {
15809     case record_type:
15810     case class_type:
15811       code = RECORD_TYPE;
15812       break;
15813     case union_type:
15814       code = UNION_TYPE;
15815       break;
15816     case enum_type:
15817       code = ENUMERAL_TYPE;
15818       break;
15819     default:
15820       gcc_unreachable ();
15821     }
15822 
15823   /* In case of anonymous name, xref_tag is only called to
15824      make type node and push name.  Name lookup is not required.  */
15825   tree t = NULL_TREE;
15826   if (!IDENTIFIER_ANON_P (name))
15827     t = lookup_and_check_tag  (tag_code, name, how, template_header_p);
15828 
15829   if (t == error_mark_node)
15830     return error_mark_node;
15831 
15832   if (how != TAG_how::CURRENT_ONLY && t && current_class_type
15833       && template_class_depth (current_class_type)
15834       && template_header_p)
15835     {
15836       if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
15837           return t;
15838 
15839       /* Since HOW is not TAG_how::CURRENT_ONLY, we are not looking at
15840            a definition of this tag.  Since, in addition, we are
15841            currently processing a (member) template declaration of a
15842            template class, we must be very careful; consider:
15843 
15844              template <class X> struct S1
15845 
15846              template <class U> struct S2
15847              {
15848                template <class V> friend struct S1;
15849              };
15850 
15851            Here, the S2::S1 declaration should not be confused with the
15852            outer declaration.  In particular, the inner version should
15853            have a template parameter of level 2, not level 1.
15854 
15855            On the other hand, when presented with:
15856 
15857              template <class T> struct S1
15858              {
15859                template <class U> struct S2 {};
15860                template <class U> friend struct S2;
15861              };
15862 
15863            the friend must find S1::S2 eventually.  We accomplish this
15864            by making sure that the new type we create to represent this
15865            declaration has the right TYPE_CONTEXT.  */
15866       context = TYPE_CONTEXT (t);
15867       t = NULL_TREE;
15868     }
15869 
15870   if (! t)
15871     {
15872       /* If no such tag is yet defined, create a forward-reference node
15873            and record it as the "definition".
15874            When a real declaration of this type is found,
15875            the forward-reference will be altered into a real type.  */
15876       if (code == ENUMERAL_TYPE)
15877           {
15878             error ("use of enum %q#D without previous declaration", name);
15879             return error_mark_node;
15880           }
15881 
15882       t = make_class_type (code);
15883       TYPE_CONTEXT (t) = context;
15884       if (IDENTIFIER_LAMBDA_P (name))
15885           /* Mark it as a lambda type right now.  Our caller will
15886              correct the value.  */
15887           CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
15888       t = pushtag (name, t, how);
15889     }
15890   else
15891     {
15892       if (template_header_p && MAYBE_CLASS_TYPE_P (t))
15893         {
15894           /* Check that we aren't trying to overload a class with different
15895              constraints.  */
15896           tree constr = NULL_TREE;
15897           if (current_template_parms)
15898             {
15899               tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
15900               constr = build_constraints (reqs, NULL_TREE);
15901             }
15902             if (!redeclare_class_template (t, current_template_parms, constr))
15903               return error_mark_node;
15904         }
15905       else if (!processing_template_decl
15906                  && CLASS_TYPE_P (t)
15907                  && CLASSTYPE_IS_TEMPLATE (t))
15908           {
15909             error ("redeclaration of %qT as a non-template", t);
15910             inform (location_of (t), "previous declaration %qD", t);
15911             return error_mark_node;
15912           }
15913 
15914       if (modules_p ()
15915             && how == TAG_how::CURRENT_ONLY)
15916           {
15917             tree decl = TYPE_NAME (t);
15918             if (!module_may_redeclare (decl))
15919               {
15920                 error ("cannot declare %qD in a different module", decl);
15921                 inform (DECL_SOURCE_LOCATION (decl), "declared here");
15922                 return error_mark_node;
15923               }
15924 
15925             tree maybe_tmpl = decl;
15926             if (CLASS_TYPE_P (t) && CLASSTYPE_IS_TEMPLATE (t))
15927               maybe_tmpl = CLASSTYPE_TI_TEMPLATE (t);
15928 
15929             if (DECL_LANG_SPECIFIC (decl)
15930                 && DECL_MODULE_IMPORT_P (decl)
15931                 && TREE_CODE (CP_DECL_CONTEXT (decl)) == NAMESPACE_DECL)
15932               {
15933                 /* Push it into this TU's symbol slot.  */
15934                 gcc_checking_assert (current_namespace == CP_DECL_CONTEXT (decl));
15935                 if (maybe_tmpl != decl)
15936                     /* We're in the template parm binding level.
15937                        Pushtag has logic to slide under that, but we're
15938                        not pushing a *new* type.  */
15939                     push_nested_namespace (CP_DECL_CONTEXT (decl));
15940 
15941                 pushdecl (maybe_tmpl);
15942                 if (maybe_tmpl != decl)
15943                     pop_nested_namespace (CP_DECL_CONTEXT (decl));
15944               }
15945 
15946             set_instantiating_module (maybe_tmpl);
15947           }
15948     }
15949 
15950   return t;
15951 }
15952 
15953 /* Create the binfo hierarchy for REF with (possibly NULL) base list
15954    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
15955    access_* node, and the TREE_VALUE is the type of the base-class.
15956    Non-NULL TREE_TYPE indicates virtual inheritance.  */
15957 
15958 void
xref_basetypes(tree ref,tree base_list)15959 xref_basetypes (tree ref, tree base_list)
15960 {
15961   tree *basep;
15962   tree binfo, base_binfo;
15963   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
15964   unsigned max_bases = 0;  /* Maximum direct bases.  */
15965   unsigned max_dvbases = 0; /* Maximum direct virtual bases.  */
15966   int i;
15967   tree default_access;
15968   tree igo_prev; /* Track Inheritance Graph Order.  */
15969 
15970   if (ref == error_mark_node)
15971     return;
15972 
15973   /* The base of a derived class is private by default, all others are
15974      public.  */
15975   default_access = (TREE_CODE (ref) == RECORD_TYPE
15976                         && CLASSTYPE_DECLARED_CLASS (ref)
15977                         ? access_private_node : access_public_node);
15978 
15979   /* First, make sure that any templates in base-classes are
15980      instantiated.  This ensures that if we call ourselves recursively
15981      we do not get confused about which classes are marked and which
15982      are not.  */
15983   basep = &base_list;
15984   while (*basep)
15985     {
15986       tree basetype = TREE_VALUE (*basep);
15987 
15988       /* The dependent_type_p call below should really be dependent_scope_p
15989            so that we give a hard error about using an incomplete type as a
15990            base, but we allow it with a pedwarn for backward
15991            compatibility.  */
15992       if (processing_template_decl
15993             && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
15994           cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
15995       if (!dependent_type_p (basetype)
15996             && !complete_type_or_else (basetype, NULL))
15997           /* An incomplete type.  Remove it from the list.  */
15998           *basep = TREE_CHAIN (*basep);
15999       else
16000           {
16001             max_bases++;
16002             if (TREE_TYPE (*basep))
16003               max_dvbases++;
16004             if (CLASS_TYPE_P (basetype))
16005               max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
16006             basep = &TREE_CHAIN (*basep);
16007           }
16008     }
16009   max_vbases += max_dvbases;
16010 
16011   TYPE_MARKED_P (ref) = 1;
16012 
16013   /* The binfo slot should be empty, unless this is an (ill-formed)
16014      redefinition.  */
16015   gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
16016 
16017   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
16018 
16019   binfo = make_tree_binfo (max_bases);
16020 
16021   TYPE_BINFO (ref) = binfo;
16022   BINFO_OFFSET (binfo) = size_zero_node;
16023   BINFO_TYPE (binfo) = ref;
16024 
16025   /* Apply base-class info set up to the variants of this type.  */
16026   fixup_type_variants (ref);
16027 
16028   if (max_bases)
16029     {
16030       vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
16031       /* A C++98 POD cannot have base classes.  */
16032       CLASSTYPE_NON_LAYOUT_POD_P (ref) = true;
16033 
16034       if (TREE_CODE (ref) == UNION_TYPE)
16035           {
16036             error ("derived union %qT invalid", ref);
16037             return;
16038           }
16039     }
16040 
16041   if (max_bases > 1)
16042     warning (OPT_Wmultiple_inheritance,
16043                "%qT defined with multiple direct bases", ref);
16044 
16045   if (max_vbases)
16046     {
16047       /* An aggregate can't have virtual base classes.  */
16048       CLASSTYPE_NON_AGGREGATE (ref) = true;
16049 
16050       vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
16051 
16052       if (max_dvbases)
16053           warning (OPT_Wvirtual_inheritance,
16054                      "%qT defined with direct virtual base", ref);
16055     }
16056 
16057   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
16058     {
16059       tree access = TREE_PURPOSE (base_list);
16060       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
16061       tree basetype = TREE_VALUE (base_list);
16062 
16063       if (access == access_default_node)
16064           access = default_access;
16065 
16066       /* Before C++17, an aggregate cannot have base classes.  In C++17, an
16067            aggregate can't have virtual, private, or protected base classes.  */
16068       if (cxx_dialect < cxx17
16069             || access != access_public_node
16070             || via_virtual)
16071           CLASSTYPE_NON_AGGREGATE (ref) = true;
16072 
16073       if (PACK_EXPANSION_P (basetype))
16074         basetype = PACK_EXPANSION_PATTERN (basetype);
16075       if (TREE_CODE (basetype) == TYPE_DECL)
16076           basetype = TREE_TYPE (basetype);
16077       if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
16078           {
16079             error ("base type %qT fails to be a struct or class type",
16080                      basetype);
16081             goto dropped_base;
16082           }
16083 
16084       base_binfo = NULL_TREE;
16085       if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
16086           {
16087             base_binfo = TYPE_BINFO (basetype);
16088             /* The original basetype could have been a typedef'd type.  */
16089             basetype = BINFO_TYPE (base_binfo);
16090 
16091             /* Inherit flags from the base.  */
16092             TYPE_HAS_NEW_OPERATOR (ref)
16093               |= TYPE_HAS_NEW_OPERATOR (basetype);
16094             TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
16095               |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
16096             TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
16097             TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
16098             CLASSTYPE_DIAMOND_SHAPED_P (ref)
16099               |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
16100             CLASSTYPE_REPEATED_BASE_P (ref)
16101               |= CLASSTYPE_REPEATED_BASE_P (basetype);
16102           }
16103 
16104       /* We must do this test after we've seen through a typedef
16105            type.  */
16106       if (TYPE_MARKED_P (basetype))
16107           {
16108             if (basetype == ref)
16109               error ("recursive type %qT undefined", basetype);
16110             else
16111               error ("duplicate base type %qT invalid", basetype);
16112             goto dropped_base;
16113           }
16114 
16115       if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
16116         /* Regenerate the pack expansion for the bases. */
16117         basetype = make_pack_expansion (basetype);
16118 
16119       TYPE_MARKED_P (basetype) = 1;
16120 
16121       base_binfo = copy_binfo (base_binfo, basetype, ref,
16122                                      &igo_prev, via_virtual);
16123       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
16124           BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
16125 
16126       BINFO_BASE_APPEND (binfo, base_binfo);
16127       BINFO_BASE_ACCESS_APPEND (binfo, access);
16128       continue;
16129 
16130     dropped_base:
16131       /* Update max_vbases to reflect the reality that we are dropping
16132            this base:  if it reaches zero we want to undo the vec_alloc
16133            above to avoid inconsistencies during error-recovery: eg, in
16134            build_special_member_call, CLASSTYPE_VBASECLASSES non null
16135            and vtt null (c++/27952).  */
16136       if (via_virtual)
16137           max_vbases--;
16138       if (CLASS_TYPE_P (basetype))
16139           max_vbases
16140             -= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
16141     }
16142 
16143   if (CLASSTYPE_VBASECLASSES (ref)
16144       && max_vbases == 0)
16145     vec_free (CLASSTYPE_VBASECLASSES (ref));
16146 
16147   if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
16148     /* If we didn't get max_vbases vbases, we must have shared at
16149        least one of them, and are therefore diamond shaped.  */
16150     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
16151 
16152   /* Unmark all the types.  */
16153   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
16154     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
16155   TYPE_MARKED_P (ref) = 0;
16156 
16157   /* Now see if we have a repeated base type.  */
16158   if (!CLASSTYPE_REPEATED_BASE_P (ref))
16159     {
16160       for (base_binfo = binfo; base_binfo;
16161              base_binfo = TREE_CHAIN (base_binfo))
16162           {
16163             if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
16164               {
16165                 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
16166                 break;
16167               }
16168             TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
16169           }
16170       for (base_binfo = binfo; base_binfo;
16171              base_binfo = TREE_CHAIN (base_binfo))
16172           if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
16173             TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
16174           else
16175             break;
16176     }
16177 }
16178 
16179 
16180 /* Copies the enum-related properties from type SRC to type DST.
16181    Used with the underlying type of an enum and the enum itself.  */
16182 static void
copy_type_enum(tree dst,tree src)16183 copy_type_enum (tree dst, tree src)
16184 {
16185   tree t;
16186   for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
16187     {
16188       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
16189       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
16190       TYPE_SIZE (t) = TYPE_SIZE (src);
16191       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
16192       SET_TYPE_MODE (dst, TYPE_MODE (src));
16193       TYPE_PRECISION (t) = TYPE_PRECISION (src);
16194       unsigned valign = TYPE_ALIGN (src);
16195       if (TYPE_USER_ALIGN (t))
16196           valign = MAX (valign, TYPE_ALIGN (t));
16197       else
16198           TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
16199       SET_TYPE_ALIGN (t, valign);
16200       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
16201     }
16202 }
16203 
16204 /* Begin compiling the definition of an enumeration type.
16205    NAME is its name,
16206 
16207    if ENUMTYPE is not NULL_TREE then the type has alredy been found.
16208 
16209    UNDERLYING_TYPE is the type that will be used as the storage for
16210    the enumeration type. This should be NULL_TREE if no storage type
16211    was specified.
16212 
16213    ATTRIBUTES are any attributes specified after the enum-key.
16214 
16215    SCOPED_ENUM_P is true if this is a scoped enumeration type.
16216 
16217    if IS_NEW is not NULL, gets TRUE iff a new type is created.
16218 
16219    Returns the type object, as yet incomplete.
16220    Also records info about it so that build_enumerator
16221    may be used to declare the individual values as they are read.  */
16222 
16223 tree
start_enum(tree name,tree enumtype,tree underlying_type,tree attributes,bool scoped_enum_p,bool * is_new)16224 start_enum (tree name, tree enumtype, tree underlying_type,
16225               tree attributes, bool scoped_enum_p, bool *is_new)
16226 {
16227   tree prevtype = NULL_TREE;
16228   gcc_assert (identifier_p (name));
16229 
16230   if (is_new)
16231     *is_new = false;
16232   /* [C++0x dcl.enum]p5:
16233 
16234     If not explicitly specified, the underlying type of a scoped
16235     enumeration type is int.  */
16236   if (!underlying_type && scoped_enum_p)
16237     underlying_type = integer_type_node;
16238 
16239   if (underlying_type)
16240     underlying_type = cv_unqualified (underlying_type);
16241 
16242   /* If this is the real definition for a previous forward reference,
16243      fill in the contents in the same object that used to be the
16244      forward reference.  */
16245   if (!enumtype)
16246     enumtype = lookup_and_check_tag (enum_type, name,
16247                                              /*tag_scope=*/TAG_how::CURRENT_ONLY,
16248                                              /*template_header_p=*/false);
16249 
16250   /* In case of a template_decl, the only check that should be deferred
16251      to instantiation time is the comparison of underlying types.  */
16252   if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
16253     {
16254       if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
16255           {
16256             error_at (input_location, "scoped/unscoped mismatch "
16257                         "in enum %q#T", enumtype);
16258             inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
16259                       "previous definition here");
16260             enumtype = error_mark_node;
16261           }
16262       else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
16263           {
16264             error_at (input_location, "underlying type mismatch "
16265                         "in enum %q#T", enumtype);
16266             inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
16267                       "previous definition here");
16268             enumtype = error_mark_node;
16269           }
16270       else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
16271                  && !same_type_p (underlying_type,
16272                                         ENUM_UNDERLYING_TYPE (enumtype)))
16273           {
16274             error_at (input_location, "different underlying type "
16275                         "in enum %q#T", enumtype);
16276             inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
16277                       "previous definition here");
16278             underlying_type = NULL_TREE;
16279           }
16280 
16281       if (modules_p ())
16282           {
16283             if (!module_may_redeclare (TYPE_NAME (enumtype)))
16284               {
16285                 error ("cannot define %qD in different module",
16286                          TYPE_NAME (enumtype));
16287                 inform (DECL_SOURCE_LOCATION (TYPE_NAME (enumtype)),
16288                           "declared here");
16289                 enumtype = error_mark_node;
16290               }
16291             set_instantiating_module (TYPE_NAME (enumtype));
16292           }
16293     }
16294 
16295   if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
16296       || processing_template_decl)
16297     {
16298       /* In case of error, make a dummy enum to allow parsing to
16299            continue.  */
16300       if (enumtype == error_mark_node)
16301           {
16302             name = make_anon_name ();
16303             enumtype = NULL_TREE;
16304           }
16305 
16306       /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
16307          of an opaque enum, or an opaque enum of an already defined
16308            enumeration (C++11).
16309            In any other case, it'll be NULL_TREE. */
16310       if (!enumtype)
16311           {
16312             if (is_new)
16313               *is_new = true;
16314           }
16315       prevtype = enumtype;
16316 
16317       /* Do not push the decl more than once.  */
16318       if (!enumtype
16319             || TREE_CODE (enumtype) != ENUMERAL_TYPE)
16320           {
16321             enumtype = cxx_make_type (ENUMERAL_TYPE);
16322             enumtype = pushtag (name, enumtype);
16323 
16324             /* std::byte aliases anything.  */
16325             if (enumtype != error_mark_node
16326                 && TYPE_CONTEXT (enumtype) == std_node
16327                 && !strcmp ("byte", TYPE_NAME_STRING (enumtype)))
16328               TYPE_ALIAS_SET (enumtype) = 0;
16329           }
16330       else
16331             enumtype = xref_tag (enum_type, name);
16332 
16333       if (enumtype == error_mark_node)
16334           return error_mark_node;
16335 
16336       /* The enum is considered opaque until the opening '{' of the
16337            enumerator list.  */
16338       SET_OPAQUE_ENUM_P (enumtype, true);
16339       ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
16340     }
16341 
16342   SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
16343 
16344   cplus_decl_attributes (&enumtype, attributes, (int)ATTR_FLAG_TYPE_IN_PLACE);
16345 
16346   if (underlying_type)
16347     {
16348       if (ENUM_UNDERLYING_TYPE (enumtype))
16349           /* We already checked that it matches, don't change it to a different
16350              typedef variant.  */;
16351       else if (CP_INTEGRAL_TYPE_P (underlying_type))
16352         {
16353             copy_type_enum (enumtype, underlying_type);
16354           ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
16355         }
16356       else if (dependent_type_p (underlying_type))
16357           ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
16358       else
16359         error ("underlying type %qT of %qT must be an integral type",
16360                underlying_type, enumtype);
16361     }
16362 
16363   /* If into a template class, the returned enum is always the first
16364      declaration (opaque or not) seen. This way all the references to
16365      this type will be to the same declaration. The following ones are used
16366      only to check for definition errors.  */
16367   if (prevtype && processing_template_decl)
16368     return prevtype;
16369   else
16370     return enumtype;
16371 }
16372 
16373 /* After processing and defining all the values of an enumeration type,
16374    install their decls in the enumeration type.
16375    ENUMTYPE is the type object.  */
16376 
16377 void
finish_enum_value_list(tree enumtype)16378 finish_enum_value_list (tree enumtype)
16379 {
16380   tree values;
16381   tree underlying_type;
16382   tree decl;
16383   tree value;
16384   tree minnode, maxnode;
16385   tree t;
16386 
16387   bool fixed_underlying_type_p
16388     = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
16389 
16390   /* We built up the VALUES in reverse order.  */
16391   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
16392 
16393   /* For an enum defined in a template, just set the type of the values;
16394      all further processing is postponed until the template is
16395      instantiated.  We need to set the type so that tsubst of a CONST_DECL
16396      works.  */
16397   if (processing_template_decl)
16398     {
16399       for (values = TYPE_VALUES (enumtype);
16400              values;
16401              values = TREE_CHAIN (values))
16402           TREE_TYPE (TREE_VALUE (values)) = enumtype;
16403       return;
16404     }
16405 
16406   /* Determine the minimum and maximum values of the enumerators.  */
16407   if (TYPE_VALUES (enumtype))
16408     {
16409       minnode = maxnode = NULL_TREE;
16410 
16411       for (values = TYPE_VALUES (enumtype);
16412              values;
16413              values = TREE_CHAIN (values))
16414           {
16415             decl = TREE_VALUE (values);
16416 
16417             /* [dcl.enum]: Following the closing brace of an enum-specifier,
16418                each enumerator has the type of its enumeration.  Prior to the
16419                closing brace, the type of each enumerator is the type of its
16420                initializing value.  */
16421             TREE_TYPE (decl) = enumtype;
16422 
16423             /* Update the minimum and maximum values, if appropriate.  */
16424             value = DECL_INITIAL (decl);
16425             if (TREE_CODE (value) != INTEGER_CST)
16426               value = integer_zero_node;
16427             /* Figure out what the minimum and maximum values of the
16428                enumerators are.  */
16429             if (!minnode)
16430               minnode = maxnode = value;
16431             else if (tree_int_cst_lt (maxnode, value))
16432               maxnode = value;
16433             else if (tree_int_cst_lt (value, minnode))
16434               minnode = value;
16435           }
16436     }
16437   else
16438     /* [dcl.enum]
16439 
16440        If the enumerator-list is empty, the underlying type is as if
16441        the enumeration had a single enumerator with value 0.  */
16442     minnode = maxnode = integer_zero_node;
16443 
16444   if (!fixed_underlying_type_p)
16445     {
16446       /* Compute the number of bits require to represent all values of the
16447            enumeration.  We must do this before the type of MINNODE and
16448            MAXNODE are transformed, since tree_int_cst_min_precision relies
16449            on the TREE_TYPE of the value it is passed.  */
16450       signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
16451       int lowprec = tree_int_cst_min_precision (minnode, sgn);
16452       int highprec = tree_int_cst_min_precision (maxnode, sgn);
16453       int precision = MAX (lowprec, highprec);
16454       unsigned int itk;
16455       bool use_short_enum;
16456 
16457       /* Determine the underlying type of the enumeration.
16458 
16459          [dcl.enum]
16460 
16461          The underlying type of an enumeration is an integral type that
16462          can represent all the enumerator values defined in the
16463          enumeration.  It is implementation-defined which integral type is
16464          used as the underlying type for an enumeration except that the
16465          underlying type shall not be larger than int unless the value of
16466          an enumerator cannot fit in an int or unsigned int.
16467 
16468          We use "int" or an "unsigned int" as the underlying type, even if
16469          a smaller integral type would work, unless the user has
16470          explicitly requested that we use the smallest possible type.  The
16471          user can request that for all enumerations with a command line
16472          flag, or for just one enumeration with an attribute.  */
16473 
16474       use_short_enum = flag_short_enums
16475         || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
16476 
16477       /* If the precision of the type was specified with an attribute and it
16478            was too small, give an error.  Otherwise, use it.  */
16479       if (TYPE_PRECISION (enumtype))
16480           {
16481             if (precision > TYPE_PRECISION (enumtype))
16482               error ("specified mode too small for enumerated values");
16483             else
16484               {
16485                 use_short_enum = true;
16486                 precision = TYPE_PRECISION (enumtype);
16487               }
16488           }
16489 
16490       for (itk = (use_short_enum ? itk_char : itk_int);
16491            itk != itk_none;
16492            itk++)
16493         {
16494           underlying_type = integer_types[itk];
16495           if (underlying_type != NULL_TREE
16496                 && TYPE_PRECISION (underlying_type) >= precision
16497               && TYPE_SIGN (underlying_type) == sgn)
16498             break;
16499         }
16500       if (itk == itk_none)
16501         {
16502           /* DR 377
16503 
16504              IF no integral type can represent all the enumerator values, the
16505              enumeration is ill-formed.  */
16506           error ("no integral type can represent all of the enumerator values "
16507                  "for %qT", enumtype);
16508           precision = TYPE_PRECISION (long_long_integer_type_node);
16509           underlying_type = integer_types[itk_unsigned_long_long];
16510         }
16511 
16512       /* [dcl.enum]
16513 
16514          The value of sizeof() applied to an enumeration type, an object
16515          of an enumeration type, or an enumerator, is the value of sizeof()
16516          applied to the underlying type.  */
16517       copy_type_enum (enumtype, underlying_type);
16518 
16519       /* Compute the minimum and maximum values for the type.
16520 
16521            [dcl.enum]
16522 
16523            For an enumeration where emin is the smallest enumerator and emax
16524            is the largest, the values of the enumeration are the values of the
16525            underlying type in the range bmin to bmax, where bmin and bmax are,
16526            respectively, the smallest and largest values of the smallest bit-
16527            field that can store emin and emax.  */
16528 
16529       /* The middle-end currently assumes that types with TYPE_PRECISION
16530            narrower than their underlying type are suitably zero or sign
16531            extended to fill their mode.  Similarly, it assumes that the front
16532            end assures that a value of a particular type must be within
16533            TYPE_MIN_VALUE and TYPE_MAX_VALUE.
16534 
16535            We used to set these fields based on bmin and bmax, but that led
16536            to invalid assumptions like optimizing away bounds checking.  So
16537            now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
16538            TYPE_MAX_VALUE to the values for the mode above and only restrict
16539            the ENUM_UNDERLYING_TYPE for the benefit of diagnostics.  */
16540       ENUM_UNDERLYING_TYPE (enumtype)
16541           = build_distinct_type_copy (underlying_type);
16542       TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
16543       set_min_and_max_values_for_integral_type
16544         (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
16545 
16546       /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE.  */
16547       if (flag_strict_enums)
16548           set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
16549     }
16550   else
16551     underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
16552 
16553   /* If the enum is exported, mark the consts too.  */
16554   bool export_p = (UNSCOPED_ENUM_P (enumtype)
16555                        && DECL_MODULE_EXPORT_P (TYPE_STUB_DECL (enumtype))
16556                        && at_namespace_scope_p ());
16557 
16558   /* Convert each of the enumerators to the type of the underlying
16559      type of the enumeration.  */
16560   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
16561     {
16562       decl = TREE_VALUE (values);
16563       iloc_sentinel ils (DECL_SOURCE_LOCATION (decl));
16564       if (fixed_underlying_type_p)
16565         /* If the enumeration type has a fixed underlying type, we
16566            already checked all of the enumerator values.  */
16567         value = DECL_INITIAL (decl);
16568       else
16569         value = perform_implicit_conversion (underlying_type,
16570                                              DECL_INITIAL (decl),
16571                                              tf_warning_or_error);
16572       /* Do not clobber shared ints.  */
16573       if (value != error_mark_node)
16574           {
16575             value = copy_node (value);
16576 
16577             TREE_TYPE (value) = enumtype;
16578           }
16579       DECL_INITIAL (decl) = value;
16580       if (export_p)
16581           DECL_MODULE_EXPORT_P (decl) = true;
16582     }
16583 
16584   /* Fix up all variant types of this enum type.  */
16585   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
16586     TYPE_VALUES (t) = TYPE_VALUES (enumtype);
16587 
16588   if (at_class_scope_p ()
16589       && COMPLETE_TYPE_P (current_class_type)
16590       && UNSCOPED_ENUM_P (enumtype))
16591     {
16592       insert_late_enum_def_bindings (current_class_type, enumtype);
16593       /* TYPE_FIELDS needs fixup.  */
16594       fixup_type_variants (current_class_type);
16595     }
16596 
16597   /* Finish debugging output for this type.  */
16598   rest_of_type_compilation (enumtype, namespace_bindings_p ());
16599 
16600   /* Each enumerator now has the type of its enumeration.  Clear the cache
16601      so that this change in types doesn't confuse us later on.  */
16602   clear_cv_and_fold_caches ();
16603 }
16604 
16605 /* Finishes the enum type. This is called only the first time an
16606    enumeration is seen, be it opaque or odinary.
16607    ENUMTYPE is the type object.  */
16608 
16609 void
finish_enum(tree enumtype)16610 finish_enum (tree enumtype)
16611 {
16612   if (processing_template_decl)
16613     {
16614       if (at_function_scope_p ())
16615           add_stmt (build_min (TAG_DEFN, enumtype));
16616       return;
16617     }
16618 
16619   /* If this is a forward declaration, there should not be any variants,
16620      though we can get a variant in the middle of an enum-specifier with
16621      wacky code like 'enum E { e = sizeof(const E*) };'  */
16622   gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
16623                 && (TYPE_VALUES (enumtype)
16624                       || !TYPE_NEXT_VARIANT (enumtype)));
16625 }
16626 
16627 /* Build and install a CONST_DECL for an enumeration constant of the
16628    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
16629    Apply ATTRIBUTES if available.  LOC is the location of NAME.
16630    Assignment of sequential values by default is handled here.  */
16631 
16632 tree
build_enumerator(tree name,tree value,tree enumtype,tree attributes,location_t loc)16633 build_enumerator (tree name, tree value, tree enumtype, tree attributes,
16634                       location_t loc)
16635 {
16636   tree decl;
16637   tree context;
16638   tree type;
16639 
16640   /* scalar_constant_value will pull out this expression, so make sure
16641      it's folded as appropriate.  */
16642   if (processing_template_decl)
16643     value = fold_non_dependent_expr (value);
16644 
16645   /* If the VALUE was erroneous, pretend it wasn't there; that will
16646      result in the enum being assigned the next value in sequence.  */
16647   if (value == error_mark_node)
16648     value = NULL_TREE;
16649 
16650   /* Remove no-op casts from the value.  */
16651   if (value)
16652     STRIP_TYPE_NOPS (value);
16653 
16654   if (! processing_template_decl)
16655     {
16656       /* Validate and default VALUE.  */
16657       if (value != NULL_TREE)
16658           {
16659             if (!ENUM_UNDERLYING_TYPE (enumtype))
16660               {
16661                 tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
16662                                                                          value, true);
16663                 if (tmp_value)
16664                     value = tmp_value;
16665               }
16666             else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
16667                        (TREE_TYPE (value)))
16668               value = perform_implicit_conversion_flags
16669                 (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
16670                  LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
16671 
16672             if (value == error_mark_node)
16673               value = NULL_TREE;
16674 
16675             if (value != NULL_TREE)
16676               {
16677                 if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
16678                       (TREE_TYPE (value)))
16679                     {
16680                       error_at (cp_expr_loc_or_input_loc (value),
16681                                   "enumerator value for %qD must have integral or "
16682                                   "unscoped enumeration type", name);
16683                       value = NULL_TREE;
16684                     }
16685                 else
16686                     {
16687                       value = cxx_constant_value (value);
16688 
16689                       if (TREE_CODE (value) != INTEGER_CST)
16690                         {
16691                           error ("enumerator value for %qD is not an integer "
16692                                    "constant", name);
16693                           value = NULL_TREE;
16694                         }
16695                     }
16696               }
16697           }
16698 
16699       /* Default based on previous value.  */
16700       if (value == NULL_TREE)
16701           {
16702             if (TYPE_VALUES (enumtype))
16703               {
16704                 tree prev_value;
16705 
16706                 /* C++03 7.2/4: If no initializer is specified for the first
16707                      enumerator, the type is an unspecified integral
16708                      type. Otherwise the type is the same as the type of the
16709                      initializing value of the preceding enumerator unless the
16710                      incremented value is not representable in that type, in
16711                      which case the type is an unspecified integral type
16712                      sufficient to contain the incremented value.  */
16713                 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
16714                 if (TREE_CODE (prev_value) != INTEGER_CST)
16715                     value = error_mark_node;
16716                 else
16717                     {
16718                       wi::overflow_type overflowed;
16719                       tree type = TREE_TYPE (prev_value);
16720                       signop sgn = TYPE_SIGN (type);
16721                       widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
16722                                                      &overflowed);
16723                       if (!overflowed)
16724                         {
16725                           bool pos = !wi::neg_p (wi, sgn);
16726                           if (!wi::fits_to_tree_p (wi, type))
16727                               {
16728                                 unsigned int itk;
16729                                 for (itk = itk_int; itk != itk_none; itk++)
16730                                   {
16731                                     type = integer_types[itk];
16732                                     if (type != NULL_TREE
16733                                           && (pos || !TYPE_UNSIGNED (type))
16734                                           && wi::fits_to_tree_p (wi, type))
16735                                         break;
16736                                   }
16737                                 if (type && cxx_dialect < cxx11
16738                                     && itk > itk_unsigned_long)
16739                                   pedwarn (input_location, OPT_Wlong_long,
16740                                              pos ? G_("\
16741 incremented enumerator value is too large for %<unsigned long%>") : G_("\
16742 incremented enumerator value is too large for %<long%>"));
16743                               }
16744                           if (type == NULL_TREE)
16745                             overflowed = wi::OVF_UNKNOWN;
16746                           else
16747                               value = wide_int_to_tree (type, wi);
16748                         }
16749 
16750                       if (overflowed)
16751                         {
16752                           error ("overflow in enumeration values at %qD", name);
16753                           value = error_mark_node;
16754                         }
16755                     }
16756               }
16757             else
16758               value = integer_zero_node;
16759           }
16760 
16761       /* Remove no-op casts from the value.  */
16762       STRIP_TYPE_NOPS (value);
16763 
16764       /* If the underlying type of the enum is fixed, check whether
16765          the enumerator values fits in the underlying type.  If it
16766          does not fit, the program is ill-formed [C++0x dcl.enum].  */
16767       if (ENUM_UNDERLYING_TYPE (enumtype)
16768           && value
16769           && TREE_CODE (value) == INTEGER_CST)
16770         {
16771             if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
16772               error ("enumerator value %qE is outside the range of underlying "
16773                        "type %qT", value, ENUM_UNDERLYING_TYPE (enumtype));
16774 
16775           /* Convert the value to the appropriate type.  */
16776           value = fold_convert (ENUM_UNDERLYING_TYPE (enumtype), value);
16777         }
16778     }
16779 
16780   /* C++ associates enums with global, function, or class declarations.  */
16781   context = current_scope ();
16782 
16783   /* Build the actual enumeration constant.  Note that the enumeration
16784      constants have the underlying type of the enum (if it is fixed)
16785      or the type of their initializer (if the underlying type of the
16786      enum is not fixed):
16787 
16788       [ C++0x dcl.enum ]
16789 
16790         If the underlying type is fixed, the type of each enumerator
16791         prior to the closing brace is the underlying type; if the
16792         initializing value of an enumerator cannot be represented by
16793         the underlying type, the program is ill-formed. If the
16794         underlying type is not fixed, the type of each enumerator is
16795         the type of its initializing value.
16796 
16797     If the underlying type is not fixed, it will be computed by
16798     finish_enum and we will reset the type of this enumerator.  Of
16799     course, if we're processing a template, there may be no value.  */
16800   type = value ? TREE_TYPE (value) : NULL_TREE;
16801 
16802   decl = build_decl (loc, CONST_DECL, name, type);
16803 
16804   DECL_CONTEXT (decl) = enumtype;
16805   TREE_CONSTANT (decl) = 1;
16806   TREE_READONLY (decl) = 1;
16807   DECL_INITIAL (decl) = value;
16808 
16809   if (attributes)
16810     cplus_decl_attributes (&decl, attributes, 0);
16811 
16812   if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
16813     {
16814       /* In something like `struct S { enum E { i = 7 }; };' we put `i'
16815            on the TYPE_FIELDS list for `S'.  (That's so that you can say
16816            things like `S::i' later.)  */
16817 
16818       /* The enumerator may be getting declared outside of its enclosing
16819            class, like so:
16820 
16821              class S { public: enum E : int; }; enum S::E : int { i = 7; };
16822 
16823            For which case we need to make sure that the access of `S::i'
16824            matches the access of `S::E'.  */
16825       auto cas = make_temp_override (current_access_specifier);
16826       set_current_access_from_decl (TYPE_NAME (enumtype));
16827       finish_member_declaration (decl);
16828     }
16829   else
16830     pushdecl (decl);
16831 
16832   /* Add this enumeration constant to the list for this type.  */
16833   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
16834 
16835   return decl;
16836 }
16837 
16838 /* Look for an enumerator with the given NAME within the enumeration
16839    type ENUMTYPE.  This routine is used primarily for qualified name
16840    lookup into an enumerator in C++0x, e.g.,
16841 
16842      enum class Color { Red, Green, Blue };
16843 
16844      Color color = Color::Red;
16845 
16846    Returns the value corresponding to the enumerator, or
16847    NULL_TREE if no such enumerator was found.  */
16848 tree
lookup_enumerator(tree enumtype,tree name)16849 lookup_enumerator (tree enumtype, tree name)
16850 {
16851   tree e;
16852   gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
16853 
16854   e = purpose_member (name, TYPE_VALUES (enumtype));
16855   return e? TREE_VALUE (e) : NULL_TREE;
16856 }
16857 
16858 /* Implement LANG_HOOKS_SIMULATE_ENUM_DECL.  */
16859 
16860 tree
cxx_simulate_enum_decl(location_t loc,const char * name,vec<string_int_pair> * values)16861 cxx_simulate_enum_decl (location_t loc, const char *name,
16862                               vec<string_int_pair> *values)
16863 {
16864   location_t saved_loc = input_location;
16865   input_location = loc;
16866 
16867   tree enumtype = start_enum (get_identifier (name), NULL_TREE, NULL_TREE,
16868                                     NULL_TREE, false, NULL);
16869   if (!OPAQUE_ENUM_P (enumtype))
16870     {
16871       error_at (loc, "multiple definition of %q#T", enumtype);
16872       inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
16873                 "previous definition here");
16874       return enumtype;
16875     }
16876   SET_OPAQUE_ENUM_P (enumtype, false);
16877   DECL_SOURCE_LOCATION (TYPE_NAME (enumtype)) = loc;
16878 
16879   for (const string_int_pair &value : values)
16880     build_enumerator (get_identifier (value.first),
16881                           build_int_cst (integer_type_node, value.second),
16882                           enumtype, NULL_TREE, loc);
16883 
16884   finish_enum_value_list (enumtype);
16885   finish_enum (enumtype);
16886 
16887   input_location = saved_loc;
16888   return enumtype;
16889 }
16890 
16891 /* Implement LANG_HOOKS_SIMULATE_RECORD_DECL.  */
16892 
16893 tree
cxx_simulate_record_decl(location_t loc,const char * name,array_slice<const tree> fields)16894 cxx_simulate_record_decl (location_t loc, const char *name,
16895                                 array_slice<const tree> fields)
16896 {
16897   iloc_sentinel ils (loc);
16898 
16899   tree ident = get_identifier (name);
16900   tree type = xref_tag (/*tag_code=*/record_type, ident);
16901   if (type != error_mark_node
16902       && (TREE_CODE (type) != RECORD_TYPE || COMPLETE_TYPE_P (type)))
16903     {
16904       error ("redefinition of %q#T", type);
16905       type = error_mark_node;
16906     }
16907   if (type == error_mark_node)
16908     return lhd_simulate_record_decl (loc, name, fields);
16909 
16910   xref_basetypes (type, NULL_TREE);
16911   type = begin_class_definition (type);
16912   if (type == error_mark_node)
16913     return lhd_simulate_record_decl (loc, name, fields);
16914 
16915   for (tree field : fields)
16916     finish_member_declaration (field);
16917 
16918   type = finish_struct (type, NULL_TREE);
16919 
16920   tree decl = build_decl (loc, TYPE_DECL, ident, type);
16921   set_underlying_type (decl);
16922   lang_hooks.decls.pushdecl (decl);
16923 
16924   return type;
16925 }
16926 
16927 /* We're defining DECL.  Make sure that its type is OK.  */
16928 
16929 static void
check_function_type(tree decl,tree current_function_parms)16930 check_function_type (tree decl, tree current_function_parms)
16931 {
16932   tree fntype = TREE_TYPE (decl);
16933   tree return_type = complete_type (TREE_TYPE (fntype));
16934 
16935   /* In a function definition, arg types must be complete.  */
16936   require_complete_types_for_parms (current_function_parms);
16937 
16938   if (dependent_type_p (return_type)
16939       || type_uses_auto (return_type))
16940     return;
16941   if (!COMPLETE_OR_VOID_TYPE_P (return_type))
16942     {
16943       tree args = TYPE_ARG_TYPES (fntype);
16944 
16945       error ("return type %q#T is incomplete", return_type);
16946 
16947       /* Make it return void instead.  */
16948       if (TREE_CODE (fntype) == METHOD_TYPE)
16949           fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
16950                                                        void_type_node,
16951                                                        TREE_CHAIN (args));
16952       else
16953           fntype = build_function_type (void_type_node, args);
16954       fntype = (cp_build_type_attribute_variant
16955                     (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
16956       fntype = cxx_copy_lang_qualifiers (fntype, TREE_TYPE (decl));
16957       TREE_TYPE (decl) = fntype;
16958     }
16959   else
16960     {
16961       abstract_virtuals_error (decl, TREE_TYPE (fntype));
16962       maybe_warn_parm_abi (TREE_TYPE (fntype),
16963                                  DECL_SOURCE_LOCATION (decl));
16964     }
16965 }
16966 
16967 /* True iff FN is an implicitly-defined default constructor.  */
16968 
16969 static bool
implicit_default_ctor_p(tree fn)16970 implicit_default_ctor_p (tree fn)
16971 {
16972   return (DECL_CONSTRUCTOR_P (fn)
16973             && !user_provided_p (fn)
16974             && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)));
16975 }
16976 
16977 /* Clobber the contents of *this to let the back end know that the object
16978    storage is dead when we enter the constructor or leave the destructor.  */
16979 
16980 static tree
build_clobber_this()16981 build_clobber_this ()
16982 {
16983   /* Clobbering an empty base is pointless, and harmful if its one byte
16984      TYPE_SIZE overlays real data.  */
16985   if (is_empty_class (current_class_type))
16986     return void_node;
16987 
16988   /* If we have virtual bases, clobber the whole object, but only if we're in
16989      charge.  If we don't have virtual bases, clobber the as-base type so we
16990      don't mess with tail padding.  */
16991   bool vbases = CLASSTYPE_VBASECLASSES (current_class_type);
16992 
16993   tree ctype = current_class_type;
16994   if (!vbases)
16995     ctype = CLASSTYPE_AS_BASE (ctype);
16996 
16997   tree clobber = build_clobber (ctype);
16998 
16999   tree thisref = current_class_ref;
17000   if (ctype != current_class_type)
17001     {
17002       thisref = build_nop (build_reference_type (ctype), current_class_ptr);
17003       thisref = convert_from_reference (thisref);
17004     }
17005 
17006   tree exprstmt = build2 (MODIFY_EXPR, void_type_node, thisref, clobber);
17007   if (vbases)
17008     exprstmt = build_if_in_charge (exprstmt);
17009 
17010   return exprstmt;
17011 }
17012 
17013 /* Create the FUNCTION_DECL for a function definition.
17014    DECLSPECS and DECLARATOR are the parts of the declaration;
17015    they describe the function's name and the type it returns,
17016    but twisted together in a fashion that parallels the syntax of C.
17017 
17018    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
17019    DECLARATOR is really the DECL for the function we are about to
17020    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
17021    indicating that the function is an inline defined in-class.
17022 
17023    This function creates a binding context for the function body
17024    as well as setting up the FUNCTION_DECL in current_function_decl.
17025 
17026    For C++, we must first check whether that datum makes any sense.
17027    For example, "class A local_a(1,2);" means that variable local_a
17028    is an aggregate of type A, which should have a constructor
17029    applied to it with the argument list [1, 2].
17030 
17031    On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
17032    or may be a BLOCK if the function has been defined previously
17033    in this translation unit.  On exit, DECL_INITIAL (decl1) will be
17034    error_mark_node if the function has never been defined, or
17035    a BLOCK if the function has been defined somewhere.  */
17036 
17037 bool
start_preparsed_function(tree decl1,tree attrs,int flags)17038 start_preparsed_function (tree decl1, tree attrs, int flags)
17039 {
17040   tree ctype = NULL_TREE;
17041   bool doing_friend = false;
17042 
17043   /* Sanity check.  */
17044   gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
17045   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
17046 
17047   tree fntype = TREE_TYPE (decl1);
17048   if (TREE_CODE (fntype) == METHOD_TYPE)
17049     ctype = TYPE_METHOD_BASETYPE (fntype);
17050   else
17051     {
17052       ctype = DECL_FRIEND_CONTEXT (decl1);
17053 
17054       if (ctype)
17055           doing_friend = true;
17056     }
17057 
17058   if (DECL_DECLARED_INLINE_P (decl1)
17059       && lookup_attribute ("noinline", attrs))
17060     warning_at (DECL_SOURCE_LOCATION (decl1), 0,
17061                     "inline function %qD given attribute %qs", decl1, "noinline");
17062 
17063   /* Handle gnu_inline attribute.  */
17064   if (GNU_INLINE_P (decl1))
17065     {
17066       DECL_EXTERNAL (decl1) = 1;
17067       DECL_NOT_REALLY_EXTERN (decl1) = 0;
17068       DECL_INTERFACE_KNOWN (decl1) = 1;
17069       DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
17070     }
17071 
17072   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
17073     /* This is a constructor, we must ensure that any default args
17074        introduced by this definition are propagated to the clones
17075        now. The clones are used directly in overload resolution.  */
17076     adjust_clone_args (decl1);
17077 
17078   /* Sometimes we don't notice that a function is a static member, and
17079      build a METHOD_TYPE for it.  Fix that up now.  */
17080   gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
17081                     && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
17082 
17083   /* Set up current_class_type, and enter the scope of the class, if
17084      appropriate.  */
17085   if (ctype)
17086     push_nested_class (ctype);
17087   else if (DECL_STATIC_FUNCTION_P (decl1))
17088     push_nested_class (DECL_CONTEXT (decl1));
17089 
17090   /* Now that we have entered the scope of the class, we must restore
17091      the bindings for any template parameters surrounding DECL1, if it
17092      is an inline member template.  (Order is important; consider the
17093      case where a template parameter has the same name as a field of
17094      the class.)  It is not until after this point that
17095      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
17096   if (flags & SF_INCLASS_INLINE)
17097     maybe_begin_member_template_processing (decl1);
17098 
17099   /* Effective C++ rule 15.  */
17100   if (warn_ecpp
17101       && DECL_ASSIGNMENT_OPERATOR_P (decl1)
17102       && DECL_OVERLOADED_OPERATOR_IS (decl1, NOP_EXPR)
17103       && VOID_TYPE_P (TREE_TYPE (fntype)))
17104     warning (OPT_Weffc__,
17105                "%<operator=%> should return a reference to %<*this%>");
17106 
17107   /* Make the init_value nonzero so pushdecl knows this is not tentative.
17108      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
17109   if (!DECL_INITIAL (decl1))
17110     DECL_INITIAL (decl1) = error_mark_node;
17111 
17112   /* This function exists in static storage.
17113      (This does not mean `static' in the C sense!)  */
17114   TREE_STATIC (decl1) = 1;
17115 
17116   /* We must call push_template_decl after current_class_type is set
17117      up.  (If we are processing inline definitions after exiting a
17118      class scope, current_class_type will be NULL_TREE until set above
17119      by push_nested_class.)  */
17120   if (processing_template_decl)
17121     {
17122       tree newdecl1 = push_template_decl (decl1, doing_friend);
17123       if (newdecl1 == error_mark_node)
17124           {
17125             if (ctype || DECL_STATIC_FUNCTION_P (decl1))
17126               pop_nested_class ();
17127             return false;
17128           }
17129       decl1 = newdecl1;
17130     }
17131 
17132   /* Make sure the parameter and return types are reasonable.  When
17133      you declare a function, these types can be incomplete, but they
17134      must be complete when you define the function.  */
17135   check_function_type (decl1, DECL_ARGUMENTS (decl1));
17136 
17137   /* Build the return declaration for the function.  */
17138   tree restype = TREE_TYPE (fntype);
17139 
17140   if (DECL_RESULT (decl1) == NULL_TREE)
17141     {
17142       tree resdecl;
17143 
17144       resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
17145       DECL_ARTIFICIAL (resdecl) = 1;
17146       DECL_IGNORED_P (resdecl) = 1;
17147       DECL_RESULT (decl1) = resdecl;
17148 
17149       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
17150     }
17151 
17152   /* Record the decl so that the function name is defined.
17153      If we already have a decl for this name, and it is a FUNCTION_DECL,
17154      use the old decl.  */
17155   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
17156     {
17157       /* A specialization is not used to guide overload resolution.  */
17158       if (!DECL_FUNCTION_MEMBER_P (decl1)
17159             && !(DECL_USE_TEMPLATE (decl1) &&
17160                  PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
17161           {
17162             tree olddecl = pushdecl (decl1);
17163 
17164             if (olddecl == error_mark_node)
17165               /* If something went wrong when registering the declaration,
17166                  use DECL1; we have to have a FUNCTION_DECL to use when
17167                  parsing the body of the function.  */
17168               ;
17169             else
17170               {
17171                 /* Otherwise, OLDDECL is either a previous declaration
17172                      of the same function or DECL1 itself.  */
17173 
17174                 if (warn_missing_declarations
17175                       && olddecl == decl1
17176                       && !DECL_MAIN_P (decl1)
17177                       && TREE_PUBLIC (decl1)
17178                       && !DECL_DECLARED_INLINE_P (decl1))
17179                     {
17180                       tree context;
17181 
17182                       /* Check whether DECL1 is in an anonymous
17183                          namespace.  */
17184                       for (context = DECL_CONTEXT (decl1);
17185                            context;
17186                            context = DECL_CONTEXT (context))
17187                         {
17188                           if (TREE_CODE (context) == NAMESPACE_DECL
17189                                 && DECL_NAME (context) == NULL_TREE)
17190                               break;
17191                         }
17192 
17193                       if (context == NULL)
17194                         warning_at (DECL_SOURCE_LOCATION (decl1),
17195                                         OPT_Wmissing_declarations,
17196                                         "no previous declaration for %qD", decl1);
17197                     }
17198 
17199                 decl1 = olddecl;
17200               }
17201           }
17202       else
17203           {
17204             /* We need to set the DECL_CONTEXT.  */
17205             if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
17206               DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
17207           }
17208       fntype = TREE_TYPE (decl1);
17209       restype = TREE_TYPE (fntype);
17210 
17211       /* If #pragma weak applies, mark the decl appropriately now.
17212            The pragma only applies to global functions.  Because
17213            determining whether or not the #pragma applies involves
17214            computing the mangled name for the declaration, we cannot
17215            apply the pragma until after we have merged this declaration
17216            with any previous declarations; if the original declaration
17217            has a linkage specification, that specification applies to
17218            the definition as well, and may affect the mangled name.  */
17219       if (DECL_FILE_SCOPE_P (decl1))
17220           maybe_apply_pragma_weak (decl1);
17221     }
17222 
17223   /* We are now in the scope of the function being defined.  */
17224   current_function_decl = decl1;
17225 
17226   /* Save the parm names or decls from this function's declarator
17227      where store_parm_decls will find them.  */
17228   tree current_function_parms = DECL_ARGUMENTS (decl1);
17229 
17230   /* Let the user know we're compiling this function.  */
17231   announce_function (decl1);
17232 
17233   gcc_assert (DECL_INITIAL (decl1));
17234 
17235   /* This function may already have been parsed, in which case just
17236      return; our caller will skip over the body without parsing.  */
17237   if (DECL_INITIAL (decl1) != error_mark_node)
17238     return true;
17239 
17240   /* Initialize RTL machinery.  We cannot do this until
17241      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
17242      even when processing a template; this is how we get
17243      CFUN set up, and our per-function variables initialized.
17244      FIXME factor out the non-RTL stuff.  */
17245   cp_binding_level *bl = current_binding_level;
17246   allocate_struct_function (decl1, processing_template_decl);
17247 
17248   /* Initialize the language data structures.  Whenever we start
17249      a new function, we destroy temporaries in the usual way.  */
17250   cfun->language = ggc_cleared_alloc<language_function> ();
17251   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
17252   current_binding_level = bl;
17253 
17254   /* If we are (erroneously) defining a function that we have already
17255      defined before, wipe out what we knew before.  */
17256   gcc_checking_assert (!DECL_PENDING_INLINE_P (decl1));
17257   FNDECL_USED_AUTO (decl1) = false;
17258   DECL_SAVED_AUTO_RETURN_TYPE (decl1) = NULL;
17259 
17260   if (!processing_template_decl && type_uses_auto (restype))
17261     {
17262       FNDECL_USED_AUTO (decl1) = true;
17263       DECL_SAVED_AUTO_RETURN_TYPE (decl1) = restype;
17264     }
17265 
17266   /* Start the statement-tree, start the tree now.  */
17267   DECL_SAVED_TREE (decl1) = push_stmt_list ();
17268 
17269   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
17270     {
17271       /* We know that this was set up by `grokclassfn'.  We do not
17272            wait until `store_parm_decls', since evil parse errors may
17273            never get us to that point.  Here we keep the consistency
17274            between `current_class_type' and `current_class_ptr'.  */
17275       tree t = DECL_ARGUMENTS (decl1);
17276 
17277       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
17278       gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
17279 
17280       cp_function_chain->x_current_class_ref
17281           = cp_build_fold_indirect_ref (t);
17282       /* Set this second to avoid shortcut in cp_build_indirect_ref.  */
17283       cp_function_chain->x_current_class_ptr = t;
17284 
17285       /* Constructors and destructors need to know whether they're "in
17286            charge" of initializing virtual base classes.  */
17287       t = DECL_CHAIN (t);
17288       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
17289           {
17290             current_in_charge_parm = t;
17291             t = DECL_CHAIN (t);
17292           }
17293       if (DECL_HAS_VTT_PARM_P (decl1))
17294           {
17295             gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
17296             current_vtt_parm = t;
17297           }
17298     }
17299 
17300   bool honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
17301                                 /* Implicitly-defined methods (like the
17302                                    destructor for a class in which no destructor
17303                                    is explicitly declared) must not be defined
17304                                    until their definition is needed.  So, we
17305                                    ignore interface specifications for
17306                                    compiler-generated functions.  */
17307                                 && !DECL_ARTIFICIAL (decl1));
17308   struct c_fileinfo *finfo
17309     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
17310 
17311   if (processing_template_decl)
17312     /* Don't mess with interface flags.  */;
17313   else if (DECL_INTERFACE_KNOWN (decl1))
17314     {
17315       tree ctx = decl_function_context (decl1);
17316 
17317       if (DECL_NOT_REALLY_EXTERN (decl1))
17318           DECL_EXTERNAL (decl1) = 0;
17319 
17320       if (ctx != NULL_TREE && vague_linkage_p (ctx))
17321           /* This is a function in a local class in an extern inline
17322              or template function.  */
17323           comdat_linkage (decl1);
17324     }
17325   /* If this function belongs to an interface, it is public.
17326      If it belongs to someone else's interface, it is also external.
17327      This only affects inlines and template instantiations.  */
17328   else if (!finfo->interface_unknown && honor_interface)
17329     {
17330       if (DECL_DECLARED_INLINE_P (decl1)
17331             || DECL_TEMPLATE_INSTANTIATION (decl1))
17332           {
17333             DECL_EXTERNAL (decl1)
17334               = (finfo->interface_only
17335                  || (DECL_DECLARED_INLINE_P (decl1)
17336                        && ! flag_implement_inlines
17337                        && !DECL_VINDEX (decl1)));
17338 
17339             /* For WIN32 we also want to put these in linkonce sections.  */
17340             maybe_make_one_only (decl1);
17341           }
17342       else
17343           DECL_EXTERNAL (decl1) = 0;
17344       DECL_INTERFACE_KNOWN (decl1) = 1;
17345       /* If this function is in an interface implemented in this file,
17346            make sure that the back end knows to emit this function
17347            here.  */
17348       if (!DECL_EXTERNAL (decl1))
17349           mark_needed (decl1);
17350     }
17351   else if (finfo->interface_unknown && finfo->interface_only
17352              && honor_interface)
17353     {
17354       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
17355            interface, we will have both finfo->interface_unknown and
17356            finfo->interface_only set.  In that case, we don't want to
17357            use the normal heuristics because someone will supply a
17358            #pragma implementation elsewhere, and deducing it here would
17359            produce a conflict.  */
17360       comdat_linkage (decl1);
17361       DECL_EXTERNAL (decl1) = 0;
17362       DECL_INTERFACE_KNOWN (decl1) = 1;
17363       DECL_DEFER_OUTPUT (decl1) = 1;
17364     }
17365   else
17366     {
17367       /* This is a definition, not a reference.
17368            So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
17369       if (!GNU_INLINE_P (decl1))
17370           DECL_EXTERNAL (decl1) = 0;
17371 
17372       if ((DECL_DECLARED_INLINE_P (decl1)
17373              || DECL_TEMPLATE_INSTANTIATION (decl1))
17374             && ! DECL_INTERFACE_KNOWN (decl1))
17375           DECL_DEFER_OUTPUT (decl1) = 1;
17376       else
17377           DECL_INTERFACE_KNOWN (decl1) = 1;
17378     }
17379 
17380   /* Determine the ELF visibility attribute for the function.  We must not
17381      do this before calling "pushdecl", as we must allow "duplicate_decls"
17382      to merge any attributes appropriately.  We also need to wait until
17383      linkage is set.  */
17384   if (!DECL_CLONED_FUNCTION_P (decl1))
17385     determine_visibility (decl1);
17386 
17387   if (!processing_template_decl)
17388     maybe_instantiate_noexcept (decl1);
17389 
17390   begin_scope (sk_function_parms, decl1);
17391 
17392   ++function_depth;
17393 
17394   if (DECL_DESTRUCTOR_P (decl1)
17395       || (DECL_CONSTRUCTOR_P (decl1)
17396             && targetm.cxx.cdtor_returns_this ()))
17397     {
17398       cdtor_label = create_artificial_label (input_location);
17399       LABEL_DECL_CDTOR (cdtor_label) = true;
17400     }
17401 
17402   start_fname_decls ();
17403 
17404   store_parm_decls (current_function_parms);
17405 
17406   if (!processing_template_decl
17407       && (flag_lifetime_dse > 1)
17408       && DECL_CONSTRUCTOR_P (decl1)
17409       && !DECL_CLONED_FUNCTION_P (decl1)
17410       /* Clobbering an empty base is harmful if it overlays real data.  */
17411       && !is_empty_class (current_class_type)
17412       /* We can't clobber safely for an implicitly-defined default constructor
17413            because part of the initialization might happen before we enter the
17414            constructor, via AGGR_INIT_ZERO_FIRST (c++/68006).  */
17415       && !implicit_default_ctor_p (decl1))
17416     finish_expr_stmt (build_clobber_this ());
17417 
17418   if (!processing_template_decl
17419       && DECL_CONSTRUCTOR_P (decl1)
17420       && sanitize_flags_p (SANITIZE_VPTR)
17421       && !DECL_CLONED_FUNCTION_P (decl1)
17422       && !implicit_default_ctor_p (decl1))
17423     cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr);
17424 
17425   if (!DECL_OMP_DECLARE_REDUCTION_P (decl1))
17426     start_lambda_scope (decl1);
17427 
17428   return true;
17429 }
17430 
17431 
17432 /* Like start_preparsed_function, except that instead of a
17433    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
17434 
17435    Returns true on success.  If the DECLARATOR is not suitable
17436    for a function, we return false, which tells the parser to
17437    skip the entire function.  */
17438 
17439 bool
start_function(cp_decl_specifier_seq * declspecs,const cp_declarator * declarator,tree attrs)17440 start_function (cp_decl_specifier_seq *declspecs,
17441                     const cp_declarator *declarator,
17442                     tree attrs)
17443 {
17444   tree decl1;
17445 
17446   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
17447   invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION, decl1);
17448   if (decl1 == error_mark_node)
17449     return false;
17450 
17451   if (DECL_MAIN_P (decl1))
17452     /* main must return int.  grokfndecl should have corrected it
17453        (and issued a diagnostic) if the user got it wrong.  */
17454     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
17455                                    integer_type_node));
17456 
17457   return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
17458 }
17459 
17460 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
17461    FN.  */
17462 
17463 static bool
use_eh_spec_block(tree fn)17464 use_eh_spec_block (tree fn)
17465 {
17466   return (flag_exceptions && flag_enforce_eh_specs
17467             && !processing_template_decl
17468             /* We insert the EH_SPEC_BLOCK only in the original
17469                function; then, it is copied automatically to the
17470                clones.  */
17471             && !DECL_CLONED_FUNCTION_P (fn)
17472             /* Implicitly-generated constructors and destructors have
17473                exception specifications.  However, those specifications
17474                are the union of the possible exceptions specified by the
17475                constructors/destructors for bases and members, so no
17476                unallowed exception will ever reach this function.  By
17477                not creating the EH_SPEC_BLOCK we save a little memory,
17478                and we avoid spurious warnings about unreachable
17479                code.  */
17480             && !DECL_DEFAULTED_FN (fn)
17481             && !type_throw_all_p (TREE_TYPE (fn)));
17482 }
17483 
17484 /* Helper function to push ARGS into the current lexical scope.  DECL
17485    is the function declaration.  NONPARMS is used to handle enum
17486    constants.  */
17487 
17488 void
do_push_parm_decls(tree decl,tree args,tree * nonparms)17489 do_push_parm_decls (tree decl, tree args, tree *nonparms)
17490 {
17491   /* If we're doing semantic analysis, then we'll call pushdecl
17492      for each of these.  We must do them in reverse order so that
17493      they end in the correct forward order.  */
17494   args = nreverse (args);
17495 
17496   tree next;
17497   for (tree parm = args; parm; parm = next)
17498     {
17499       next = DECL_CHAIN (parm);
17500       if (TREE_CODE (parm) == PARM_DECL)
17501           pushdecl (parm);
17502       else if (nonparms)
17503           {
17504             /* If we find an enum constant or a type tag, put it aside for
17505                the moment.  */
17506             TREE_CHAIN (parm) = NULL_TREE;
17507             *nonparms = chainon (*nonparms, parm);
17508           }
17509     }
17510 
17511   /* Get the decls in their original chain order and record in the
17512      function.  This is all and only the PARM_DECLs that were
17513      pushed into scope by the loop above.  */
17514   DECL_ARGUMENTS (decl) = get_local_decls ();
17515 }
17516 
17517 /* Store the parameter declarations into the current function declaration.
17518    This is called after parsing the parameter declarations, before
17519    digesting the body of the function.
17520 
17521    Also install to binding contour return value identifier, if any.  */
17522 
17523 static void
store_parm_decls(tree current_function_parms)17524 store_parm_decls (tree current_function_parms)
17525 {
17526   tree fndecl = current_function_decl;
17527 
17528   /* This is a chain of any other decls that came in among the parm
17529      declarations.  If a parm is declared with  enum {foo, bar} x;
17530      then CONST_DECLs for foo and bar are put here.  */
17531   tree nonparms = NULL_TREE;
17532 
17533   if (current_function_parms)
17534     {
17535       /* This case is when the function was defined with an ANSI prototype.
17536            The parms already have decls, so we need not do anything here
17537            except record them as in effect
17538            and complain if any redundant old-style parm decls were written.  */
17539 
17540       tree specparms = current_function_parms;
17541 
17542       /* Must clear this because it might contain TYPE_DECLs declared
17543                at class level.  */
17544       current_binding_level->names = NULL;
17545 
17546       do_push_parm_decls (fndecl, specparms, &nonparms);
17547     }
17548   else
17549     DECL_ARGUMENTS (fndecl) = NULL_TREE;
17550 
17551   /* Now store the final chain of decls for the arguments
17552      as the decl-chain of the current lexical scope.
17553      Put the enumerators in as well, at the front so that
17554      DECL_ARGUMENTS is not modified.  */
17555   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
17556 
17557   if (use_eh_spec_block (current_function_decl))
17558     current_eh_spec_block = begin_eh_spec_block ();
17559 }
17560 
17561 
17562 /* Set the return value of the constructor (if present).  */
17563 
17564 static void
finish_constructor_body(void)17565 finish_constructor_body (void)
17566 {
17567   tree val;
17568   tree exprstmt;
17569 
17570   if (targetm.cxx.cdtor_returns_this ())
17571     {
17572       /* Any return from a constructor will end up here.  */
17573       add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
17574 
17575       val = DECL_ARGUMENTS (current_function_decl);
17576       suppress_warning (val, OPT_Wuse_after_free);
17577       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
17578                         DECL_RESULT (current_function_decl), val);
17579       /* Return the address of the object.  */
17580       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
17581       add_stmt (exprstmt);
17582     }
17583 }
17584 
17585 /* Do all the processing for the beginning of a destructor; set up the
17586    vtable pointers and cleanups for bases and members.  */
17587 
17588 static void
begin_destructor_body(void)17589 begin_destructor_body (void)
17590 {
17591   tree compound_stmt;
17592 
17593   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
17594      issued an error message.  We still want to try to process the
17595      body of the function, but initialize_vtbl_ptrs will crash if
17596      TYPE_BINFO is NULL.  */
17597   if (COMPLETE_TYPE_P (current_class_type))
17598     {
17599       compound_stmt = begin_compound_stmt (0);
17600       /* Make all virtual function table pointers in non-virtual base
17601            classes point to CURRENT_CLASS_TYPE's virtual function
17602            tables.  */
17603       initialize_vtbl_ptrs (current_class_ptr);
17604       finish_compound_stmt (compound_stmt);
17605 
17606       if (flag_lifetime_dse
17607             /* Clobbering an empty base is harmful if it overlays real data.  */
17608             && !is_empty_class (current_class_type))
17609       {
17610           if (sanitize_flags_p (SANITIZE_VPTR)
17611               && (flag_sanitize_recover & SANITIZE_VPTR) == 0
17612               && TYPE_CONTAINS_VPTR_P (current_class_type))
17613             {
17614               tree binfo = TYPE_BINFO (current_class_type);
17615               tree ref
17616                 = cp_build_fold_indirect_ref (current_class_ptr);
17617 
17618               tree vtbl_ptr = build_vfield_ref (ref, TREE_TYPE (binfo));
17619               tree vtbl = build_zero_cst (TREE_TYPE (vtbl_ptr));
17620               tree stmt = cp_build_modify_expr (input_location, vtbl_ptr,
17621                                                         NOP_EXPR, vtbl,
17622                                                         tf_warning_or_error);
17623               /* If the vptr is shared with some virtual nearly empty base,
17624                  don't clear it if not in charge, the dtor of the virtual
17625                  nearly empty base will do that later.  */
17626               if (CLASSTYPE_VBASECLASSES (current_class_type))
17627                 {
17628                     tree c = current_class_type;
17629                     while (CLASSTYPE_PRIMARY_BINFO (c))
17630                       {
17631                         if (BINFO_VIRTUAL_P (CLASSTYPE_PRIMARY_BINFO (c)))
17632                           {
17633                               stmt = convert_to_void (stmt, ICV_STATEMENT,
17634                                                             tf_warning_or_error);
17635                               stmt = build_if_in_charge (stmt);
17636                               break;
17637                           }
17638                         c = BINFO_TYPE (CLASSTYPE_PRIMARY_BINFO (c));
17639                       }
17640                 }
17641               finish_decl_cleanup (NULL_TREE, stmt);
17642             }
17643           else
17644             finish_decl_cleanup (NULL_TREE, build_clobber_this ());
17645       }
17646 
17647       /* And insert cleanups for our bases and members so that they
17648            will be properly destroyed if we throw.  */
17649       push_base_cleanups ();
17650     }
17651 }
17652 
17653 /* At the end of every destructor we generate code to delete the object if
17654    necessary.  Do that now.  */
17655 
17656 static void
finish_destructor_body(void)17657 finish_destructor_body (void)
17658 {
17659   tree exprstmt;
17660 
17661   /* Any return from a destructor will end up here; that way all base
17662      and member cleanups will be run when the function returns.  */
17663   add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
17664 
17665   if (targetm.cxx.cdtor_returns_this ())
17666     {
17667       tree val;
17668 
17669       val = DECL_ARGUMENTS (current_function_decl);
17670       suppress_warning (val, OPT_Wuse_after_free);
17671       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
17672                         DECL_RESULT (current_function_decl), val);
17673       /* Return the address of the object.  */
17674       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
17675       add_stmt (exprstmt);
17676     }
17677 }
17678 
17679 /* Do the necessary processing for the beginning of a function body, which
17680    in this case includes member-initializers, but not the catch clauses of
17681    a function-try-block.  Currently, this means opening a binding level
17682    for the member-initializers (in a ctor), member cleanups (in a dtor),
17683    and capture proxies (in a lambda operator()).  */
17684 
17685 tree
begin_function_body(void)17686 begin_function_body (void)
17687 {
17688   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
17689     return NULL_TREE;
17690 
17691   if (processing_template_decl)
17692     /* Do nothing now.  */;
17693   else
17694     /* Always keep the BLOCK node associated with the outermost pair of
17695        curly braces of a function.  These are needed for correct
17696        operation of dwarfout.c.  */
17697     keep_next_level (true);
17698 
17699   tree stmt = begin_compound_stmt (BCS_FN_BODY);
17700 
17701   if (processing_template_decl)
17702     /* Do nothing now.  */;
17703   else if (DECL_DESTRUCTOR_P (current_function_decl))
17704     begin_destructor_body ();
17705 
17706   return stmt;
17707 }
17708 
17709 /* Do the processing for the end of a function body.  Currently, this means
17710    closing out the cleanups for fully-constructed bases and members, and in
17711    the case of the destructor, deleting the object if desired.  Again, this
17712    is only meaningful for [cd]tors, since they are the only functions where
17713    there is a significant distinction between the main body and any
17714    function catch clauses.  Handling, say, main() return semantics here
17715    would be wrong, as flowing off the end of a function catch clause for
17716    main() would also need to return 0.  */
17717 
17718 void
finish_function_body(tree compstmt)17719 finish_function_body (tree compstmt)
17720 {
17721   if (compstmt == NULL_TREE)
17722     return;
17723 
17724   /* Close the block.  */
17725   finish_compound_stmt (compstmt);
17726 
17727   if (processing_template_decl)
17728     /* Do nothing now.  */;
17729   else if (DECL_CONSTRUCTOR_P (current_function_decl))
17730     finish_constructor_body ();
17731   else if (DECL_DESTRUCTOR_P (current_function_decl))
17732     finish_destructor_body ();
17733 }
17734 
17735 /* Given a function, returns the BLOCK corresponding to the outermost level
17736    of curly braces, skipping the artificial block created for constructor
17737    initializers.  */
17738 
17739 tree
outer_curly_brace_block(tree fndecl)17740 outer_curly_brace_block (tree fndecl)
17741 {
17742   tree block = DECL_INITIAL (fndecl);
17743   if (BLOCK_OUTER_CURLY_BRACE_P (block))
17744     return block;
17745   block = BLOCK_SUBBLOCKS (block);
17746   if (BLOCK_OUTER_CURLY_BRACE_P (block))
17747     return block;
17748   block = BLOCK_SUBBLOCKS (block);
17749   gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
17750   return block;
17751 }
17752 
17753 /* If FNDECL is a class's key method, add the class to the list of
17754    keyed classes that should be emitted.  */
17755 
17756 static void
record_key_method_defined(tree fndecl)17757 record_key_method_defined (tree fndecl)
17758 {
17759   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
17760       && DECL_VIRTUAL_P (fndecl)
17761       && !processing_template_decl)
17762     {
17763       tree fnclass = DECL_CONTEXT (fndecl);
17764       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
17765           vec_safe_push (keyed_classes, fnclass);
17766     }
17767 }
17768 
17769 /* Attempt to add a fix-it hint to RICHLOC suggesting the insertion
17770    of "return *this;" immediately before its location, using FNDECL's
17771    first statement (if any) to give the indentation, if appropriate.  */
17772 
17773 static void
add_return_star_this_fixit(gcc_rich_location * richloc,tree fndecl)17774 add_return_star_this_fixit (gcc_rich_location *richloc, tree fndecl)
17775 {
17776   location_t indent = UNKNOWN_LOCATION;
17777   tree stmts = expr_first (DECL_SAVED_TREE (fndecl));
17778   if (stmts)
17779     indent = EXPR_LOCATION (stmts);
17780   richloc->add_fixit_insert_formatted ("return *this;",
17781                                                richloc->get_loc (),
17782                                                indent);
17783 }
17784 
17785 /* This function carries out the subset of finish_function operations needed
17786    to emit the compiler-generated outlined helper functions used by the
17787    coroutines implementation.  */
17788 
17789 static void
emit_coro_helper(tree helper)17790 emit_coro_helper (tree helper)
17791 {
17792   /* This is a partial set of the operations done by finish_function()
17793      plus emitting the result.  */
17794   set_cfun (NULL);
17795   current_function_decl = helper;
17796   begin_scope (sk_function_parms, NULL);
17797   store_parm_decls (DECL_ARGUMENTS (helper));
17798   announce_function (helper);
17799   allocate_struct_function (helper, false);
17800   cfun->language = ggc_cleared_alloc<language_function> ();
17801   poplevel (1, 0, 1);
17802   maybe_save_constexpr_fundef (helper);
17803   /* We must start each function with a clear fold cache.  */
17804   clear_fold_cache ();
17805   cp_fold_function (helper);
17806   DECL_CONTEXT (DECL_RESULT (helper)) = helper;
17807   BLOCK_SUPERCONTEXT (DECL_INITIAL (helper)) = helper;
17808   /* This function has coroutine IFNs that we should handle in middle
17809      end lowering.  */
17810   cfun->coroutine_component = true;
17811   cp_genericize (helper);
17812   expand_or_defer_fn (helper);
17813 }
17814 
17815 /* Finish up a function declaration and compile that function
17816    all the way to assembler language output.  The free the storage
17817    for the function definition. INLINE_P is TRUE if we just
17818    finished processing the body of an in-class inline function
17819    definition.  (This processing will have taken place after the
17820    class definition is complete.)  */
17821 
17822 tree
finish_function(bool inline_p)17823 finish_function (bool inline_p)
17824 {
17825   tree fndecl = current_function_decl;
17826   tree fntype, ctype = NULL_TREE;
17827   tree resumer = NULL_TREE, destroyer = NULL_TREE;
17828   bool coro_p = flag_coroutines
17829                     && !processing_template_decl
17830                     && DECL_COROUTINE_P (fndecl);
17831   bool coro_emit_helpers = false;
17832 
17833   /* When we get some parse errors, we can end up without a
17834      current_function_decl, so cope.  */
17835   if (fndecl == NULL_TREE)
17836     return error_mark_node;
17837 
17838   if (!DECL_OMP_DECLARE_REDUCTION_P (fndecl))
17839     finish_lambda_scope ();
17840 
17841   if (c_dialect_objc ())
17842     objc_finish_function ();
17843 
17844   record_key_method_defined (fndecl);
17845 
17846   fntype = TREE_TYPE (fndecl);
17847 
17848   /*  TREE_READONLY (fndecl) = 1;
17849       This caused &foo to be of type ptr-to-const-function
17850       which then got a warning when stored in a ptr-to-function variable.  */
17851 
17852   gcc_assert (building_stmt_list_p ());
17853   /* The current function is being defined, so its DECL_INITIAL should
17854      be set, and unless there's a multiple definition, it should be
17855      error_mark_node.  */
17856   gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
17857 
17858   if (coro_p)
17859     {
17860       /* Only try to emit the coroutine outlined helper functions if the
17861            transforms succeeded.  Otherwise, treat errors in the same way as
17862            a regular function.  */
17863       coro_emit_helpers = morph_fn_to_coro (fndecl, &resumer, &destroyer);
17864 
17865       /* We should handle coroutine IFNs in middle end lowering.  */
17866       cfun->coroutine_component = true;
17867 
17868       /* Do not try to process the ramp's EH unless outlining succeeded.  */
17869       if (coro_emit_helpers && use_eh_spec_block (fndecl))
17870           finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
17871                                     (TREE_TYPE (fndecl)),
17872                                     current_eh_spec_block);
17873     }
17874   else
17875   /* For a cloned function, we've already got all the code we need;
17876      there's no need to add any extra bits.  */
17877   if (!DECL_CLONED_FUNCTION_P (fndecl))
17878     {
17879       /* Make it so that `main' always returns 0 by default.  */
17880       if (DECL_MAIN_P (current_function_decl))
17881           finish_return_stmt (integer_zero_node);
17882 
17883       if (use_eh_spec_block (current_function_decl))
17884           finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
17885                                     (TREE_TYPE (current_function_decl)),
17886                                     current_eh_spec_block);
17887     }
17888 
17889   /* If we're saving up tree structure, tie off the function now.  */
17890   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
17891 
17892   finish_fname_decls ();
17893 
17894   /* If this function can't throw any exceptions, remember that.  */
17895   if (!processing_template_decl
17896       && !cp_function_chain->can_throw
17897       && !flag_non_call_exceptions
17898       && !decl_replaceable_p (fndecl,
17899                                     opt_for_fn (fndecl, flag_semantic_interposition)))
17900     TREE_NOTHROW (fndecl) = 1;
17901 
17902   /* This must come after expand_function_end because cleanups might
17903      have declarations (from inline functions) that need to go into
17904      this function's blocks.  */
17905 
17906   /* If the current binding level isn't the outermost binding level
17907      for this function, either there is a bug, or we have experienced
17908      syntax errors and the statement tree is malformed.  */
17909   if (current_binding_level->kind != sk_function_parms)
17910     {
17911       /* Make sure we have already experienced errors.  */
17912       gcc_assert (errorcount);
17913 
17914       /* Throw away the broken statement tree and extra binding
17915            levels.  */
17916       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
17917 
17918       while (current_binding_level->kind != sk_function_parms)
17919           {
17920             if (current_binding_level->kind == sk_class)
17921               pop_nested_class ();
17922             else
17923               poplevel (0, 0, 0);
17924           }
17925     }
17926   poplevel (1, 0, 1);
17927 
17928   /* Statements should always be full-expressions at the outermost set
17929      of curly braces for a function.  */
17930   gcc_assert (stmts_are_full_exprs_p ());
17931 
17932   /* If there are no return statements in a function with auto return type,
17933      the return type is void.  But if the declared type is something like
17934      auto*, this is an error.  */
17935   if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
17936       && TREE_TYPE (fntype) == DECL_SAVED_AUTO_RETURN_TYPE (fndecl))
17937     {
17938       if (is_auto (DECL_SAVED_AUTO_RETURN_TYPE (fndecl))
17939           && !current_function_returns_value
17940           && !current_function_returns_null)
17941           {
17942             /* We haven't applied return type deduction because we haven't
17943              seen any return statements. Do that now.  */
17944             tree node = type_uses_auto (DECL_SAVED_AUTO_RETURN_TYPE (fndecl));
17945             do_auto_deduction (DECL_SAVED_AUTO_RETURN_TYPE (fndecl),
17946                                    void_node, node, tf_warning_or_error,
17947                              adc_return_type);
17948 
17949             apply_deduced_return_type (fndecl, void_type_node);
17950             fntype = TREE_TYPE (fndecl);
17951           }
17952       else if (!current_function_returns_value
17953                  && !current_function_returns_null)
17954           {
17955             error ("no return statements in function returning %qT",
17956                      DECL_SAVED_AUTO_RETURN_TYPE (fndecl));
17957             inform (input_location, "only plain %<auto%> return type can be "
17958                       "deduced to %<void%>");
17959           }
17960     }
17961 
17962   /* Remember that we were in class scope.  */
17963   if (current_class_name)
17964     ctype = current_class_type;
17965 
17966   if (DECL_DELETED_FN (fndecl))
17967     {
17968       DECL_INITIAL (fndecl) = error_mark_node;
17969       DECL_SAVED_TREE (fndecl) = NULL_TREE;
17970       goto cleanup;
17971     }
17972 
17973   // If this is a concept, check that the definition is reasonable.
17974   if (DECL_DECLARED_CONCEPT_P (fndecl))
17975     check_function_concept (fndecl);
17976 
17977   if (flag_openmp)
17978     if (tree attr = lookup_attribute ("omp declare variant base",
17979                                               DECL_ATTRIBUTES (fndecl)))
17980       omp_declare_variant_finalize (fndecl, attr);
17981 
17982   /* Complain if there's just no return statement.  */
17983   if ((warn_return_type
17984        || (cxx_dialect >= cxx14
17985              && DECL_DECLARED_CONSTEXPR_P (fndecl)))
17986       && !VOID_TYPE_P (TREE_TYPE (fntype))
17987       && !dependent_type_p (TREE_TYPE (fntype))
17988       && !current_function_returns_value && !current_function_returns_null
17989       /* Don't complain if we abort or throw.  */
17990       && !current_function_returns_abnormally
17991       /* Don't complain if there's an infinite loop.  */
17992       && !current_function_infinite_loop
17993       /* Don't complain if we are declared noreturn.  */
17994       && !TREE_THIS_VOLATILE (fndecl)
17995       && !DECL_NAME (DECL_RESULT (fndecl))
17996       && !warning_suppressed_p (fndecl, OPT_Wreturn_type)
17997       /* Structor return values (if any) are set by the compiler.  */
17998       && !DECL_CONSTRUCTOR_P (fndecl)
17999       && !DECL_DESTRUCTOR_P (fndecl)
18000       && targetm.warn_func_return (fndecl))
18001     {
18002       gcc_rich_location richloc (input_location);
18003       /* Potentially add a "return *this;" fix-it hint for
18004            assignment operators.  */
18005       if (IDENTIFIER_ASSIGN_OP_P (DECL_NAME (fndecl)))
18006           {
18007             tree valtype = TREE_TYPE (DECL_RESULT (fndecl));
18008             if (TREE_CODE (valtype) == REFERENCE_TYPE
18009                 && current_class_ref
18010                 && same_type_ignoring_top_level_qualifiers_p
18011                       (TREE_TYPE (valtype), TREE_TYPE (current_class_ref))
18012                 && global_dc->option_enabled (OPT_Wreturn_type,
18013                                                       global_dc->lang_mask,
18014                                                       global_dc->option_state))
18015               add_return_star_this_fixit (&richloc, fndecl);
18016           }
18017       if (cxx_dialect >= cxx14
18018             && DECL_DECLARED_CONSTEXPR_P (fndecl))
18019           error_at (&richloc, "no return statement in %<constexpr%> function "
18020                                   "returning non-void");
18021       else if (warning_at (&richloc, OPT_Wreturn_type,
18022                                  "no return statement in function returning "
18023                                  "non-void"))
18024           suppress_warning (fndecl, OPT_Wreturn_type);
18025     }
18026 
18027   /* Lambda closure members are implicitly constexpr if possible.  */
18028   if (cxx_dialect >= cxx17
18029       && LAMBDA_TYPE_P (CP_DECL_CONTEXT (fndecl)))
18030     DECL_DECLARED_CONSTEXPR_P (fndecl)
18031       = ((processing_template_decl
18032             || is_valid_constexpr_fn (fndecl, /*complain*/false))
18033            && potential_constant_expression (DECL_SAVED_TREE (fndecl)));
18034 
18035   /* Save constexpr function body before it gets munged by
18036      the NRV transformation.   */
18037   maybe_save_constexpr_fundef (fndecl);
18038 
18039   /* Invoke the pre-genericize plugin before we start munging things.  */
18040   if (!processing_template_decl)
18041     invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
18042 
18043   /* Perform delayed folding before NRV transformation.  */
18044   if (!processing_template_decl
18045       && !DECL_IMMEDIATE_FUNCTION_P (fndecl)
18046       && !DECL_OMP_DECLARE_REDUCTION_P (fndecl))
18047     cp_fold_function (fndecl);
18048 
18049   /* Set up the named return value optimization, if we can.  Candidate
18050      variables are selected in check_return_expr.  */
18051   if (current_function_return_value)
18052     {
18053       tree r = current_function_return_value;
18054       tree outer;
18055 
18056       if (r != error_mark_node
18057             /* This is only worth doing for fns that return in memory--and
18058                simpler, since we don't have to worry about promoted modes.  */
18059             && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
18060             /* Only allow this for variables declared in the outer scope of
18061                the function so we know that their lifetime always ends with a
18062                return; see g++.dg/opt/nrv6.C.  We could be more flexible if
18063                we were to do this optimization in tree-ssa.  */
18064             && (outer = outer_curly_brace_block (fndecl))
18065             && chain_member (r, BLOCK_VARS (outer)))
18066           finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
18067 
18068       current_function_return_value = NULL_TREE;
18069     }
18070 
18071   /* Must mark the RESULT_DECL as being in this function.  */
18072   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
18073 
18074   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
18075      to the FUNCTION_DECL node itself.  */
18076   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
18077 
18078   /* Store the end of the function, so that we get good line number
18079      info for the epilogue.  */
18080   cfun->function_end_locus = input_location;
18081 
18082   /* Complain about parameters that are only set, but never otherwise used.  */
18083   if (warn_unused_but_set_parameter
18084       && !processing_template_decl
18085       && errorcount == unused_but_set_errorcount
18086       && !DECL_CLONED_FUNCTION_P (fndecl))
18087     {
18088       tree decl;
18089 
18090       for (decl = DECL_ARGUMENTS (fndecl);
18091              decl;
18092              decl = DECL_CHAIN (decl))
18093           if (TREE_USED (decl)
18094               && TREE_CODE (decl) == PARM_DECL
18095               && !DECL_READ_P (decl)
18096               && DECL_NAME (decl)
18097               && !DECL_ARTIFICIAL (decl)
18098               && !warning_suppressed_p (decl,OPT_Wunused_but_set_parameter)
18099               && !DECL_IN_SYSTEM_HEADER (decl)
18100               && TREE_TYPE (decl) != error_mark_node
18101               && !TYPE_REF_P (TREE_TYPE (decl))
18102               && (!CLASS_TYPE_P (TREE_TYPE (decl))
18103                   || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
18104             warning_at (DECL_SOURCE_LOCATION (decl),
18105                           OPT_Wunused_but_set_parameter,
18106                           "parameter %qD set but not used", decl);
18107       unused_but_set_errorcount = errorcount;
18108     }
18109 
18110   /* Complain about locally defined typedefs that are not used in this
18111      function.  */
18112   maybe_warn_unused_local_typedefs ();
18113 
18114   /* Possibly warn about unused parameters.  */
18115   if (warn_unused_parameter
18116       && !processing_template_decl
18117       && !DECL_CLONED_FUNCTION_P (fndecl))
18118     do_warn_unused_parameter (fndecl);
18119 
18120   /* Genericize before inlining.  */
18121   if (!processing_template_decl
18122       && !DECL_IMMEDIATE_FUNCTION_P (fndecl)
18123       && !DECL_OMP_DECLARE_REDUCTION_P (fndecl))
18124     cp_genericize (fndecl);
18125 
18126   /* Emit the resumer and destroyer functions now, providing that we have
18127      not encountered some fatal error.  */
18128   if (coro_emit_helpers)
18129     {
18130       emit_coro_helper (resumer);
18131       emit_coro_helper (destroyer);
18132     }
18133 
18134  cleanup:
18135   /* We're leaving the context of this function, so zap cfun.  It's still in
18136      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
18137   set_cfun (NULL);
18138   current_function_decl = NULL;
18139 
18140   /* If this is an in-class inline definition, we may have to pop the
18141      bindings for the template parameters that we added in
18142      maybe_begin_member_template_processing when start_function was
18143      called.  */
18144   if (inline_p)
18145     maybe_end_member_template_processing ();
18146 
18147   /* Leave the scope of the class.  */
18148   if (ctype)
18149     pop_nested_class ();
18150 
18151   --function_depth;
18152 
18153   /* Clean up.  */
18154   current_function_decl = NULL_TREE;
18155 
18156   invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
18157   return fndecl;
18158 }
18159 
18160 /* Create the FUNCTION_DECL for a function definition.
18161    DECLSPECS and DECLARATOR are the parts of the declaration;
18162    they describe the return type and the name of the function,
18163    but twisted together in a fashion that parallels the syntax of C.
18164 
18165    This function creates a binding context for the function body
18166    as well as setting up the FUNCTION_DECL in current_function_decl.
18167 
18168    Returns a FUNCTION_DECL on success.
18169 
18170    If the DECLARATOR is not suitable for a function (it defines a datum
18171    instead), we return 0, which tells yyparse to report a parse error.
18172 
18173    May return void_type_node indicating that this method is actually
18174    a friend.  See grokfield for more details.
18175 
18176    Came here with a `.pushlevel' .
18177 
18178    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
18179    CHANGES TO CODE IN `grokfield'.  */
18180 
18181 tree
grokmethod(cp_decl_specifier_seq * declspecs,const cp_declarator * declarator,tree attrlist)18182 grokmethod (cp_decl_specifier_seq *declspecs,
18183               const cp_declarator *declarator, tree attrlist)
18184 {
18185   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
18186                                         &attrlist);
18187 
18188   if (fndecl == error_mark_node)
18189     return error_mark_node;
18190 
18191   if (attrlist)
18192     cplus_decl_attributes (&fndecl, attrlist, 0);
18193 
18194   /* Pass friends other than inline friend functions back.  */
18195   if (fndecl == void_type_node)
18196     return fndecl;
18197 
18198   if (DECL_IN_AGGR_P (fndecl))
18199     {
18200       if (DECL_CLASS_SCOPE_P (fndecl))
18201           error ("%qD is already defined in class %qT", fndecl,
18202                  DECL_CONTEXT (fndecl));
18203       return error_mark_node;
18204     }
18205 
18206   check_template_shadow (fndecl);
18207 
18208   /* p1779 ABI-Isolation makes inline not a default for in-class
18209      definitions in named module purview.  If the user explicitly
18210      made it inline, grokdeclarator will already have done the right
18211      things.  */
18212   if ((!named_module_purview_p ()
18213        || flag_module_implicit_inline
18214       /* Lambda's operator function remains inline.  */
18215        || LAMBDA_TYPE_P (DECL_CONTEXT (fndecl)))
18216       /* If the user explicitly asked for this to be inline, we don't
18217            need to do more, but more importantly we want to warn if we
18218            can't inline it.  */
18219       && !DECL_DECLARED_INLINE_P (fndecl))
18220     {
18221       if (TREE_PUBLIC (fndecl))
18222           DECL_COMDAT (fndecl) = 1;
18223       DECL_DECLARED_INLINE_P (fndecl) = 1;
18224       /* It's ok if we can't inline this.  */
18225       DECL_NO_INLINE_WARNING_P (fndecl) = 1;
18226     }
18227 
18228   /* We process method specializations in finish_struct_1.  */
18229   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
18230     {
18231       /* Avoid calling decl_spec_seq... until we have to.  */
18232       bool friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
18233       fndecl = push_template_decl (fndecl, friendp);
18234       if (fndecl == error_mark_node)
18235           return fndecl;
18236     }
18237 
18238   if (DECL_CHAIN (fndecl) && !decl_spec_seq_has_spec_p (declspecs, ds_friend))
18239     {
18240       fndecl = copy_node (fndecl);
18241       TREE_CHAIN (fndecl) = NULL_TREE;
18242     }
18243 
18244   cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
18245 
18246   DECL_IN_AGGR_P (fndecl) = 1;
18247   return fndecl;
18248 }
18249 
18250 
18251 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
18252    we can lay it out later, when and if its type becomes complete.
18253 
18254    Also handle constexpr variables where the initializer involves
18255    an unlowered PTRMEM_CST because the class isn't complete yet.  */
18256 
18257 void
maybe_register_incomplete_var(tree var)18258 maybe_register_incomplete_var (tree var)
18259 {
18260   gcc_assert (VAR_P (var));
18261 
18262   /* Keep track of variables with incomplete types.  */
18263   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
18264       && DECL_EXTERNAL (var))
18265     {
18266       tree inner_type = TREE_TYPE (var);
18267 
18268       while (TREE_CODE (inner_type) == ARRAY_TYPE)
18269           inner_type = TREE_TYPE (inner_type);
18270       inner_type = TYPE_MAIN_VARIANT (inner_type);
18271 
18272       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
18273             /* RTTI TD entries are created while defining the type_info.  */
18274             || (TYPE_LANG_SPECIFIC (inner_type)
18275                 && TYPE_BEING_DEFINED (inner_type)))
18276           {
18277             incomplete_var iv = {var, inner_type};
18278             vec_safe_push (incomplete_vars, iv);
18279           }
18280       else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
18281                  && decl_constant_var_p (var)
18282                  && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
18283           {
18284             /* When the outermost open class is complete we can resolve any
18285                pointers-to-members.  */
18286             tree context = outermost_open_class ();
18287             incomplete_var iv = {var, context};
18288             vec_safe_push (incomplete_vars, iv);
18289           }
18290     }
18291 }
18292 
18293 /* Called when a class type (given by TYPE) is defined.  If there are
18294    any existing VAR_DECLs whose type has been completed by this
18295    declaration, update them now.  */
18296 
18297 void
complete_vars(tree type)18298 complete_vars (tree type)
18299 {
18300   unsigned ix;
18301   incomplete_var *iv;
18302 
18303   for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
18304     {
18305       if (same_type_p (type, iv->incomplete_type))
18306           {
18307             tree var = iv->decl;
18308             tree type = TREE_TYPE (var);
18309 
18310             if (type != error_mark_node
18311                 && (TYPE_MAIN_VARIANT (strip_array_types (type))
18312                       == iv->incomplete_type))
18313               {
18314                 /* Complete the type of the variable.  */
18315                 complete_type (type);
18316                 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
18317                 if (COMPLETE_TYPE_P (type))
18318                     layout_var_decl (var);
18319               }
18320 
18321             /* Remove this entry from the list.  */
18322             incomplete_vars->unordered_remove (ix);
18323           }
18324       else
18325           ix++;
18326     }
18327 }
18328 
18329 /* If DECL is of a type which needs a cleanup, build and return an
18330    expression to perform that cleanup here.  Return NULL_TREE if no
18331    cleanup need be done.  DECL can also be a _REF when called from
18332    split_nonconstant_init_1.  */
18333 
18334 tree
cxx_maybe_build_cleanup(tree decl,tsubst_flags_t complain)18335 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
18336 {
18337   tree type;
18338   tree attr;
18339   tree cleanup;
18340 
18341   /* Assume no cleanup is required.  */
18342   cleanup = NULL_TREE;
18343 
18344   if (error_operand_p (decl))
18345     return cleanup;
18346 
18347   /* Handle "__attribute__((cleanup))".  We run the cleanup function
18348      before the destructor since the destructor is what actually
18349      terminates the lifetime of the object.  */
18350   if (DECL_P (decl))
18351     attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
18352   else
18353     attr = NULL_TREE;
18354   if (attr)
18355     {
18356       tree id;
18357       tree fn;
18358       tree arg;
18359 
18360       /* Get the name specified by the user for the cleanup function.  */
18361       id = TREE_VALUE (TREE_VALUE (attr));
18362       /* Look up the name to find the cleanup function to call.  It is
18363            important to use lookup_name here because that is what is
18364            used in c-common.cc:handle_cleanup_attribute when performing
18365            initial checks on the attribute.  Note that those checks
18366            include ensuring that the function found is not an overloaded
18367            function, or an object with an overloaded call operator,
18368            etc.; we can rely on the fact that the function found is an
18369            ordinary FUNCTION_DECL.  */
18370       fn = lookup_name (id);
18371       arg = build_address (decl);
18372       if (!mark_used (decl, complain) && !(complain & tf_error))
18373           return error_mark_node;
18374       cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
18375       if (cleanup == error_mark_node)
18376           return error_mark_node;
18377     }
18378   /* Handle ordinary C++ destructors.  */
18379   type = TREE_TYPE (decl);
18380   if (type_build_dtor_call (type))
18381     {
18382       int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
18383       tree addr;
18384       tree call;
18385 
18386       if (TREE_CODE (type) == ARRAY_TYPE)
18387           addr = decl;
18388       else
18389           addr = build_address (decl);
18390 
18391       call = build_delete (input_location, TREE_TYPE (addr), addr,
18392                                  sfk_complete_destructor, flags, 0, complain);
18393       if (call == error_mark_node)
18394           cleanup = error_mark_node;
18395       else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
18396           /* Discard the call.  */;
18397       else if (decl_maybe_constant_destruction (decl, type)
18398                  && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl))
18399           cxx_constant_dtor (call, decl);
18400       else if (cleanup)
18401           cleanup = cp_build_compound_expr (cleanup, call, complain);
18402       else
18403           cleanup = call;
18404     }
18405 
18406   /* build_delete sets the location of the destructor call to the
18407      current location, even though the destructor is going to be
18408      called later, at the end of the current scope.  This can lead to
18409      a "jumpy" behavior for users of debuggers when they step around
18410      the end of the block.  So let's unset the location of the
18411      destructor call instead.  */
18412   protected_set_expr_location (cleanup, UNKNOWN_LOCATION);
18413   if (cleanup && CONVERT_EXPR_P (cleanup))
18414     protected_set_expr_location (TREE_OPERAND (cleanup, 0), UNKNOWN_LOCATION);
18415 
18416   if (cleanup
18417       && DECL_P (decl)
18418       && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl)))
18419       /* Treat objects with destructors as used; the destructor may do
18420            something substantive.  */
18421       && !mark_used (decl, complain) && !(complain & tf_error))
18422     return error_mark_node;
18423 
18424   if (cleanup && cfun && !processing_template_decl
18425       && !expr_noexcept_p (cleanup, tf_none))
18426     cp_function_chain->throwing_cleanup = true;
18427 
18428   return cleanup;
18429 }
18430 
18431 
18432 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
18433    FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
18434    METHOD_TYPE or FUNCTION_TYPE, or pointer to member function.  */
18435 
18436 tree
static_fn_type(tree memfntype)18437 static_fn_type (tree memfntype)
18438 {
18439   tree fntype;
18440   tree args;
18441 
18442   if (TYPE_PTRMEMFUNC_P (memfntype))
18443     memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
18444   if (INDIRECT_TYPE_P (memfntype)
18445       || TREE_CODE (memfntype) == FUNCTION_DECL)
18446     memfntype = TREE_TYPE (memfntype);
18447   if (TREE_CODE (memfntype) == FUNCTION_TYPE)
18448     return memfntype;
18449   gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
18450   args = TYPE_ARG_TYPES (memfntype);
18451   fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
18452   fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype));
18453   fntype = (cp_build_type_attribute_variant
18454               (fntype, TYPE_ATTRIBUTES (memfntype)));
18455   fntype = cxx_copy_lang_qualifiers (fntype, memfntype);
18456   return fntype;
18457 }
18458 
18459 /* DECL was originally constructed as a non-static member function,
18460    but turned out to be static.  Update it accordingly.  */
18461 
18462 void
revert_static_member_fn(tree decl)18463 revert_static_member_fn (tree decl)
18464 {
18465   tree stype = static_fn_type (decl);
18466   cp_cv_quals quals = type_memfn_quals (stype);
18467   cp_ref_qualifier rqual = type_memfn_rqual (stype);
18468 
18469   if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
18470     stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
18471 
18472   TREE_TYPE (decl) = stype;
18473 
18474   if (DECL_ARGUMENTS (decl))
18475     DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
18476   DECL_STATIC_FUNCTION_P (decl) = 1;
18477 }
18478 
18479 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
18480    one of the language-independent trees.  */
18481 
18482 enum cp_tree_node_structure_enum
cp_tree_node_structure(union lang_tree_node * t)18483 cp_tree_node_structure (union lang_tree_node * t)
18484 {
18485   switch (TREE_CODE (&t->generic))
18486     {
18487     case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
18488     case BASELINK:            return TS_CP_BASELINK;
18489     case CONSTRAINT_INFO:       return TS_CP_CONSTRAINT_INFO;
18490     case DEFERRED_NOEXCEPT:   return TS_CP_DEFERRED_NOEXCEPT;
18491     case DEFERRED_PARSE:      return TS_CP_DEFERRED_PARSE;
18492     case IDENTIFIER_NODE:     return TS_CP_IDENTIFIER;
18493     case LAMBDA_EXPR:                   return TS_CP_LAMBDA_EXPR;
18494     case BINDING_VECTOR:                return TS_CP_BINDING_VECTOR;
18495     case OVERLOAD:            return TS_CP_OVERLOAD;
18496     case PTRMEM_CST:                    return TS_CP_PTRMEM;
18497     case STATIC_ASSERT:                 return TS_CP_STATIC_ASSERT;
18498     case TEMPLATE_DECL:                 return TS_CP_TEMPLATE_DECL;
18499     case TEMPLATE_INFO:                 return TS_CP_TEMPLATE_INFO;
18500     case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
18501     case TRAIT_EXPR:                    return TS_CP_TRAIT_EXPR;
18502     case USERDEF_LITERAL:     return TS_CP_USERDEF_LITERAL;
18503     default:                            return TS_CP_GENERIC;
18504     }
18505 }
18506 
18507 /* Build the void_list_node (void_type_node having been created).  */
18508 tree
build_void_list_node(void)18509 build_void_list_node (void)
18510 {
18511   tree t = build_tree_list (NULL_TREE, void_type_node);
18512   return t;
18513 }
18514 
18515 bool
cp_missing_noreturn_ok_p(tree decl)18516 cp_missing_noreturn_ok_p (tree decl)
18517 {
18518   /* A missing noreturn is ok for the `main' function.  */
18519   return DECL_MAIN_P (decl);
18520 }
18521 
18522 /* Return the decl used to identify the COMDAT group into which DECL should
18523    be placed.  */
18524 
18525 tree
cxx_comdat_group(tree decl)18526 cxx_comdat_group (tree decl)
18527 {
18528   /* Virtual tables, construction virtual tables, and virtual table
18529      tables all go in a single COMDAT group, named after the primary
18530      virtual table.  */
18531   if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
18532     decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
18533   /* For all other DECLs, the COMDAT group is the mangled name of the
18534      declaration itself.  */
18535   else
18536     {
18537       while (DECL_THUNK_P (decl))
18538           {
18539             /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
18540                into the same section as the target function.  In that case
18541                we must return target's name.  */
18542             tree target = THUNK_TARGET (decl);
18543             if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
18544                 && DECL_SECTION_NAME (target) != NULL
18545                 && DECL_ONE_ONLY (target))
18546               decl = target;
18547             else
18548               break;
18549           }
18550     }
18551 
18552   return decl;
18553 }
18554 
18555 /* Returns the return type for FN as written by the user, which may include
18556    a placeholder for a deduced return type.  */
18557 
18558 tree
fndecl_declared_return_type(tree fn)18559 fndecl_declared_return_type (tree fn)
18560 {
18561   fn = STRIP_TEMPLATE (fn);
18562   if (FNDECL_USED_AUTO (fn))
18563     return DECL_SAVED_AUTO_RETURN_TYPE (fn);
18564 
18565   return TREE_TYPE (TREE_TYPE (fn));
18566 }
18567 
18568 /* Returns true iff DECL is a variable or function declared with an auto type
18569    that has not yet been deduced to a real type.  */
18570 
18571 bool
undeduced_auto_decl(tree decl)18572 undeduced_auto_decl (tree decl)
18573 {
18574   if (cxx_dialect < cxx11)
18575     return false;
18576   STRIP_ANY_LOCATION_WRAPPER (decl);
18577   return ((VAR_OR_FUNCTION_DECL_P (decl)
18578              || TREE_CODE (decl) == TEMPLATE_DECL)
18579             && type_uses_auto (TREE_TYPE (decl)));
18580 }
18581 
18582 /* Complain if DECL has an undeduced return type.  */
18583 
18584 bool
require_deduced_type(tree decl,tsubst_flags_t complain)18585 require_deduced_type (tree decl, tsubst_flags_t complain)
18586 {
18587   if (undeduced_auto_decl (decl))
18588     {
18589       if (warning_suppressed_p (decl) && seen_error ())
18590           /* We probably already complained about deduction failure.  */;
18591       else if (complain & tf_error)
18592           error ("use of %qD before deduction of %<auto%>", decl);
18593       note_failed_type_completion_for_satisfaction (decl);
18594       return false;
18595     }
18596   return true;
18597 }
18598 
18599 /* Create a representation of the explicit-specifier with
18600    constant-expression of EXPR.  COMPLAIN is as for tsubst.  */
18601 
18602 tree
build_explicit_specifier(tree expr,tsubst_flags_t complain)18603 build_explicit_specifier (tree expr, tsubst_flags_t complain)
18604 {
18605   if (check_for_bare_parameter_packs (expr))
18606     return error_mark_node;
18607 
18608   if (instantiation_dependent_expression_p (expr))
18609     /* Wait for instantiation, tsubst_function_decl will handle it.  */
18610     return expr;
18611 
18612   expr = build_converted_constant_bool_expr (expr, complain);
18613   expr = instantiate_non_dependent_expr_sfinae (expr, complain);
18614   expr = cxx_constant_value (expr);
18615   return expr;
18616 }
18617 
18618 #include "gt-cp-decl.h"
18619