c++: tidy auto deduction
[official-gcc.git] / gcc / cp / decl.cc
blob16565bf0a0e7e7eb70fef048f8a15efad4f6d395
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)
5 This file is part of GCC.
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.
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.
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/>. */
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. */
26 /* ??? not all decl nodes are given the most useful possible
27 line numbers. For example, the CONST_DECLs for enum values. */
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 */
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 */
70 static const char *redeclaration_error_message (tree, tree);
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*);
109 /* The following symbols are subsumed in the cp_global_trees array, and
110 listed here individually for documentation purposes.
112 C++ extensions
113 tree wchar_decl_node;
115 tree vtable_entry_type;
116 tree delta_type_node;
117 tree __t_desc_type_node;
119 tree class_type_node;
120 tree unknown_type_node;
122 Array type `vtable_entry_type[]'
124 tree vtbl_type_node;
125 tree vtbl_ptr_type_node;
127 Namespaces,
129 tree std_node;
130 tree abi_node;
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.
136 tree abort_fndecl;
138 Used by RTTI
139 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
140 tree tinfo_var_id; */
142 tree cp_global_trees[CPTI_MAX];
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;
150 /* Like static_aggregates, but for thread_local variables. */
151 tree tls_aggregates;
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;
157 /* -- end of C++ */
159 /* A node for the integer constant 2. */
161 tree integer_two_node;
163 /* vector of static decls. */
164 vec<tree, va_gc> *static_decls;
166 /* vector of keyed classes. */
167 vec<tree, va_gc> *keyed_classes;
169 /* Used only for jumps to as-yet undefined labels, since jumps to
170 defined labels can have their validity checked immediately. */
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;
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. */
194 struct GTY((for_user)) named_label_entry {
196 tree name; /* Name of decl. */
198 tree label_decl; /* LABEL_DECL, unless deleted local label. */
200 named_label_entry *outer; /* Outer shadowed chain. */
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;
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;
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;
216 /* A list of uses of the label, before the label is defined. */
217 named_label_use_entry *uses;
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;
230 #define named_labels cp_function_chain->x_named_labels
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;
237 /* Whether the exception-specifier is part of a function type (i.e. C++17). */
238 bool flag_noexcept_type;
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;
247 /* A list of VAR_DECLs whose type was incomplete at the time the
248 variable was declared. */
250 struct GTY(()) incomplete_var {
251 tree decl;
252 tree incomplete_type;
256 static GTY(()) vec<incomplete_var, va_gc> *incomplete_vars;
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. */
262 tmpl_spec_kind
263 current_tmpl_spec_kind (int n_class_scopes)
265 int n_template_parm_scopes = 0;
266 int seen_specialization_p = 0;
267 int innermost_specialization_p = 0;
268 cp_binding_level *b;
270 /* Scan through the template parameter scopes. */
271 for (b = current_binding_level;
272 b->kind == sk_template_parms;
273 b = b->level_chain)
275 /* If we see a specialization scope inside a parameter scope,
276 then something is wrong. That corresponds to a declaration
277 like:
279 template <class T> template <> ...
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)
286 if (n_template_parm_scopes == 0)
287 innermost_specialization_p = 1;
288 else
289 seen_specialization_p = 1;
291 else if (seen_specialization_p == 1)
292 return tsk_invalid_member_spec;
294 ++n_template_parm_scopes;
297 /* Handle explicit instantiations. */
298 if (processing_explicit_instantiation)
300 if (n_template_parm_scopes != 0)
301 /* We've seen a template parameter list during an explicit
302 instantiation. For example:
304 template <class T> template void f(int);
306 This is erroneous. */
307 return tsk_invalid_expl_inst;
308 else
309 return tsk_expl_inst;
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:
316 template <class T> void R<T>::S<T>::f(int);
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:
325 template <class T> void S<T>::f(int);
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:
333 template <> template <class T> void f (T);
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:
340 template <class T> template <class U> void S<T>::f(U);
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;
348 /* Exit the current scope. */
350 void
351 finish_scope (void)
353 poplevel (0, 0, 0);
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. */
359 static void
360 check_label_used (tree label)
362 if (!processing_template_decl)
364 if (DECL_INITIAL (label) == NULL_TREE)
366 location_t location;
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));
374 else
375 warn_for_unused_label (label);
379 /* Helper function to sort named label entries in a vector by DECL_UID. */
381 static int
382 sort_labels (const void *a, const void *b)
384 tree label1 = *(tree const *) a;
385 tree label2 = *(tree const *) b;
387 /* DECL_UIDs can never be equal. */
388 return DECL_UID (label1) > DECL_UID (label2) ? -1 : +1;
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. */
395 static void
396 pop_labels (tree block)
398 if (!named_labels)
399 return;
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)
411 named_label_entry *ent = *iter;
413 gcc_checking_assert (!ent->outer);
414 if (ent->label_decl)
415 labels.quick_push (ent->label_decl);
416 ggc_free (ent);
418 named_labels = NULL;
419 labels.qsort (sort_labels);
421 while (labels.length ())
423 tree label = labels.pop ();
425 DECL_CHAIN (label) = BLOCK_VARS (block);
426 BLOCK_VARS (block) = label;
428 check_label_used (label);
432 /* At the end of a block with local labels, restore the outer definition. */
434 static void
435 pop_local_label (tree id, tree label)
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;
442 if (ent->outer)
443 ent = ent->outer;
444 else
446 ent = ggc_cleared_alloc<named_label_entry> ();
447 ent->name = id;
449 *slot = ent;
452 /* The following two routines are used to interface to Objective-C++.
453 The binding level is purposely treated as an opaque type. */
455 void *
456 objc_get_current_scope (void)
458 return current_binding_level;
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. */
467 void
468 objc_mark_locals_volatile (void *enclosing_blk)
470 cp_binding_level *scope;
472 for (scope = current_binding_level;
473 scope && scope != enclosing_blk;
474 scope = scope->level_chain)
476 tree decl;
478 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
479 objc_volatilize_decl (decl);
481 /* Do not climb up past the current function. */
482 if (scope->kind == sk_function_parms)
483 break;
487 /* True if B is the level for the condition of a constexpr if. */
489 static bool
490 level_for_constexpr_if (cp_binding_level *b)
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));
497 /* True if B is the level for the condition of a consteval if. */
499 static bool
500 level_for_consteval_if (cp_binding_level *b)
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));
507 /* Update data for defined and undefined labels when leaving a scope. */
510 poplevel_named_label_1 (named_label_entry **slot, cp_binding_level *bl)
512 named_label_entry *ent = *slot;
513 cp_binding_level *obl = bl->level_chain;
515 if (ent->binding_level == bl)
517 tree decl;
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);
527 ent->binding_level = obl;
528 ent->names_in_scope = obl->names;
529 switch (bl->kind)
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;
553 else if (ent->uses)
555 struct named_label_use_entry *use;
557 for (use = ent->uses; use ; use = use->next)
558 if (use->binding_level == bl)
560 use->binding_level = obl;
561 use->names_in_scope = obl->names;
562 if (bl->kind == sk_omp)
563 use->in_omp_scope = true;
567 return 1;
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;
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.
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.
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.
586 If REVERSE is nonzero, reverse the order of decls before putting
587 them into the BLOCK. */
589 tree
590 poplevel (int keep, int reverse, int functionbody)
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;
601 auto_cond_timevar tv (TV_NAME_LOOKUP);
602 restart:
604 block = NULL_TREE;
606 gcc_assert (current_binding_level->kind != sk_class
607 && current_binding_level->kind != sk_namespace);
609 if (current_binding_level->kind == sk_cleanup)
610 functionbody = 0;
611 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
613 gcc_assert (!vec_safe_length (current_binding_level->class_shadowed));
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);
620 if (current_binding_level->keep)
621 keep = 1;
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);
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. */
633 decls = current_binding_level->names;
634 if (reverse)
636 decls = nreverse (decls);
637 current_binding_level->names = decls;
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)
651 BLOCK_VARS (block) = decls;
652 BLOCK_SUBBLOCKS (block) = subblocks;
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;
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))
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;
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)))))
685 if (! TREE_USED (decl))
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);
695 else if (DECL_CONTEXT (decl) == current_function_decl
696 // For -Wunused-but-set-variable leave references alone.
697 && !TYPE_REF_P (TREE_TYPE (decl))
698 && errorcount == unused_but_set_errorcount)
700 if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
701 warning_at (DECL_SOURCE_LOCATION (decl),
702 OPT_Wunused_but_set_variable, "structured "
703 "binding declaration set but not used");
704 else
705 warning_at (DECL_SOURCE_LOCATION (decl),
706 OPT_Wunused_but_set_variable,
707 "variable %qD set but not used", decl);
708 unused_but_set_errorcount = errorcount;
713 /* Remove declarations for all the DECLs in this level. */
714 for (link = decls; link; link = TREE_CHAIN (link))
716 tree name;
717 if (TREE_CODE (link) == TREE_LIST)
719 decl = TREE_VALUE (link);
720 name = TREE_PURPOSE (link);
721 gcc_checking_assert (name);
723 else
725 decl = link;
726 name = DECL_NAME (decl);
729 /* Remove the binding. */
730 if (TREE_CODE (decl) == LABEL_DECL)
731 pop_local_label (name, decl);
732 else
733 pop_local_binding (name, decl);
736 /* Restore the IDENTIFIER_TYPE_VALUEs. */
737 for (link = current_binding_level->type_shadowed;
738 link; link = TREE_CHAIN (link))
739 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
741 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
742 list if a `using' declaration put them there. The debugging
743 back ends won't understand OVERLOAD, so we remove them here.
744 Because the BLOCK_VARS are (temporarily) shared with
745 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
746 popped all the bindings. Also remove undeduced 'auto' decls,
747 which LTO doesn't understand, and can't have been used by anything. */
748 if (block)
750 tree* d;
752 for (d = &BLOCK_VARS (block); *d; )
754 if (TREE_CODE (*d) == TREE_LIST
755 || (!processing_template_decl
756 && undeduced_auto_decl (*d)))
757 *d = TREE_CHAIN (*d);
758 else
759 d = &DECL_CHAIN (*d);
763 /* If the level being exited is the top level of a function,
764 check over all the labels. */
765 if (functionbody)
767 if (block)
769 /* Since this is the top level block of a function, the vars are
770 the function's parameters. Don't leave them in the BLOCK
771 because they are found in the FUNCTION_DECL instead. */
772 BLOCK_VARS (block) = 0;
773 pop_labels (block);
775 else
776 pop_labels (subblocks);
779 kind = current_binding_level->kind;
780 if (kind == sk_cleanup)
782 tree stmt;
784 /* If this is a temporary binding created for a cleanup, then we'll
785 have pushed a statement list level. Pop that, create a new
786 BIND_EXPR for the block, and insert it into the stream. */
787 stmt = pop_stmt_list (current_binding_level->statement_list);
788 stmt = c_build_bind_expr (input_location, block, stmt);
789 add_stmt (stmt);
792 leave_scope ();
793 if (functionbody)
795 /* The current function is being defined, so its DECL_INITIAL
796 should be error_mark_node. */
797 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
798 DECL_INITIAL (current_function_decl) = block ? block : subblocks;
799 if (subblocks)
801 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
803 if (BLOCK_SUBBLOCKS (subblocks))
804 BLOCK_OUTER_CURLY_BRACE_P (BLOCK_SUBBLOCKS (subblocks)) = 1;
806 else
807 BLOCK_OUTER_CURLY_BRACE_P (subblocks) = 1;
810 else if (block)
811 current_binding_level->blocks
812 = block_chainon (current_binding_level->blocks, block);
814 /* If we did not make a block for the level just exited,
815 any blocks made for inner levels
816 (since they cannot be recorded as subblocks in that level)
817 must be carried forward so they will later become subblocks
818 of something else. */
819 else if (subblocks)
820 current_binding_level->blocks
821 = block_chainon (current_binding_level->blocks, subblocks);
823 /* Each and every BLOCK node created here in `poplevel' is important
824 (e.g. for proper debugging information) so if we created one
825 earlier, mark it as "used". */
826 if (block)
827 TREE_USED (block) = 1;
829 /* All temporary bindings created for cleanups are popped silently. */
830 if (kind == sk_cleanup)
831 goto restart;
833 return block;
836 /* Call wrapup_globals_declarations for the globals in NAMESPACE. */
837 /* Diagnose odr-used extern inline variables without definitions
838 in the current TU. */
841 wrapup_namespace_globals ()
843 if (vec<tree, va_gc> *statics = static_decls)
845 for (tree decl : *statics)
847 if (warn_unused_function
848 && TREE_CODE (decl) == FUNCTION_DECL
849 && DECL_INITIAL (decl) == 0
850 && DECL_EXTERNAL (decl)
851 && !TREE_PUBLIC (decl)
852 && !DECL_ARTIFICIAL (decl)
853 && !DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
854 && !warning_suppressed_p (decl, OPT_Wunused_function))
855 warning_at (DECL_SOURCE_LOCATION (decl),
856 OPT_Wunused_function,
857 "%qF declared %<static%> but never defined", decl);
859 if (VAR_P (decl)
860 && DECL_EXTERNAL (decl)
861 && DECL_INLINE_VAR_P (decl)
862 && DECL_ODR_USED (decl))
863 error_at (DECL_SOURCE_LOCATION (decl),
864 "odr-used inline variable %qD is not defined", decl);
867 /* Clear out the list, so we don't rescan next time. */
868 static_decls = NULL;
870 /* Write out any globals that need to be output. */
871 return wrapup_global_declarations (statics->address (),
872 statics->length ());
874 return 0;
877 /* In C++, you don't have to write `struct S' to refer to `S'; you
878 can just use `S'. We accomplish this by creating a TYPE_DECL as
879 if the user had written `typedef struct S S'. Create and return
880 the TYPE_DECL for TYPE. */
882 tree
883 create_implicit_typedef (tree name, tree type)
885 tree decl;
887 decl = build_decl (input_location, TYPE_DECL, name, type);
888 DECL_ARTIFICIAL (decl) = 1;
889 /* There are other implicit type declarations, like the one *within*
890 a class that allows you to write `S::S'. We must distinguish
891 amongst these. */
892 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
893 TYPE_NAME (type) = decl;
894 TYPE_STUB_DECL (type) = decl;
896 return decl;
899 /* Function-scope local entities that need discriminators. Each entry
900 is a {decl,name} pair. VAR_DECLs for anon unions get their name
901 smashed, so we cannot rely on DECL_NAME. */
903 static GTY((deletable)) vec<tree, va_gc> *local_entities;
905 /* Determine the mangling discriminator of local DECL. There are
906 generally very few of these in any particular function. */
908 void
909 determine_local_discriminator (tree decl)
911 auto_cond_timevar tv (TV_NAME_LOOKUP);
912 retrofit_lang_decl (decl);
913 tree ctx = DECL_CONTEXT (decl);
914 tree name = (TREE_CODE (decl) == TYPE_DECL
915 && TYPE_UNNAMED_P (TREE_TYPE (decl))
916 ? NULL_TREE : DECL_NAME (decl));
917 size_t nelts = vec_safe_length (local_entities);
918 for (size_t i = 0; i < nelts; i += 2)
920 tree *pair = &(*local_entities)[i];
921 tree d = pair[0];
922 tree n = pair[1];
923 gcc_checking_assert (d != decl);
924 if (name == n
925 && TREE_CODE (decl) == TREE_CODE (d)
926 && ctx == DECL_CONTEXT (d))
928 tree disc = integer_one_node;
929 if (DECL_DISCRIMINATOR (d))
930 disc = build_int_cst (TREE_TYPE (disc),
931 TREE_INT_CST_LOW (DECL_DISCRIMINATOR (d)) + 1);
932 DECL_DISCRIMINATOR (decl) = disc;
933 /* Replace the saved decl. */
934 pair[0] = decl;
935 decl = NULL_TREE;
936 break;
940 if (decl)
942 vec_safe_reserve (local_entities, 2);
943 local_entities->quick_push (decl);
944 local_entities->quick_push (name);
950 /* Returns true if functions FN1 and FN2 have equivalent trailing
951 requires clauses. */
953 static bool
954 function_requirements_equivalent_p (tree newfn, tree oldfn)
956 /* In the concepts TS, the combined constraints are compared. */
957 if (cxx_dialect < cxx20
958 && (DECL_TEMPLATE_SPECIALIZATION (newfn)
959 <= DECL_TEMPLATE_SPECIALIZATION (oldfn)))
961 tree ci1 = get_constraints (oldfn);
962 tree ci2 = get_constraints (newfn);
963 tree req1 = ci1 ? CI_ASSOCIATED_CONSTRAINTS (ci1) : NULL_TREE;
964 tree req2 = ci2 ? CI_ASSOCIATED_CONSTRAINTS (ci2) : NULL_TREE;
965 return cp_tree_equal (req1, req2);
968 /* Compare only trailing requirements. */
969 tree reqs1 = get_trailing_function_requirements (newfn);
970 tree reqs2 = get_trailing_function_requirements (oldfn);
971 if ((reqs1 != NULL_TREE) != (reqs2 != NULL_TREE))
972 return false;
974 /* Substitution is needed when friends are involved. */
975 reqs1 = maybe_substitute_reqs_for (reqs1, newfn);
976 reqs2 = maybe_substitute_reqs_for (reqs2, oldfn);
978 return cp_tree_equal (reqs1, reqs2);
981 /* Subroutine of duplicate_decls: return truthvalue of whether
982 or not types of these decls match.
984 For C++, we must compare the parameter list so that `int' can match
985 `int&' in a parameter position, but `int&' is not confused with
986 `const int&'. */
989 decls_match (tree newdecl, tree olddecl, bool record_versions /* = true */)
991 int types_match;
993 if (newdecl == olddecl)
994 return 1;
996 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
997 /* If the two DECLs are not even the same kind of thing, we're not
998 interested in their types. */
999 return 0;
1001 gcc_assert (DECL_P (newdecl));
1003 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1005 /* Specializations of different templates are different functions
1006 even if they have the same type. */
1007 tree t1 = (DECL_USE_TEMPLATE (newdecl)
1008 ? DECL_TI_TEMPLATE (newdecl)
1009 : NULL_TREE);
1010 tree t2 = (DECL_USE_TEMPLATE (olddecl)
1011 ? DECL_TI_TEMPLATE (olddecl)
1012 : NULL_TREE);
1013 if (t1 != t2)
1014 return 0;
1016 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1017 && ! (DECL_EXTERN_C_P (newdecl)
1018 && DECL_EXTERN_C_P (olddecl)))
1019 return 0;
1021 /* A new declaration doesn't match a built-in one unless it
1022 is also extern "C". */
1023 if (DECL_IS_UNDECLARED_BUILTIN (olddecl)
1024 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
1025 return 0;
1027 tree f1 = TREE_TYPE (newdecl);
1028 tree f2 = TREE_TYPE (olddecl);
1029 if (TREE_CODE (f1) != TREE_CODE (f2))
1030 return 0;
1032 /* A declaration with deduced return type should use its pre-deduction
1033 type for declaration matching. */
1034 tree r2 = fndecl_declared_return_type (olddecl);
1035 tree r1 = fndecl_declared_return_type (newdecl);
1037 tree p1 = TYPE_ARG_TYPES (f1);
1038 tree p2 = TYPE_ARG_TYPES (f2);
1040 if (same_type_p (r1, r2))
1042 if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
1043 && fndecl_built_in_p (olddecl))
1045 types_match = self_promoting_args_p (p1);
1046 if (p1 == void_list_node)
1047 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1049 else
1050 types_match =
1051 compparms (p1, p2)
1052 && type_memfn_rqual (f1) == type_memfn_rqual (f2)
1053 && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1054 || comp_type_attributes (TREE_TYPE (newdecl),
1055 TREE_TYPE (olddecl)) != 0);
1057 else
1058 types_match = 0;
1060 /* Two function declarations match if either has a requires-clause
1061 then both have a requires-clause and their constraints-expressions
1062 are equivalent. */
1063 if (types_match && flag_concepts)
1064 types_match = function_requirements_equivalent_p (newdecl, olddecl);
1066 /* The decls dont match if they correspond to two different versions
1067 of the same function. Disallow extern "C" functions to be
1068 versions for now. */
1069 if (types_match
1070 && !DECL_EXTERN_C_P (newdecl)
1071 && !DECL_EXTERN_C_P (olddecl)
1072 && targetm.target_option.function_versions (newdecl, olddecl))
1074 if (record_versions)
1075 maybe_version_functions (newdecl, olddecl,
1076 (!DECL_FUNCTION_VERSIONED (newdecl)
1077 || !DECL_FUNCTION_VERSIONED (olddecl)));
1078 return 0;
1081 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1083 if (!template_heads_equivalent_p (newdecl, olddecl))
1084 return 0;
1086 tree oldres = DECL_TEMPLATE_RESULT (olddecl);
1087 tree newres = DECL_TEMPLATE_RESULT (newdecl);
1089 if (TREE_CODE (newres) != TREE_CODE (oldres))
1090 return 0;
1092 /* Two template types match if they are the same. Otherwise, compare
1093 the underlying declarations. */
1094 if (TREE_CODE (newres) == TYPE_DECL)
1095 types_match = same_type_p (TREE_TYPE (newres), TREE_TYPE (oldres));
1096 else
1097 types_match = decls_match (newres, oldres);
1099 else
1101 /* Need to check scope for variable declaration (VAR_DECL).
1102 For typedef (TYPE_DECL), scope is ignored. */
1103 if (VAR_P (newdecl)
1104 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1105 /* [dcl.link]
1106 Two declarations for an object with C language linkage
1107 with the same name (ignoring the namespace that qualify
1108 it) that appear in different namespace scopes refer to
1109 the same object. */
1110 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1111 return 0;
1113 if (TREE_TYPE (newdecl) == error_mark_node)
1114 types_match = TREE_TYPE (olddecl) == error_mark_node;
1115 else if (TREE_TYPE (olddecl) == NULL_TREE)
1116 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1117 else if (TREE_TYPE (newdecl) == NULL_TREE)
1118 types_match = 0;
1119 else
1120 types_match = comptypes (TREE_TYPE (newdecl),
1121 TREE_TYPE (olddecl),
1122 COMPARE_REDECLARATION);
1125 return types_match;
1128 /* Mark DECL as versioned if it isn't already. */
1130 static void
1131 maybe_mark_function_versioned (tree decl)
1133 if (!DECL_FUNCTION_VERSIONED (decl))
1135 DECL_FUNCTION_VERSIONED (decl) = 1;
1136 /* If DECL_ASSEMBLER_NAME has already been set, re-mangle
1137 to include the version marker. */
1138 if (DECL_ASSEMBLER_NAME_SET_P (decl))
1139 mangle_decl (decl);
1143 /* NEWDECL and OLDDECL have identical signatures. If they are
1144 different versions adjust them and return true.
1145 If RECORD is set to true, record function versions. */
1147 bool
1148 maybe_version_functions (tree newdecl, tree olddecl, bool record)
1150 if (!targetm.target_option.function_versions (newdecl, olddecl))
1151 return false;
1153 maybe_mark_function_versioned (olddecl);
1154 if (DECL_LOCAL_DECL_P (olddecl))
1156 olddecl = DECL_LOCAL_DECL_ALIAS (olddecl);
1157 maybe_mark_function_versioned (olddecl);
1160 maybe_mark_function_versioned (newdecl);
1161 if (DECL_LOCAL_DECL_P (newdecl))
1163 /* Unfortunately, we can get here before pushdecl naturally calls
1164 push_local_extern_decl_alias, so we need to call it directly. */
1165 if (!DECL_LOCAL_DECL_ALIAS (newdecl))
1166 push_local_extern_decl_alias (newdecl);
1167 newdecl = DECL_LOCAL_DECL_ALIAS (newdecl);
1168 maybe_mark_function_versioned (newdecl);
1171 if (record)
1172 cgraph_node::record_function_versions (olddecl, newdecl);
1174 return true;
1177 /* If NEWDECL is `static' and an `extern' was seen previously,
1178 warn about it. OLDDECL is the previous declaration.
1180 Note that this does not apply to the C++ case of declaring
1181 a variable `extern const' and then later `const'.
1183 Don't complain about built-in functions, since they are beyond
1184 the user's control. */
1186 void
1187 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1189 if (TREE_CODE (newdecl) == TYPE_DECL
1190 || TREE_CODE (newdecl) == TEMPLATE_DECL
1191 || TREE_CODE (newdecl) == CONST_DECL
1192 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1193 return;
1195 /* Don't get confused by static member functions; that's a different
1196 use of `static'. */
1197 if (TREE_CODE (newdecl) == FUNCTION_DECL
1198 && DECL_STATIC_FUNCTION_P (newdecl))
1199 return;
1201 /* If the old declaration was `static', or the new one isn't, then
1202 everything is OK. */
1203 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1204 return;
1206 /* It's OK to declare a builtin function as `static'. */
1207 if (TREE_CODE (olddecl) == FUNCTION_DECL
1208 && DECL_ARTIFICIAL (olddecl))
1209 return;
1211 auto_diagnostic_group d;
1212 if (permerror (DECL_SOURCE_LOCATION (newdecl),
1213 "%qD was declared %<extern%> and later %<static%>", newdecl))
1214 inform (DECL_SOURCE_LOCATION (olddecl),
1215 "previous declaration of %qD", olddecl);
1218 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1219 function templates. If their exception specifications do not
1220 match, issue a diagnostic. */
1222 static void
1223 check_redeclaration_exception_specification (tree new_decl,
1224 tree old_decl)
1226 tree new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1227 tree old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1229 /* Two default specs are equivalent, don't force evaluation. */
1230 if (UNEVALUATED_NOEXCEPT_SPEC_P (new_exceptions)
1231 && UNEVALUATED_NOEXCEPT_SPEC_P (old_exceptions))
1232 return;
1234 if (!type_dependent_expression_p (old_decl))
1236 maybe_instantiate_noexcept (new_decl);
1237 maybe_instantiate_noexcept (old_decl);
1239 new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1240 old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1242 /* [except.spec]
1244 If any declaration of a function has an exception-specification,
1245 all declarations, including the definition and an explicit
1246 specialization, of that function shall have an
1247 exception-specification with the same set of type-ids. */
1248 if (!DECL_IS_UNDECLARED_BUILTIN (old_decl)
1249 && !DECL_IS_UNDECLARED_BUILTIN (new_decl)
1250 && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1252 const char *const msg
1253 = G_("declaration of %qF has a different exception specifier");
1254 bool complained = true;
1255 location_t new_loc = DECL_SOURCE_LOCATION (new_decl);
1256 auto_diagnostic_group d;
1257 if (DECL_IN_SYSTEM_HEADER (old_decl))
1258 complained = pedwarn (new_loc, OPT_Wsystem_headers, msg, new_decl);
1259 else if (!flag_exceptions)
1260 /* We used to silently permit mismatched eh specs with
1261 -fno-exceptions, so make them a pedwarn now. */
1262 complained = pedwarn (new_loc, OPT_Wpedantic, msg, new_decl);
1263 else
1264 error_at (new_loc, msg, new_decl);
1265 if (complained)
1266 inform (DECL_SOURCE_LOCATION (old_decl),
1267 "from previous declaration %qF", old_decl);
1271 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1272 Otherwise issue diagnostics. */
1274 static bool
1275 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1277 old_decl = STRIP_TEMPLATE (old_decl);
1278 new_decl = STRIP_TEMPLATE (new_decl);
1279 if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1280 || !VAR_OR_FUNCTION_DECL_P (new_decl))
1281 return true;
1282 if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1283 == DECL_DECLARED_CONSTEXPR_P (new_decl))
1285 if (TREE_CODE (old_decl) != FUNCTION_DECL)
1286 return true;
1287 if (DECL_IMMEDIATE_FUNCTION_P (old_decl)
1288 == DECL_IMMEDIATE_FUNCTION_P (new_decl))
1289 return true;
1291 if (TREE_CODE (old_decl) == FUNCTION_DECL)
1293 /* With -fimplicit-constexpr, ignore changes in the constexpr
1294 keyword. */
1295 if (flag_implicit_constexpr
1296 && (DECL_IMMEDIATE_FUNCTION_P (new_decl)
1297 == DECL_IMMEDIATE_FUNCTION_P (old_decl)))
1298 return true;
1299 if (fndecl_built_in_p (old_decl))
1301 /* Hide a built-in declaration. */
1302 DECL_DECLARED_CONSTEXPR_P (old_decl)
1303 = DECL_DECLARED_CONSTEXPR_P (new_decl);
1304 if (DECL_IMMEDIATE_FUNCTION_P (new_decl))
1305 SET_DECL_IMMEDIATE_FUNCTION_P (old_decl);
1306 return true;
1308 /* 7.1.5 [dcl.constexpr]
1309 Note: An explicit specialization can differ from the template
1310 declaration with respect to the constexpr specifier. */
1311 if (! DECL_TEMPLATE_SPECIALIZATION (old_decl)
1312 && DECL_TEMPLATE_SPECIALIZATION (new_decl))
1313 return true;
1315 const char *kind = "constexpr";
1316 if (DECL_IMMEDIATE_FUNCTION_P (old_decl)
1317 || DECL_IMMEDIATE_FUNCTION_P (new_decl))
1318 kind = "consteval";
1319 error_at (DECL_SOURCE_LOCATION (new_decl),
1320 "redeclaration %qD differs in %qs "
1321 "from previous declaration", new_decl,
1322 kind);
1323 inform (DECL_SOURCE_LOCATION (old_decl),
1324 "previous declaration %qD", old_decl);
1325 return false;
1327 return true;
1330 // If OLDDECL and NEWDECL are concept declarations with the same type
1331 // (i.e., and template parameters), but different requirements,
1332 // emit diagnostics and return true. Otherwise, return false.
1333 static inline bool
1334 check_concept_refinement (tree olddecl, tree newdecl)
1336 if (!DECL_DECLARED_CONCEPT_P (olddecl) || !DECL_DECLARED_CONCEPT_P (newdecl))
1337 return false;
1339 tree d1 = DECL_TEMPLATE_RESULT (olddecl);
1340 tree d2 = DECL_TEMPLATE_RESULT (newdecl);
1341 if (TREE_CODE (d1) != TREE_CODE (d2))
1342 return false;
1344 tree t1 = TREE_TYPE (d1);
1345 tree t2 = TREE_TYPE (d2);
1346 if (TREE_CODE (d1) == FUNCTION_DECL)
1348 if (compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2))
1349 && comp_template_parms (DECL_TEMPLATE_PARMS (olddecl),
1350 DECL_TEMPLATE_PARMS (newdecl))
1351 && !equivalently_constrained (olddecl, newdecl))
1353 error ("cannot specialize concept %q#D", olddecl);
1354 return true;
1357 return false;
1360 /* DECL is a redeclaration of a function or function template. If
1361 it does have default arguments issue a diagnostic. Note: this
1362 function is used to enforce the requirements in C++11 8.3.6 about
1363 no default arguments in redeclarations. */
1365 static void
1366 check_redeclaration_no_default_args (tree decl)
1368 gcc_assert (DECL_DECLARES_FUNCTION_P (decl));
1370 for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
1371 t && t != void_list_node; t = TREE_CHAIN (t))
1372 if (TREE_PURPOSE (t))
1374 permerror (DECL_SOURCE_LOCATION (decl),
1375 "redeclaration of %q#D may not have default "
1376 "arguments", decl);
1377 return;
1381 /* NEWDECL is a redeclaration of a function or function template OLDDECL,
1382 in any case represented as FUNCTION_DECLs (the DECL_TEMPLATE_RESULTs of
1383 the TEMPLATE_DECLs in case of function templates). This function is used
1384 to enforce the final part of C++17 11.3.6/4, about a single declaration:
1385 "If a friend declaration specifies a default argument expression, that
1386 declaration shall be a definition and shall be the only declaration of
1387 the function or function template in the translation unit." */
1389 static void
1390 check_no_redeclaration_friend_default_args (tree olddecl, tree newdecl)
1392 if (!DECL_UNIQUE_FRIEND_P (olddecl) && !DECL_UNIQUE_FRIEND_P (newdecl))
1393 return;
1395 for (tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl),
1396 t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
1397 t1 && t1 != void_list_node;
1398 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1399 if ((DECL_UNIQUE_FRIEND_P (olddecl) && TREE_PURPOSE (t1))
1400 || (DECL_UNIQUE_FRIEND_P (newdecl) && TREE_PURPOSE (t2)))
1402 auto_diagnostic_group d;
1403 if (permerror (DECL_SOURCE_LOCATION (newdecl),
1404 "friend declaration of %q#D specifies default "
1405 "arguments and isn%'t the only declaration", newdecl))
1406 inform (DECL_SOURCE_LOCATION (olddecl),
1407 "previous declaration of %q#D", olddecl);
1408 return;
1412 /* Merge tree bits that correspond to attributes noreturn, nothrow,
1413 const, malloc, and pure from NEWDECL with those of OLDDECL. */
1415 static void
1416 merge_attribute_bits (tree newdecl, tree olddecl)
1418 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1419 TREE_THIS_VOLATILE (olddecl) |= TREE_THIS_VOLATILE (newdecl);
1420 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1421 TREE_NOTHROW (olddecl) |= TREE_NOTHROW (newdecl);
1422 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1423 TREE_READONLY (olddecl) |= TREE_READONLY (newdecl);
1424 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1425 DECL_IS_MALLOC (olddecl) |= DECL_IS_MALLOC (newdecl);
1426 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1427 DECL_PURE_P (olddecl) |= DECL_PURE_P (newdecl);
1428 DECL_UNINLINABLE (newdecl) |= DECL_UNINLINABLE (olddecl);
1429 DECL_UNINLINABLE (olddecl) |= DECL_UNINLINABLE (newdecl);
1432 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1433 && lookup_attribute ("gnu_inline", \
1434 DECL_ATTRIBUTES (fn)))
1436 /* A subroutine of duplicate_decls. Emits a diagnostic when newdecl
1437 ambiguates olddecl. Returns true if an error occurs. */
1439 static bool
1440 duplicate_function_template_decls (tree newdecl, tree olddecl)
1443 tree newres = DECL_TEMPLATE_RESULT (newdecl);
1444 tree oldres = DECL_TEMPLATE_RESULT (olddecl);
1445 /* Function template declarations can be differentiated by parameter
1446 and return type. */
1447 if (compparms (TYPE_ARG_TYPES (TREE_TYPE (oldres)),
1448 TYPE_ARG_TYPES (TREE_TYPE (newres)))
1449 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1450 TREE_TYPE (TREE_TYPE (olddecl))))
1452 /* ... and also by their template-heads and requires-clauses. */
1453 if (template_heads_equivalent_p (newdecl, olddecl)
1454 && function_requirements_equivalent_p (newres, oldres))
1456 error ("ambiguating new declaration %q+#D", newdecl);
1457 inform (DECL_SOURCE_LOCATION (olddecl),
1458 "old declaration %q#D", olddecl);
1459 return true;
1462 /* FIXME: The types are the same but the are differences
1463 in either the template heads or function requirements.
1464 We should be able to diagnose a set of common errors
1465 stemming from these declarations. For example:
1467 template<typename T> requires C void f(...);
1468 template<typename T> void f(...) requires C;
1470 These are functionally equivalent but not equivalent. */
1473 return false;
1476 /* OLD_PARMS is the innermost set of template parameters for some template
1477 declaration, and NEW_PARMS is the corresponding set of template parameters
1478 for a redeclaration of that template. Merge the default arguments within
1479 these two sets of parameters. CLASS_P is true iff the template in
1480 question is a class template. */
1482 bool
1483 merge_default_template_args (tree new_parms, tree old_parms, bool class_p)
1485 gcc_checking_assert (TREE_VEC_LENGTH (new_parms)
1486 == TREE_VEC_LENGTH (old_parms));
1487 for (int i = 0; i < TREE_VEC_LENGTH (new_parms); i++)
1489 tree new_parm = TREE_VALUE (TREE_VEC_ELT (new_parms, i));
1490 tree old_parm = TREE_VALUE (TREE_VEC_ELT (old_parms, i));
1491 tree& new_default = TREE_PURPOSE (TREE_VEC_ELT (new_parms, i));
1492 tree& old_default = TREE_PURPOSE (TREE_VEC_ELT (old_parms, i));
1493 if (new_default != NULL_TREE && old_default != NULL_TREE)
1495 auto_diagnostic_group d;
1496 error ("redefinition of default argument for %q+#D", new_parm);
1497 inform (DECL_SOURCE_LOCATION (old_parm),
1498 "original definition appeared here");
1499 return false;
1501 else if (new_default != NULL_TREE)
1502 /* Update the previous template parameters (which are the ones
1503 that will really count) with the new default value. */
1504 old_default = new_default;
1505 else if (class_p && old_default != NULL_TREE)
1506 /* Update the new parameters, too; they'll be used as the
1507 parameters for any members. */
1508 new_default = old_default;
1510 return true;
1513 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1514 If the redeclaration is invalid, a diagnostic is issued, and the
1515 error_mark_node is returned. Otherwise, OLDDECL is returned.
1517 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1518 returned.
1520 HIDING is true if the new decl is being hidden. WAS_HIDDEN is true
1521 if the old decl was hidden.
1523 Hidden decls can be anticipated builtins, injected friends, or
1524 (coming soon) injected from a local-extern decl. */
1526 tree
1527 duplicate_decls (tree newdecl, tree olddecl, bool hiding, bool was_hidden)
1529 unsigned olddecl_uid = DECL_UID (olddecl);
1530 int types_match = 0;
1531 int new_defines_function = 0;
1532 tree new_template_info;
1533 location_t olddecl_loc = DECL_SOURCE_LOCATION (olddecl);
1534 location_t newdecl_loc = DECL_SOURCE_LOCATION (newdecl);
1536 if (newdecl == olddecl)
1537 return olddecl;
1539 types_match = decls_match (newdecl, olddecl);
1541 /* If either the type of the new decl or the type of the old decl is an
1542 error_mark_node, then that implies that we have already issued an
1543 error (earlier) for some bogus type specification, and in that case,
1544 it is rather pointless to harass the user with yet more error message
1545 about the same declaration, so just pretend the types match here. */
1546 if (TREE_TYPE (newdecl) == error_mark_node
1547 || TREE_TYPE (olddecl) == error_mark_node)
1548 return error_mark_node;
1550 /* Check for redeclaration and other discrepancies. */
1551 if (TREE_CODE (olddecl) == FUNCTION_DECL
1552 && DECL_IS_UNDECLARED_BUILTIN (olddecl))
1554 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1556 /* Avoid warnings redeclaring built-ins which have not been
1557 explicitly declared. */
1558 if (was_hidden)
1560 if (TREE_PUBLIC (newdecl)
1561 && CP_DECL_CONTEXT (newdecl) == global_namespace)
1562 warning_at (newdecl_loc,
1563 OPT_Wbuiltin_declaration_mismatch,
1564 "built-in function %qD declared as non-function",
1565 newdecl);
1566 return NULL_TREE;
1569 /* If you declare a built-in or predefined function name as static,
1570 the old definition is overridden, but optionally warn this was a
1571 bad choice of name. */
1572 if (! TREE_PUBLIC (newdecl))
1574 warning_at (newdecl_loc,
1575 OPT_Wshadow,
1576 fndecl_built_in_p (olddecl)
1577 ? G_("shadowing built-in function %q#D")
1578 : G_("shadowing library function %q#D"), olddecl);
1579 /* Discard the old built-in function. */
1580 return NULL_TREE;
1582 /* If the built-in is not ansi, then programs can override
1583 it even globally without an error. */
1584 else if (! fndecl_built_in_p (olddecl))
1585 warning_at (newdecl_loc, 0,
1586 "library function %q#D redeclared as non-function %q#D",
1587 olddecl, newdecl);
1588 else
1589 error_at (newdecl_loc,
1590 "declaration of %q#D conflicts with built-in "
1591 "declaration %q#D", newdecl, olddecl);
1592 return NULL_TREE;
1594 else if (!types_match)
1596 /* Avoid warnings redeclaring built-ins which have not been
1597 explicitly declared. */
1598 if (was_hidden)
1600 tree t1, t2;
1602 /* A new declaration doesn't match a built-in one unless it
1603 is also extern "C". */
1604 gcc_assert (DECL_IS_UNDECLARED_BUILTIN (olddecl));
1605 gcc_assert (DECL_EXTERN_C_P (olddecl));
1606 if (!DECL_EXTERN_C_P (newdecl))
1607 return NULL_TREE;
1609 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1610 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1611 t1 || t2;
1612 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1614 if (!t1 || !t2)
1615 break;
1616 /* FILE, tm types are not known at the time
1617 we create the builtins. */
1618 for (unsigned i = 0;
1619 i < sizeof (builtin_structptr_types)
1620 / sizeof (builtin_structptr_type);
1621 ++i)
1622 if (TREE_VALUE (t2) == builtin_structptr_types[i].node)
1624 tree t = TREE_VALUE (t1);
1626 if (TYPE_PTR_P (t)
1627 && TYPE_IDENTIFIER (TREE_TYPE (t))
1628 == get_identifier (builtin_structptr_types[i].str)
1629 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1631 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1633 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1634 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1635 types_match = decls_match (newdecl, olddecl);
1636 if (types_match)
1637 return duplicate_decls (newdecl, olddecl,
1638 hiding, was_hidden);
1639 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1641 goto next_arg;
1644 if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1645 break;
1646 next_arg:;
1649 warning_at (newdecl_loc,
1650 OPT_Wbuiltin_declaration_mismatch,
1651 "declaration of %q#D conflicts with built-in "
1652 "declaration %q#D", newdecl, olddecl);
1654 else if ((DECL_EXTERN_C_P (newdecl)
1655 && DECL_EXTERN_C_P (olddecl))
1656 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1657 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1659 /* Don't really override olddecl for __* prefixed builtins
1660 except for __[^b]*_chk, the compiler might be using those
1661 explicitly. */
1662 if (fndecl_built_in_p (olddecl))
1664 tree id = DECL_NAME (olddecl);
1665 const char *name = IDENTIFIER_POINTER (id);
1666 size_t len;
1668 if (name[0] == '_'
1669 && name[1] == '_'
1670 && (startswith (name + 2, "builtin_")
1671 || (len = strlen (name)) <= strlen ("___chk")
1672 || memcmp (name + len - strlen ("_chk"),
1673 "_chk", strlen ("_chk") + 1) != 0))
1675 if (DECL_INITIAL (newdecl))
1677 error_at (newdecl_loc,
1678 "definition of %q#D ambiguates built-in "
1679 "declaration %q#D", newdecl, olddecl);
1680 return error_mark_node;
1682 auto_diagnostic_group d;
1683 if (permerror (newdecl_loc,
1684 "new declaration %q#D ambiguates built-in"
1685 " declaration %q#D", newdecl, olddecl)
1686 && flag_permissive)
1687 inform (newdecl_loc,
1688 "ignoring the %q#D declaration", newdecl);
1689 return flag_permissive ? olddecl : error_mark_node;
1693 /* A near match; override the builtin. */
1695 if (TREE_PUBLIC (newdecl))
1696 warning_at (newdecl_loc,
1697 OPT_Wbuiltin_declaration_mismatch,
1698 "new declaration %q#D ambiguates built-in "
1699 "declaration %q#D", newdecl, olddecl);
1700 else
1701 warning (OPT_Wshadow,
1702 fndecl_built_in_p (olddecl)
1703 ? G_("shadowing built-in function %q#D")
1704 : G_("shadowing library function %q#D"), olddecl);
1706 else
1707 /* Discard the old built-in function. */
1708 return NULL_TREE;
1710 /* Replace the old RTL to avoid problems with inlining. */
1711 COPY_DECL_RTL (newdecl, olddecl);
1713 else
1715 /* Even if the types match, prefer the new declarations type
1716 for built-ins which have not been explicitly declared,
1717 for exception lists, etc... */
1718 tree type = TREE_TYPE (newdecl);
1719 tree attribs = (*targetm.merge_type_attributes)
1720 (TREE_TYPE (olddecl), type);
1722 type = cp_build_type_attribute_variant (type, attribs);
1723 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1726 /* If a function is explicitly declared "throw ()", propagate that to
1727 the corresponding builtin. */
1728 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1729 && was_hidden
1730 && TREE_NOTHROW (newdecl)
1731 && !TREE_NOTHROW (olddecl))
1733 enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1734 tree tmpdecl = builtin_decl_explicit (fncode);
1735 if (tmpdecl && tmpdecl != olddecl && types_match)
1736 TREE_NOTHROW (tmpdecl) = 1;
1739 /* Whether or not the builtin can throw exceptions has no
1740 bearing on this declarator. */
1741 TREE_NOTHROW (olddecl) = 0;
1743 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1745 /* If a builtin function is redeclared as `static', merge
1746 the declarations, but make the original one static. */
1747 DECL_THIS_STATIC (olddecl) = 1;
1748 TREE_PUBLIC (olddecl) = 0;
1750 /* Make the old declaration consistent with the new one so
1751 that all remnants of the builtin-ness of this function
1752 will be banished. */
1753 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1754 COPY_DECL_RTL (newdecl, olddecl);
1757 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1759 /* C++ Standard, 3.3, clause 4:
1760 "[Note: a namespace name or a class template name must be unique
1761 in its declarative region (7.3.2, clause 14). ]" */
1762 if (TREE_CODE (olddecl) == NAMESPACE_DECL
1763 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1764 /* Namespace conflicts with not namespace. */;
1765 else if (DECL_TYPE_TEMPLATE_P (olddecl)
1766 || DECL_TYPE_TEMPLATE_P (newdecl))
1767 /* Class template conflicts. */;
1768 else if ((TREE_CODE (olddecl) == TEMPLATE_DECL
1769 && DECL_TEMPLATE_RESULT (olddecl)
1770 && TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == VAR_DECL)
1771 || (TREE_CODE (newdecl) == TEMPLATE_DECL
1772 && DECL_TEMPLATE_RESULT (newdecl)
1773 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == VAR_DECL))
1774 /* Variable template conflicts. */;
1775 else if (concept_definition_p (olddecl)
1776 || concept_definition_p (newdecl))
1777 /* Concept conflicts. */;
1778 else if ((TREE_CODE (newdecl) == FUNCTION_DECL
1779 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1780 || (TREE_CODE (olddecl) == FUNCTION_DECL
1781 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1783 /* One is a function and the other is a template
1784 function. */
1785 if (!UDLIT_OPER_P (DECL_NAME (newdecl)))
1786 return NULL_TREE;
1788 /* There can only be one! */
1789 if (TREE_CODE (newdecl) == TEMPLATE_DECL
1790 && check_raw_literal_operator (olddecl))
1791 error_at (newdecl_loc,
1792 "literal operator %q#D conflicts with"
1793 " raw literal operator", newdecl);
1794 else if (check_raw_literal_operator (newdecl))
1795 error_at (newdecl_loc,
1796 "raw literal operator %q#D conflicts with"
1797 " literal operator template", newdecl);
1798 else
1799 return NULL_TREE;
1801 inform (olddecl_loc, "previous declaration %q#D", olddecl);
1802 return error_mark_node;
1804 else if ((VAR_P (olddecl) && DECL_DECOMPOSITION_P (olddecl))
1805 || (VAR_P (newdecl) && DECL_DECOMPOSITION_P (newdecl)))
1806 /* A structured binding must be unique in its declarative region. */;
1807 else if (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1808 || DECL_IMPLICIT_TYPEDEF_P (newdecl))
1809 /* One is an implicit typedef, that's ok. */
1810 return NULL_TREE;
1812 error ("%q#D redeclared as different kind of entity", newdecl);
1813 inform (olddecl_loc, "previous declaration %q#D", olddecl);
1815 return error_mark_node;
1817 else if (!types_match)
1819 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1820 /* These are certainly not duplicate declarations; they're
1821 from different scopes. */
1822 return NULL_TREE;
1824 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1826 tree oldres = DECL_TEMPLATE_RESULT (olddecl);
1827 tree newres = DECL_TEMPLATE_RESULT (newdecl);
1829 /* The name of a class template may not be declared to refer to
1830 any other template, class, function, object, namespace, value,
1831 or type in the same scope. */
1832 if (TREE_CODE (oldres) == TYPE_DECL
1833 || TREE_CODE (newres) == TYPE_DECL)
1835 error_at (newdecl_loc,
1836 "conflicting declaration of template %q#D", newdecl);
1837 inform (olddecl_loc,
1838 "previous declaration %q#D", olddecl);
1839 return error_mark_node;
1842 else if (TREE_CODE (oldres) == FUNCTION_DECL
1843 && TREE_CODE (newres) == FUNCTION_DECL)
1845 if (duplicate_function_template_decls (newdecl, olddecl))
1846 return error_mark_node;
1847 return NULL_TREE;
1849 else if (check_concept_refinement (olddecl, newdecl))
1850 return error_mark_node;
1851 return NULL_TREE;
1853 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1855 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1857 error_at (newdecl_loc,
1858 "conflicting declaration of C function %q#D",
1859 newdecl);
1860 inform (olddecl_loc,
1861 "previous declaration %q#D", olddecl);
1862 return error_mark_node;
1864 /* For function versions, params and types match, but they
1865 are not ambiguous. */
1866 else if ((!DECL_FUNCTION_VERSIONED (newdecl)
1867 && !DECL_FUNCTION_VERSIONED (olddecl))
1868 // The functions have the same parameter types.
1869 && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1870 TYPE_ARG_TYPES (TREE_TYPE (olddecl)))
1871 // And the same constraints.
1872 && equivalently_constrained (newdecl, olddecl))
1874 error_at (newdecl_loc,
1875 "ambiguating new declaration of %q#D", newdecl);
1876 inform (olddecl_loc,
1877 "old declaration %q#D", olddecl);
1878 return error_mark_node;
1880 else
1881 return NULL_TREE;
1883 else
1885 error_at (newdecl_loc, "conflicting declaration %q#D", newdecl);
1886 inform (olddecl_loc,
1887 "previous declaration as %q#D", olddecl);
1888 return error_mark_node;
1891 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1892 && DECL_OMP_DECLARE_REDUCTION_P (newdecl))
1894 /* OMP UDRs are never duplicates. */
1895 gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (olddecl));
1896 error_at (newdecl_loc,
1897 "redeclaration of %<pragma omp declare reduction%>");
1898 inform (olddecl_loc,
1899 "previous %<pragma omp declare reduction%> declaration");
1900 return error_mark_node;
1902 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1903 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1904 && (!DECL_TEMPLATE_INFO (newdecl)
1905 || (DECL_TI_TEMPLATE (newdecl)
1906 != DECL_TI_TEMPLATE (olddecl))))
1907 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1908 && (!DECL_TEMPLATE_INFO (olddecl)
1909 || (DECL_TI_TEMPLATE (olddecl)
1910 != DECL_TI_TEMPLATE (newdecl))))))
1911 /* It's OK to have a template specialization and a non-template
1912 with the same type, or to have specializations of two
1913 different templates with the same type. Note that if one is a
1914 specialization, and the other is an instantiation of the same
1915 template, that we do not exit at this point. That situation
1916 can occur if we instantiate a template class, and then
1917 specialize one of its methods. This situation is valid, but
1918 the declarations must be merged in the usual way. */
1919 return NULL_TREE;
1920 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1921 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1922 && !DECL_USE_TEMPLATE (newdecl))
1923 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1924 && !DECL_USE_TEMPLATE (olddecl))))
1925 /* One of the declarations is a template instantiation, and the
1926 other is not a template at all. That's OK. */
1927 return NULL_TREE;
1928 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1930 /* In [namespace.alias] we have:
1932 In a declarative region, a namespace-alias-definition can be
1933 used to redefine a namespace-alias declared in that declarative
1934 region to refer only to the namespace to which it already
1935 refers.
1937 Therefore, if we encounter a second alias directive for the same
1938 alias, we can just ignore the second directive. */
1939 if (DECL_NAMESPACE_ALIAS (newdecl)
1940 && (DECL_NAMESPACE_ALIAS (newdecl)
1941 == DECL_NAMESPACE_ALIAS (olddecl)))
1942 return olddecl;
1944 /* Leave it to update_binding to merge or report error. */
1945 return NULL_TREE;
1947 else
1949 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1950 if (errmsg)
1952 auto_diagnostic_group d;
1953 error_at (newdecl_loc, errmsg, newdecl);
1954 if (DECL_NAME (olddecl) != NULL_TREE)
1955 inform (olddecl_loc,
1956 (DECL_INITIAL (olddecl) && namespace_bindings_p ())
1957 ? G_("%q#D previously defined here")
1958 : G_("%q#D previously declared here"), olddecl);
1959 return error_mark_node;
1961 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1962 && DECL_INITIAL (olddecl) != NULL_TREE
1963 && !prototype_p (TREE_TYPE (olddecl))
1964 && prototype_p (TREE_TYPE (newdecl)))
1966 /* Prototype decl follows defn w/o prototype. */
1967 auto_diagnostic_group d;
1968 if (warning_at (newdecl_loc, 0,
1969 "prototype specified for %q#D", newdecl))
1970 inform (olddecl_loc,
1971 "previous non-prototype definition here");
1973 else if (VAR_OR_FUNCTION_DECL_P (olddecl)
1974 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1976 /* [dcl.link]
1977 If two declarations of the same function or object
1978 specify different linkage-specifications ..., the program
1979 is ill-formed.... Except for functions with C++ linkage,
1980 a function declaration without a linkage specification
1981 shall not precede the first linkage specification for
1982 that function. A function can be declared without a
1983 linkage specification after an explicit linkage
1984 specification has been seen; the linkage explicitly
1985 specified in the earlier declaration is not affected by
1986 such a function declaration.
1988 DR 563 raises the question why the restrictions on
1989 functions should not also apply to objects. Older
1990 versions of G++ silently ignore the linkage-specification
1991 for this example:
1993 namespace N {
1994 extern int i;
1995 extern "C" int i;
1998 which is clearly wrong. Therefore, we now treat objects
1999 like functions. */
2000 if (current_lang_depth () == 0)
2002 /* There is no explicit linkage-specification, so we use
2003 the linkage from the previous declaration. */
2004 retrofit_lang_decl (newdecl);
2005 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2007 else
2009 auto_diagnostic_group d;
2010 error_at (newdecl_loc,
2011 "conflicting declaration of %q#D with %qL linkage",
2012 newdecl, DECL_LANGUAGE (newdecl));
2013 inform (olddecl_loc,
2014 "previous declaration with %qL linkage",
2015 DECL_LANGUAGE (olddecl));
2019 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
2021 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
2023 /* Note: free functions, as TEMPLATE_DECLs, are handled below. */
2024 if (DECL_FUNCTION_MEMBER_P (olddecl)
2025 && (/* grokfndecl passes member function templates too
2026 as FUNCTION_DECLs. */
2027 DECL_TEMPLATE_INFO (olddecl)
2028 /* C++11 8.3.6/6.
2029 Default arguments for a member function of a class
2030 template shall be specified on the initial declaration
2031 of the member function within the class template. */
2032 || CLASSTYPE_TEMPLATE_INFO (CP_DECL_CONTEXT (olddecl))))
2034 check_redeclaration_no_default_args (newdecl);
2036 if (DECL_TEMPLATE_INFO (olddecl)
2037 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (olddecl)))
2039 tree new_parms = DECL_TEMPLATE_INFO (newdecl)
2040 ? DECL_INNERMOST_TEMPLATE_PARMS (DECL_TI_TEMPLATE (newdecl))
2041 : INNERMOST_TEMPLATE_PARMS (current_template_parms);
2042 tree old_parms
2043 = DECL_INNERMOST_TEMPLATE_PARMS (DECL_TI_TEMPLATE (olddecl));
2044 merge_default_template_args (new_parms, old_parms,
2045 /*class_p=*/false);
2048 else
2050 tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl);
2051 tree t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
2052 int i = 1;
2054 for (; t1 && t1 != void_list_node;
2055 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
2056 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
2058 if (simple_cst_equal (TREE_PURPOSE (t1),
2059 TREE_PURPOSE (t2)) == 1)
2061 auto_diagnostic_group d;
2062 if (permerror (newdecl_loc,
2063 "default argument given for parameter "
2064 "%d of %q#D", i, newdecl))
2065 inform (olddecl_loc,
2066 "previous specification in %q#D here",
2067 olddecl);
2069 else
2071 auto_diagnostic_group d;
2072 error_at (newdecl_loc,
2073 "default argument given for parameter %d "
2074 "of %q#D", i, newdecl);
2075 inform (olddecl_loc,
2076 "previous specification in %q#D here",
2077 olddecl);
2081 /* C++17 11.3.6/4: "If a friend declaration specifies a default
2082 argument expression, that declaration... shall be the only
2083 declaration of the function or function template in the
2084 translation unit." */
2085 check_no_redeclaration_friend_default_args (olddecl, newdecl);
2090 /* Do not merge an implicit typedef with an explicit one. In:
2092 class A;
2094 typedef class A A __attribute__ ((foo));
2096 the attribute should apply only to the typedef. */
2097 if (TREE_CODE (olddecl) == TYPE_DECL
2098 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
2099 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
2100 return NULL_TREE;
2102 if (DECL_TEMPLATE_PARM_P (olddecl) != DECL_TEMPLATE_PARM_P (newdecl))
2103 return NULL_TREE;
2105 if (!validate_constexpr_redeclaration (olddecl, newdecl))
2106 return error_mark_node;
2108 if (modules_p ()
2109 && TREE_CODE (CP_DECL_CONTEXT (olddecl)) == NAMESPACE_DECL
2110 && TREE_CODE (olddecl) != NAMESPACE_DECL
2111 && !hiding)
2113 if (DECL_ARTIFICIAL (olddecl))
2115 if (!(global_purview_p () || not_module_p ()))
2116 error ("declaration %qD conflicts with builtin", newdecl);
2117 else
2118 DECL_MODULE_EXPORT_P (olddecl) = DECL_MODULE_EXPORT_P (newdecl);
2120 else
2122 if (!module_may_redeclare (olddecl))
2124 error ("declaration %qD conflicts with import", newdecl);
2125 inform (olddecl_loc, "import declared %q#D here", olddecl);
2127 return error_mark_node;
2130 if (DECL_MODULE_EXPORT_P (newdecl)
2131 && !DECL_MODULE_EXPORT_P (olddecl))
2133 error ("conflicting exporting declaration %qD", newdecl);
2134 inform (olddecl_loc, "previous declaration %q#D here", olddecl);
2139 /* We have committed to returning OLDDECL at this point. */
2141 /* If new decl is `static' and an `extern' was seen previously,
2142 warn about it. */
2143 warn_extern_redeclared_static (newdecl, olddecl);
2145 /* True to merge attributes between the declarations, false to
2146 set OLDDECL's attributes to those of NEWDECL (for template
2147 explicit specializations that specify their own attributes
2148 independent of those specified for the primary template). */
2149 const bool merge_attr = (TREE_CODE (newdecl) != FUNCTION_DECL
2150 || !DECL_TEMPLATE_SPECIALIZATION (newdecl)
2151 || DECL_TEMPLATE_SPECIALIZATION (olddecl));
2153 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2155 if (merge_attr)
2157 if (diagnose_mismatched_attributes (olddecl, newdecl))
2158 inform (olddecl_loc, DECL_INITIAL (olddecl)
2159 ? G_("previous definition of %qD here")
2160 : G_("previous declaration of %qD here"), olddecl);
2162 /* [dcl.attr.noreturn]: The first declaration of a function shall
2163 specify the noreturn attribute if any declaration of that function
2164 specifies the noreturn attribute. */
2165 tree a;
2166 if (TREE_THIS_VOLATILE (newdecl)
2167 && !TREE_THIS_VOLATILE (olddecl)
2168 /* This applies to [[noreturn]] only, not its GNU variants. */
2169 && (a = lookup_attribute ("noreturn", DECL_ATTRIBUTES (newdecl)))
2170 && cxx11_attribute_p (a)
2171 && get_attribute_namespace (a) == NULL_TREE)
2173 error_at (newdecl_loc, "function %qD declared %<[[noreturn]]%> "
2174 "but its first declaration was not", newdecl);
2175 inform (olddecl_loc, "previous declaration of %qD", olddecl);
2179 /* Now that functions must hold information normally held
2180 by field decls, there is extra work to do so that
2181 declaration information does not get destroyed during
2182 definition. */
2183 if (DECL_VINDEX (olddecl))
2184 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
2185 if (DECL_CONTEXT (olddecl))
2186 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
2187 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
2188 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
2189 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
2190 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
2191 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
2192 DECL_FINAL_P (newdecl) |= DECL_FINAL_P (olddecl);
2193 DECL_OVERRIDE_P (newdecl) |= DECL_OVERRIDE_P (olddecl);
2194 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
2195 DECL_HAS_DEPENDENT_EXPLICIT_SPEC_P (newdecl)
2196 |= DECL_HAS_DEPENDENT_EXPLICIT_SPEC_P (olddecl);
2197 if (DECL_OVERLOADED_OPERATOR_P (olddecl))
2198 DECL_OVERLOADED_OPERATOR_CODE_RAW (newdecl)
2199 = DECL_OVERLOADED_OPERATOR_CODE_RAW (olddecl);
2200 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
2202 /* Optionally warn about more than one declaration for the same
2203 name, but don't warn about a function declaration followed by a
2204 definition. */
2205 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
2206 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
2207 /* Don't warn about extern decl followed by definition. */
2208 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
2209 /* Don't warn if at least one is/was hidden. */
2210 && !(hiding || was_hidden)
2211 /* Don't warn about declaration followed by specialization. */
2212 && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
2213 || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
2215 auto_diagnostic_group d;
2216 if (warning_at (newdecl_loc,
2217 OPT_Wredundant_decls,
2218 "redundant redeclaration of %qD in same scope",
2219 newdecl))
2220 inform (olddecl_loc,
2221 "previous declaration of %qD", olddecl);
2224 /* [dcl.fct.def.delete] A deleted definition of a function shall be the
2225 first declaration of the function or, for an explicit specialization
2226 of a function template, the first declaration of that
2227 specialization. */
2228 if (!(DECL_TEMPLATE_INSTANTIATION (olddecl)
2229 && DECL_TEMPLATE_SPECIALIZATION (newdecl)))
2231 if (DECL_DELETED_FN (newdecl))
2233 auto_diagnostic_group d;
2234 if (pedwarn (newdecl_loc, 0, "deleted definition of %qD "
2235 "is not first declaration", newdecl))
2236 inform (olddecl_loc,
2237 "previous declaration of %qD", olddecl);
2239 DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
2243 /* Deal with C++: must preserve virtual function table size. */
2244 if (TREE_CODE (olddecl) == TYPE_DECL)
2246 tree newtype = TREE_TYPE (newdecl);
2247 tree oldtype = TREE_TYPE (olddecl);
2249 if (newtype != error_mark_node && oldtype != error_mark_node
2250 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
2251 CLASSTYPE_FRIEND_CLASSES (newtype)
2252 = CLASSTYPE_FRIEND_CLASSES (oldtype);
2254 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
2257 /* Copy all the DECL_... slots specified in the new decl except for
2258 any that we copy here from the old type. */
2259 if (merge_attr)
2260 DECL_ATTRIBUTES (newdecl)
2261 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
2262 else
2263 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2265 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2267 tree old_result = DECL_TEMPLATE_RESULT (olddecl);
2268 tree new_result = DECL_TEMPLATE_RESULT (newdecl);
2269 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
2271 /* The new decl should not already have gathered any
2272 specializations. */
2273 gcc_assert (!DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
2275 DECL_ATTRIBUTES (old_result)
2276 = (*targetm.merge_decl_attributes) (old_result, new_result);
2278 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2280 if (DECL_SOURCE_LOCATION (newdecl)
2281 != DECL_SOURCE_LOCATION (olddecl))
2283 /* Per C++11 8.3.6/4, default arguments cannot be added in
2284 later declarations of a function template. */
2285 check_redeclaration_no_default_args (newdecl);
2286 /* C++17 11.3.6/4: "If a friend declaration specifies a default
2287 argument expression, that declaration... shall be the only
2288 declaration of the function or function template in the
2289 translation unit." */
2290 check_no_redeclaration_friend_default_args
2291 (old_result, new_result);
2293 tree new_parms = DECL_INNERMOST_TEMPLATE_PARMS (newdecl);
2294 tree old_parms = DECL_INNERMOST_TEMPLATE_PARMS (olddecl);
2295 merge_default_template_args (new_parms, old_parms,
2296 /*class_p=*/false);
2298 if (!DECL_UNIQUE_FRIEND_P (old_result))
2299 DECL_UNIQUE_FRIEND_P (new_result) = false;
2301 check_default_args (newdecl);
2303 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
2304 && DECL_INITIAL (new_result))
2306 if (DECL_INITIAL (old_result))
2307 DECL_UNINLINABLE (old_result) = 1;
2308 else
2309 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
2310 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
2311 DECL_NOT_REALLY_EXTERN (old_result)
2312 = DECL_NOT_REALLY_EXTERN (new_result);
2313 DECL_INTERFACE_KNOWN (old_result)
2314 = DECL_INTERFACE_KNOWN (new_result);
2315 DECL_DECLARED_INLINE_P (old_result)
2316 = DECL_DECLARED_INLINE_P (new_result);
2317 DECL_DISREGARD_INLINE_LIMITS (old_result)
2318 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2321 else
2323 DECL_DECLARED_INLINE_P (old_result)
2324 |= DECL_DECLARED_INLINE_P (new_result);
2325 DECL_DISREGARD_INLINE_LIMITS (old_result)
2326 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2327 check_redeclaration_exception_specification (newdecl, olddecl);
2329 merge_attribute_bits (new_result, old_result);
2333 /* If the new declaration is a definition, update the file and
2334 line information on the declaration, and also make
2335 the old declaration the same definition. */
2336 if (DECL_INITIAL (new_result) != NULL_TREE)
2338 DECL_SOURCE_LOCATION (olddecl)
2339 = DECL_SOURCE_LOCATION (old_result)
2340 = DECL_SOURCE_LOCATION (newdecl);
2341 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
2342 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2344 tree parm;
2345 DECL_ARGUMENTS (old_result)
2346 = DECL_ARGUMENTS (new_result);
2347 for (parm = DECL_ARGUMENTS (old_result); parm;
2348 parm = DECL_CHAIN (parm))
2349 DECL_CONTEXT (parm) = old_result;
2351 if (tree fc = DECL_FRIEND_CONTEXT (new_result))
2352 SET_DECL_FRIEND_CONTEXT (old_result, fc);
2356 return olddecl;
2359 if (types_match)
2361 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2362 check_redeclaration_exception_specification (newdecl, olddecl);
2364 /* Automatically handles default parameters. */
2365 tree oldtype = TREE_TYPE (olddecl);
2366 tree newtype;
2368 /* For typedefs use the old type, as the new type's DECL_NAME points
2369 at newdecl, which will be ggc_freed. */
2370 if (TREE_CODE (newdecl) == TYPE_DECL)
2372 /* But NEWTYPE might have an attribute, honor that. */
2373 tree tem = TREE_TYPE (newdecl);
2374 newtype = oldtype;
2376 if (TYPE_USER_ALIGN (tem))
2378 if (TYPE_ALIGN (tem) > TYPE_ALIGN (newtype))
2379 SET_TYPE_ALIGN (newtype, TYPE_ALIGN (tem));
2380 TYPE_USER_ALIGN (newtype) = true;
2383 /* And remove the new type from the variants list. */
2384 if (TYPE_NAME (TREE_TYPE (newdecl)) == newdecl)
2386 tree remove = TREE_TYPE (newdecl);
2387 if (TYPE_MAIN_VARIANT (remove) == remove)
2389 gcc_assert (TYPE_NEXT_VARIANT (remove) == NULL_TREE);
2390 /* If remove is the main variant, no need to remove that
2391 from the list. One of the DECL_ORIGINAL_TYPE
2392 variants, e.g. created for aligned attribute, might still
2393 refer to the newdecl TYPE_DECL though, so remove that one
2394 in that case. */
2395 if (tree orig = DECL_ORIGINAL_TYPE (newdecl))
2396 if (orig != remove)
2397 for (tree t = TYPE_MAIN_VARIANT (orig); t;
2398 t = TYPE_MAIN_VARIANT (t))
2399 if (TYPE_NAME (TYPE_NEXT_VARIANT (t)) == newdecl)
2401 TYPE_NEXT_VARIANT (t)
2402 = TYPE_NEXT_VARIANT (TYPE_NEXT_VARIANT (t));
2403 break;
2406 else
2407 for (tree t = TYPE_MAIN_VARIANT (remove); ;
2408 t = TYPE_NEXT_VARIANT (t))
2409 if (TYPE_NEXT_VARIANT (t) == remove)
2411 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove);
2412 break;
2416 else if (merge_attr)
2417 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
2418 else
2419 newtype = TREE_TYPE (newdecl);
2421 if (VAR_P (newdecl))
2423 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
2424 /* For already initialized vars, TREE_READONLY could have been
2425 cleared in cp_finish_decl, because the var needs runtime
2426 initialization or destruction. Make sure not to set
2427 TREE_READONLY on it again. */
2428 if (DECL_INITIALIZED_P (olddecl)
2429 && !DECL_EXTERNAL (olddecl)
2430 && !TREE_READONLY (olddecl))
2431 TREE_READONLY (newdecl) = 0;
2432 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
2433 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
2434 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
2435 if (DECL_DEPENDENT_INIT_P (olddecl))
2436 SET_DECL_DEPENDENT_INIT_P (newdecl, true);
2437 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
2438 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
2439 DECL_DECLARED_CONSTEXPR_P (newdecl)
2440 |= DECL_DECLARED_CONSTEXPR_P (olddecl);
2441 DECL_DECLARED_CONSTINIT_P (newdecl)
2442 |= DECL_DECLARED_CONSTINIT_P (olddecl);
2444 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
2445 if (DECL_LANG_SPECIFIC (olddecl)
2446 && CP_DECL_THREADPRIVATE_P (olddecl))
2448 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
2449 retrofit_lang_decl (newdecl);
2450 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
2454 /* An explicit specialization of a function template or of a member
2455 function of a class template can be declared transaction_safe
2456 independently of whether the corresponding template entity is declared
2457 transaction_safe. */
2458 if (flag_tm && TREE_CODE (newdecl) == FUNCTION_DECL
2459 && DECL_TEMPLATE_INSTANTIATION (olddecl)
2460 && DECL_TEMPLATE_SPECIALIZATION (newdecl)
2461 && tx_safe_fn_type_p (newtype)
2462 && !tx_safe_fn_type_p (TREE_TYPE (newdecl)))
2463 newtype = tx_unsafe_fn_variant (newtype);
2465 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
2467 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2468 check_default_args (newdecl);
2470 /* Lay the type out, unless already done. */
2471 if (! same_type_p (newtype, oldtype)
2472 && TREE_TYPE (newdecl) != error_mark_node
2473 && !(processing_template_decl && uses_template_parms (newdecl)))
2474 layout_type (TREE_TYPE (newdecl));
2476 if ((VAR_P (newdecl)
2477 || TREE_CODE (newdecl) == PARM_DECL
2478 || TREE_CODE (newdecl) == RESULT_DECL
2479 || TREE_CODE (newdecl) == FIELD_DECL
2480 || TREE_CODE (newdecl) == TYPE_DECL)
2481 && !(processing_template_decl && uses_template_parms (newdecl)))
2482 layout_decl (newdecl, 0);
2484 /* Merge deprecatedness. */
2485 if (TREE_DEPRECATED (newdecl))
2486 TREE_DEPRECATED (olddecl) = 1;
2488 /* Merge unavailability. */
2489 if (TREE_UNAVAILABLE (newdecl))
2490 TREE_UNAVAILABLE (olddecl) = 1;
2492 /* Preserve function specific target and optimization options */
2493 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2495 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2496 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2497 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2498 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2500 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2501 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2502 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2503 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2505 if (!DECL_UNIQUE_FRIEND_P (olddecl))
2506 DECL_UNIQUE_FRIEND_P (newdecl) = false;
2508 else
2510 /* Merge the const type qualifier. */
2511 if (TREE_READONLY (newdecl))
2512 TREE_READONLY (olddecl) = 1;
2513 /* Merge the volatile type qualifier. */
2514 if (TREE_THIS_VOLATILE (newdecl))
2515 TREE_THIS_VOLATILE (olddecl) = 1;
2518 /* Merge the initialization information. */
2519 if (DECL_INITIAL (newdecl) == NULL_TREE
2520 && DECL_INITIAL (olddecl) != NULL_TREE)
2522 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2523 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2524 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2526 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2527 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2531 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2533 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2534 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2535 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2536 if (DECL_IS_OPERATOR_NEW_P (olddecl))
2537 DECL_SET_IS_OPERATOR_NEW (newdecl, true);
2538 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
2539 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2540 DECL_IS_REPLACEABLE_OPERATOR (newdecl)
2541 |= DECL_IS_REPLACEABLE_OPERATOR (olddecl);
2543 if (merge_attr)
2544 merge_attribute_bits (newdecl, olddecl);
2545 else
2547 /* Merge the noreturn bit. */
2548 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2549 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2550 TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2551 DECL_IS_MALLOC (olddecl) = DECL_IS_MALLOC (newdecl);
2552 DECL_PURE_P (olddecl) = DECL_PURE_P (newdecl);
2554 /* Keep the old RTL. */
2555 COPY_DECL_RTL (olddecl, newdecl);
2557 else if (VAR_P (newdecl)
2558 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2560 /* Keep the old RTL. We cannot keep the old RTL if the old
2561 declaration was for an incomplete object and the new
2562 declaration is not since many attributes of the RTL will
2563 change. */
2564 COPY_DECL_RTL (olddecl, newdecl);
2567 /* If cannot merge, then use the new type and qualifiers,
2568 and don't preserve the old rtl. */
2569 else
2571 /* Clean out any memory we had of the old declaration. */
2572 tree oldstatic = value_member (olddecl, static_aggregates);
2573 if (oldstatic)
2574 TREE_VALUE (oldstatic) = error_mark_node;
2576 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2577 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2578 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2579 TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2580 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2583 /* Merge the storage class information. */
2584 merge_weak (newdecl, olddecl);
2586 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2587 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2588 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2589 if (! DECL_EXTERNAL (olddecl))
2590 DECL_EXTERNAL (newdecl) = 0;
2591 if (! DECL_COMDAT (olddecl))
2592 DECL_COMDAT (newdecl) = 0;
2594 if (VAR_OR_FUNCTION_DECL_P (newdecl) && DECL_LOCAL_DECL_P (newdecl))
2596 if (!DECL_LOCAL_DECL_P (olddecl))
2597 /* This can happen if olddecl was brought in from the
2598 enclosing namespace via a using-decl. The new decl is
2599 then not a block-scope extern at all. */
2600 DECL_LOCAL_DECL_P (newdecl) = false;
2601 else
2603 retrofit_lang_decl (newdecl);
2604 tree alias = DECL_LOCAL_DECL_ALIAS (newdecl)
2605 = DECL_LOCAL_DECL_ALIAS (olddecl);
2606 DECL_ATTRIBUTES (alias)
2607 = (*targetm.merge_decl_attributes) (alias, newdecl);
2608 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2609 merge_attribute_bits (newdecl, alias);
2613 new_template_info = NULL_TREE;
2614 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2616 bool new_redefines_gnu_inline = false;
2618 if (new_defines_function
2619 && ((DECL_INTERFACE_KNOWN (olddecl)
2620 && TREE_CODE (olddecl) == FUNCTION_DECL)
2621 || (TREE_CODE (olddecl) == TEMPLATE_DECL
2622 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2623 == FUNCTION_DECL))))
2624 new_redefines_gnu_inline = GNU_INLINE_P (STRIP_TEMPLATE (olddecl));
2626 if (!new_redefines_gnu_inline)
2628 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2629 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2630 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2633 if (TREE_CODE (newdecl) != TYPE_DECL)
2635 DECL_TEMPLATE_INSTANTIATED (newdecl)
2636 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
2637 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2639 /* If the OLDDECL is an instantiation and/or specialization,
2640 then the NEWDECL must be too. But, it may not yet be marked
2641 as such if the caller has created NEWDECL, but has not yet
2642 figured out that it is a redeclaration. */
2643 if (!DECL_USE_TEMPLATE (newdecl))
2644 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2646 if (!DECL_TEMPLATE_SPECIALIZATION (newdecl))
2647 DECL_INITIALIZED_IN_CLASS_P (newdecl)
2648 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2651 /* Don't really know how much of the language-specific
2652 values we should copy from old to new. */
2653 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2655 if (LANG_DECL_HAS_MIN (newdecl))
2657 DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
2658 if (DECL_TEMPLATE_INFO (newdecl))
2660 new_template_info = DECL_TEMPLATE_INFO (newdecl);
2661 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2662 && DECL_TEMPLATE_SPECIALIZATION (newdecl))
2663 /* Remember the presence of explicit specialization args. */
2664 TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (olddecl))
2665 = TINFO_USED_TEMPLATE_ID (new_template_info);
2667 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2670 if (DECL_DECLARES_FUNCTION_P (newdecl))
2672 /* Only functions have these fields. */
2673 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2674 DECL_BEFRIENDING_CLASSES (newdecl)
2675 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2676 DECL_BEFRIENDING_CLASSES (olddecl));
2677 /* DECL_THUNKS is only valid for virtual functions,
2678 otherwise it is a DECL_FRIEND_CONTEXT. */
2679 if (DECL_VIRTUAL_P (newdecl))
2680 SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2681 else if (tree fc = DECL_FRIEND_CONTEXT (newdecl))
2682 SET_DECL_FRIEND_CONTEXT (olddecl, fc);
2684 else if (VAR_P (newdecl))
2686 /* Only variables have this field. */
2687 if (VAR_HAD_UNKNOWN_BOUND (olddecl))
2688 SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2692 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2694 tree parm;
2696 /* Merge parameter attributes. */
2697 tree oldarg, newarg;
2698 for (oldarg = DECL_ARGUMENTS(olddecl), newarg = DECL_ARGUMENTS(newdecl);
2699 oldarg && newarg;
2700 oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg))
2702 DECL_ATTRIBUTES (newarg)
2703 = (*targetm.merge_decl_attributes) (oldarg, newarg);
2704 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2707 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2708 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2710 /* If newdecl is not a specialization, then it is not a
2711 template-related function at all. And that means that we
2712 should have exited above, returning 0. */
2713 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2715 if (DECL_ODR_USED (olddecl))
2716 /* From [temp.expl.spec]:
2718 If a template, a member template or the member of a class
2719 template is explicitly specialized then that
2720 specialization shall be declared before the first use of
2721 that specialization that would cause an implicit
2722 instantiation to take place, in every translation unit in
2723 which such a use occurs. */
2724 error ("explicit specialization of %qD after first use",
2725 olddecl);
2727 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2728 DECL_COMDAT (newdecl) = (TREE_PUBLIC (newdecl)
2729 && DECL_DECLARED_INLINE_P (newdecl));
2731 /* Don't propagate visibility from the template to the
2732 specialization here. We'll do that in determine_visibility if
2733 appropriate. */
2734 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2736 /* [temp.expl.spec/14] We don't inline explicit specialization
2737 just because the primary template says so. */
2738 gcc_assert (!merge_attr);
2740 DECL_DECLARED_INLINE_P (olddecl)
2741 = DECL_DECLARED_INLINE_P (newdecl);
2743 DECL_DISREGARD_INLINE_LIMITS (olddecl)
2744 = DECL_DISREGARD_INLINE_LIMITS (newdecl);
2746 DECL_UNINLINABLE (olddecl) = DECL_UNINLINABLE (newdecl);
2748 else if (new_defines_function && DECL_INITIAL (olddecl))
2750 /* Never inline re-defined extern inline functions.
2751 FIXME: this could be better handled by keeping both
2752 function as separate declarations. */
2753 DECL_UNINLINABLE (newdecl) = 1;
2755 else
2757 if (DECL_PENDING_INLINE_P (olddecl))
2759 DECL_PENDING_INLINE_P (newdecl) = 1;
2760 DECL_PENDING_INLINE_INFO (newdecl)
2761 = DECL_PENDING_INLINE_INFO (olddecl);
2763 else if (DECL_PENDING_INLINE_P (newdecl))
2765 else if (DECL_SAVED_AUTO_RETURN_TYPE (newdecl) == NULL)
2766 DECL_SAVED_AUTO_RETURN_TYPE (newdecl)
2767 = DECL_SAVED_AUTO_RETURN_TYPE (olddecl);
2769 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2771 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2772 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2774 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2775 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2776 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2777 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2780 /* Preserve abstractness on cloned [cd]tors. */
2781 DECL_ABSTRACT_P (newdecl) = DECL_ABSTRACT_P (olddecl);
2783 /* Update newdecl's parms to point at olddecl. */
2784 for (parm = DECL_ARGUMENTS (newdecl); parm;
2785 parm = DECL_CHAIN (parm))
2786 DECL_CONTEXT (parm) = olddecl;
2788 if (! types_match)
2790 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2791 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2792 COPY_DECL_RTL (newdecl, olddecl);
2794 if (! types_match || new_defines_function)
2796 /* These need to be copied so that the names are available.
2797 Note that if the types do match, we'll preserve inline
2798 info and other bits, but if not, we won't. */
2799 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2800 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2802 /* If redeclaring a builtin function, it stays built in
2803 if newdecl is a gnu_inline definition, or if newdecl is just
2804 a declaration. */
2805 if (fndecl_built_in_p (olddecl)
2806 && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2808 copy_decl_built_in_function (newdecl, olddecl);
2809 /* If we're keeping the built-in definition, keep the rtl,
2810 regardless of declaration matches. */
2811 COPY_DECL_RTL (olddecl, newdecl);
2812 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2814 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2815 if (builtin_decl_explicit_p (fncode))
2817 /* A compatible prototype of these builtin functions
2818 is seen, assume the runtime implements it with
2819 the expected semantics. */
2820 switch (fncode)
2822 case BUILT_IN_STPCPY:
2823 set_builtin_decl_implicit_p (fncode, true);
2824 break;
2825 default:
2826 set_builtin_decl_declared_p (fncode, true);
2827 break;
2831 copy_attributes_to_builtin (newdecl);
2834 if (new_defines_function)
2835 /* If defining a function declared with other language
2836 linkage, use the previously declared language linkage. */
2837 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2838 else if (types_match)
2840 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2841 /* Don't clear out the arguments if we're just redeclaring a
2842 function. */
2843 if (DECL_ARGUMENTS (olddecl))
2844 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2847 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2848 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2850 /* Now preserve various other info from the definition. */
2851 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2852 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2853 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2854 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2856 /* Warn about conflicting visibility specifications. */
2857 if (DECL_VISIBILITY_SPECIFIED (olddecl)
2858 && DECL_VISIBILITY_SPECIFIED (newdecl)
2859 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2861 auto_diagnostic_group d;
2862 if (warning_at (newdecl_loc, OPT_Wattributes,
2863 "%qD: visibility attribute ignored because it "
2864 "conflicts with previous declaration", newdecl))
2865 inform (olddecl_loc,
2866 "previous declaration of %qD", olddecl);
2868 /* Choose the declaration which specified visibility. */
2869 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2871 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2872 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2874 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2875 so keep this behavior. */
2876 if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2878 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2879 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2881 /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED. */
2882 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2884 SET_DECL_ALIGN (newdecl, DECL_ALIGN (olddecl));
2885 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2887 else if (DECL_ALIGN (olddecl) == DECL_ALIGN (newdecl)
2888 && DECL_USER_ALIGN (olddecl) != DECL_USER_ALIGN (newdecl))
2889 DECL_USER_ALIGN (newdecl) = 1;
2891 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2892 if (DECL_WARN_IF_NOT_ALIGN (olddecl)
2893 > DECL_WARN_IF_NOT_ALIGN (newdecl))
2894 SET_DECL_WARN_IF_NOT_ALIGN (newdecl,
2895 DECL_WARN_IF_NOT_ALIGN (olddecl));
2896 if (TREE_CODE (newdecl) == FIELD_DECL)
2897 DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2899 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2900 with that from NEWDECL below. */
2901 if (DECL_LANG_SPECIFIC (olddecl))
2903 gcc_checking_assert (DECL_LANG_SPECIFIC (olddecl)
2904 != DECL_LANG_SPECIFIC (newdecl));
2905 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2908 /* Merge the USED information. */
2909 if (TREE_USED (olddecl))
2910 TREE_USED (newdecl) = 1;
2911 else if (TREE_USED (newdecl))
2912 TREE_USED (olddecl) = 1;
2914 if (VAR_P (newdecl))
2916 if (DECL_READ_P (olddecl))
2917 DECL_READ_P (newdecl) = 1;
2918 else if (DECL_READ_P (newdecl))
2919 DECL_READ_P (olddecl) = 1;
2922 if (DECL_PRESERVE_P (olddecl))
2923 DECL_PRESERVE_P (newdecl) = 1;
2924 else if (DECL_PRESERVE_P (newdecl))
2925 DECL_PRESERVE_P (olddecl) = 1;
2927 /* Merge the DECL_FUNCTION_VERSIONED information. newdecl will be copied
2928 to olddecl and deleted. */
2929 if (TREE_CODE (newdecl) == FUNCTION_DECL
2930 && DECL_FUNCTION_VERSIONED (olddecl))
2932 /* Set the flag for newdecl so that it gets copied to olddecl. */
2933 DECL_FUNCTION_VERSIONED (newdecl) = 1;
2934 /* newdecl will be purged after copying to olddecl and is no longer
2935 a version. */
2936 cgraph_node::delete_function_version_by_decl (newdecl);
2939 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2941 int function_size;
2942 struct symtab_node *snode = symtab_node::get (olddecl);
2944 function_size = sizeof (struct tree_decl_common);
2946 memcpy ((char *) olddecl + sizeof (struct tree_common),
2947 (char *) newdecl + sizeof (struct tree_common),
2948 function_size - sizeof (struct tree_common));
2950 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2951 (char *) newdecl + sizeof (struct tree_decl_common),
2952 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2954 /* Preserve symtab node mapping. */
2955 olddecl->decl_with_vis.symtab_node = snode;
2957 if (new_template_info)
2958 /* If newdecl is a template instantiation, it is possible that
2959 the following sequence of events has occurred:
2961 o A friend function was declared in a class template. The
2962 class template was instantiated.
2964 o The instantiation of the friend declaration was
2965 recorded on the instantiation list, and is newdecl.
2967 o Later, however, instantiate_class_template called pushdecl
2968 on the newdecl to perform name injection. But, pushdecl in
2969 turn called duplicate_decls when it discovered that another
2970 declaration of a global function with the same name already
2971 existed.
2973 o Here, in duplicate_decls, we decided to clobber newdecl.
2975 If we're going to do that, we'd better make sure that
2976 olddecl, and not newdecl, is on the list of
2977 instantiations so that if we try to do the instantiation
2978 again we won't get the clobbered declaration. */
2979 reregister_specialization (newdecl,
2980 new_template_info,
2981 olddecl);
2983 else
2985 size_t size = tree_code_size (TREE_CODE (newdecl));
2987 memcpy ((char *) olddecl + sizeof (struct tree_common),
2988 (char *) newdecl + sizeof (struct tree_common),
2989 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2991 switch (TREE_CODE (newdecl))
2993 case LABEL_DECL:
2994 case VAR_DECL:
2995 case RESULT_DECL:
2996 case PARM_DECL:
2997 case FIELD_DECL:
2998 case TYPE_DECL:
2999 case CONST_DECL:
3001 struct symtab_node *snode = NULL;
3003 if (VAR_P (newdecl)
3004 && (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl)
3005 || DECL_EXTERNAL (olddecl)))
3006 snode = symtab_node::get (olddecl);
3007 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
3008 (char *) newdecl + sizeof (struct tree_decl_common),
3009 size - sizeof (struct tree_decl_common)
3010 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
3011 if (VAR_P (newdecl))
3012 olddecl->decl_with_vis.symtab_node = snode;
3014 break;
3015 default:
3016 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
3017 (char *) newdecl + sizeof (struct tree_decl_common),
3018 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
3019 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
3020 break;
3024 if (VAR_OR_FUNCTION_DECL_P (newdecl))
3026 if (DECL_EXTERNAL (olddecl)
3027 || TREE_PUBLIC (olddecl)
3028 || TREE_STATIC (olddecl))
3030 /* Merge the section attribute.
3031 We want to issue an error if the sections conflict but that must be
3032 done later in decl_attributes since we are called before attributes
3033 are assigned. */
3034 if (DECL_SECTION_NAME (newdecl) != NULL)
3035 set_decl_section_name (olddecl, newdecl);
3037 if (DECL_ONE_ONLY (newdecl))
3039 struct symtab_node *oldsym, *newsym;
3040 if (TREE_CODE (olddecl) == FUNCTION_DECL)
3041 oldsym = cgraph_node::get_create (olddecl);
3042 else
3043 oldsym = varpool_node::get_create (olddecl);
3044 newsym = symtab_node::get (newdecl);
3045 oldsym->set_comdat_group (newsym->get_comdat_group ());
3049 if (VAR_P (newdecl)
3050 && CP_DECL_THREAD_LOCAL_P (newdecl))
3052 CP_DECL_THREAD_LOCAL_P (olddecl) = true;
3053 if (!processing_template_decl)
3054 set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl));
3058 DECL_UID (olddecl) = olddecl_uid;
3060 /* NEWDECL contains the merged attribute lists.
3061 Update OLDDECL to be the same. */
3062 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
3064 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
3065 so that encode_section_info has a chance to look at the new decl
3066 flags and attributes. */
3067 if (DECL_RTL_SET_P (olddecl)
3068 && (TREE_CODE (olddecl) == FUNCTION_DECL
3069 || (VAR_P (olddecl)
3070 && TREE_STATIC (olddecl))))
3071 make_decl_rtl (olddecl);
3073 /* The NEWDECL will no longer be needed. Because every out-of-class
3074 declaration of a member results in a call to duplicate_decls,
3075 freeing these nodes represents in a significant savings.
3077 Before releasing the node, be sore to remove function from symbol
3078 table that might have been inserted there to record comdat group.
3079 Be sure to however do not free DECL_STRUCT_FUNCTION because this
3080 structure is shared in between newdecl and oldecl. */
3081 if (TREE_CODE (newdecl) == FUNCTION_DECL)
3082 DECL_STRUCT_FUNCTION (newdecl) = NULL;
3083 if (VAR_OR_FUNCTION_DECL_P (newdecl))
3085 struct symtab_node *snode = symtab_node::get (newdecl);
3086 if (snode)
3087 snode->remove ();
3090 if (TREE_CODE (olddecl) == FUNCTION_DECL)
3092 tree clone;
3093 FOR_EACH_CLONE (clone, olddecl)
3095 DECL_ATTRIBUTES (clone) = DECL_ATTRIBUTES (olddecl);
3096 DECL_PRESERVE_P (clone) |= DECL_PRESERVE_P (olddecl);
3100 /* Remove the associated constraints for newdecl, if any, before
3101 reclaiming memory. */
3102 if (flag_concepts)
3103 remove_constraints (newdecl);
3105 ggc_free (newdecl);
3107 return olddecl;
3110 /* Return zero if the declaration NEWDECL is valid
3111 when the declaration OLDDECL (assumed to be for the same name)
3112 has already been seen.
3113 Otherwise return an error message format string with a %s
3114 where the identifier should go. */
3116 static const char *
3117 redeclaration_error_message (tree newdecl, tree olddecl)
3119 if (TREE_CODE (newdecl) == TYPE_DECL)
3121 /* Because C++ can put things into name space for free,
3122 constructs like "typedef struct foo { ... } foo"
3123 would look like an erroneous redeclaration. */
3124 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
3125 return NULL;
3126 else
3127 return G_("redefinition of %q#D");
3129 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
3131 /* If this is a pure function, its olddecl will actually be
3132 the original initialization to `0' (which we force to call
3133 abort()). Don't complain about redefinition in this case. */
3134 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
3135 && DECL_INITIAL (olddecl) == NULL_TREE)
3136 return NULL;
3138 /* If both functions come from different namespaces, this is not
3139 a redeclaration - this is a conflict with a used function. */
3140 if (DECL_NAMESPACE_SCOPE_P (olddecl)
3141 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
3142 && ! decls_match (olddecl, newdecl))
3143 return G_("%qD conflicts with used function");
3145 /* We'll complain about linkage mismatches in
3146 warn_extern_redeclared_static. */
3148 /* Defining the same name twice is no good. */
3149 if (decl_defined_p (olddecl)
3150 && decl_defined_p (newdecl))
3152 if (DECL_NAME (olddecl) == NULL_TREE)
3153 return G_("%q#D not declared in class");
3154 else if (!GNU_INLINE_P (olddecl)
3155 || GNU_INLINE_P (newdecl))
3156 return G_("redefinition of %q#D");
3159 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
3161 bool olda = GNU_INLINE_P (olddecl);
3162 bool newa = GNU_INLINE_P (newdecl);
3164 if (olda != newa)
3166 if (newa)
3167 return G_("%q+D redeclared inline with "
3168 "%<gnu_inline%> attribute");
3169 else
3170 return G_("%q+D redeclared inline without "
3171 "%<gnu_inline%> attribute");
3175 if (deduction_guide_p (olddecl)
3176 && deduction_guide_p (newdecl))
3177 return G_("deduction guide %q+D redeclared");
3179 /* [class.compare.default]: A definition of a comparison operator as
3180 defaulted that appears in a class shall be the first declaration of
3181 that function. */
3182 special_function_kind sfk = special_function_p (olddecl);
3183 if (sfk == sfk_comparison && DECL_DEFAULTED_FN (newdecl))
3184 return G_("comparison operator %q+D defaulted after "
3185 "its first declaration");
3187 check_abi_tag_redeclaration
3188 (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
3189 lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
3191 return NULL;
3193 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
3195 tree nt, ot;
3197 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == CONCEPT_DECL)
3198 return G_("redefinition of %q#D");
3200 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL)
3201 return redeclaration_error_message (DECL_TEMPLATE_RESULT (newdecl),
3202 DECL_TEMPLATE_RESULT (olddecl));
3204 if (DECL_TEMPLATE_RESULT (newdecl) == DECL_TEMPLATE_RESULT (olddecl))
3205 return NULL;
3207 nt = DECL_TEMPLATE_RESULT (newdecl);
3208 if (DECL_TEMPLATE_INFO (nt))
3209 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
3210 ot = DECL_TEMPLATE_RESULT (olddecl);
3211 if (DECL_TEMPLATE_INFO (ot))
3212 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
3213 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
3214 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
3215 return G_("redefinition of %q#D");
3217 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
3219 bool olda = GNU_INLINE_P (ot);
3220 bool newa = GNU_INLINE_P (nt);
3222 if (olda != newa)
3224 if (newa)
3225 return G_("%q+D redeclared inline with "
3226 "%<gnu_inline%> attribute");
3227 else
3228 return G_("%q+D redeclared inline without "
3229 "%<gnu_inline%> attribute");
3233 if (deduction_guide_p (olddecl)
3234 && deduction_guide_p (newdecl))
3235 return G_("deduction guide %q+D redeclared");
3237 /* Core issue #226 (C++11):
3239 If a friend function template declaration specifies a
3240 default template-argument, that declaration shall be a
3241 definition and shall be the only declaration of the
3242 function template in the translation unit. */
3243 if ((cxx_dialect != cxx98)
3244 && TREE_CODE (ot) == FUNCTION_DECL && DECL_UNIQUE_FRIEND_P (ot)
3245 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
3246 /*is_primary=*/true,
3247 /*is_partial=*/false,
3248 /*is_friend_decl=*/2))
3249 return G_("redeclaration of friend %q#D "
3250 "may not have default template arguments");
3252 return NULL;
3254 else if (VAR_P (newdecl)
3255 && (CP_DECL_THREAD_LOCAL_P (newdecl)
3256 != CP_DECL_THREAD_LOCAL_P (olddecl))
3257 && (! DECL_LANG_SPECIFIC (olddecl)
3258 || ! CP_DECL_THREADPRIVATE_P (olddecl)
3259 || CP_DECL_THREAD_LOCAL_P (newdecl)))
3261 /* Only variables can be thread-local, and all declarations must
3262 agree on this property. */
3263 if (CP_DECL_THREAD_LOCAL_P (newdecl))
3264 return G_("thread-local declaration of %q#D follows "
3265 "non-thread-local declaration");
3266 else
3267 return G_("non-thread-local declaration of %q#D follows "
3268 "thread-local declaration");
3270 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
3272 /* The objects have been declared at namespace scope. If either
3273 is a member of an anonymous union, then this is an invalid
3274 redeclaration. For example:
3276 int i;
3277 union { int i; };
3279 is invalid. */
3280 if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
3281 || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
3282 return G_("redeclaration of %q#D");
3283 /* If at least one declaration is a reference, there is no
3284 conflict. For example:
3286 int i = 3;
3287 extern int i;
3289 is valid. */
3290 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
3291 return NULL;
3293 /* Static data member declared outside a class definition
3294 if the variable is defined within the class with constexpr
3295 specifier is declaration rather than definition (and
3296 deprecated). */
3297 if (cxx_dialect >= cxx17
3298 && VAR_P (olddecl)
3299 && DECL_CLASS_SCOPE_P (olddecl)
3300 && DECL_DECLARED_CONSTEXPR_P (olddecl)
3301 && !DECL_INITIAL (newdecl))
3303 DECL_EXTERNAL (newdecl) = 1;
3304 /* For now, only warn with explicit -Wdeprecated. */
3305 if (OPTION_SET_P (warn_deprecated))
3307 auto_diagnostic_group d;
3308 if (warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wdeprecated,
3309 "redundant redeclaration of %<constexpr%> "
3310 "static data member %qD", newdecl))
3311 inform (DECL_SOURCE_LOCATION (olddecl),
3312 "previous declaration of %qD", olddecl);
3314 return NULL;
3317 /* Reject two definitions. */
3318 return G_("redefinition of %q#D");
3320 else
3322 /* Objects declared with block scope: */
3323 /* Reject two definitions, and reject a definition
3324 together with an external reference. */
3325 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
3326 return G_("redeclaration of %q#D");
3327 return NULL;
3332 /* Hash and equality functions for the named_label table. */
3334 hashval_t
3335 named_label_hash::hash (const value_type entry)
3337 return IDENTIFIER_HASH_VALUE (entry->name);
3340 bool
3341 named_label_hash::equal (const value_type entry, compare_type name)
3343 return name == entry->name;
3346 /* Look for a label named ID in the current function. If one cannot
3347 be found, create one. Return the named_label_entry, or NULL on
3348 failure. */
3350 static named_label_entry *
3351 lookup_label_1 (tree id, bool making_local_p)
3353 auto_cond_timevar tv (TV_NAME_LOOKUP);
3355 /* You can't use labels at global scope. */
3356 if (current_function_decl == NULL_TREE)
3358 error ("label %qE referenced outside of any function", id);
3359 return NULL;
3362 if (!named_labels)
3363 named_labels = hash_table<named_label_hash>::create_ggc (13);
3365 hashval_t hash = IDENTIFIER_HASH_VALUE (id);
3366 named_label_entry **slot
3367 = named_labels->find_slot_with_hash (id, hash, INSERT);
3368 named_label_entry *old = *slot;
3370 if (old && old->label_decl)
3372 if (!making_local_p)
3373 return old;
3375 if (old->binding_level == current_binding_level)
3377 error ("local label %qE conflicts with existing label", id);
3378 inform (DECL_SOURCE_LOCATION (old->label_decl), "previous label");
3379 return NULL;
3383 /* We are making a new decl, create or reuse the named_label_entry */
3384 named_label_entry *ent = NULL;
3385 if (old && !old->label_decl)
3386 ent = old;
3387 else
3389 ent = ggc_cleared_alloc<named_label_entry> ();
3390 ent->name = id;
3391 ent->outer = old;
3392 *slot = ent;
3395 /* Now create the LABEL_DECL. */
3396 tree decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
3398 DECL_CONTEXT (decl) = current_function_decl;
3399 SET_DECL_MODE (decl, VOIDmode);
3400 if (making_local_p)
3402 C_DECLARED_LABEL_FLAG (decl) = true;
3403 DECL_CHAIN (decl) = current_binding_level->names;
3404 current_binding_level->names = decl;
3407 ent->label_decl = decl;
3409 return ent;
3412 /* Wrapper for lookup_label_1. */
3414 tree
3415 lookup_label (tree id)
3417 named_label_entry *ent = lookup_label_1 (id, false);
3418 return ent ? ent->label_decl : NULL_TREE;
3421 tree
3422 declare_local_label (tree id)
3424 named_label_entry *ent = lookup_label_1 (id, true);
3425 return ent ? ent->label_decl : NULL_TREE;
3428 /* Returns nonzero if it is ill-formed to jump past the declaration of
3429 DECL. Returns 2 if it's also a real problem. */
3431 static int
3432 decl_jump_unsafe (tree decl)
3434 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
3435 with automatic storage duration is not in scope to a point where it is
3436 in scope is ill-formed unless the variable has scalar type, class type
3437 with a trivial default constructor and a trivial destructor, a
3438 cv-qualified version of one of these types, or an array of one of the
3439 preceding types and is declared without an initializer (8.5). */
3440 tree type = TREE_TYPE (decl);
3442 if (!VAR_P (decl) || TREE_STATIC (decl)
3443 || type == error_mark_node)
3444 return 0;
3446 if (DECL_NONTRIVIALLY_INITIALIZED_P (decl)
3447 || variably_modified_type_p (type, NULL_TREE))
3448 return 2;
3450 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3451 return 1;
3453 return 0;
3456 /* A subroutine of check_previous_goto_1 and check_goto to identify a branch
3457 to the user. */
3459 static bool
3460 identify_goto (tree decl, location_t loc, const location_t *locus,
3461 diagnostic_t diag_kind)
3463 bool complained
3464 = emit_diagnostic (diag_kind, loc, 0,
3465 decl ? N_("jump to label %qD")
3466 : N_("jump to case label"), decl);
3467 if (complained && locus)
3468 inform (*locus, " from here");
3469 return complained;
3472 /* Check that a single previously seen jump to a newly defined label
3473 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
3474 the jump context; NAMES are the names in scope in LEVEL at the jump
3475 context; LOCUS is the source position of the jump or 0. Returns
3476 true if all is well. */
3478 static bool
3479 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
3480 bool exited_omp, const location_t *locus)
3482 cp_binding_level *b;
3483 bool complained = false;
3484 int identified = 0;
3485 bool saw_eh = false, saw_omp = false, saw_tm = false, saw_cxif = false;
3486 bool saw_ceif = false;
3488 if (exited_omp)
3490 complained = identify_goto (decl, input_location, locus, DK_ERROR);
3491 if (complained)
3492 inform (input_location, " exits OpenMP structured block");
3493 saw_omp = true;
3494 identified = 2;
3497 for (b = current_binding_level; b ; b = b->level_chain)
3499 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
3501 for (new_decls = b->names; new_decls != old_decls;
3502 new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
3503 : TREE_CHAIN (new_decls)))
3505 int problem = decl_jump_unsafe (new_decls);
3506 if (! problem)
3507 continue;
3509 if (!identified)
3511 complained = identify_goto (decl, input_location, locus,
3512 problem > 1
3513 ? DK_ERROR : DK_PERMERROR);
3514 identified = 1;
3516 if (complained)
3518 if (problem > 1)
3519 inform (DECL_SOURCE_LOCATION (new_decls),
3520 " crosses initialization of %q#D", new_decls);
3521 else
3522 inform (DECL_SOURCE_LOCATION (new_decls),
3523 " enters scope of %q#D, which has "
3524 "non-trivial destructor", new_decls);
3528 if (b == level)
3529 break;
3531 const char *inf = NULL;
3532 location_t loc = input_location;
3533 switch (b->kind)
3535 case sk_try:
3536 if (!saw_eh)
3537 inf = G_(" enters %<try%> block");
3538 saw_eh = true;
3539 break;
3541 case sk_catch:
3542 if (!saw_eh)
3543 inf = G_(" enters %<catch%> block");
3544 saw_eh = true;
3545 break;
3547 case sk_omp:
3548 if (!saw_omp)
3549 inf = G_(" enters OpenMP structured block");
3550 saw_omp = true;
3551 break;
3553 case sk_transaction:
3554 if (!saw_tm)
3555 inf = G_(" enters synchronized or atomic statement");
3556 saw_tm = true;
3557 break;
3559 case sk_block:
3560 if (!saw_cxif && level_for_constexpr_if (b->level_chain))
3562 inf = G_(" enters %<constexpr if%> statement");
3563 loc = EXPR_LOCATION (b->level_chain->this_entity);
3564 saw_cxif = true;
3566 else if (!saw_ceif && level_for_consteval_if (b->level_chain))
3568 inf = G_(" enters %<consteval if%> statement");
3569 loc = EXPR_LOCATION (b->level_chain->this_entity);
3570 saw_ceif = true;
3572 break;
3574 default:
3575 break;
3578 if (inf)
3580 if (identified < 2)
3581 complained = identify_goto (decl, input_location, locus, DK_ERROR);
3582 identified = 2;
3583 if (complained)
3584 inform (loc, inf);
3588 return !identified;
3591 static void
3592 check_previous_goto (tree decl, struct named_label_use_entry *use)
3594 check_previous_goto_1 (decl, use->binding_level,
3595 use->names_in_scope, use->in_omp_scope,
3596 &use->o_goto_locus);
3599 static bool
3600 check_switch_goto (cp_binding_level* level)
3602 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
3605 /* Check that a new jump to a label DECL is OK. Called by
3606 finish_goto_stmt. */
3608 void
3609 check_goto (tree decl)
3611 /* We can't know where a computed goto is jumping.
3612 So we assume that it's OK. */
3613 if (TREE_CODE (decl) != LABEL_DECL)
3614 return;
3616 /* We didn't record any information about this label when we created it,
3617 and there's not much point since it's trivial to analyze as a return. */
3618 if (decl == cdtor_label)
3619 return;
3621 hashval_t hash = IDENTIFIER_HASH_VALUE (DECL_NAME (decl));
3622 named_label_entry **slot
3623 = named_labels->find_slot_with_hash (DECL_NAME (decl), hash, NO_INSERT);
3624 named_label_entry *ent = *slot;
3626 /* If the label hasn't been defined yet, defer checking. */
3627 if (! DECL_INITIAL (decl))
3629 /* Don't bother creating another use if the last goto had the
3630 same data, and will therefore create the same set of errors. */
3631 if (ent->uses
3632 && ent->uses->names_in_scope == current_binding_level->names)
3633 return;
3635 named_label_use_entry *new_use
3636 = ggc_alloc<named_label_use_entry> ();
3637 new_use->binding_level = current_binding_level;
3638 new_use->names_in_scope = current_binding_level->names;
3639 new_use->o_goto_locus = input_location;
3640 new_use->in_omp_scope = false;
3642 new_use->next = ent->uses;
3643 ent->uses = new_use;
3644 return;
3647 bool saw_catch = false, complained = false;
3648 int identified = 0;
3649 tree bad;
3650 unsigned ix;
3652 if (ent->in_try_scope || ent->in_catch_scope || ent->in_transaction_scope
3653 || ent->in_constexpr_if || ent->in_consteval_if
3654 || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
3656 diagnostic_t diag_kind = DK_PERMERROR;
3657 if (ent->in_try_scope || ent->in_catch_scope || ent->in_constexpr_if
3658 || ent->in_consteval_if || ent->in_transaction_scope
3659 || ent->in_omp_scope)
3660 diag_kind = DK_ERROR;
3661 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3662 &input_location, diag_kind);
3663 identified = 1 + (diag_kind == DK_ERROR);
3666 FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
3668 int u = decl_jump_unsafe (bad);
3670 if (u > 1 && DECL_ARTIFICIAL (bad))
3672 /* Can't skip init of __exception_info. */
3673 if (identified == 1)
3675 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3676 &input_location, DK_ERROR);
3677 identified = 2;
3679 if (complained)
3680 inform (DECL_SOURCE_LOCATION (bad), " enters %<catch%> block");
3681 saw_catch = true;
3683 else if (complained)
3685 if (u > 1)
3686 inform (DECL_SOURCE_LOCATION (bad),
3687 " skips initialization of %q#D", bad);
3688 else
3689 inform (DECL_SOURCE_LOCATION (bad),
3690 " enters scope of %q#D which has "
3691 "non-trivial destructor", bad);
3695 if (complained)
3697 if (ent->in_try_scope)
3698 inform (input_location, " enters %<try%> block");
3699 else if (ent->in_catch_scope && !saw_catch)
3700 inform (input_location, " enters %<catch%> block");
3701 else if (ent->in_transaction_scope)
3702 inform (input_location, " enters synchronized or atomic statement");
3703 else if (ent->in_constexpr_if)
3704 inform (input_location, " enters %<constexpr if%> statement");
3705 else if (ent->in_consteval_if)
3706 inform (input_location, " enters %<consteval if%> statement");
3709 if (ent->in_omp_scope)
3711 if (complained)
3712 inform (input_location, " enters OpenMP structured block");
3714 else if (flag_openmp)
3715 for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3717 if (b == ent->binding_level)
3718 break;
3719 if (b->kind == sk_omp)
3721 if (identified < 2)
3723 complained = identify_goto (decl,
3724 DECL_SOURCE_LOCATION (decl),
3725 &input_location, DK_ERROR);
3726 identified = 2;
3728 if (complained)
3729 inform (input_location, " exits OpenMP structured block");
3730 break;
3735 /* Check that a return is ok wrt OpenMP structured blocks.
3736 Called by finish_return_stmt. Returns true if all is well. */
3738 bool
3739 check_omp_return (void)
3741 for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3742 if (b->kind == sk_omp)
3744 error ("invalid exit from OpenMP structured block");
3745 return false;
3747 else if (b->kind == sk_function_parms)
3748 break;
3749 return true;
3752 /* Define a label, specifying the location in the source file.
3753 Return the LABEL_DECL node for the label. */
3755 tree
3756 define_label (location_t location, tree name)
3758 auto_cond_timevar tv (TV_NAME_LOOKUP);
3760 /* After labels, make any new cleanups in the function go into their
3761 own new (temporary) binding contour. */
3762 for (cp_binding_level *p = current_binding_level;
3763 p->kind != sk_function_parms;
3764 p = p->level_chain)
3765 p->more_cleanups_ok = 0;
3767 named_label_entry *ent = lookup_label_1 (name, false);
3768 tree decl = ent->label_decl;
3770 if (DECL_INITIAL (decl) != NULL_TREE)
3772 error ("duplicate label %qD", decl);
3773 return error_mark_node;
3775 else
3777 /* Mark label as having been defined. */
3778 DECL_INITIAL (decl) = error_mark_node;
3779 /* Say where in the source. */
3780 DECL_SOURCE_LOCATION (decl) = location;
3782 ent->binding_level = current_binding_level;
3783 ent->names_in_scope = current_binding_level->names;
3785 for (named_label_use_entry *use = ent->uses; use; use = use->next)
3786 check_previous_goto (decl, use);
3787 ent->uses = NULL;
3790 return decl;
3793 struct cp_switch
3795 cp_binding_level *level;
3796 struct cp_switch *next;
3797 /* The SWITCH_STMT being built. */
3798 tree switch_stmt;
3799 /* A splay-tree mapping the low element of a case range to the high
3800 element, or NULL_TREE if there is no high element. Used to
3801 determine whether or not a new case label duplicates an old case
3802 label. We need a tree, rather than simply a hash table, because
3803 of the GNU case range extension. */
3804 splay_tree cases;
3805 /* Remember whether a default: case label has been seen. */
3806 bool has_default_p;
3807 /* Remember whether a BREAK_STMT has been seen in this SWITCH_STMT. */
3808 bool break_stmt_seen_p;
3809 /* Set if inside of {FOR,DO,WHILE}_BODY nested inside of a switch,
3810 where BREAK_STMT doesn't belong to the SWITCH_STMT. */
3811 bool in_loop_body_p;
3814 /* A stack of the currently active switch statements. The innermost
3815 switch statement is on the top of the stack. There is no need to
3816 mark the stack for garbage collection because it is only active
3817 during the processing of the body of a function, and we never
3818 collect at that point. */
3820 static struct cp_switch *switch_stack;
3822 /* Called right after a switch-statement condition is parsed.
3823 SWITCH_STMT is the switch statement being parsed. */
3825 void
3826 push_switch (tree switch_stmt)
3828 struct cp_switch *p = XNEW (struct cp_switch);
3829 p->level = current_binding_level;
3830 p->next = switch_stack;
3831 p->switch_stmt = switch_stmt;
3832 p->cases = splay_tree_new (case_compare, NULL, NULL);
3833 p->has_default_p = false;
3834 p->break_stmt_seen_p = false;
3835 p->in_loop_body_p = false;
3836 switch_stack = p;
3839 void
3840 pop_switch (void)
3842 struct cp_switch *cs = switch_stack;
3844 /* Emit warnings as needed. */
3845 location_t switch_location = cp_expr_loc_or_input_loc (cs->switch_stmt);
3846 tree cond = SWITCH_STMT_COND (cs->switch_stmt);
3847 const bool bool_cond_p
3848 = (SWITCH_STMT_TYPE (cs->switch_stmt)
3849 && TREE_CODE (SWITCH_STMT_TYPE (cs->switch_stmt)) == BOOLEAN_TYPE);
3850 if (!processing_template_decl)
3851 c_do_switch_warnings (cs->cases, switch_location,
3852 SWITCH_STMT_TYPE (cs->switch_stmt), cond,
3853 bool_cond_p);
3855 /* For the benefit of block_may_fallthru remember if the switch body
3856 case labels cover all possible values and if there are break; stmts. */
3857 if (cs->has_default_p
3858 || (!processing_template_decl
3859 && c_switch_covers_all_cases_p (cs->cases,
3860 SWITCH_STMT_TYPE (cs->switch_stmt))))
3861 SWITCH_STMT_ALL_CASES_P (cs->switch_stmt) = 1;
3862 if (!cs->break_stmt_seen_p)
3863 SWITCH_STMT_NO_BREAK_P (cs->switch_stmt) = 1;
3864 /* Now that we're done with the switch warnings, set the switch type
3865 to the type of the condition if the index type was of scoped enum type.
3866 (Such types don't participate in the integer promotions.) We do this
3867 because of bit-fields whose declared type is a scoped enum type:
3868 gimplification will use the lowered index type, but convert the
3869 case values to SWITCH_STMT_TYPE, which would have been the declared type
3870 and verify_gimple_switch doesn't accept that. */
3871 if (is_bitfield_expr_with_lowered_type (cond))
3872 SWITCH_STMT_TYPE (cs->switch_stmt) = TREE_TYPE (cond);
3873 gcc_assert (!cs->in_loop_body_p);
3874 splay_tree_delete (cs->cases);
3875 switch_stack = switch_stack->next;
3876 free (cs);
3879 /* Note that a BREAK_STMT is about to be added. If it is inside of
3880 a SWITCH_STMT and not inside of a loop body inside of it, note
3881 in switch_stack we've seen a BREAK_STMT. */
3883 void
3884 note_break_stmt (void)
3886 if (switch_stack && !switch_stack->in_loop_body_p)
3887 switch_stack->break_stmt_seen_p = true;
3890 /* Note the start of processing of an iteration statement's body.
3891 The note_break_stmt function will do nothing while processing it.
3892 Return a flag that should be passed to note_iteration_stmt_body_end. */
3894 bool
3895 note_iteration_stmt_body_start (void)
3897 if (!switch_stack)
3898 return false;
3899 bool ret = switch_stack->in_loop_body_p;
3900 switch_stack->in_loop_body_p = true;
3901 return ret;
3904 /* Note the end of processing of an iteration statement's body. */
3906 void
3907 note_iteration_stmt_body_end (bool prev)
3909 if (switch_stack)
3910 switch_stack->in_loop_body_p = prev;
3913 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3914 condition. Note that if TYPE and VALUE are already integral we don't
3915 really do the conversion because the language-independent
3916 warning/optimization code will work better that way. */
3918 static tree
3919 case_conversion (tree type, tree value)
3921 if (value == NULL_TREE)
3922 return value;
3924 value = mark_rvalue_use (value);
3926 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3927 type = type_promotes_to (type);
3929 tree ovalue = value;
3930 /* The constant-expression VALUE shall be a converted constant expression
3931 of the adjusted type of the switch condition, which doesn't allow
3932 narrowing conversions. */
3933 value = build_converted_constant_expr (type, value, tf_warning_or_error);
3935 if (cxx_dialect >= cxx11
3936 && (SCOPED_ENUM_P (type)
3937 || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ovalue))))
3938 /* Use the converted value. */;
3939 else
3940 /* The already integral case. */
3941 value = ovalue;
3943 return cxx_constant_value (value);
3946 /* Note that we've seen a definition of a case label, and complain if this
3947 is a bad place for one. */
3949 tree
3950 finish_case_label (location_t loc, tree low_value, tree high_value)
3952 tree cond, r;
3953 cp_binding_level *p;
3954 tree type;
3956 if (low_value == NULL_TREE && high_value == NULL_TREE)
3957 switch_stack->has_default_p = true;
3959 if (processing_template_decl)
3961 tree label;
3963 /* For templates, just add the case label; we'll do semantic
3964 analysis at instantiation-time. */
3965 label = build_decl (loc, LABEL_DECL, NULL_TREE, void_type_node);
3966 return add_stmt (build_case_label (low_value, high_value, label));
3969 /* Find the condition on which this switch statement depends. */
3970 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3971 if (cond && TREE_CODE (cond) == TREE_LIST)
3972 cond = TREE_VALUE (cond);
3974 if (!check_switch_goto (switch_stack->level))
3975 return error_mark_node;
3977 type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3978 if (type == error_mark_node)
3979 return error_mark_node;
3981 low_value = case_conversion (type, low_value);
3982 high_value = case_conversion (type, high_value);
3984 r = c_add_case_label (loc, switch_stack->cases, cond, low_value, high_value);
3986 /* After labels, make any new cleanups in the function go into their
3987 own new (temporary) binding contour. */
3988 for (p = current_binding_level;
3989 p->kind != sk_function_parms;
3990 p = p->level_chain)
3991 p->more_cleanups_ok = 0;
3993 return r;
3996 struct typename_info {
3997 tree scope;
3998 tree name;
3999 tree template_id;
4000 bool enum_p;
4001 bool class_p;
4004 struct typename_hasher : ggc_ptr_hash<tree_node>
4006 typedef typename_info *compare_type;
4008 /* Hash a TYPENAME_TYPE. */
4010 static hashval_t
4011 hash (tree t)
4013 hashval_t hash;
4015 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
4016 ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
4018 return hash;
4021 /* Compare two TYPENAME_TYPEs. */
4023 static bool
4024 equal (tree t1, const typename_info *t2)
4026 return (TYPE_IDENTIFIER (t1) == t2->name
4027 && TYPE_CONTEXT (t1) == t2->scope
4028 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
4029 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
4030 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
4034 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
4035 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
4037 Returns the new TYPENAME_TYPE. */
4039 static GTY (()) hash_table<typename_hasher> *typename_htab;
4041 tree
4042 build_typename_type (tree context, tree name, tree fullname,
4043 enum tag_types tag_type)
4045 typename_info ti;
4047 if (typename_htab == NULL)
4048 typename_htab = hash_table<typename_hasher>::create_ggc (61);
4050 ti.scope = FROB_CONTEXT (context);
4051 ti.name = name;
4052 ti.template_id = fullname;
4053 ti.enum_p = tag_type == enum_type;
4054 ti.class_p = (tag_type == class_type
4055 || tag_type == record_type
4056 || tag_type == union_type);
4057 hashval_t hash = (htab_hash_pointer (ti.scope)
4058 ^ htab_hash_pointer (ti.name));
4060 /* See if we already have this type. */
4061 tree *e = typename_htab->find_slot_with_hash (&ti, hash, INSERT);
4062 tree t = *e;
4063 if (*e)
4064 t = *e;
4065 else
4067 /* Build the TYPENAME_TYPE. */
4068 t = cxx_make_type (TYPENAME_TYPE);
4069 TYPE_CONTEXT (t) = ti.scope;
4070 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
4071 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
4072 TYPENAME_IS_CLASS_P (t) = ti.class_p;
4074 /* Build the corresponding TYPE_DECL. */
4075 tree d = build_decl (input_location, TYPE_DECL, name, t);
4076 TYPE_NAME (t) = d;
4077 TYPE_STUB_DECL (t) = d;
4078 DECL_CONTEXT (d) = ti.scope;
4079 DECL_ARTIFICIAL (d) = 1;
4081 /* Store it in the hash table. */
4082 *e = t;
4084 /* TYPENAME_TYPEs must always be compared structurally, because
4085 they may or may not resolve down to another type depending on
4086 the currently open classes. */
4087 SET_TYPE_STRUCTURAL_EQUALITY (t);
4090 return t;
4093 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
4094 provided to name the type. Returns an appropriate type, unless an
4095 error occurs, in which case error_mark_node is returned. If we
4096 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
4097 return that, rather than the _TYPE it corresponds to, in other
4098 cases we look through the type decl. If TF_ERROR is set, complain
4099 about errors, otherwise be quiet. */
4101 tree
4102 make_typename_type (tree context, tree name, enum tag_types tag_type,
4103 tsubst_flags_t complain)
4105 tree fullname;
4106 tree t;
4107 bool want_template;
4109 if (name == error_mark_node
4110 || context == NULL_TREE
4111 || context == error_mark_node)
4112 return error_mark_node;
4114 if (TYPE_P (name))
4116 if (!(TYPE_LANG_SPECIFIC (name)
4117 && (CLASSTYPE_IS_TEMPLATE (name)
4118 || CLASSTYPE_USE_TEMPLATE (name))))
4119 name = TYPE_IDENTIFIER (name);
4120 else
4121 /* Create a TEMPLATE_ID_EXPR for the type. */
4122 name = build_nt (TEMPLATE_ID_EXPR,
4123 CLASSTYPE_TI_TEMPLATE (name),
4124 CLASSTYPE_TI_ARGS (name));
4126 else if (TREE_CODE (name) == TYPE_DECL)
4127 name = DECL_NAME (name);
4129 fullname = name;
4131 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
4133 name = TREE_OPERAND (name, 0);
4134 if (DECL_TYPE_TEMPLATE_P (name))
4135 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
4136 if (TREE_CODE (name) != IDENTIFIER_NODE)
4138 if (complain & tf_error)
4139 error ("%qD is not a type", name);
4140 return error_mark_node;
4143 if (TREE_CODE (name) == TEMPLATE_DECL)
4145 if (complain & tf_error)
4146 error ("%qD used without template arguments", name);
4147 return error_mark_node;
4149 else if (is_overloaded_fn (name))
4151 if (complain & tf_error)
4152 error ("%qD is a function, not a type", name);
4153 return error_mark_node;
4155 gcc_assert (identifier_p (name));
4156 gcc_assert (TYPE_P (context));
4158 if (TREE_CODE (context) == TYPE_PACK_EXPANSION)
4159 /* This can happen for C++17 variadic using (c++/88986). */;
4160 else if (!MAYBE_CLASS_TYPE_P (context))
4162 if (complain & tf_error)
4163 error ("%q#T is not a class", context);
4164 return error_mark_node;
4167 /* When the CONTEXT is a dependent type, NAME could refer to a
4168 dependent base class of CONTEXT. But look inside it anyway
4169 if CONTEXT is a currently open scope, in case it refers to a
4170 member of the current instantiation or a non-dependent base;
4171 lookup will stop when we hit a dependent base. */
4172 if (!dependent_scope_p (context))
4173 /* We should only set WANT_TYPE when we're a nested typename type.
4174 Then we can give better diagnostics if we find a non-type. */
4175 t = lookup_field (context, name, 2, /*want_type=*/true);
4176 else
4177 t = NULL_TREE;
4179 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
4180 return build_typename_type (context, name, fullname, tag_type);
4182 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
4184 if (!t)
4186 if (complain & tf_error)
4188 if (!COMPLETE_TYPE_P (context))
4189 cxx_incomplete_type_error (NULL_TREE, context);
4190 else
4191 error (want_template ? G_("no class template named %q#T in %q#T")
4192 : G_("no type named %q#T in %q#T"), name, context);
4194 return error_mark_node;
4197 /* Pull out the template from an injected-class-name (or multiple). */
4198 if (want_template)
4199 t = maybe_get_template_decl_from_type_decl (t);
4201 if (TREE_CODE (t) == TREE_LIST)
4203 if (complain & tf_error)
4205 error ("lookup of %qT in %qT is ambiguous", name, context);
4206 print_candidates (t);
4208 return error_mark_node;
4211 if (want_template && !DECL_TYPE_TEMPLATE_P (t))
4213 if (complain & tf_error)
4214 error ("%<typename %T::%D%> names %q#T, which is not a class template",
4215 context, name, t);
4216 return error_mark_node;
4218 if (!want_template && TREE_CODE (t) != TYPE_DECL)
4220 if ((complain & tf_tst_ok) && cxx_dialect >= cxx17
4221 && DECL_TYPE_TEMPLATE_P (t))
4222 /* The caller permits this typename-specifier to name a template
4223 (because it appears in a CTAD-enabled context). */;
4224 else
4226 if (complain & tf_error)
4227 error ("%<typename %T::%D%> names %q#T, which is not a type",
4228 context, name, t);
4229 return error_mark_node;
4233 if (!check_accessibility_of_qualified_id (t, /*object_type=*/NULL_TREE,
4234 context, complain))
4235 return error_mark_node;
4237 if (!want_template && DECL_TYPE_TEMPLATE_P (t))
4238 return make_template_placeholder (t);
4240 if (want_template)
4242 t = lookup_template_class (t, TREE_OPERAND (fullname, 1),
4243 NULL_TREE, context,
4244 /*entering_scope=*/0,
4245 complain | tf_user);
4246 if (t == error_mark_node)
4247 return error_mark_node;
4248 t = TYPE_NAME (t);
4251 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
4252 t = TREE_TYPE (t);
4254 maybe_record_typedef_use (t);
4256 return t;
4259 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
4260 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
4261 in which case error_mark_node is returned.
4263 If PARM_LIST is non-NULL, also make sure that the template parameter
4264 list of TEMPLATE_DECL matches.
4266 If COMPLAIN zero, don't complain about any errors that occur. */
4268 tree
4269 make_unbound_class_template (tree context, tree name, tree parm_list,
4270 tsubst_flags_t complain)
4272 if (TYPE_P (name))
4273 name = TYPE_IDENTIFIER (name);
4274 else if (DECL_P (name))
4275 name = DECL_NAME (name);
4276 gcc_assert (identifier_p (name));
4278 if (!dependent_type_p (context)
4279 || currently_open_class (context))
4281 tree tmpl = NULL_TREE;
4283 if (MAYBE_CLASS_TYPE_P (context))
4284 tmpl = lookup_field (context, name, 0, false);
4286 if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
4287 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
4289 if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
4291 if (complain & tf_error)
4292 error ("no class template named %q#T in %q#T", name, context);
4293 return error_mark_node;
4296 if (parm_list
4297 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
4299 if (complain & tf_error)
4301 error ("template parameters do not match template %qD", tmpl);
4302 inform (DECL_SOURCE_LOCATION (tmpl),
4303 "%qD declared here", tmpl);
4305 return error_mark_node;
4308 if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
4309 complain))
4310 return error_mark_node;
4312 return tmpl;
4315 return make_unbound_class_template_raw (context, name, parm_list);
4318 /* Build an UNBOUND_CLASS_TEMPLATE. */
4320 tree
4321 make_unbound_class_template_raw (tree context, tree name, tree parm_list)
4323 /* Build the UNBOUND_CLASS_TEMPLATE. */
4324 tree t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
4325 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
4326 TREE_TYPE (t) = NULL_TREE;
4327 SET_TYPE_STRUCTURAL_EQUALITY (t);
4329 /* Build the corresponding TEMPLATE_DECL. */
4330 tree d = build_decl (input_location, TEMPLATE_DECL, name, t);
4331 TYPE_NAME (t) = d;
4332 TYPE_STUB_DECL (t) = d;
4333 DECL_CONTEXT (d) = TYPE_CONTEXT (t);
4334 DECL_ARTIFICIAL (d) = 1;
4335 DECL_TEMPLATE_PARMS (d) = parm_list;
4337 return t;
4342 /* Push the declarations of builtin types into the global namespace.
4343 RID_INDEX is the index of the builtin type in the array
4344 RID_POINTERS. NAME is the name used when looking up the builtin
4345 type. TYPE is the _TYPE node for the builtin type.
4347 The calls to set_global_binding below should be
4348 eliminated. Built-in types should not be looked up name; their
4349 names are keywords that the parser can recognize. However, there
4350 is code in c-common.cc that uses identifier_global_value to look up
4351 built-in types by name. */
4353 void
4354 record_builtin_type (enum rid rid_index,
4355 const char* name,
4356 tree type)
4358 tree decl = NULL_TREE;
4360 if (name)
4362 tree tname = get_identifier (name);
4363 tree tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
4364 DECL_ARTIFICIAL (tdecl) = 1;
4365 set_global_binding (tdecl);
4366 decl = tdecl;
4369 if ((int) rid_index < (int) RID_MAX)
4370 if (tree rname = ridpointers[(int) rid_index])
4371 if (!decl || DECL_NAME (decl) != rname)
4373 tree rdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
4374 DECL_ARTIFICIAL (rdecl) = 1;
4375 set_global_binding (rdecl);
4376 if (!decl)
4377 decl = rdecl;
4380 if (decl)
4382 if (!TYPE_NAME (type))
4383 TYPE_NAME (type) = decl;
4384 debug_hooks->type_decl (decl, 0);
4388 /* Push a type into the namespace so that the back ends ignore it. */
4390 static void
4391 record_unknown_type (tree type, const char* name)
4393 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
4394 TYPE_DECL, get_identifier (name), type));
4395 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
4396 DECL_IGNORED_P (decl) = 1;
4397 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
4398 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
4399 SET_TYPE_ALIGN (type, 1);
4400 TYPE_USER_ALIGN (type) = 0;
4401 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
4404 /* Create all the predefined identifiers. */
4406 static void
4407 initialize_predefined_identifiers (void)
4409 struct predefined_identifier
4411 const char *name; /* Name. */
4412 tree *node; /* Node to store it in. */
4413 cp_identifier_kind kind; /* Kind of identifier. */
4416 /* A table of identifiers to create at startup. */
4417 static const predefined_identifier predefined_identifiers[] = {
4418 {"C++", &lang_name_cplusplus, cik_normal},
4419 {"C", &lang_name_c, cik_normal},
4420 /* Some of these names have a trailing space so that it is
4421 impossible for them to conflict with names written by users. */
4422 {"__ct ", &ctor_identifier, cik_ctor},
4423 {"__ct_base ", &base_ctor_identifier, cik_ctor},
4424 {"__ct_comp ", &complete_ctor_identifier, cik_ctor},
4425 {"__dt ", &dtor_identifier, cik_dtor},
4426 {"__dt_base ", &base_dtor_identifier, cik_dtor},
4427 {"__dt_comp ", &complete_dtor_identifier, cik_dtor},
4428 {"__dt_del ", &deleting_dtor_identifier, cik_dtor},
4429 {"__conv_op ", &conv_op_identifier, cik_conv_op},
4430 {"__in_chrg", &in_charge_identifier, cik_normal},
4431 {"__as_base ", &as_base_identifier, cik_normal},
4432 {"this", &this_identifier, cik_normal},
4433 {"__delta", &delta_identifier, cik_normal},
4434 {"__pfn", &pfn_identifier, cik_normal},
4435 {"_vptr", &vptr_identifier, cik_normal},
4436 {"__vtt_parm", &vtt_parm_identifier, cik_normal},
4437 {"::", &global_identifier, cik_normal},
4438 /* The demangler expects anonymous namespaces to be called
4439 something starting with '_GLOBAL__N_'. It no longer needs
4440 to be unique to the TU. */
4441 {"_GLOBAL__N_1", &anon_identifier, cik_normal},
4442 {"auto", &auto_identifier, cik_normal},
4443 {"decltype(auto)", &decltype_auto_identifier, cik_normal},
4444 {"initializer_list", &init_list_identifier, cik_normal},
4445 {"__for_range ", &for_range__identifier, cik_normal},
4446 {"__for_begin ", &for_begin__identifier, cik_normal},
4447 {"__for_end ", &for_end__identifier, cik_normal},
4448 {"__for_range", &for_range_identifier, cik_normal},
4449 {"__for_begin", &for_begin_identifier, cik_normal},
4450 {"__for_end", &for_end_identifier, cik_normal},
4451 {"abi_tag", &abi_tag_identifier, cik_normal},
4452 {"aligned", &aligned_identifier, cik_normal},
4453 {"begin", &begin_identifier, cik_normal},
4454 {"end", &end_identifier, cik_normal},
4455 {"get", &get__identifier, cik_normal},
4456 {"gnu", &gnu_identifier, cik_normal},
4457 {"tuple_element", &tuple_element_identifier, cik_normal},
4458 {"tuple_size", &tuple_size_identifier, cik_normal},
4459 {"type", &type_identifier, cik_normal},
4460 {"value", &value_identifier, cik_normal},
4461 {"_FUN", &fun_identifier, cik_normal},
4462 {"__closure", &closure_identifier, cik_normal},
4463 {"heap uninit", &heap_uninit_identifier, cik_normal},
4464 {"heap ", &heap_identifier, cik_normal},
4465 {"heap deleted", &heap_deleted_identifier, cik_normal},
4466 {"heap [] uninit", &heap_vec_uninit_identifier, cik_normal},
4467 {"heap []", &heap_vec_identifier, cik_normal},
4468 {"omp", &omp_identifier, cik_normal},
4469 {NULL, NULL, cik_normal}
4472 for (const predefined_identifier *pid = predefined_identifiers;
4473 pid->name; ++pid)
4475 *pid->node = get_identifier (pid->name);
4476 /* Some of these identifiers already have a special kind. */
4477 if (pid->kind != cik_normal)
4478 set_identifier_kind (*pid->node, pid->kind);
4482 /* Create the predefined scalar types of C,
4483 and some nodes representing standard constants (0, 1, (void *)0).
4484 Initialize the global binding level.
4485 Make definitions for built-in primitive functions. */
4487 void
4488 cxx_init_decl_processing (void)
4490 tree void_ftype;
4491 tree void_ftype_ptr;
4493 /* Create all the identifiers we need. */
4494 initialize_predefined_identifiers ();
4496 /* Create the global variables. */
4497 push_to_top_level ();
4499 current_function_decl = NULL_TREE;
4500 current_binding_level = NULL;
4501 /* Enter the global namespace. */
4502 gcc_assert (global_namespace == NULL_TREE);
4503 global_namespace = build_lang_decl (NAMESPACE_DECL, global_identifier,
4504 void_type_node);
4505 TREE_PUBLIC (global_namespace) = true;
4506 DECL_MODULE_EXPORT_P (global_namespace) = true;
4507 DECL_CONTEXT (global_namespace)
4508 = build_translation_unit_decl (get_identifier (main_input_filename));
4509 /* Remember whether we want the empty class passing ABI change warning
4510 in this TU. */
4511 TRANSLATION_UNIT_WARN_EMPTY_P (DECL_CONTEXT (global_namespace))
4512 = warn_abi && abi_version_crosses (12);
4513 debug_hooks->register_main_translation_unit
4514 (DECL_CONTEXT (global_namespace));
4515 begin_scope (sk_namespace, global_namespace);
4516 current_namespace = global_namespace;
4518 if (flag_visibility_ms_compat)
4519 default_visibility = VISIBILITY_HIDDEN;
4521 /* Initially, C. */
4522 current_lang_name = lang_name_c;
4524 /* Create the `std' namespace. */
4525 push_namespace (get_identifier ("std"));
4526 std_node = current_namespace;
4527 pop_namespace ();
4529 flag_noexcept_type = (cxx_dialect >= cxx17);
4531 c_common_nodes_and_builtins ();
4533 tree bool_ftype = build_function_type_list (boolean_type_node, NULL_TREE);
4534 tree decl
4535 = add_builtin_function ("__builtin_is_constant_evaluated",
4536 bool_ftype, CP_BUILT_IN_IS_CONSTANT_EVALUATED,
4537 BUILT_IN_FRONTEND, NULL, NULL_TREE);
4538 set_call_expr_flags (decl, ECF_CONST | ECF_NOTHROW | ECF_LEAF);
4540 tree cptr_ftype = build_function_type_list (const_ptr_type_node, NULL_TREE);
4541 decl = add_builtin_function ("__builtin_source_location",
4542 cptr_ftype, CP_BUILT_IN_SOURCE_LOCATION,
4543 BUILT_IN_FRONTEND, NULL, NULL_TREE);
4544 set_call_expr_flags (decl, ECF_CONST | ECF_NOTHROW | ECF_LEAF);
4546 tree bool_vaftype = build_varargs_function_type_list (boolean_type_node,
4547 NULL_TREE);
4548 decl
4549 = add_builtin_function ("__builtin_is_corresponding_member",
4550 bool_vaftype,
4551 CP_BUILT_IN_IS_CORRESPONDING_MEMBER,
4552 BUILT_IN_FRONTEND, NULL, NULL_TREE);
4553 set_call_expr_flags (decl, ECF_CONST | ECF_NOTHROW | ECF_LEAF);
4555 decl
4556 = add_builtin_function ("__builtin_is_pointer_interconvertible_with_class",
4557 bool_vaftype,
4558 CP_BUILT_IN_IS_POINTER_INTERCONVERTIBLE_WITH_CLASS,
4559 BUILT_IN_FRONTEND, NULL, NULL_TREE);
4560 set_call_expr_flags (decl, ECF_CONST | ECF_NOTHROW | ECF_LEAF);
4562 integer_two_node = build_int_cst (NULL_TREE, 2);
4564 /* Guess at the initial static decls size. */
4565 vec_alloc (static_decls, 500);
4567 /* ... and keyed classes. */
4568 vec_alloc (keyed_classes, 100);
4570 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
4571 truthvalue_type_node = boolean_type_node;
4572 truthvalue_false_node = boolean_false_node;
4573 truthvalue_true_node = boolean_true_node;
4575 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
4576 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
4577 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
4578 noexcept_deferred_spec = build_tree_list (make_node (DEFERRED_NOEXCEPT),
4579 NULL_TREE);
4581 #if 0
4582 record_builtin_type (RID_MAX, NULL, string_type_node);
4583 #endif
4585 delta_type_node = ptrdiff_type_node;
4586 vtable_index_type = ptrdiff_type_node;
4588 vtt_parm_type = build_pointer_type (const_ptr_type_node);
4589 void_ftype = build_function_type_list (void_type_node, NULL_TREE);
4590 void_ftype_ptr = build_function_type_list (void_type_node,
4591 ptr_type_node, NULL_TREE);
4592 void_ftype_ptr
4593 = build_exception_variant (void_ftype_ptr, empty_except_spec);
4595 /* Create the conversion operator marker. This operator's DECL_NAME
4596 is in the identifier table, so we can use identifier equality to
4597 find it. */
4598 conv_op_marker = build_lang_decl (FUNCTION_DECL, conv_op_identifier,
4599 void_ftype);
4601 /* C++ extensions */
4603 unknown_type_node = make_node (LANG_TYPE);
4604 record_unknown_type (unknown_type_node, "unknown type");
4606 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
4607 TREE_TYPE (unknown_type_node) = unknown_type_node;
4609 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
4610 result. */
4611 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
4612 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
4614 init_list_type_node = make_node (LANG_TYPE);
4615 record_unknown_type (init_list_type_node, "init list");
4617 /* Used when parsing to distinguish parameter-lists () and (void). */
4618 explicit_void_list_node = build_void_list_node ();
4621 /* Make sure we get a unique function type, so we can give
4622 its pointer type a name. (This wins for gdb.) */
4623 tree vfunc_type = make_node (FUNCTION_TYPE);
4624 TREE_TYPE (vfunc_type) = integer_type_node;
4625 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
4626 layout_type (vfunc_type);
4628 vtable_entry_type = build_pointer_type (vfunc_type);
4630 record_builtin_type (RID_MAX, "__vtbl_ptr_type", vtable_entry_type);
4632 vtbl_type_node
4633 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
4634 layout_type (vtbl_type_node);
4635 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
4636 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
4637 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
4638 layout_type (vtbl_ptr_type_node);
4639 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
4641 push_namespace (get_identifier ("__cxxabiv1"));
4642 abi_node = current_namespace;
4643 pop_namespace ();
4645 any_targ_node = make_node (LANG_TYPE);
4646 record_unknown_type (any_targ_node, "any type");
4648 /* Now, C++. */
4649 current_lang_name = lang_name_cplusplus;
4651 if (aligned_new_threshold > 1
4652 && !pow2p_hwi (aligned_new_threshold))
4654 error ("%<-faligned-new=%d%> is not a power of two",
4655 aligned_new_threshold);
4656 aligned_new_threshold = 1;
4658 if (aligned_new_threshold == -1)
4659 aligned_new_threshold = (cxx_dialect >= cxx17) ? 1 : 0;
4660 if (aligned_new_threshold == 1)
4661 aligned_new_threshold = malloc_alignment () / BITS_PER_UNIT;
4664 tree newattrs, extvisattr;
4665 tree newtype, deltype;
4666 tree ptr_ftype_sizetype;
4667 tree new_eh_spec;
4669 ptr_ftype_sizetype
4670 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
4671 if (cxx_dialect == cxx98)
4673 tree bad_alloc_id;
4674 tree bad_alloc_type_node;
4675 tree bad_alloc_decl;
4677 push_nested_namespace (std_node);
4678 bad_alloc_id = get_identifier ("bad_alloc");
4679 bad_alloc_type_node = make_class_type (RECORD_TYPE);
4680 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
4681 bad_alloc_decl
4682 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
4683 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
4684 pop_nested_namespace (std_node);
4686 new_eh_spec
4687 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
4689 else
4690 new_eh_spec = noexcept_false_spec;
4692 /* Ensure attribs.cc is initialized. */
4693 init_attributes ();
4695 extvisattr = build_tree_list (get_identifier ("externally_visible"),
4696 NULL_TREE);
4697 newattrs = tree_cons (get_identifier ("alloc_size"),
4698 build_tree_list (NULL_TREE, integer_one_node),
4699 extvisattr);
4700 newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
4701 newtype = build_exception_variant (newtype, new_eh_spec);
4702 deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
4703 deltype = build_exception_variant (deltype, empty_except_spec);
4704 tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4705 DECL_IS_MALLOC (opnew) = 1;
4706 DECL_SET_IS_OPERATOR_NEW (opnew, true);
4707 DECL_IS_REPLACEABLE_OPERATOR (opnew) = 1;
4708 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4709 DECL_IS_MALLOC (opnew) = 1;
4710 DECL_SET_IS_OPERATOR_NEW (opnew, true);
4711 DECL_IS_REPLACEABLE_OPERATOR (opnew) = 1;
4712 tree opdel = push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4713 DECL_SET_IS_OPERATOR_DELETE (opdel, true);
4714 DECL_IS_REPLACEABLE_OPERATOR (opdel) = 1;
4715 opdel = push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4716 DECL_SET_IS_OPERATOR_DELETE (opdel, true);
4717 DECL_IS_REPLACEABLE_OPERATOR (opdel) = 1;
4718 if (flag_sized_deallocation)
4720 /* Also push the sized deallocation variants:
4721 void operator delete(void*, std::size_t) throw();
4722 void operator delete[](void*, std::size_t) throw(); */
4723 tree void_ftype_ptr_size
4724 = build_function_type_list (void_type_node, ptr_type_node,
4725 size_type_node, NULL_TREE);
4726 deltype = cp_build_type_attribute_variant (void_ftype_ptr_size,
4727 extvisattr);
4728 deltype = build_exception_variant (deltype, empty_except_spec);
4729 opdel = push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4730 DECL_SET_IS_OPERATOR_DELETE (opdel, true);
4731 DECL_IS_REPLACEABLE_OPERATOR (opdel) = 1;
4732 opdel = push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4733 DECL_SET_IS_OPERATOR_DELETE (opdel, true);
4734 DECL_IS_REPLACEABLE_OPERATOR (opdel) = 1;
4737 if (aligned_new_threshold)
4739 push_nested_namespace (std_node);
4740 tree align_id = get_identifier ("align_val_t");
4741 align_type_node = start_enum (align_id, NULL_TREE, size_type_node,
4742 NULL_TREE, /*scoped*/true, NULL);
4743 pop_nested_namespace (std_node);
4745 /* operator new (size_t, align_val_t); */
4746 newtype = build_function_type_list (ptr_type_node, size_type_node,
4747 align_type_node, NULL_TREE);
4748 newtype = cp_build_type_attribute_variant (newtype, newattrs);
4749 newtype = build_exception_variant (newtype, new_eh_spec);
4750 opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4751 DECL_IS_MALLOC (opnew) = 1;
4752 DECL_SET_IS_OPERATOR_NEW (opnew, true);
4753 DECL_IS_REPLACEABLE_OPERATOR (opnew) = 1;
4754 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4755 DECL_IS_MALLOC (opnew) = 1;
4756 DECL_SET_IS_OPERATOR_NEW (opnew, true);
4757 DECL_IS_REPLACEABLE_OPERATOR (opnew) = 1;
4759 /* operator delete (void *, align_val_t); */
4760 deltype = build_function_type_list (void_type_node, ptr_type_node,
4761 align_type_node, NULL_TREE);
4762 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4763 deltype = build_exception_variant (deltype, empty_except_spec);
4764 opdel = push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4765 DECL_SET_IS_OPERATOR_DELETE (opdel, true);
4766 DECL_IS_REPLACEABLE_OPERATOR (opdel) = 1;
4767 opdel = push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4768 DECL_SET_IS_OPERATOR_DELETE (opdel, true);
4769 DECL_IS_REPLACEABLE_OPERATOR (opdel) = 1;
4771 if (flag_sized_deallocation)
4773 /* operator delete (void *, size_t, align_val_t); */
4774 deltype = build_function_type_list (void_type_node, ptr_type_node,
4775 size_type_node, align_type_node,
4776 NULL_TREE);
4777 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4778 deltype = build_exception_variant (deltype, empty_except_spec);
4779 opdel = push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4780 DECL_SET_IS_OPERATOR_DELETE (opdel, true);
4781 DECL_IS_REPLACEABLE_OPERATOR (opdel) = 1;
4782 opdel = push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4783 DECL_SET_IS_OPERATOR_DELETE (opdel, true);
4784 DECL_IS_REPLACEABLE_OPERATOR (opdel) = 1;
4788 nullptr_type_node = make_node (NULLPTR_TYPE);
4789 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
4790 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
4791 TYPE_UNSIGNED (nullptr_type_node) = 1;
4792 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
4793 if (abi_version_at_least (9))
4794 SET_TYPE_ALIGN (nullptr_type_node, GET_MODE_ALIGNMENT (ptr_mode));
4795 SET_TYPE_MODE (nullptr_type_node, ptr_mode);
4796 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
4797 nullptr_node = build_int_cst (nullptr_type_node, 0);
4800 if (! supports_one_only ())
4801 flag_weak = 0;
4803 abort_fndecl
4804 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
4805 ECF_NORETURN | ECF_NOTHROW | ECF_COLD);
4806 if (flag_weak)
4807 /* If no definition is available, resolve references to NULL. */
4808 declare_weak (abort_fndecl);
4810 /* Perform other language dependent initializations. */
4811 init_class_processing ();
4812 init_rtti_processing ();
4813 init_template_processing ();
4815 if (flag_exceptions)
4816 init_exception_processing ();
4818 if (modules_p ())
4819 init_modules (parse_in);
4821 make_fname_decl = cp_make_fname_decl;
4822 start_fname_decls ();
4824 /* Show we use EH for cleanups. */
4825 if (flag_exceptions)
4826 using_eh_for_cleanups ();
4828 /* Check that the hardware interference sizes are at least
4829 alignof(max_align_t), as required by the standard. */
4830 const int max_align = max_align_t_align () / BITS_PER_UNIT;
4831 if (OPTION_SET_P (param_destruct_interfere_size))
4833 if (param_destruct_interfere_size < max_align)
4834 error ("%<--param destructive-interference-size=%d%> is less than "
4835 "%d", param_destruct_interfere_size, max_align);
4836 else if (param_destruct_interfere_size < param_l1_cache_line_size)
4837 warning (OPT_Winterference_size,
4838 "%<--param destructive-interference-size=%d%> "
4839 "is less than %<--param l1-cache-line-size=%d%>",
4840 param_destruct_interfere_size, param_l1_cache_line_size);
4842 else if (param_destruct_interfere_size)
4843 /* Assume the internal value is OK. */;
4844 else if (param_l1_cache_line_size >= max_align)
4845 param_destruct_interfere_size = param_l1_cache_line_size;
4846 /* else leave it unset. */
4848 if (OPTION_SET_P (param_construct_interfere_size))
4850 if (param_construct_interfere_size < max_align)
4851 error ("%<--param constructive-interference-size=%d%> is less than "
4852 "%d", param_construct_interfere_size, max_align);
4853 else if (param_construct_interfere_size > param_l1_cache_line_size
4854 && param_l1_cache_line_size >= max_align)
4855 warning (OPT_Winterference_size,
4856 "%<--param constructive-interference-size=%d%> "
4857 "is greater than %<--param l1-cache-line-size=%d%>",
4858 param_construct_interfere_size, param_l1_cache_line_size);
4860 else if (param_construct_interfere_size)
4861 /* Assume the internal value is OK. */;
4862 else if (param_l1_cache_line_size >= max_align)
4863 param_construct_interfere_size = param_l1_cache_line_size;
4866 /* Enter an abi node in global-module context. returns a cookie to
4867 give to pop_abi_namespace. */
4869 unsigned
4870 push_abi_namespace (tree node)
4872 push_nested_namespace (node);
4873 push_visibility ("default", 2);
4874 unsigned flags = module_kind;
4875 module_kind = 0;
4876 return flags;
4879 /* Pop an abi namespace, FLAGS is the cookie push_abi_namespace gave
4880 you. */
4882 void
4883 pop_abi_namespace (unsigned flags, tree node)
4885 module_kind = flags;
4886 pop_visibility (2);
4887 pop_nested_namespace (node);
4890 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
4891 the decl, LOC is the location to give the decl, NAME is the
4892 initialization string and TYPE_DEP indicates whether NAME depended
4893 on the type of the function. We make use of that to detect
4894 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
4895 at the point of first use, so we mustn't push the decl now. */
4897 static tree
4898 cp_make_fname_decl (location_t loc, tree id, int type_dep)
4900 tree domain = NULL_TREE;
4901 tree init = NULL_TREE;
4903 if (!(type_dep && in_template_function ()))
4905 const char *name = NULL;
4906 bool release_name = false;
4908 if (current_function_decl == NULL_TREE)
4909 name = "top level";
4910 else if (type_dep == 0)
4912 /* __FUNCTION__ */
4913 name = fname_as_string (type_dep);
4914 release_name = true;
4916 else
4918 /* __PRETTY_FUNCTION__ */
4919 gcc_checking_assert (type_dep == 1);
4920 name = cxx_printable_name (current_function_decl, 2);
4923 size_t length = strlen (name);
4924 domain = build_index_type (size_int (length));
4925 init = build_string (length + 1, name);
4926 if (release_name)
4927 free (const_cast<char *> (name));
4930 tree type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
4931 type = build_cplus_array_type (type, domain);
4933 if (init)
4934 TREE_TYPE (init) = type;
4935 else
4936 init = error_mark_node;
4938 tree decl = build_decl (loc, VAR_DECL, id, type);
4940 TREE_READONLY (decl) = 1;
4941 DECL_ARTIFICIAL (decl) = 1;
4942 DECL_DECLARED_CONSTEXPR_P (decl) = 1;
4943 TREE_STATIC (decl) = 1;
4945 TREE_USED (decl) = 1;
4947 SET_DECL_VALUE_EXPR (decl, init);
4948 DECL_HAS_VALUE_EXPR_P (decl) = 1;
4949 /* For decl_constant_var_p. */
4950 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
4952 if (current_function_decl)
4954 DECL_CONTEXT (decl) = current_function_decl;
4955 decl = pushdecl_outermost_localscope (decl);
4956 if (decl != error_mark_node)
4957 add_decl_expr (decl);
4959 else
4961 DECL_THIS_STATIC (decl) = true;
4962 decl = pushdecl_top_level_and_finish (decl, NULL_TREE);
4965 return decl;
4968 /* Install DECL as a builtin function at current global scope. Return
4969 the new decl (if we found an existing version). Also installs it
4970 into ::std, if it's not '_*'. */
4972 tree
4973 cxx_builtin_function (tree decl)
4975 retrofit_lang_decl (decl);
4977 DECL_ARTIFICIAL (decl) = 1;
4978 SET_DECL_LANGUAGE (decl, lang_c);
4979 /* Runtime library routines are, by definition, available in an
4980 external shared object. */
4981 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4982 DECL_VISIBILITY_SPECIFIED (decl) = 1;
4984 tree id = DECL_NAME (decl);
4985 const char *name = IDENTIFIER_POINTER (id);
4986 bool hiding = false;
4987 if (name[0] != '_' || name[1] != '_')
4988 /* In the user's namespace, it must be declared before use. */
4989 hiding = true;
4990 else if (IDENTIFIER_LENGTH (id) > strlen ("___chk")
4991 && !startswith (name + 2, "builtin_")
4992 && 0 == memcmp (name + IDENTIFIER_LENGTH (id) - strlen ("_chk"),
4993 "_chk", strlen ("_chk") + 1))
4994 /* Treat __*_chk fortification functions as anticipated as well,
4995 unless they are __builtin_*_chk. */
4996 hiding = true;
4998 /* All builtins that don't begin with an '_' should additionally
4999 go in the 'std' namespace. */
5000 if (name[0] != '_')
5002 tree std_decl = copy_decl (decl);
5004 push_nested_namespace (std_node);
5005 DECL_CONTEXT (std_decl) = FROB_CONTEXT (std_node);
5006 pushdecl (std_decl, hiding);
5007 pop_nested_namespace (std_node);
5010 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
5011 decl = pushdecl (decl, hiding);
5013 return decl;
5016 /* Like cxx_builtin_function, but guarantee the function is added to the global
5017 scope. This is to allow function specific options to add new machine
5018 dependent builtins when the target ISA changes via attribute((target(...)))
5019 which saves space on program startup if the program does not use non-generic
5020 ISAs. */
5022 tree
5023 cxx_builtin_function_ext_scope (tree decl)
5025 push_nested_namespace (global_namespace);
5026 decl = cxx_builtin_function (decl);
5027 pop_nested_namespace (global_namespace);
5029 return decl;
5032 /* Implement LANG_HOOKS_SIMULATE_BUILTIN_FUNCTION_DECL. */
5034 tree
5035 cxx_simulate_builtin_function_decl (tree decl)
5037 retrofit_lang_decl (decl);
5039 DECL_ARTIFICIAL (decl) = 1;
5040 SET_DECL_LANGUAGE (decl, lang_cplusplus);
5041 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
5042 return pushdecl (decl);
5045 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
5046 function. Not called directly. */
5048 static tree
5049 build_library_fn (tree name, enum tree_code operator_code, tree type,
5050 int ecf_flags)
5052 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
5053 DECL_EXTERNAL (fn) = 1;
5054 TREE_PUBLIC (fn) = 1;
5055 DECL_ARTIFICIAL (fn) = 1;
5056 DECL_OVERLOADED_OPERATOR_CODE_RAW (fn)
5057 = OVL_OP_INFO (false, operator_code)->ovl_op_code;
5058 SET_DECL_LANGUAGE (fn, lang_c);
5059 /* Runtime library routines are, by definition, available in an
5060 external shared object. */
5061 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
5062 DECL_VISIBILITY_SPECIFIED (fn) = 1;
5063 set_call_expr_flags (fn, ecf_flags);
5064 return fn;
5067 /* Returns the _DECL for a library function with C++ linkage. */
5069 static tree
5070 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
5071 int ecf_flags)
5073 tree fn = build_library_fn (name, operator_code, type, ecf_flags);
5074 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
5075 SET_DECL_LANGUAGE (fn, lang_cplusplus);
5076 return fn;
5079 /* Like build_library_fn, but takes a C string instead of an
5080 IDENTIFIER_NODE. */
5082 tree
5083 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
5085 return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
5088 /* Like build_cp_library_fn, but takes a C string instead of an
5089 IDENTIFIER_NODE. */
5091 tree
5092 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
5094 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
5095 ecf_flags);
5098 /* Like build_library_fn, but also pushes the function so that we will
5099 be able to find it via get_global_binding. Also, the function
5100 may throw exceptions listed in RAISES. */
5102 tree
5103 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
5105 if (raises)
5106 type = build_exception_variant (type, raises);
5108 tree fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
5109 return pushdecl_top_level (fn);
5112 /* Like build_cp_library_fn, but also pushes the function so that it
5113 will be found by normal lookup. */
5115 static tree
5116 push_cp_library_fn (enum tree_code operator_code, tree type,
5117 int ecf_flags)
5119 tree fn = build_cp_library_fn (ovl_op_identifier (false, operator_code),
5120 operator_code, type, ecf_flags);
5121 pushdecl (fn);
5122 if (flag_tm)
5123 apply_tm_attr (fn, get_identifier ("transaction_safe"));
5124 return fn;
5127 /* Like push_library_fn, but also note that this function throws
5128 and does not return. Used for __throw_foo and the like. */
5130 tree
5131 push_throw_library_fn (tree name, tree type)
5133 tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN | ECF_COLD);
5134 return fn;
5137 /* When we call finish_struct for an anonymous union, we create
5138 default copy constructors and such. But, an anonymous union
5139 shouldn't have such things; this function undoes the damage to the
5140 anonymous union type T.
5142 (The reason that we create the synthesized methods is that we don't
5143 distinguish `union { int i; }' from `typedef union { int i; } U'.
5144 The first is an anonymous union; the second is just an ordinary
5145 union type.) */
5147 void
5148 fixup_anonymous_aggr (tree t)
5150 /* Wipe out memory of synthesized methods. */
5151 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
5152 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
5153 TYPE_HAS_COPY_CTOR (t) = 0;
5154 TYPE_HAS_CONST_COPY_CTOR (t) = 0;
5155 TYPE_HAS_COPY_ASSIGN (t) = 0;
5156 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
5158 /* Splice the implicitly generated functions out of TYPE_FIELDS and diagnose
5159 invalid members. */
5160 for (tree probe, *prev_p = &TYPE_FIELDS (t); (probe = *prev_p);)
5162 if (TREE_CODE (probe) == FUNCTION_DECL && DECL_ARTIFICIAL (probe))
5163 *prev_p = DECL_CHAIN (probe);
5164 else
5165 prev_p = &DECL_CHAIN (probe);
5167 if (DECL_ARTIFICIAL (probe)
5168 && (!DECL_IMPLICIT_TYPEDEF_P (probe)
5169 || TYPE_ANON_P (TREE_TYPE (probe))))
5170 continue;
5172 if (TREE_CODE (probe) != FIELD_DECL
5173 || (TREE_PRIVATE (probe) || TREE_PROTECTED (probe)))
5175 /* We already complained about static data members in
5176 finish_static_data_member_decl. */
5177 if (!VAR_P (probe))
5179 auto_diagnostic_group d;
5180 if (permerror (DECL_SOURCE_LOCATION (probe),
5181 TREE_CODE (t) == UNION_TYPE
5182 ? "%q#D invalid; an anonymous union may "
5183 "only have public non-static data members"
5184 : "%q#D invalid; an anonymous struct may "
5185 "only have public non-static data members", probe))
5187 static bool hint;
5188 if (flag_permissive && !hint)
5190 hint = true;
5191 inform (DECL_SOURCE_LOCATION (probe),
5192 "this flexibility is deprecated and will be "
5193 "removed");
5200 /* Splice all functions out of CLASSTYPE_MEMBER_VEC. */
5201 vec<tree,va_gc>* vec = CLASSTYPE_MEMBER_VEC (t);
5202 unsigned store = 0;
5203 for (tree elt : vec)
5204 if (!is_overloaded_fn (elt))
5205 (*vec)[store++] = elt;
5206 vec_safe_truncate (vec, store);
5208 /* Wipe RTTI info. */
5209 CLASSTYPE_TYPEINFO_VAR (t) = NULL_TREE;
5211 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
5212 assignment operators (because they cannot have these methods themselves).
5213 For anonymous unions this is already checked because they are not allowed
5214 in any union, otherwise we have to check it. */
5215 if (TREE_CODE (t) != UNION_TYPE)
5217 tree field, type;
5219 if (BINFO_N_BASE_BINFOS (TYPE_BINFO (t)))
5221 error_at (location_of (t), "anonymous struct with base classes");
5222 /* Avoid ICE after error on anon-struct9.C. */
5223 TYPE_NEEDS_CONSTRUCTING (t) = false;
5226 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
5227 if (TREE_CODE (field) == FIELD_DECL)
5229 type = TREE_TYPE (field);
5230 if (CLASS_TYPE_P (type))
5232 if (TYPE_NEEDS_CONSTRUCTING (type))
5233 error ("member %q+#D with constructor not allowed "
5234 "in anonymous aggregate", field);
5235 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
5236 error ("member %q+#D with destructor not allowed "
5237 "in anonymous aggregate", field);
5238 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
5239 error ("member %q+#D with copy assignment operator "
5240 "not allowed in anonymous aggregate", field);
5246 /* Warn for an attribute located at LOCATION that appertains to the
5247 class type CLASS_TYPE that has not been properly placed after its
5248 class-key, in it class-specifier. */
5250 void
5251 warn_misplaced_attr_for_class_type (location_t location,
5252 tree class_type)
5254 gcc_assert (OVERLOAD_TYPE_P (class_type));
5256 auto_diagnostic_group d;
5257 if (warning_at (location, OPT_Wattributes,
5258 "attribute ignored in declaration "
5259 "of %q#T", class_type))
5260 inform (location,
5261 "attribute for %q#T must follow the %qs keyword",
5262 class_type, class_key_or_enum_as_string (class_type));
5265 /* Returns the cv-qualifiers that apply to the type specified
5266 by the DECLSPECS. */
5268 static int
5269 get_type_quals (const cp_decl_specifier_seq *declspecs)
5271 int type_quals = TYPE_UNQUALIFIED;
5273 if (decl_spec_seq_has_spec_p (declspecs, ds_const))
5274 type_quals |= TYPE_QUAL_CONST;
5275 if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
5276 type_quals |= TYPE_QUAL_VOLATILE;
5277 if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
5278 type_quals |= TYPE_QUAL_RESTRICT;
5280 return type_quals;
5283 /* Make sure that a declaration with no declarator is well-formed, i.e.
5284 just declares a tagged type or anonymous union.
5286 Returns the type declared; or NULL_TREE if none. */
5288 tree
5289 check_tag_decl (cp_decl_specifier_seq *declspecs,
5290 bool explicit_type_instantiation_p)
5292 int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
5293 int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
5294 /* If a class, struct, or enum type is declared by the DECLSPECS
5295 (i.e, if a class-specifier, enum-specifier, or non-typename
5296 elaborated-type-specifier appears in the DECLSPECS),
5297 DECLARED_TYPE is set to the corresponding type. */
5298 tree declared_type = NULL_TREE;
5299 bool error_p = false;
5301 if (declspecs->multiple_types_p)
5302 error_at (smallest_type_location (declspecs),
5303 "multiple types in one declaration");
5304 else if (declspecs->redefined_builtin_type)
5306 location_t loc = declspecs->locations[ds_redefined_builtin_type_spec];
5307 if (!in_system_header_at (loc))
5308 permerror (loc, "redeclaration of C++ built-in type %qT",
5309 declspecs->redefined_builtin_type);
5310 return NULL_TREE;
5313 if (declspecs->type
5314 && TYPE_P (declspecs->type)
5315 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
5316 && MAYBE_CLASS_TYPE_P (declspecs->type))
5317 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
5318 declared_type = declspecs->type;
5319 else if (declspecs->type == error_mark_node)
5320 error_p = true;
5322 if (type_uses_auto (declared_type))
5324 error_at (declspecs->locations[ds_type_spec],
5325 "%<auto%> can only be specified for variables "
5326 "or function declarations");
5327 return error_mark_node;
5330 if (declared_type && !OVERLOAD_TYPE_P (declared_type))
5331 declared_type = NULL_TREE;
5333 if (!declared_type && !saw_friend && !error_p)
5334 permerror (input_location, "declaration does not declare anything");
5335 /* Check for an anonymous union. */
5336 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
5337 && TYPE_UNNAMED_P (declared_type))
5339 /* 7/3 In a simple-declaration, the optional init-declarator-list
5340 can be omitted only when declaring a class (clause 9) or
5341 enumeration (7.2), that is, when the decl-specifier-seq contains
5342 either a class-specifier, an elaborated-type-specifier with
5343 a class-key (9.1), or an enum-specifier. In these cases and
5344 whenever a class-specifier or enum-specifier is present in the
5345 decl-specifier-seq, the identifiers in these specifiers are among
5346 the names being declared by the declaration (as class-name,
5347 enum-names, or enumerators, depending on the syntax). In such
5348 cases, and except for the declaration of an unnamed bit-field (9.6),
5349 the decl-specifier-seq shall introduce one or more names into the
5350 program, or shall redeclare a name introduced by a previous
5351 declaration. [Example:
5352 enum { }; // ill-formed
5353 typedef class { }; // ill-formed
5354 --end example] */
5355 if (saw_typedef)
5357 error_at (declspecs->locations[ds_typedef],
5358 "missing type-name in typedef-declaration");
5359 return NULL_TREE;
5361 /* Anonymous unions are objects, so they can have specifiers. */;
5362 SET_ANON_AGGR_TYPE_P (declared_type);
5364 if (TREE_CODE (declared_type) != UNION_TYPE)
5365 pedwarn (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (declared_type)),
5366 OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
5369 else
5371 if (decl_spec_seq_has_spec_p (declspecs, ds_inline))
5372 error_at (declspecs->locations[ds_inline],
5373 "%<inline%> can only be specified for functions");
5374 else if (decl_spec_seq_has_spec_p (declspecs, ds_virtual))
5375 error_at (declspecs->locations[ds_virtual],
5376 "%<virtual%> can only be specified for functions");
5377 else if (saw_friend
5378 && (!current_class_type
5379 || current_scope () != current_class_type))
5380 error_at (declspecs->locations[ds_friend],
5381 "%<friend%> can only be specified inside a class");
5382 else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
5383 error_at (declspecs->locations[ds_explicit],
5384 "%<explicit%> can only be specified for constructors");
5385 else if (declspecs->storage_class)
5386 error_at (declspecs->locations[ds_storage_class],
5387 "a storage class can only be specified for objects "
5388 "and functions");
5389 else if (decl_spec_seq_has_spec_p (declspecs, ds_const))
5390 error_at (declspecs->locations[ds_const],
5391 "%<const%> can only be specified for objects and "
5392 "functions");
5393 else if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
5394 error_at (declspecs->locations[ds_volatile],
5395 "%<volatile%> can only be specified for objects and "
5396 "functions");
5397 else if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
5398 error_at (declspecs->locations[ds_restrict],
5399 "%<__restrict%> can only be specified for objects and "
5400 "functions");
5401 else if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
5402 error_at (declspecs->locations[ds_thread],
5403 "%<__thread%> can only be specified for objects "
5404 "and functions");
5405 else if (saw_typedef)
5406 warning_at (declspecs->locations[ds_typedef], 0,
5407 "%<typedef%> was ignored in this declaration");
5408 else if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr))
5409 error_at (declspecs->locations[ds_constexpr],
5410 "%qs cannot be used for type declarations", "constexpr");
5411 else if (decl_spec_seq_has_spec_p (declspecs, ds_constinit))
5412 error_at (declspecs->locations[ds_constinit],
5413 "%qs cannot be used for type declarations", "constinit");
5414 else if (decl_spec_seq_has_spec_p (declspecs, ds_consteval))
5415 error_at (declspecs->locations[ds_consteval],
5416 "%qs cannot be used for type declarations", "consteval");
5419 if (declspecs->attributes && warn_attributes && declared_type)
5421 location_t loc;
5422 if (!CLASS_TYPE_P (declared_type)
5423 || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
5424 /* For a non-template class, use the name location. */
5425 loc = location_of (declared_type);
5426 else
5427 /* For a template class (an explicit instantiation), use the
5428 current location. */
5429 loc = input_location;
5431 if (explicit_type_instantiation_p)
5432 /* [dcl.attr.grammar]/4:
5434 No attribute-specifier-seq shall appertain to an explicit
5435 instantiation. */
5437 if (warning_at (loc, OPT_Wattributes,
5438 "attribute ignored in explicit instantiation %q#T",
5439 declared_type))
5440 inform (loc,
5441 "no attribute can be applied to "
5442 "an explicit instantiation");
5444 else
5445 warn_misplaced_attr_for_class_type (loc, declared_type);
5448 return declared_type;
5451 /* Called when a declaration is seen that contains no names to declare.
5452 If its type is a reference to a structure, union or enum inherited
5453 from a containing scope, shadow that tag name for the current scope
5454 with a forward reference.
5455 If its type defines a new named structure or union
5456 or defines an enum, it is valid but we need not do anything here.
5457 Otherwise, it is an error.
5459 C++: may have to grok the declspecs to learn about static,
5460 complain for anonymous unions.
5462 Returns the TYPE declared -- or NULL_TREE if none. */
5464 tree
5465 shadow_tag (cp_decl_specifier_seq *declspecs)
5467 tree t = check_tag_decl (declspecs,
5468 /*explicit_type_instantiation_p=*/false);
5470 if (!t)
5471 return NULL_TREE;
5473 if (maybe_process_partial_specialization (t) == error_mark_node)
5474 return NULL_TREE;
5476 /* This is where the variables in an anonymous union are
5477 declared. An anonymous union declaration looks like:
5478 union { ... } ;
5479 because there is no declarator after the union, the parser
5480 sends that declaration here. */
5481 if (ANON_AGGR_TYPE_P (t))
5483 fixup_anonymous_aggr (t);
5485 if (TYPE_FIELDS (t))
5487 tree decl = grokdeclarator (/*declarator=*/NULL,
5488 declspecs, NORMAL, 0, NULL);
5489 finish_anon_union (decl);
5493 return t;
5496 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
5498 tree
5499 groktypename (cp_decl_specifier_seq *type_specifiers,
5500 const cp_declarator *declarator,
5501 bool is_template_arg)
5503 tree attrs;
5504 tree type;
5505 enum decl_context context
5506 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
5507 attrs = type_specifiers->attributes;
5508 type_specifiers->attributes = NULL_TREE;
5509 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
5510 if (attrs && type != error_mark_node)
5512 if (CLASS_TYPE_P (type))
5513 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
5514 "outside of definition", type);
5515 else if (MAYBE_CLASS_TYPE_P (type))
5516 /* A template type parameter or other dependent type. */
5517 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
5518 "type %qT without an associated declaration", type);
5519 else
5520 cplus_decl_attributes (&type, attrs, 0);
5522 return type;
5525 /* Process a DECLARATOR for a function-scope or namespace-scope
5526 variable or function declaration.
5527 (Function definitions go through start_function; class member
5528 declarations appearing in the body of the class go through
5529 grokfield.) The DECL corresponding to the DECLARATOR is returned.
5530 If an error occurs, the error_mark_node is returned instead.
5532 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
5533 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
5534 for an explicitly defaulted function, or SD_DELETED for an explicitly
5535 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
5536 implicitly initialized via a default constructor. It can also be
5537 SD_DECOMPOSITION which behaves much like SD_INITIALIZED, but we also
5538 mark the new decl as DECL_DECOMPOSITION_P.
5540 ATTRIBUTES and PREFIX_ATTRIBUTES are GNU attributes associated with this
5541 declaration.
5543 The scope represented by the context of the returned DECL is pushed
5544 (if it is not the global namespace) and is assigned to
5545 *PUSHED_SCOPE_P. The caller is then responsible for calling
5546 pop_scope on *PUSHED_SCOPE_P if it is set. */
5548 tree
5549 start_decl (const cp_declarator *declarator,
5550 cp_decl_specifier_seq *declspecs,
5551 int initialized,
5552 tree attributes,
5553 tree prefix_attributes,
5554 tree *pushed_scope_p)
5556 tree decl;
5557 tree context;
5558 bool was_public;
5559 int flags;
5560 bool alias;
5561 tree initial;
5563 *pushed_scope_p = NULL_TREE;
5565 if (prefix_attributes != error_mark_node)
5566 attributes = chainon (attributes, prefix_attributes);
5568 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
5569 &attributes);
5571 if (decl == NULL_TREE || VOID_TYPE_P (decl)
5572 || decl == error_mark_node
5573 || prefix_attributes == error_mark_node)
5574 return error_mark_node;
5576 context = CP_DECL_CONTEXT (decl);
5577 if (context != global_namespace)
5578 *pushed_scope_p = push_scope (context);
5580 if (initialized && TREE_CODE (decl) == TYPE_DECL)
5582 error_at (DECL_SOURCE_LOCATION (decl),
5583 "typedef %qD is initialized (use %qs instead)",
5584 decl, "decltype");
5585 return error_mark_node;
5588 /* Save the DECL_INITIAL value in case it gets clobbered to assist
5589 with attribute validation. */
5590 initial = DECL_INITIAL (decl);
5592 if (initialized)
5594 if (! toplevel_bindings_p ()
5595 && DECL_EXTERNAL (decl))
5596 warning (0, "declaration of %q#D has %<extern%> and is initialized",
5597 decl);
5598 DECL_EXTERNAL (decl) = 0;
5599 if (toplevel_bindings_p ())
5600 TREE_STATIC (decl) = 1;
5601 /* Tell 'cplus_decl_attributes' this is an initialized decl,
5602 even though we might not yet have the initializer expression. */
5603 if (!DECL_INITIAL (decl))
5604 DECL_INITIAL (decl) = error_mark_node;
5606 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
5608 if (alias && TREE_CODE (decl) == FUNCTION_DECL)
5609 record_key_method_defined (decl);
5611 /* If this is a typedef that names the class for linkage purposes
5612 (7.1.3p8), apply any attributes directly to the type. */
5613 if (TREE_CODE (decl) == TYPE_DECL
5614 && OVERLOAD_TYPE_P (TREE_TYPE (decl))
5615 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
5616 flags = ATTR_FLAG_TYPE_IN_PLACE;
5617 else
5618 flags = 0;
5620 /* Set attributes here so if duplicate decl, will have proper attributes. */
5621 cplus_decl_attributes (&decl, attributes, flags);
5623 /* Restore the original DECL_INITIAL that we may have clobbered earlier to
5624 assist with attribute validation. */
5625 DECL_INITIAL (decl) = initial;
5627 /* Dllimported symbols cannot be defined. Static data members (which
5628 can be initialized in-class and dllimported) go through grokfield,
5629 not here, so we don't need to exclude those decls when checking for
5630 a definition. */
5631 if (initialized && DECL_DLLIMPORT_P (decl))
5633 error_at (DECL_SOURCE_LOCATION (decl),
5634 "definition of %q#D is marked %<dllimport%>", decl);
5635 DECL_DLLIMPORT_P (decl) = 0;
5638 /* If #pragma weak was used, mark the decl weak now. */
5639 if (!processing_template_decl && !DECL_DECOMPOSITION_P (decl))
5640 maybe_apply_pragma_weak (decl);
5642 if (TREE_CODE (decl) == FUNCTION_DECL
5643 && DECL_DECLARED_INLINE_P (decl)
5644 && DECL_UNINLINABLE (decl)
5645 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
5646 warning_at (DECL_SOURCE_LOCATION (decl), 0,
5647 "inline function %qD given attribute %qs", decl, "noinline");
5649 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
5651 bool this_tmpl = (current_template_depth
5652 > template_class_depth (context));
5653 if (VAR_P (decl))
5655 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
5656 if (field == NULL_TREE
5657 || !(VAR_P (field) || variable_template_p (field)))
5658 error ("%q+#D is not a static data member of %q#T", decl, context);
5659 else if (variable_template_p (field)
5660 && (DECL_LANG_SPECIFIC (decl)
5661 && DECL_TEMPLATE_SPECIALIZATION (decl)))
5662 /* OK, specialization was already checked. */;
5663 else if (variable_template_p (field) && !this_tmpl)
5665 error_at (DECL_SOURCE_LOCATION (decl),
5666 "non-member-template declaration of %qD", decl);
5667 inform (DECL_SOURCE_LOCATION (field), "does not match "
5668 "member template declaration here");
5669 return error_mark_node;
5671 else
5673 if (variable_template_p (field))
5674 field = DECL_TEMPLATE_RESULT (field);
5676 if (DECL_CONTEXT (field) != context)
5678 if (!same_type_p (DECL_CONTEXT (field), context))
5679 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
5680 "to be defined as %<%T::%D%>",
5681 DECL_CONTEXT (field), DECL_NAME (decl),
5682 context, DECL_NAME (decl));
5683 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
5685 /* Static data member are tricky; an in-class initialization
5686 still doesn't provide a definition, so the in-class
5687 declaration will have DECL_EXTERNAL set, but will have an
5688 initialization. Thus, duplicate_decls won't warn
5689 about this situation, and so we check here. */
5690 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
5691 error ("duplicate initialization of %qD", decl);
5692 field = duplicate_decls (decl, field);
5693 if (field == error_mark_node)
5694 return error_mark_node;
5695 else if (field)
5696 decl = field;
5699 else
5701 tree field = check_classfn (context, decl,
5702 this_tmpl
5703 ? current_template_parms
5704 : NULL_TREE);
5705 if (field && field != error_mark_node
5706 && duplicate_decls (decl, field))
5707 decl = field;
5710 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
5711 DECL_IN_AGGR_P (decl) = 0;
5712 /* Do not mark DECL as an explicit specialization if it was not
5713 already marked as an instantiation; a declaration should
5714 never be marked as a specialization unless we know what
5715 template is being specialized. */
5716 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
5718 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
5719 if (TREE_CODE (decl) == FUNCTION_DECL)
5720 DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
5721 && DECL_DECLARED_INLINE_P (decl));
5722 else
5723 DECL_COMDAT (decl) = false;
5725 /* [temp.expl.spec] An explicit specialization of a static data
5726 member of a template is a definition if the declaration
5727 includes an initializer; otherwise, it is a declaration.
5729 We check for processing_specialization so this only applies
5730 to the new specialization syntax. */
5731 if (!initialized && processing_specialization)
5732 DECL_EXTERNAL (decl) = 1;
5735 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
5736 /* Aliases are definitions. */
5737 && !alias)
5738 permerror (declarator->id_loc,
5739 "declaration of %q#D outside of class is not definition",
5740 decl);
5743 /* Create a DECL_LANG_SPECIFIC so that DECL_DECOMPOSITION_P works. */
5744 if (initialized == SD_DECOMPOSITION)
5745 fit_decomposition_lang_decl (decl, NULL_TREE);
5747 was_public = TREE_PUBLIC (decl);
5749 if ((DECL_EXTERNAL (decl) || TREE_CODE (decl) == FUNCTION_DECL)
5750 && current_function_decl)
5752 /* A function-scope decl of some namespace-scope decl. */
5753 DECL_LOCAL_DECL_P (decl) = true;
5754 if (named_module_purview_p ())
5755 error_at (declarator->id_loc,
5756 "block-scope extern declaration %q#D not permitted"
5757 " in module purview", decl);
5760 /* Enter this declaration into the symbol table. Don't push the plain
5761 VAR_DECL for a variable template. */
5762 if (!template_parm_scope_p ()
5763 || !VAR_P (decl))
5764 decl = maybe_push_decl (decl);
5766 if (processing_template_decl)
5767 decl = push_template_decl (decl);
5769 if (decl == error_mark_node)
5770 return error_mark_node;
5772 if (VAR_P (decl)
5773 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
5774 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl)
5775 /* But not templated variables. */
5776 && !(DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)))
5778 /* This is a const variable with implicit 'static'. Set
5779 DECL_THIS_STATIC so we can tell it from variables that are
5780 !TREE_PUBLIC because of the anonymous namespace. */
5781 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
5782 DECL_THIS_STATIC (decl) = 1;
5785 if (current_function_decl && VAR_P (decl)
5786 && DECL_DECLARED_CONSTEXPR_P (current_function_decl)
5787 && cxx_dialect < cxx23)
5789 bool ok = false;
5790 if (CP_DECL_THREAD_LOCAL_P (decl) && !DECL_REALLY_EXTERN (decl))
5791 error_at (DECL_SOURCE_LOCATION (decl),
5792 "%qD defined %<thread_local%> in %qs function only "
5793 "available with %<-std=c++2b%> or %<-std=gnu++2b%>", decl,
5794 DECL_IMMEDIATE_FUNCTION_P (current_function_decl)
5795 ? "consteval" : "constexpr");
5796 else if (TREE_STATIC (decl))
5797 error_at (DECL_SOURCE_LOCATION (decl),
5798 "%qD defined %<static%> in %qs function only available "
5799 "with %<-std=c++2b%> or %<-std=gnu++2b%>", decl,
5800 DECL_IMMEDIATE_FUNCTION_P (current_function_decl)
5801 ? "consteval" : "constexpr");
5802 else
5803 ok = true;
5804 if (!ok)
5805 cp_function_chain->invalid_constexpr = true;
5808 if (!processing_template_decl && VAR_P (decl))
5809 start_decl_1 (decl, initialized);
5811 return decl;
5814 /* Process the declaration of a variable DECL. INITIALIZED is true
5815 iff DECL is explicitly initialized. (INITIALIZED is false if the
5816 variable is initialized via an implicitly-called constructor.)
5817 This function must be called for ordinary variables (including, for
5818 example, implicit instantiations of templates), but must not be
5819 called for template declarations. */
5821 void
5822 start_decl_1 (tree decl, bool initialized)
5824 gcc_checking_assert (!processing_template_decl);
5826 if (error_operand_p (decl))
5827 return;
5829 gcc_checking_assert (VAR_P (decl));
5831 tree type = TREE_TYPE (decl);
5832 bool complete_p = COMPLETE_TYPE_P (type);
5833 bool aggregate_definition_p
5834 = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
5836 /* If an explicit initializer is present, or if this is a definition
5837 of an aggregate, then we need a complete type at this point.
5838 (Scalars are always complete types, so there is nothing to
5839 check.) This code just sets COMPLETE_P; errors (if necessary)
5840 are issued below. */
5841 if ((initialized || aggregate_definition_p)
5842 && !complete_p
5843 && COMPLETE_TYPE_P (complete_type (type)))
5845 complete_p = true;
5846 /* We will not yet have set TREE_READONLY on DECL if the type
5847 was "const", but incomplete, before this point. But, now, we
5848 have a complete type, so we can try again. */
5849 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
5852 if (initialized)
5853 /* Is it valid for this decl to have an initializer at all? */
5855 /* Don't allow initializations for incomplete types except for
5856 arrays which might be completed by the initialization. */
5857 if (complete_p)
5858 ; /* A complete type is ok. */
5859 else if (type_uses_auto (type))
5860 ; /* An auto type is ok. */
5861 else if (TREE_CODE (type) != ARRAY_TYPE)
5863 error ("variable %q#D has initializer but incomplete type", decl);
5864 type = TREE_TYPE (decl) = error_mark_node;
5866 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5868 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
5869 error ("elements of array %q#D have incomplete type", decl);
5870 /* else we already gave an error in start_decl. */
5873 else if (aggregate_definition_p && !complete_p)
5875 if (type_uses_auto (type))
5876 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (type));
5877 else
5879 error ("aggregate %q#D has incomplete type and cannot be defined",
5880 decl);
5881 /* Change the type so that assemble_variable will give
5882 DECL an rtl we can live with: (mem (const_int 0)). */
5883 type = TREE_TYPE (decl) = error_mark_node;
5887 /* Create a new scope to hold this declaration if necessary.
5888 Whether or not a new scope is necessary cannot be determined
5889 until after the type has been completed; if the type is a
5890 specialization of a class template it is not until after
5891 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
5892 will be set correctly. */
5893 maybe_push_cleanup_level (type);
5896 /* Given a parenthesized list of values INIT, create a CONSTRUCTOR to handle
5897 C++20 P0960. TYPE is the type of the object we're initializing. */
5899 tree
5900 do_aggregate_paren_init (tree init, tree type)
5902 tree val = TREE_VALUE (init);
5904 if (TREE_CHAIN (init) == NULL_TREE)
5906 /* If the list has a single element and it's a string literal,
5907 then it's the initializer for the array as a whole. */
5908 if (TREE_CODE (type) == ARRAY_TYPE
5909 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type)))
5910 && TREE_CODE (tree_strip_any_location_wrapper (val))
5911 == STRING_CST)
5912 return val;
5913 /* Handle non-standard extensions like compound literals. This also
5914 prevents triggering aggregate parenthesized-initialization in
5915 compiler-generated code for =default. */
5916 else if (same_type_ignoring_top_level_qualifiers_p (type,
5917 TREE_TYPE (val)))
5918 return val;
5921 init = build_constructor_from_list (init_list_type_node, init);
5922 CONSTRUCTOR_IS_DIRECT_INIT (init) = true;
5923 CONSTRUCTOR_IS_PAREN_INIT (init) = true;
5924 return init;
5927 /* Handle initialization of references. DECL, TYPE, and INIT have the
5928 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
5929 but will be set to a new CLEANUP_STMT if a temporary is created
5930 that must be destroyed subsequently.
5932 Returns an initializer expression to use to initialize DECL, or
5933 NULL if the initialization can be performed statically.
5935 Quotes on semantics can be found in ARM 8.4.3. */
5937 static tree
5938 grok_reference_init (tree decl, tree type, tree init, int flags)
5940 if (init == NULL_TREE)
5942 if ((DECL_LANG_SPECIFIC (decl) == 0
5943 || DECL_IN_AGGR_P (decl) == 0)
5944 && ! DECL_THIS_EXTERN (decl))
5945 error_at (DECL_SOURCE_LOCATION (decl),
5946 "%qD declared as reference but not initialized", decl);
5947 return NULL_TREE;
5950 tree ttype = TREE_TYPE (type);
5951 if (TREE_CODE (init) == TREE_LIST)
5953 /* This handles (C++20 only) code like
5955 const A& r(1, 2, 3);
5957 where we treat the parenthesized list as a CONSTRUCTOR. */
5958 if (TREE_TYPE (init) == NULL_TREE
5959 && CP_AGGREGATE_TYPE_P (ttype)
5960 && !DECL_DECOMPOSITION_P (decl)
5961 && (cxx_dialect >= cxx20))
5963 /* We don't know yet if we should treat const A& r(1) as
5964 const A& r{1}. */
5965 if (list_length (init) == 1)
5967 flags |= LOOKUP_AGGREGATE_PAREN_INIT;
5968 init = build_x_compound_expr_from_list (init, ELK_INIT,
5969 tf_warning_or_error);
5971 /* If the list had more than one element, the code is ill-formed
5972 pre-C++20, so we can build a constructor right away. */
5973 else
5974 init = do_aggregate_paren_init (init, ttype);
5976 else
5977 init = build_x_compound_expr_from_list (init, ELK_INIT,
5978 tf_warning_or_error);
5981 if (TREE_CODE (ttype) != ARRAY_TYPE
5982 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
5983 /* Note: default conversion is only called in very special cases. */
5984 init = decay_conversion (init, tf_warning_or_error);
5986 /* check_initializer handles this for non-reference variables, but for
5987 references we need to do it here or the initializer will get the
5988 incomplete array type and confuse later calls to
5989 cp_complete_array_type. */
5990 if (TREE_CODE (ttype) == ARRAY_TYPE
5991 && TYPE_DOMAIN (ttype) == NULL_TREE
5992 && (BRACE_ENCLOSED_INITIALIZER_P (init)
5993 || TREE_CODE (init) == STRING_CST))
5995 cp_complete_array_type (&ttype, init, false);
5996 if (ttype != TREE_TYPE (type))
5997 type = cp_build_reference_type (ttype, TYPE_REF_IS_RVALUE (type));
6000 /* Convert INIT to the reference type TYPE. This may involve the
6001 creation of a temporary, whose lifetime must be the same as that
6002 of the reference. If so, a DECL_EXPR for the temporary will be
6003 added just after the DECL_EXPR for DECL. That's why we don't set
6004 DECL_INITIAL for local references (instead assigning to them
6005 explicitly); we need to allow the temporary to be initialized
6006 first. */
6007 return initialize_reference (type, init, flags,
6008 tf_warning_or_error);
6011 /* Designated initializers in arrays are not supported in GNU C++.
6012 The parser cannot detect this error since it does not know whether
6013 a given brace-enclosed initializer is for a class type or for an
6014 array. This function checks that CE does not use a designated
6015 initializer. If it does, an error is issued. Returns true if CE
6016 is valid, i.e., does not have a designated initializer. */
6018 bool
6019 check_array_designated_initializer (constructor_elt *ce,
6020 unsigned HOST_WIDE_INT index)
6022 /* Designated initializers for array elements are not supported. */
6023 if (ce->index)
6025 /* The parser only allows identifiers as designated
6026 initializers. */
6027 if (ce->index == error_mark_node)
6029 error ("name used in a GNU-style designated "
6030 "initializer for an array");
6031 return false;
6033 else if (identifier_p (ce->index))
6035 error ("name %qD used in a GNU-style designated "
6036 "initializer for an array", ce->index);
6037 return false;
6040 tree ce_index = build_expr_type_conversion (WANT_INT | WANT_ENUM,
6041 ce->index, true);
6042 if (ce_index
6043 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index))
6044 && (TREE_CODE (ce_index = fold_non_dependent_expr (ce_index))
6045 == INTEGER_CST))
6047 /* A C99 designator is OK if it matches the current index. */
6048 if (wi::to_wide (ce_index) == index)
6050 ce->index = ce_index;
6051 return true;
6053 else
6054 sorry ("non-trivial designated initializers not supported");
6056 else
6057 error_at (cp_expr_loc_or_input_loc (ce->index),
6058 "C99 designator %qE is not an integral constant-expression",
6059 ce->index);
6061 return false;
6064 return true;
6067 /* When parsing `int a[] = {1, 2};' we don't know the size of the
6068 array until we finish parsing the initializer. If that's the
6069 situation we're in, update DECL accordingly. */
6071 static void
6072 maybe_deduce_size_from_array_init (tree decl, tree init)
6074 tree type = TREE_TYPE (decl);
6076 if (TREE_CODE (type) == ARRAY_TYPE
6077 && TYPE_DOMAIN (type) == NULL_TREE
6078 && TREE_CODE (decl) != TYPE_DECL)
6080 /* do_default is really a C-ism to deal with tentative definitions.
6081 But let's leave it here to ease the eventual merge. */
6082 int do_default = !DECL_EXTERNAL (decl);
6083 tree initializer = init ? init : DECL_INITIAL (decl);
6084 int failure = 0;
6086 /* Check that there are no designated initializers in INIT, as
6087 those are not supported in GNU C++, and as the middle-end
6088 will crash if presented with a non-numeric designated
6089 initializer. */
6090 if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
6092 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
6093 constructor_elt *ce;
6094 HOST_WIDE_INT i;
6095 FOR_EACH_VEC_SAFE_ELT (v, i, ce)
6097 if (instantiation_dependent_expression_p (ce->index))
6098 return;
6099 if (!check_array_designated_initializer (ce, i))
6100 failure = 1;
6101 /* If an un-designated initializer is type-dependent, we can't
6102 check brace elision yet. */
6103 if (ce->index == NULL_TREE
6104 && type_dependent_expression_p (ce->value))
6105 return;
6109 if (failure)
6110 TREE_TYPE (decl) = error_mark_node;
6111 else
6113 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
6114 do_default);
6115 if (failure == 1)
6117 error_at (cp_expr_loc_or_loc (initializer,
6118 DECL_SOURCE_LOCATION (decl)),
6119 "initializer fails to determine size of %qD", decl);
6121 else if (failure == 2)
6123 if (do_default)
6125 error_at (DECL_SOURCE_LOCATION (decl),
6126 "array size missing in %qD", decl);
6128 /* If a `static' var's size isn't known, make it extern as
6129 well as static, so it does not get allocated. If it's not
6130 `static', then don't mark it extern; finish_incomplete_decl
6131 will give it a default size and it will get allocated. */
6132 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
6133 DECL_EXTERNAL (decl) = 1;
6135 else if (failure == 3)
6137 error_at (DECL_SOURCE_LOCATION (decl),
6138 "zero-size array %qD", decl);
6142 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
6144 relayout_decl (decl);
6148 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
6149 any appropriate error messages regarding the layout. */
6151 static void
6152 layout_var_decl (tree decl)
6154 tree type;
6156 type = TREE_TYPE (decl);
6157 if (type == error_mark_node)
6158 return;
6160 /* If we haven't already laid out this declaration, do so now.
6161 Note that we must not call complete type for an external object
6162 because it's type might involve templates that we are not
6163 supposed to instantiate yet. (And it's perfectly valid to say
6164 `extern X x' for some incomplete type `X'.) */
6165 if (!DECL_EXTERNAL (decl))
6166 complete_type (type);
6167 if (!DECL_SIZE (decl)
6168 && TREE_TYPE (decl) != error_mark_node
6169 && complete_or_array_type_p (type))
6170 layout_decl (decl, 0);
6172 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
6174 /* An automatic variable with an incomplete type: that is an error.
6175 Don't talk about array types here, since we took care of that
6176 message in grokdeclarator. */
6177 error_at (DECL_SOURCE_LOCATION (decl),
6178 "storage size of %qD isn%'t known", decl);
6179 TREE_TYPE (decl) = error_mark_node;
6181 #if 0
6182 /* Keep this code around in case we later want to control debug info
6183 based on whether a type is "used". (jason 1999-11-11) */
6185 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
6186 /* Let debugger know it should output info for this type. */
6187 note_debug_info_needed (ttype);
6189 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
6190 note_debug_info_needed (DECL_CONTEXT (decl));
6191 #endif
6193 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
6194 && DECL_SIZE (decl) != NULL_TREE
6195 && ! TREE_CONSTANT (DECL_SIZE (decl)))
6197 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST
6198 && !DECL_LOCAL_DECL_P (decl))
6199 constant_expression_warning (DECL_SIZE (decl));
6200 else
6202 error_at (DECL_SOURCE_LOCATION (decl),
6203 "storage size of %qD isn%'t constant", decl);
6204 TREE_TYPE (decl) = error_mark_node;
6205 type = error_mark_node;
6209 /* If the final element initializes a flexible array field, add the size of
6210 that initializer to DECL's size. */
6211 if (type != error_mark_node
6212 && DECL_INITIAL (decl)
6213 && TREE_CODE (DECL_INITIAL (decl)) == CONSTRUCTOR
6214 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (DECL_INITIAL (decl)))
6215 && DECL_SIZE (decl) != NULL_TREE
6216 && TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST
6217 && TYPE_SIZE (type) != NULL_TREE
6218 && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
6219 && tree_int_cst_equal (DECL_SIZE (decl), TYPE_SIZE (type)))
6221 constructor_elt &elt = CONSTRUCTOR_ELTS (DECL_INITIAL (decl))->last ();
6222 if (elt.index)
6224 tree itype = TREE_TYPE (elt.index);
6225 tree vtype = TREE_TYPE (elt.value);
6226 if (TREE_CODE (itype) == ARRAY_TYPE
6227 && TYPE_DOMAIN (itype) == NULL
6228 && TREE_CODE (vtype) == ARRAY_TYPE
6229 && COMPLETE_TYPE_P (vtype))
6231 DECL_SIZE (decl)
6232 = size_binop (PLUS_EXPR, DECL_SIZE (decl), TYPE_SIZE (vtype));
6233 DECL_SIZE_UNIT (decl)
6234 = size_binop (PLUS_EXPR, DECL_SIZE_UNIT (decl),
6235 TYPE_SIZE_UNIT (vtype));
6241 /* If a local static variable is declared in an inline function, or if
6242 we have a weak definition, we must endeavor to create only one
6243 instance of the variable at link-time. */
6245 void
6246 maybe_commonize_var (tree decl)
6248 /* Don't mess with __FUNCTION__ and similar. */
6249 if (DECL_ARTIFICIAL (decl))
6250 return;
6252 /* Static data in a function with comdat linkage also has comdat
6253 linkage. */
6254 if ((TREE_STATIC (decl)
6255 && DECL_FUNCTION_SCOPE_P (decl)
6256 && vague_linkage_p (DECL_CONTEXT (decl)))
6257 || (TREE_PUBLIC (decl) && DECL_INLINE_VAR_P (decl)))
6259 if (flag_weak)
6261 /* With weak symbols, we simply make the variable COMDAT;
6262 that will cause copies in multiple translations units to
6263 be merged. */
6264 comdat_linkage (decl);
6266 else
6268 if (DECL_INITIAL (decl) == NULL_TREE
6269 || DECL_INITIAL (decl) == error_mark_node)
6271 /* Without weak symbols, we can use COMMON to merge
6272 uninitialized variables. */
6273 TREE_PUBLIC (decl) = 1;
6274 DECL_COMMON (decl) = 1;
6276 else
6278 /* While for initialized variables, we must use internal
6279 linkage -- which means that multiple copies will not
6280 be merged. */
6281 TREE_PUBLIC (decl) = 0;
6282 DECL_COMMON (decl) = 0;
6283 DECL_INTERFACE_KNOWN (decl) = 1;
6284 const char *msg;
6285 if (DECL_INLINE_VAR_P (decl))
6286 msg = G_("sorry: semantics of inline variable "
6287 "%q#D are wrong (you%'ll wind up with "
6288 "multiple copies)");
6289 else
6290 msg = G_("sorry: semantics of inline function "
6291 "static data %q#D are wrong (you%'ll wind "
6292 "up with multiple copies)");
6293 if (warning_at (DECL_SOURCE_LOCATION (decl), 0,
6294 msg, decl))
6295 inform (DECL_SOURCE_LOCATION (decl),
6296 "you can work around this by removing the initializer");
6302 /* Issue an error message if DECL is an uninitialized const variable.
6303 CONSTEXPR_CONTEXT_P is true when the function is called in a constexpr
6304 context from potential_constant_expression. Returns true if all is well,
6305 false otherwise. */
6307 bool
6308 check_for_uninitialized_const_var (tree decl, bool constexpr_context_p,
6309 tsubst_flags_t complain)
6311 tree type = strip_array_types (TREE_TYPE (decl));
6313 /* ``Unless explicitly declared extern, a const object does not have
6314 external linkage and must be initialized. ($8.4; $12.1)'' ARM
6315 7.1.6 */
6316 if (VAR_P (decl)
6317 && !TYPE_REF_P (type)
6318 && (CP_TYPE_CONST_P (type)
6319 /* C++20 permits trivial default initialization in constexpr
6320 context (P1331R2). */
6321 || (cxx_dialect < cxx20
6322 && (constexpr_context_p
6323 || var_in_constexpr_fn (decl))))
6324 && !DECL_NONTRIVIALLY_INITIALIZED_P (decl))
6326 tree field = default_init_uninitialized_part (type);
6327 if (!field)
6328 return true;
6330 bool show_notes = true;
6332 if (!constexpr_context_p || cxx_dialect >= cxx20)
6334 if (CP_TYPE_CONST_P (type))
6336 if (complain & tf_error)
6337 show_notes = permerror (DECL_SOURCE_LOCATION (decl),
6338 "uninitialized %<const %D%>", decl);
6340 else
6342 if (!is_instantiation_of_constexpr (current_function_decl)
6343 && (complain & tf_error))
6344 error_at (DECL_SOURCE_LOCATION (decl),
6345 "uninitialized variable %qD in %<constexpr%> "
6346 "function", decl);
6347 else
6348 show_notes = false;
6349 cp_function_chain->invalid_constexpr = true;
6352 else if (complain & tf_error)
6353 error_at (DECL_SOURCE_LOCATION (decl),
6354 "uninitialized variable %qD in %<constexpr%> context",
6355 decl);
6357 if (show_notes && CLASS_TYPE_P (type) && (complain & tf_error))
6359 tree defaulted_ctor;
6361 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
6362 "%q#T has no user-provided default constructor", type);
6363 defaulted_ctor = in_class_defaulted_default_constructor (type);
6364 if (defaulted_ctor)
6365 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
6366 "constructor is not user-provided because it is "
6367 "explicitly defaulted in the class body");
6368 inform (DECL_SOURCE_LOCATION (field),
6369 "and the implicitly-defined constructor does not "
6370 "initialize %q#D", field);
6373 return false;
6376 return true;
6379 /* Structure holding the current initializer being processed by reshape_init.
6380 CUR is a pointer to the current element being processed, END is a pointer
6381 after the last element present in the initializer. */
6382 struct reshape_iter
6384 constructor_elt *cur;
6385 constructor_elt *end;
6388 static tree reshape_init_r (tree, reshape_iter *, tree, tsubst_flags_t);
6390 /* FIELD is an element of TYPE_FIELDS or NULL. In the former case, the value
6391 returned is the next FIELD_DECL (possibly FIELD itself) that can be
6392 initialized. If there are no more such fields, the return value
6393 will be NULL. */
6395 tree
6396 next_initializable_field (tree field)
6398 while (field
6399 && (TREE_CODE (field) != FIELD_DECL
6400 || DECL_UNNAMED_BIT_FIELD (field)
6401 || (DECL_ARTIFICIAL (field)
6402 /* In C++17, don't skip base class fields. */
6403 && !(cxx_dialect >= cxx17 && DECL_FIELD_IS_BASE (field))
6404 /* Don't skip vptr fields. We might see them when we're
6405 called from reduced_constant_expression_p. */
6406 && !DECL_VIRTUAL_P (field))))
6407 field = DECL_CHAIN (field);
6409 return field;
6412 /* Return true for [dcl.init.list] direct-list-initialization from
6413 single element of enumeration with a fixed underlying type. */
6415 bool
6416 is_direct_enum_init (tree type, tree init)
6418 if (cxx_dialect >= cxx17
6419 && TREE_CODE (type) == ENUMERAL_TYPE
6420 && ENUM_FIXED_UNDERLYING_TYPE_P (type)
6421 && TREE_CODE (init) == CONSTRUCTOR
6422 && CONSTRUCTOR_IS_DIRECT_INIT (init)
6423 && CONSTRUCTOR_NELTS (init) == 1
6424 /* DR 2374: The single element needs to be implicitly
6425 convertible to the underlying type of the enum. */
6426 && can_convert_arg (ENUM_UNDERLYING_TYPE (type),
6427 TREE_TYPE (CONSTRUCTOR_ELT (init, 0)->value),
6428 CONSTRUCTOR_ELT (init, 0)->value,
6429 LOOKUP_IMPLICIT, tf_none))
6430 return true;
6431 return false;
6434 /* Subroutine of reshape_init_array and reshape_init_vector, which does
6435 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
6436 INTEGER_CST representing the size of the array minus one (the maximum index),
6437 or NULL_TREE if the array was declared without specifying the size. D is
6438 the iterator within the constructor. */
6440 static tree
6441 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
6442 tree first_initializer_p, tsubst_flags_t complain)
6444 tree new_init;
6445 bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
6446 unsigned HOST_WIDE_INT max_index_cst = 0;
6447 unsigned HOST_WIDE_INT index;
6449 /* The initializer for an array is always a CONSTRUCTOR. If this is the
6450 outermost CONSTRUCTOR and the element type is non-aggregate, we don't need
6451 to build a new one. But don't reuse if not complaining; if this is
6452 tentative, we might also reshape to another type (95319). */
6453 bool reuse = (first_initializer_p
6454 && (complain & tf_error)
6455 && !CP_AGGREGATE_TYPE_P (elt_type)
6456 && !TREE_SIDE_EFFECTS (first_initializer_p));
6457 if (reuse)
6458 new_init = first_initializer_p;
6459 else
6460 new_init = build_constructor (init_list_type_node, NULL);
6462 if (sized_array_p)
6464 /* Minus 1 is used for zero sized arrays. */
6465 if (integer_all_onesp (max_index))
6466 return new_init;
6468 if (tree_fits_uhwi_p (max_index))
6469 max_index_cst = tree_to_uhwi (max_index);
6470 /* sizetype is sign extended, not zero extended. */
6471 else
6472 max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
6475 /* Loop until there are no more initializers. */
6476 for (index = 0;
6477 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
6478 ++index)
6480 tree elt_init;
6481 constructor_elt *old_cur = d->cur;
6483 check_array_designated_initializer (d->cur, index);
6484 elt_init = reshape_init_r (elt_type, d,
6485 /*first_initializer_p=*/NULL_TREE,
6486 complain);
6487 if (elt_init == error_mark_node)
6488 return error_mark_node;
6489 tree idx = size_int (index);
6490 if (reuse)
6492 old_cur->index = idx;
6493 old_cur->value = elt_init;
6495 else
6496 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
6497 idx, elt_init);
6498 if (!TREE_CONSTANT (elt_init))
6499 TREE_CONSTANT (new_init) = false;
6501 /* This can happen with an invalid initializer (c++/54501). */
6502 if (d->cur == old_cur && !sized_array_p)
6503 break;
6506 return new_init;
6509 /* Subroutine of reshape_init_r, processes the initializers for arrays.
6510 Parameters are the same of reshape_init_r. */
6512 static tree
6513 reshape_init_array (tree type, reshape_iter *d, tree first_initializer_p,
6514 tsubst_flags_t complain)
6516 tree max_index = NULL_TREE;
6518 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
6520 if (TYPE_DOMAIN (type))
6521 max_index = array_type_nelts (type);
6523 return reshape_init_array_1 (TREE_TYPE (type), max_index, d,
6524 first_initializer_p, complain);
6527 /* Subroutine of reshape_init_r, processes the initializers for vectors.
6528 Parameters are the same of reshape_init_r. */
6530 static tree
6531 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
6533 tree max_index = NULL_TREE;
6535 gcc_assert (VECTOR_TYPE_P (type));
6537 if (COMPOUND_LITERAL_P (d->cur->value))
6539 tree value = d->cur->value;
6540 if (!same_type_p (TREE_TYPE (value), type))
6542 if (complain & tf_error)
6543 error ("invalid type %qT as initializer for a vector of type %qT",
6544 TREE_TYPE (d->cur->value), type);
6545 value = error_mark_node;
6547 ++d->cur;
6548 return value;
6551 /* For a vector, we initialize it as an array of the appropriate size. */
6552 if (VECTOR_TYPE_P (type))
6553 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
6555 return reshape_init_array_1 (TREE_TYPE (type), max_index, d,
6556 NULL_TREE, complain);
6559 /* Subroutine of reshape_init*: We're initializing an element with TYPE from
6560 INIT, in isolation from any designator or other initializers. */
6562 static tree
6563 reshape_single_init (tree type, tree init, tsubst_flags_t complain)
6565 /* We could also implement this by wrapping init in a new CONSTRUCTOR and
6566 calling reshape_init, but this way can just live on the stack. */
6567 constructor_elt elt = { /*index=*/NULL_TREE, init };
6568 reshape_iter iter = { &elt, &elt + 1 };
6569 return reshape_init_r (type, &iter,
6570 /*first_initializer_p=*/NULL_TREE,
6571 complain);
6574 /* Subroutine of reshape_init_r, processes the initializers for classes
6575 or union. Parameters are the same of reshape_init_r. */
6577 static tree
6578 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
6579 tsubst_flags_t complain)
6581 tree field;
6582 tree new_init;
6584 gcc_assert (CLASS_TYPE_P (type));
6586 /* The initializer for a class is always a CONSTRUCTOR. */
6587 new_init = build_constructor (init_list_type_node, NULL);
6589 int binfo_idx = -1;
6590 tree binfo = TYPE_BINFO (type);
6591 tree base_binfo = NULL_TREE;
6592 if (cxx_dialect >= cxx17 && uses_template_parms (type))
6594 /* We get here from maybe_aggr_guide for C++20 class template argument
6595 deduction. In this case we need to look through the binfo because a
6596 template doesn't have base fields. */
6597 binfo_idx = 0;
6598 BINFO_BASE_ITERATE (binfo, binfo_idx, base_binfo);
6600 if (base_binfo)
6601 field = base_binfo;
6602 else
6603 field = next_initializable_field (TYPE_FIELDS (type));
6605 if (!field)
6607 /* [dcl.init.aggr]
6609 An initializer for an aggregate member that is an
6610 empty class shall have the form of an empty
6611 initializer-list {}. */
6612 if (!first_initializer_p)
6614 if (complain & tf_error)
6615 error ("initializer for %qT must be brace-enclosed", type);
6616 return error_mark_node;
6618 return new_init;
6621 /* For C++20 CTAD, handle pack expansions in the base list. */
6622 tree last_was_pack_expansion = NULL_TREE;
6624 /* Loop through the initializable fields, gathering initializers. */
6625 while (d->cur != d->end)
6627 tree field_init;
6628 constructor_elt *old_cur = d->cur;
6629 bool direct_desig = false;
6631 /* Handle C++20 designated initializers. */
6632 if (d->cur->index)
6634 if (d->cur->index == error_mark_node)
6635 return error_mark_node;
6637 if (TREE_CODE (d->cur->index) == FIELD_DECL)
6639 /* We already reshaped this. */
6640 if (field != d->cur->index)
6642 if (tree id = DECL_NAME (d->cur->index))
6643 gcc_checking_assert (d->cur->index
6644 == get_class_binding (type, id));
6645 field = d->cur->index;
6648 else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
6650 field = get_class_binding (type, d->cur->index);
6651 direct_desig = true;
6653 else
6655 if (complain & tf_error)
6656 error ("%<[%E] =%> used in a GNU-style designated initializer"
6657 " for class %qT", d->cur->index, type);
6658 return error_mark_node;
6661 if (!field && ANON_AGGR_TYPE_P (type))
6662 /* Apparently the designator isn't for a member of this anonymous
6663 struct, so head back to the enclosing class. */
6664 break;
6666 if (!field || TREE_CODE (field) != FIELD_DECL)
6668 if (complain & tf_error)
6669 error ("%qT has no non-static data member named %qD", type,
6670 d->cur->index);
6671 return error_mark_node;
6674 /* If the element is an anonymous union object and the initializer
6675 list is a designated-initializer-list, the anonymous union object
6676 is initialized by the designated-initializer-list { D }, where D
6677 is the designated-initializer-clause naming a member of the
6678 anonymous union object. */
6679 tree ictx = DECL_CONTEXT (field);
6680 if (!same_type_ignoring_top_level_qualifiers_p (ictx, type))
6682 /* Find the anon aggr that is a direct member of TYPE. */
6683 while (ANON_AGGR_TYPE_P (ictx))
6685 tree cctx = TYPE_CONTEXT (ictx);
6686 if (same_type_ignoring_top_level_qualifiers_p (cctx, type))
6687 goto found;
6688 ictx = cctx;
6691 /* Not found, e.g. FIELD is a member of a base class. */
6692 if (complain & tf_error)
6693 error ("%qD is not a direct member of %qT", field, type);
6694 return error_mark_node;
6696 found:
6697 /* Now find the TYPE member with that anon aggr type. */
6698 tree aafield = TYPE_FIELDS (type);
6699 for (; aafield; aafield = TREE_CHAIN (aafield))
6700 if (TREE_TYPE (aafield) == ictx)
6701 break;
6702 gcc_assert (aafield);
6703 field = aafield;
6704 direct_desig = false;
6708 /* If we processed all the member of the class, we are done. */
6709 if (!field)
6710 break;
6712 last_was_pack_expansion = (PACK_EXPANSION_P (TREE_TYPE (field))
6713 ? field : NULL_TREE);
6714 if (last_was_pack_expansion)
6715 /* Each non-trailing aggregate element that is a pack expansion is
6716 assumed to correspond to no elements of the initializer list. */
6717 goto continue_;
6719 if (direct_desig)
6721 /* The designated field F is initialized from this one element.
6723 Note that we don't want to do this if we found the designator
6724 inside an anon aggr above; we use the normal code to implement:
6726 "If the element is an anonymous union member and the initializer
6727 list is a brace-enclosed designated- initializer-list, the element
6728 is initialized by the designated-initializer-list { D }, where D
6729 is the designated- initializer-clause naming a member of the
6730 anonymous union member." */
6731 field_init = reshape_single_init (TREE_TYPE (field),
6732 d->cur->value, complain);
6733 d->cur++;
6735 else
6736 field_init = reshape_init_r (TREE_TYPE (field), d,
6737 /*first_initializer_p=*/NULL_TREE,
6738 complain);
6740 if (field_init == error_mark_node)
6741 return error_mark_node;
6743 if (d->cur == old_cur && d->cur->index)
6745 /* This can happen with an invalid initializer for a flexible
6746 array member (c++/54441). */
6747 if (complain & tf_error)
6748 error ("invalid initializer for %q#D", field);
6749 return error_mark_node;
6752 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
6754 /* [dcl.init.aggr]
6756 When a union is initialized with a brace-enclosed
6757 initializer, the braces shall only contain an
6758 initializer for the first member of the union. */
6759 if (TREE_CODE (type) == UNION_TYPE)
6760 break;
6762 continue_:
6763 if (base_binfo)
6765 if (BINFO_BASE_ITERATE (binfo, ++binfo_idx, base_binfo))
6766 field = base_binfo;
6767 else
6768 field = next_initializable_field (TYPE_FIELDS (type));
6770 else
6771 field = next_initializable_field (DECL_CHAIN (field));
6774 /* A trailing aggregate element that is a pack expansion is assumed to
6775 correspond to all remaining elements of the initializer list (if any). */
6776 if (last_was_pack_expansion)
6778 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
6779 last_was_pack_expansion, d->cur->value);
6780 while (d->cur != d->end)
6781 d->cur++;
6784 return new_init;
6787 /* Subroutine of reshape_init_r. We're in a context where C99 initializer
6788 designators are not valid; either complain or return true to indicate
6789 that reshape_init_r should return error_mark_node. */
6791 static bool
6792 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
6794 if (d->cur->index)
6796 if (complain & tf_error)
6797 error_at (cp_expr_loc_or_input_loc (d->cur->index),
6798 "C99 designator %qE outside aggregate initializer",
6799 d->cur->index);
6800 else
6801 return true;
6803 return false;
6806 /* Subroutine of reshape_init, which processes a single initializer (part of
6807 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
6808 iterator within the CONSTRUCTOR which points to the initializer to process.
6809 If this is the first initializer of the outermost CONSTRUCTOR node,
6810 FIRST_INITIALIZER_P is that CONSTRUCTOR; otherwise, it is NULL_TREE. */
6812 static tree
6813 reshape_init_r (tree type, reshape_iter *d, tree first_initializer_p,
6814 tsubst_flags_t complain)
6816 tree init = d->cur->value;
6818 if (error_operand_p (init))
6819 return error_mark_node;
6821 if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
6822 && has_designator_problem (d, complain))
6823 return error_mark_node;
6825 tree stripped_init = tree_strip_any_location_wrapper (init);
6827 if (TREE_CODE (type) == COMPLEX_TYPE)
6829 /* A complex type can be initialized from one or two initializers,
6830 but braces are not elided. */
6831 d->cur++;
6832 if (BRACE_ENCLOSED_INITIALIZER_P (stripped_init))
6834 if (CONSTRUCTOR_NELTS (stripped_init) > 2)
6836 if (complain & tf_error)
6837 error ("too many initializers for %qT", type);
6838 else
6839 return error_mark_node;
6842 else if (first_initializer_p && d->cur != d->end)
6844 vec<constructor_elt, va_gc> *v = 0;
6845 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
6846 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
6847 if (has_designator_problem (d, complain))
6848 return error_mark_node;
6849 d->cur++;
6850 init = build_constructor (init_list_type_node, v);
6852 return init;
6855 /* A non-aggregate type is always initialized with a single
6856 initializer. */
6857 if (!CP_AGGREGATE_TYPE_P (type)
6858 /* As is an array with dependent bound, which we can see
6859 during C++20 aggregate CTAD. */
6860 || (cxx_dialect >= cxx20
6861 && TREE_CODE (type) == ARRAY_TYPE
6862 && uses_template_parms (TYPE_DOMAIN (type))))
6864 /* It is invalid to initialize a non-aggregate type with a
6865 brace-enclosed initializer before C++0x.
6866 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
6867 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
6868 a CONSTRUCTOR (with a record type). */
6869 if (TREE_CODE (stripped_init) == CONSTRUCTOR
6870 /* Don't complain about a capture-init. */
6871 && !CONSTRUCTOR_IS_DIRECT_INIT (stripped_init)
6872 && BRACE_ENCLOSED_INITIALIZER_P (stripped_init)) /* p7626.C */
6874 if (SCALAR_TYPE_P (type))
6876 if (cxx_dialect < cxx11)
6878 if (complain & tf_error)
6879 error ("braces around scalar initializer for type %qT",
6880 type);
6881 init = error_mark_node;
6883 else if (first_initializer_p
6884 || (CONSTRUCTOR_NELTS (stripped_init) > 0
6885 && (BRACE_ENCLOSED_INITIALIZER_P
6886 (CONSTRUCTOR_ELT (stripped_init,0)->value))))
6888 if (complain & tf_error)
6889 error ("too many braces around scalar initializer "
6890 "for type %qT", type);
6891 init = error_mark_node;
6894 else
6895 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6898 d->cur++;
6899 return init;
6902 /* "If T is a class type and the initializer list has a single element of
6903 type cv U, where U is T or a class derived from T, the object is
6904 initialized from that element." Even if T is an aggregate. */
6905 if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
6906 && first_initializer_p
6907 /* But not if it's a designated init. */
6908 && !d->cur->index
6909 && d->end - d->cur == 1
6910 && reference_related_p (type, TREE_TYPE (init)))
6912 d->cur++;
6913 return init;
6916 /* [dcl.init.aggr]
6918 All implicit type conversions (clause _conv_) are considered when
6919 initializing the aggregate member with an initializer from an
6920 initializer-list. If the initializer can initialize a member,
6921 the member is initialized. Otherwise, if the member is itself a
6922 non-empty subaggregate, brace elision is assumed and the
6923 initializer is considered for the initialization of the first
6924 member of the subaggregate. */
6925 if ((TREE_CODE (init) != CONSTRUCTOR || COMPOUND_LITERAL_P (init))
6926 /* But don't try this for the first initializer, since that would be
6927 looking through the outermost braces; A a2 = { a1 }; is not a
6928 valid aggregate initialization. */
6929 && !first_initializer_p
6930 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
6931 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
6932 complain)))
6934 d->cur++;
6935 return init;
6938 /* [dcl.init.string]
6940 A char array (whether plain char, signed char, or unsigned char)
6941 can be initialized by a string-literal (optionally enclosed in
6942 braces); a wchar_t array can be initialized by a wide
6943 string-literal (optionally enclosed in braces). */
6944 if (TREE_CODE (type) == ARRAY_TYPE
6945 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
6947 tree str_init = init;
6948 tree stripped_str_init = stripped_init;
6949 reshape_iter stripd = {};
6951 /* Strip one level of braces if and only if they enclose a single
6952 element (as allowed by [dcl.init.string]). */
6953 if (!first_initializer_p
6954 && TREE_CODE (stripped_str_init) == CONSTRUCTOR
6955 && CONSTRUCTOR_NELTS (stripped_str_init) == 1)
6957 stripd.cur = CONSTRUCTOR_ELT (stripped_str_init, 0);
6958 str_init = stripd.cur->value;
6959 stripped_str_init = tree_strip_any_location_wrapper (str_init);
6962 /* If it's a string literal, then it's the initializer for the array
6963 as a whole. Otherwise, continue with normal initialization for
6964 array types (one value per array element). */
6965 if (TREE_CODE (stripped_str_init) == STRING_CST)
6967 if ((first_initializer_p && has_designator_problem (d, complain))
6968 || (stripd.cur && has_designator_problem (&stripd, complain)))
6969 return error_mark_node;
6970 d->cur++;
6971 return str_init;
6975 /* The following cases are about aggregates. If we are not within a full
6976 initializer already, and there is not a CONSTRUCTOR, it means that there
6977 is a missing set of braces (that is, we are processing the case for
6978 which reshape_init exists). */
6979 bool braces_elided_p = false;
6980 if (!first_initializer_p)
6982 if (TREE_CODE (stripped_init) == CONSTRUCTOR)
6984 tree init_type = TREE_TYPE (init);
6985 if (init_type && TYPE_PTRMEMFUNC_P (init_type))
6986 /* There is no need to call reshape_init for pointer-to-member
6987 function initializers, as they are always constructed correctly
6988 by the front end. Here we have e.g. {.__pfn=0B, .__delta=0},
6989 which is missing outermost braces. We should warn below, and
6990 one of the routines below will wrap it in additional { }. */;
6991 /* For a nested compound literal, proceed to specialized routines,
6992 to handle initialization of arrays and similar. */
6993 else if (COMPOUND_LITERAL_P (stripped_init))
6994 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (stripped_init));
6995 /* If we have an unresolved designator, we need to find the member it
6996 designates within TYPE, so proceed to the routines below. For
6997 FIELD_DECL or INTEGER_CST designators, we're already initializing
6998 the designated element. */
6999 else if (d->cur->index
7000 && TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
7001 /* Brace elision with designators is only permitted for anonymous
7002 aggregates. */
7003 gcc_checking_assert (ANON_AGGR_TYPE_P (type));
7004 /* A CONSTRUCTOR of the target's type is a previously
7005 digested initializer. */
7006 else if (same_type_ignoring_top_level_qualifiers_p (type, init_type))
7008 ++d->cur;
7009 return init;
7011 else
7013 /* Something that hasn't been reshaped yet. */
7014 ++d->cur;
7015 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (stripped_init));
7016 return reshape_init (type, init, complain);
7020 if (complain & tf_warning)
7021 warning (OPT_Wmissing_braces,
7022 "missing braces around initializer for %qT",
7023 type);
7024 braces_elided_p = true;
7027 /* Dispatch to specialized routines. */
7028 tree new_init;
7029 if (CLASS_TYPE_P (type))
7030 new_init = reshape_init_class (type, d, first_initializer_p, complain);
7031 else if (TREE_CODE (type) == ARRAY_TYPE)
7032 new_init = reshape_init_array (type, d, first_initializer_p, complain);
7033 else if (VECTOR_TYPE_P (type))
7034 new_init = reshape_init_vector (type, d, complain);
7035 else
7036 gcc_unreachable();
7038 if (braces_elided_p
7039 && TREE_CODE (new_init) == CONSTRUCTOR)
7040 CONSTRUCTOR_BRACES_ELIDED_P (new_init) = true;
7042 return new_init;
7045 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
7046 brace-enclosed aggregate initializer.
7048 INIT is the CONSTRUCTOR containing the list of initializers describing
7049 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
7050 It may not presently match the shape of the TYPE; for example:
7052 struct S { int a; int b; };
7053 struct S a[] = { 1, 2, 3, 4 };
7055 Here INIT will hold a vector of four elements, rather than a
7056 vector of two elements, each itself a vector of two elements. This
7057 routine transforms INIT from the former form into the latter. The
7058 revised CONSTRUCTOR node is returned. */
7060 tree
7061 reshape_init (tree type, tree init, tsubst_flags_t complain)
7063 vec<constructor_elt, va_gc> *v;
7064 reshape_iter d;
7065 tree new_init;
7067 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
7069 v = CONSTRUCTOR_ELTS (init);
7071 /* An empty constructor does not need reshaping, and it is always a valid
7072 initializer. */
7073 if (vec_safe_is_empty (v))
7074 return init;
7076 /* Brace elision is not performed for a CONSTRUCTOR representing
7077 parenthesized aggregate initialization. */
7078 if (CONSTRUCTOR_IS_PAREN_INIT (init))
7080 tree elt = (*v)[0].value;
7081 /* If we're initializing a char array from a string-literal that is
7082 enclosed in braces, unwrap it here. */
7083 if (TREE_CODE (type) == ARRAY_TYPE
7084 && vec_safe_length (v) == 1
7085 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type)))
7086 && TREE_CODE (tree_strip_any_location_wrapper (elt)) == STRING_CST)
7087 return elt;
7088 return init;
7091 /* Handle [dcl.init.list] direct-list-initialization from
7092 single element of enumeration with a fixed underlying type. */
7093 if (is_direct_enum_init (type, init))
7095 tree elt = CONSTRUCTOR_ELT (init, 0)->value;
7096 type = cv_unqualified (type);
7097 if (check_narrowing (ENUM_UNDERLYING_TYPE (type), elt, complain))
7099 warning_sentinel w (warn_useless_cast);
7100 warning_sentinel w2 (warn_ignored_qualifiers);
7101 return cp_build_c_cast (input_location, type, elt,
7102 tf_warning_or_error);
7104 else
7105 return error_mark_node;
7108 /* Recurse on this CONSTRUCTOR. */
7109 d.cur = &(*v)[0];
7110 d.end = d.cur + v->length ();
7112 new_init = reshape_init_r (type, &d, init, complain);
7113 if (new_init == error_mark_node)
7114 return error_mark_node;
7116 /* Make sure all the element of the constructor were used. Otherwise,
7117 issue an error about exceeding initializers. */
7118 if (d.cur != d.end)
7120 if (complain & tf_error)
7121 error ("too many initializers for %qT", type);
7122 return error_mark_node;
7125 if (CONSTRUCTOR_IS_DIRECT_INIT (init)
7126 && BRACE_ENCLOSED_INITIALIZER_P (new_init))
7127 CONSTRUCTOR_IS_DIRECT_INIT (new_init) = true;
7128 if (CONSTRUCTOR_IS_DESIGNATED_INIT (init)
7129 && BRACE_ENCLOSED_INITIALIZER_P (new_init))
7130 CONSTRUCTOR_IS_DESIGNATED_INIT (new_init) = true;
7132 return new_init;
7135 /* Verify array initializer. Returns true if errors have been reported. */
7137 bool
7138 check_array_initializer (tree decl, tree type, tree init)
7140 tree element_type = TREE_TYPE (type);
7142 /* Structured binding when initialized with an array type needs
7143 to have complete type. */
7144 if (decl
7145 && DECL_DECOMPOSITION_P (decl)
7146 && !DECL_DECOMP_BASE (decl)
7147 && !COMPLETE_TYPE_P (type))
7149 error_at (DECL_SOURCE_LOCATION (decl),
7150 "structured binding has incomplete type %qT", type);
7151 TREE_TYPE (decl) = error_mark_node;
7152 return true;
7155 /* The array type itself need not be complete, because the
7156 initializer may tell us how many elements are in the array.
7157 But, the elements of the array must be complete. */
7158 if (!COMPLETE_TYPE_P (complete_type (element_type)))
7160 if (decl)
7161 error_at (DECL_SOURCE_LOCATION (decl),
7162 "elements of array %q#D have incomplete type", decl);
7163 else
7164 error ("elements of array %q#T have incomplete type", type);
7165 return true;
7168 location_t loc = (decl ? location_of (decl) : input_location);
7169 if (!verify_type_context (loc, TCTX_ARRAY_ELEMENT, element_type))
7170 return true;
7172 /* A compound literal can't have variable size. */
7173 if (init && !decl
7174 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
7175 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
7177 error ("variable-sized compound literal");
7178 return true;
7180 return false;
7183 /* Subroutine of check_initializer; args are passed down from that function.
7184 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
7186 static tree
7187 build_aggr_init_full_exprs (tree decl, tree init, int flags)
7190 gcc_assert (stmts_are_full_exprs_p ());
7191 return build_aggr_init (decl, init, flags, tf_warning_or_error);
7194 /* Verify INIT (the initializer for DECL), and record the
7195 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
7196 grok_reference_init.
7198 If the return value is non-NULL, it is an expression that must be
7199 evaluated dynamically to initialize DECL. */
7201 static tree
7202 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
7204 tree type;
7205 tree init_code = NULL;
7206 tree core_type;
7208 /* Things that are going to be initialized need to have complete
7209 type. */
7210 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
7212 if (DECL_HAS_VALUE_EXPR_P (decl))
7214 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
7215 it doesn't have storage to be initialized. */
7216 gcc_assert (init == NULL_TREE);
7217 return NULL_TREE;
7220 if (type == error_mark_node)
7221 /* We will have already complained. */
7222 return NULL_TREE;
7224 if (TREE_CODE (type) == ARRAY_TYPE)
7226 if (check_array_initializer (decl, type, init))
7227 return NULL_TREE;
7229 else if (!COMPLETE_TYPE_P (type))
7231 error_at (DECL_SOURCE_LOCATION (decl),
7232 "%q#D has incomplete type", decl);
7233 TREE_TYPE (decl) = error_mark_node;
7234 return NULL_TREE;
7236 else
7237 /* There is no way to make a variable-sized class type in GNU C++. */
7238 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
7240 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
7242 int init_len = CONSTRUCTOR_NELTS (init);
7243 if (SCALAR_TYPE_P (type))
7245 if (init_len == 0)
7247 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
7248 init = build_zero_init (type, NULL_TREE, false);
7250 else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
7252 error_at (cp_expr_loc_or_loc (init, DECL_SOURCE_LOCATION (decl)),
7253 "scalar object %qD requires one element in "
7254 "initializer", decl);
7255 TREE_TYPE (decl) = error_mark_node;
7256 return NULL_TREE;
7261 if (TREE_CODE (decl) == CONST_DECL)
7263 gcc_assert (!TYPE_REF_P (type));
7265 DECL_INITIAL (decl) = init;
7267 gcc_assert (init != NULL_TREE);
7268 init = NULL_TREE;
7270 else if (!init && DECL_REALLY_EXTERN (decl))
7272 else if (init || type_build_ctor_call (type)
7273 || TYPE_REF_P (type))
7275 if (TYPE_REF_P (type))
7277 init = grok_reference_init (decl, type, init, flags);
7278 flags |= LOOKUP_ALREADY_DIGESTED;
7280 else if (!init)
7281 check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
7282 tf_warning_or_error);
7283 /* Do not reshape constructors of vectors (they don't need to be
7284 reshaped. */
7285 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
7287 if (is_std_init_list (type))
7289 init = perform_implicit_conversion (type, init,
7290 tf_warning_or_error);
7291 flags |= LOOKUP_ALREADY_DIGESTED;
7293 else if (TYPE_NON_AGGREGATE_CLASS (type))
7295 /* Don't reshape if the class has constructors. */
7296 if (cxx_dialect == cxx98)
7297 error_at (cp_expr_loc_or_loc (init, DECL_SOURCE_LOCATION (decl)),
7298 "in C++98 %qD must be initialized by "
7299 "constructor, not by %<{...}%>",
7300 decl);
7302 else if (VECTOR_TYPE_P (type) && TYPE_VECTOR_OPAQUE (type))
7304 error ("opaque vector types cannot be initialized");
7305 init = error_mark_node;
7307 else
7309 init = reshape_init (type, init, tf_warning_or_error);
7310 flags |= LOOKUP_NO_NARROWING;
7313 /* [dcl.init] "Otherwise, if the destination type is an array, the object
7314 is initialized as follows..." So handle things like
7316 int a[](1, 2, 3);
7318 which is permitted in C++20 by P0960. */
7319 else if (TREE_CODE (init) == TREE_LIST
7320 && TREE_TYPE (init) == NULL_TREE
7321 && TREE_CODE (type) == ARRAY_TYPE
7322 && !DECL_DECOMPOSITION_P (decl)
7323 && (cxx_dialect >= cxx20))
7324 init = do_aggregate_paren_init (init, type);
7325 else if (TREE_CODE (init) == TREE_LIST
7326 && TREE_TYPE (init) != unknown_type_node
7327 && !MAYBE_CLASS_TYPE_P (type))
7329 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
7331 /* We get here with code like `int a (2);' */
7332 init = build_x_compound_expr_from_list (init, ELK_INIT,
7333 tf_warning_or_error);
7336 /* If DECL has an array type without a specific bound, deduce the
7337 array size from the initializer. */
7338 maybe_deduce_size_from_array_init (decl, init);
7339 type = TREE_TYPE (decl);
7340 if (type == error_mark_node)
7341 return NULL_TREE;
7343 if (((type_build_ctor_call (type) || CLASS_TYPE_P (type))
7344 && !(flags & LOOKUP_ALREADY_DIGESTED)
7345 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
7346 && CP_AGGREGATE_TYPE_P (type)
7347 && (CLASS_TYPE_P (type)
7348 /* The call to build_aggr_init below could end up
7349 calling build_vec_init, which may break when we
7350 are processing a template. */
7351 || processing_template_decl
7352 || !TYPE_NEEDS_CONSTRUCTING (type)
7353 || type_has_extended_temps (type))))
7354 || (DECL_DECOMPOSITION_P (decl) && TREE_CODE (type) == ARRAY_TYPE))
7356 init_code = build_aggr_init_full_exprs (decl, init, flags);
7358 /* A constructor call is a non-trivial initializer even if
7359 it isn't explicitly written. */
7360 if (TREE_SIDE_EFFECTS (init_code))
7361 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
7363 /* If this is a constexpr initializer, expand_default_init will
7364 have returned an INIT_EXPR rather than a CALL_EXPR. In that
7365 case, pull the initializer back out and pass it down into
7366 store_init_value. */
7367 while (true)
7369 if (TREE_CODE (init_code) == EXPR_STMT
7370 || TREE_CODE (init_code) == STMT_EXPR
7371 || TREE_CODE (init_code) == CONVERT_EXPR)
7372 init_code = TREE_OPERAND (init_code, 0);
7373 else if (TREE_CODE (init_code) == BIND_EXPR)
7374 init_code = BIND_EXPR_BODY (init_code);
7375 else
7376 break;
7378 if (TREE_CODE (init_code) == INIT_EXPR)
7380 /* In C++20, the call to build_aggr_init could have created
7381 an INIT_EXPR with a CONSTRUCTOR as the RHS to handle
7382 A(1, 2). */
7383 tree rhs = TREE_OPERAND (init_code, 1);
7384 if (processing_template_decl && TREE_CODE (rhs) == TARGET_EXPR)
7385 /* Avoid leaking TARGET_EXPR into template trees. */
7386 rhs = build_implicit_conv_flags (type, init, flags);
7387 init = rhs;
7389 init_code = NULL_TREE;
7390 /* Don't call digest_init; it's unnecessary and will complain
7391 about aggregate initialization of non-aggregate classes. */
7392 flags |= LOOKUP_ALREADY_DIGESTED;
7394 else if (DECL_DECLARED_CONSTEXPR_P (decl)
7395 || DECL_DECLARED_CONSTINIT_P (decl))
7397 /* Declared constexpr or constinit, but no suitable initializer;
7398 massage init appropriately so we can pass it into
7399 store_init_value for the error. */
7400 if (CLASS_TYPE_P (type)
7401 && (!init || TREE_CODE (init) == TREE_LIST))
7403 init = build_functional_cast (input_location, type,
7404 init, tf_none);
7405 if (TREE_CODE (init) == TARGET_EXPR)
7406 TARGET_EXPR_DIRECT_INIT_P (init) = true;
7408 init_code = NULL_TREE;
7410 else
7411 init = NULL_TREE;
7414 if (init && TREE_CODE (init) != TREE_VEC)
7416 init_code = store_init_value (decl, init, cleanups, flags);
7418 if (DECL_INITIAL (decl)
7419 && TREE_CODE (DECL_INITIAL (decl)) == CONSTRUCTOR
7420 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (DECL_INITIAL (decl))))
7422 tree elt = CONSTRUCTOR_ELTS (DECL_INITIAL (decl))->last ().value;
7423 if (TREE_CODE (TREE_TYPE (elt)) == ARRAY_TYPE
7424 && TYPE_SIZE (TREE_TYPE (elt)) == NULL_TREE)
7425 cp_complete_array_type (&TREE_TYPE (elt), elt, false);
7428 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
7429 && DECL_INITIAL (decl)
7430 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
7431 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
7432 warning_at (cp_expr_loc_or_loc (DECL_INITIAL (decl),
7433 DECL_SOURCE_LOCATION (decl)),
7434 0, "array %qD initialized by parenthesized "
7435 "string literal %qE",
7436 decl, DECL_INITIAL (decl));
7437 init = NULL_TREE;
7440 else
7442 if (CLASS_TYPE_P (core_type = strip_array_types (type))
7443 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
7444 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
7445 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
7446 /*complain=*/true);
7448 check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
7449 tf_warning_or_error);
7452 if (init && init != error_mark_node)
7453 init_code = build2 (INIT_EXPR, type, decl, init);
7455 if (init_code && !TREE_SIDE_EFFECTS (init_code)
7456 && init_code != error_mark_node)
7457 init_code = NULL_TREE;
7459 if (init_code)
7461 /* We might have set these in cp_finish_decl. */
7462 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
7463 TREE_CONSTANT (decl) = false;
7466 if (init_code
7467 && DECL_IN_AGGR_P (decl)
7468 && DECL_INITIALIZED_IN_CLASS_P (decl))
7470 static int explained = 0;
7472 if (cxx_dialect < cxx11)
7473 error ("initializer invalid for static member with constructor");
7474 else if (cxx_dialect < cxx17)
7475 error ("non-constant in-class initialization invalid for static "
7476 "member %qD", decl);
7477 else
7478 error ("non-constant in-class initialization invalid for non-inline "
7479 "static member %qD", decl);
7480 if (!explained)
7482 inform (input_location,
7483 "(an out of class initialization is required)");
7484 explained = 1;
7486 return NULL_TREE;
7489 return init_code;
7492 /* If DECL is not a local variable, give it RTL. */
7494 static void
7495 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
7497 int toplev = toplevel_bindings_p ();
7498 int defer_p;
7500 /* Set the DECL_ASSEMBLER_NAME for the object. */
7501 if (asmspec)
7503 /* The `register' keyword, when used together with an
7504 asm-specification, indicates that the variable should be
7505 placed in a particular register. */
7506 if (VAR_P (decl) && DECL_REGISTER (decl))
7508 set_user_assembler_name (decl, asmspec);
7509 DECL_HARD_REGISTER (decl) = 1;
7511 else
7513 if (TREE_CODE (decl) == FUNCTION_DECL
7514 && fndecl_built_in_p (decl, BUILT_IN_NORMAL))
7515 set_builtin_user_assembler_name (decl, asmspec);
7516 set_user_assembler_name (decl, asmspec);
7517 if (DECL_LOCAL_DECL_P (decl))
7518 if (auto ns_decl = DECL_LOCAL_DECL_ALIAS (decl))
7519 /* We have to propagate the name to the ns-alias.
7520 This is horrible, as we're affecting a
7521 possibly-shared decl. Again, a one-true-decl
7522 model breaks down. */
7523 if (ns_decl != error_mark_node)
7524 set_user_assembler_name (ns_decl, asmspec);
7528 /* Handle non-variables up front. */
7529 if (!VAR_P (decl))
7531 rest_of_decl_compilation (decl, toplev, at_eof);
7532 return;
7535 /* If we see a class member here, it should be a static data
7536 member. */
7537 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
7539 gcc_assert (TREE_STATIC (decl));
7540 /* An in-class declaration of a static data member should be
7541 external; it is only a declaration, and not a definition. */
7542 if (init == NULL_TREE)
7543 gcc_assert (DECL_EXTERNAL (decl)
7544 || !TREE_PUBLIC (decl));
7547 /* We don't create any RTL for local variables. */
7548 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
7549 return;
7551 /* We defer emission of local statics until the corresponding
7552 DECL_EXPR is expanded. But with constexpr its function might never
7553 be expanded, so go ahead and tell cgraph about the variable now. */
7554 defer_p = ((DECL_FUNCTION_SCOPE_P (decl)
7555 && !var_in_maybe_constexpr_fn (decl))
7556 || DECL_VIRTUAL_P (decl));
7558 /* Defer template instantiations. */
7559 if (DECL_LANG_SPECIFIC (decl)
7560 && DECL_IMPLICIT_INSTANTIATION (decl))
7561 defer_p = 1;
7563 /* If we're not deferring, go ahead and assemble the variable. */
7564 if (!defer_p)
7565 rest_of_decl_compilation (decl, toplev, at_eof);
7568 /* walk_tree helper for wrap_temporary_cleanups, below. */
7570 static tree
7571 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
7573 /* Stop at types or full-expression boundaries. */
7574 if (TYPE_P (*stmt_p)
7575 || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
7577 *walk_subtrees = 0;
7578 return NULL_TREE;
7581 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
7583 tree guard = (tree)data;
7584 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
7586 if (tcleanup && !CLEANUP_EH_ONLY (*stmt_p)
7587 && !expr_noexcept_p (tcleanup, tf_none))
7589 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
7590 /* Tell honor_protect_cleanup_actions to handle this as a separate
7591 cleanup. */
7592 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
7593 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
7597 return NULL_TREE;
7600 /* We're initializing a local variable which has a cleanup GUARD. If there
7601 are any temporaries used in the initializer INIT of this variable, we
7602 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
7603 variable will be cleaned up properly if one of them throws.
7605 Unfortunately, there's no way to express this properly in terms of
7606 nesting, as the regions for the temporaries overlap the region for the
7607 variable itself; if there are two temporaries, the variable needs to be
7608 the first thing destroyed if either of them throws. However, we only
7609 want to run the variable's cleanup if it actually got constructed. So
7610 we need to guard the temporary cleanups with the variable's cleanup if
7611 they are run on the normal path, but not if they are run on the
7612 exceptional path. We implement this by telling
7613 honor_protect_cleanup_actions to strip the variable cleanup from the
7614 exceptional path.
7616 Another approach could be to make the variable cleanup region enclose
7617 initialization, but depend on a flag to indicate that the variable is
7618 initialized; that's effectively what we do for arrays. But the current
7619 approach works fine for non-arrays, and has no code overhead in the usual
7620 case where the temporary destructors are noexcept. */
7622 static void
7623 wrap_temporary_cleanups (tree init, tree guard)
7625 if (TREE_CODE (guard) == BIND_EXPR)
7627 /* An array cleanup region already encloses any temporary cleanups,
7628 don't wrap it around them again. */
7629 gcc_checking_assert (BIND_EXPR_VEC_DTOR (guard));
7630 return;
7632 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
7635 /* Generate code to initialize DECL (a local variable). */
7637 static void
7638 initialize_local_var (tree decl, tree init)
7640 tree type = TREE_TYPE (decl);
7641 tree cleanup;
7642 int already_used;
7644 gcc_assert (VAR_P (decl)
7645 || TREE_CODE (decl) == RESULT_DECL);
7646 gcc_assert (!TREE_STATIC (decl));
7648 if (DECL_SIZE (decl) == NULL_TREE)
7650 /* If we used it already as memory, it must stay in memory. */
7651 DECL_INITIAL (decl) = NULL_TREE;
7652 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
7653 return;
7656 if (type == error_mark_node)
7657 return;
7659 /* Compute and store the initial value. */
7660 already_used = TREE_USED (decl) || TREE_USED (type);
7661 if (TREE_USED (type))
7662 DECL_READ_P (decl) = 1;
7664 /* Generate a cleanup, if necessary. */
7665 cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
7667 /* Perform the initialization. */
7668 if (init)
7670 tree rinit = (TREE_CODE (init) == INIT_EXPR
7671 ? TREE_OPERAND (init, 1) : NULL_TREE);
7672 if (rinit && !TREE_SIDE_EFFECTS (rinit)
7673 && TREE_OPERAND (init, 0) == decl)
7675 /* Stick simple initializers in DECL_INITIAL so that
7676 -Wno-init-self works (c++/34772). */
7677 DECL_INITIAL (decl) = rinit;
7679 if (warn_init_self && TYPE_REF_P (type))
7681 STRIP_NOPS (rinit);
7682 if (rinit == decl)
7683 warning_at (DECL_SOURCE_LOCATION (decl),
7684 OPT_Winit_self,
7685 "reference %qD is initialized with itself", decl);
7688 else
7690 int saved_stmts_are_full_exprs_p;
7692 /* If we're only initializing a single object, guard the
7693 destructors of any temporaries used in its initializer with
7694 its destructor. */
7695 if (cleanup)
7696 wrap_temporary_cleanups (init, cleanup);
7698 gcc_assert (building_stmt_list_p ());
7699 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
7700 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
7701 finish_expr_stmt (init);
7702 current_stmt_tree ()->stmts_are_full_exprs_p =
7703 saved_stmts_are_full_exprs_p;
7707 /* Set this to 0 so we can tell whether an aggregate which was
7708 initialized was ever used. Don't do this if it has a
7709 destructor, so we don't complain about the 'resource
7710 allocation is initialization' idiom. Now set
7711 attribute((unused)) on types so decls of that type will be
7712 marked used. (see TREE_USED, above.) */
7713 if (TYPE_NEEDS_CONSTRUCTING (type)
7714 && ! already_used
7715 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
7716 && DECL_NAME (decl))
7717 TREE_USED (decl) = 0;
7718 else if (already_used)
7719 TREE_USED (decl) = 1;
7721 if (cleanup)
7722 finish_decl_cleanup (decl, cleanup);
7725 /* DECL is a VAR_DECL for a compiler-generated variable with static
7726 storage duration (like a virtual table) whose initializer is a
7727 compile-time constant. Initialize the variable and provide it to the
7728 back end. */
7730 void
7731 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
7733 tree init;
7734 gcc_assert (DECL_ARTIFICIAL (decl));
7735 init = build_constructor (TREE_TYPE (decl), v);
7736 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
7737 DECL_INITIAL (decl) = init;
7738 DECL_INITIALIZED_P (decl) = 1;
7739 /* Mark the decl as constexpr so that we can access its content
7740 at compile time. */
7741 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = true;
7742 DECL_DECLARED_CONSTEXPR_P (decl) = true;
7743 determine_visibility (decl);
7744 layout_var_decl (decl);
7745 maybe_commonize_var (decl);
7746 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
7749 /* INIT is the initializer for a variable, as represented by the
7750 parser. Returns true iff INIT is value-dependent. */
7752 static bool
7753 value_dependent_init_p (tree init)
7755 if (TREE_CODE (init) == TREE_LIST)
7756 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
7757 return any_value_dependent_elements_p (init);
7758 else if (TREE_CODE (init) == CONSTRUCTOR)
7759 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
7761 if (dependent_type_p (TREE_TYPE (init)))
7762 return true;
7764 vec<constructor_elt, va_gc> *elts;
7765 size_t nelts;
7766 size_t i;
7768 elts = CONSTRUCTOR_ELTS (init);
7769 nelts = vec_safe_length (elts);
7770 for (i = 0; i < nelts; ++i)
7771 if (value_dependent_init_p ((*elts)[i].value))
7772 return true;
7774 else
7775 /* It must be a simple expression, e.g., int i = 3; */
7776 return value_dependent_expression_p (init);
7778 return false;
7781 // Returns true if a DECL is VAR_DECL with the concept specifier.
7782 static inline bool
7783 is_concept_var (tree decl)
7785 return (VAR_P (decl)
7786 // Not all variables have DECL_LANG_SPECIFIC.
7787 && DECL_LANG_SPECIFIC (decl)
7788 && DECL_DECLARED_CONCEPT_P (decl));
7791 /* A helper function to be called via walk_tree. If any label exists
7792 under *TP, it is (going to be) forced. Set has_forced_label_in_static. */
7794 static tree
7795 notice_forced_label_r (tree *tp, int *walk_subtrees, void *)
7797 if (TYPE_P (*tp))
7798 *walk_subtrees = 0;
7799 if (TREE_CODE (*tp) == LABEL_DECL)
7800 cfun->has_forced_label_in_static = 1;
7801 return NULL_TREE;
7804 /* Return true if DECL has either a trivial destructor, or for C++20
7805 is constexpr and has a constexpr destructor. */
7807 static bool
7808 decl_maybe_constant_destruction (tree decl, tree type)
7810 return (TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
7811 || (cxx_dialect >= cxx20
7812 && VAR_P (decl)
7813 && DECL_DECLARED_CONSTEXPR_P (decl)
7814 && type_has_constexpr_destructor (strip_array_types (type))));
7817 static tree declare_simd_adjust_this (tree *, int *, void *);
7819 /* Helper function of omp_declare_variant_finalize. Finalize one
7820 "omp declare variant base" attribute. Return true if it should be
7821 removed. */
7823 static bool
7824 omp_declare_variant_finalize_one (tree decl, tree attr)
7826 if (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7828 walk_tree (&TREE_VALUE (TREE_VALUE (attr)), declare_simd_adjust_this,
7829 DECL_ARGUMENTS (decl), NULL);
7830 walk_tree (&TREE_PURPOSE (TREE_VALUE (attr)), declare_simd_adjust_this,
7831 DECL_ARGUMENTS (decl), NULL);
7834 tree ctx = TREE_VALUE (TREE_VALUE (attr));
7835 tree simd = omp_get_context_selector (ctx, "construct", "simd");
7836 if (simd)
7838 TREE_VALUE (simd)
7839 = c_omp_declare_simd_clauses_to_numbers (DECL_ARGUMENTS (decl),
7840 TREE_VALUE (simd));
7841 /* FIXME, adjusting simd args unimplemented. */
7842 return true;
7845 tree chain = TREE_CHAIN (TREE_VALUE (attr));
7846 location_t varid_loc
7847 = cp_expr_loc_or_input_loc (TREE_PURPOSE (TREE_CHAIN (chain)));
7848 location_t match_loc = cp_expr_loc_or_input_loc (TREE_PURPOSE (chain));
7849 cp_id_kind idk = (cp_id_kind) tree_to_uhwi (TREE_VALUE (chain));
7850 tree variant = TREE_PURPOSE (TREE_VALUE (attr));
7852 location_t save_loc = input_location;
7853 input_location = varid_loc;
7855 releasing_vec args;
7856 tree parm = DECL_ARGUMENTS (decl);
7857 if (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
7858 parm = DECL_CHAIN (parm);
7859 for (; parm; parm = DECL_CHAIN (parm))
7860 if (type_dependent_expression_p (parm))
7861 vec_safe_push (args, build_constructor (TREE_TYPE (parm), NULL));
7862 else if (MAYBE_CLASS_TYPE_P (TREE_TYPE (parm)))
7863 vec_safe_push (args, build_local_temp (TREE_TYPE (parm)));
7864 else
7865 vec_safe_push (args, build_zero_cst (TREE_TYPE (parm)));
7867 bool koenig_p = false;
7868 if (idk == CP_ID_KIND_UNQUALIFIED || idk == CP_ID_KIND_TEMPLATE_ID)
7870 if (identifier_p (variant)
7871 /* In C++20, we may need to perform ADL for a template
7872 name. */
7873 || (TREE_CODE (variant) == TEMPLATE_ID_EXPR
7874 && identifier_p (TREE_OPERAND (variant, 0))))
7876 if (!args->is_empty ())
7878 koenig_p = true;
7879 if (!any_type_dependent_arguments_p (args))
7880 variant = perform_koenig_lookup (variant, args,
7881 tf_warning_or_error);
7883 else
7884 variant = unqualified_fn_lookup_error (variant);
7886 else if (!args->is_empty () && is_overloaded_fn (variant))
7888 tree fn = get_first_fn (variant);
7889 fn = STRIP_TEMPLATE (fn);
7890 if (!((TREE_CODE (fn) == USING_DECL && DECL_DEPENDENT_P (fn))
7891 || DECL_FUNCTION_MEMBER_P (fn)
7892 || DECL_LOCAL_DECL_P (fn)))
7894 koenig_p = true;
7895 if (!any_type_dependent_arguments_p (args))
7896 variant = perform_koenig_lookup (variant, args,
7897 tf_warning_or_error);
7902 if (idk == CP_ID_KIND_QUALIFIED)
7903 variant = finish_call_expr (variant, &args, /*disallow_virtual=*/true,
7904 koenig_p, tf_warning_or_error);
7905 else
7906 variant = finish_call_expr (variant, &args, /*disallow_virtual=*/false,
7907 koenig_p, tf_warning_or_error);
7908 if (variant == error_mark_node && !processing_template_decl)
7909 return true;
7911 variant = cp_get_callee_fndecl_nofold (variant);
7912 input_location = save_loc;
7914 if (variant)
7916 const char *varname = IDENTIFIER_POINTER (DECL_NAME (variant));
7917 if (!comptypes (TREE_TYPE (decl), TREE_TYPE (variant), 0))
7919 error_at (varid_loc, "variant %qD and base %qD have incompatible "
7920 "types", variant, decl);
7921 return true;
7923 if (fndecl_built_in_p (variant)
7924 && (startswith (varname, "__builtin_")
7925 || startswith (varname, "__sync_")
7926 || startswith (varname, "__atomic_")))
7928 error_at (varid_loc, "variant %qD is a built-in", variant);
7929 return true;
7931 else
7933 tree construct = omp_get_context_selector (ctx, "construct", NULL);
7934 omp_mark_declare_variant (match_loc, variant, construct);
7935 if (!omp_context_selector_matches (ctx))
7936 return true;
7937 TREE_PURPOSE (TREE_VALUE (attr)) = variant;
7940 else if (!processing_template_decl)
7942 error_at (varid_loc, "could not find variant declaration");
7943 return true;
7946 return false;
7949 /* Helper function, finish up "omp declare variant base" attribute
7950 now that there is a DECL. ATTR is the first "omp declare variant base"
7951 attribute. */
7953 void
7954 omp_declare_variant_finalize (tree decl, tree attr)
7956 size_t attr_len = strlen ("omp declare variant base");
7957 tree *list = &DECL_ATTRIBUTES (decl);
7958 bool remove_all = false;
7959 location_t match_loc = DECL_SOURCE_LOCATION (decl);
7960 if (TREE_CHAIN (TREE_VALUE (attr))
7961 && TREE_PURPOSE (TREE_CHAIN (TREE_VALUE (attr)))
7962 && EXPR_HAS_LOCATION (TREE_PURPOSE (TREE_CHAIN (TREE_VALUE (attr)))))
7963 match_loc = EXPR_LOCATION (TREE_PURPOSE (TREE_CHAIN (TREE_VALUE (attr))));
7964 if (DECL_CONSTRUCTOR_P (decl))
7966 error_at (match_loc, "%<declare variant%> on constructor %qD", decl);
7967 remove_all = true;
7969 else if (DECL_DESTRUCTOR_P (decl))
7971 error_at (match_loc, "%<declare variant%> on destructor %qD", decl);
7972 remove_all = true;
7974 else if (DECL_DEFAULTED_FN (decl))
7976 error_at (match_loc, "%<declare variant%> on defaulted %qD", decl);
7977 remove_all = true;
7979 else if (DECL_DELETED_FN (decl))
7981 error_at (match_loc, "%<declare variant%> on deleted %qD", decl);
7982 remove_all = true;
7984 else if (DECL_VIRTUAL_P (decl))
7986 error_at (match_loc, "%<declare variant%> on virtual %qD", decl);
7987 remove_all = true;
7989 /* This loop is like private_lookup_attribute, except that it works
7990 with tree * rather than tree, as we might want to remove the
7991 attributes that are diagnosed as errorneous. */
7992 while (*list)
7994 tree attr = get_attribute_name (*list);
7995 size_t ident_len = IDENTIFIER_LENGTH (attr);
7996 if (cmp_attribs ("omp declare variant base", attr_len,
7997 IDENTIFIER_POINTER (attr), ident_len))
7999 if (remove_all || omp_declare_variant_finalize_one (decl, *list))
8001 *list = TREE_CHAIN (*list);
8002 continue;
8005 list = &TREE_CHAIN (*list);
8009 /* Finish processing of a declaration;
8010 install its line number and initial value.
8011 If the length of an array type is not known before,
8012 it must be determined now, from the initial value, or it is an error.
8014 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
8015 true, then INIT is an integral constant expression.
8017 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
8018 if the (init) syntax was used. */
8020 void
8021 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
8022 tree asmspec_tree, int flags)
8024 tree type;
8025 vec<tree, va_gc> *cleanups = NULL;
8026 const char *asmspec = NULL;
8027 int was_readonly = 0;
8028 bool var_definition_p = false;
8029 tree auto_node;
8031 if (decl == error_mark_node)
8032 return;
8033 else if (! decl)
8035 if (init)
8036 error ("assignment (not initialization) in declaration");
8037 return;
8040 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
8041 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
8042 gcc_assert (TREE_CODE (decl) != PARM_DECL);
8044 type = TREE_TYPE (decl);
8045 if (type == error_mark_node)
8046 return;
8048 if (VAR_P (decl) && is_copy_initialization (init))
8049 flags |= LOOKUP_ONLYCONVERTING;
8051 /* Warn about register storage specifiers except when in GNU global
8052 or local register variable extension. */
8053 if (VAR_P (decl) && DECL_REGISTER (decl) && asmspec_tree == NULL_TREE)
8055 if (cxx_dialect >= cxx17)
8056 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
8057 "ISO C++17 does not allow %<register%> storage "
8058 "class specifier");
8059 else
8060 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
8061 "%<register%> storage class specifier used");
8064 /* If a name was specified, get the string. */
8065 if (at_namespace_scope_p ())
8066 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
8067 if (asmspec_tree && asmspec_tree != error_mark_node)
8068 asmspec = TREE_STRING_POINTER (asmspec_tree);
8070 bool in_class_decl
8071 = (current_class_type
8072 && CP_DECL_CONTEXT (decl) == current_class_type
8073 && TYPE_BEING_DEFINED (current_class_type)
8074 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type));
8076 if (in_class_decl
8077 && (DECL_INITIAL (decl) || init))
8078 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
8080 if (VAR_P (decl)
8081 && (auto_node = type_uses_auto (type)))
8083 tree d_init;
8084 if (init == NULL_TREE)
8086 if (DECL_LANG_SPECIFIC (decl)
8087 && DECL_TEMPLATE_INSTANTIATION (decl)
8088 && !DECL_TEMPLATE_INSTANTIATED (decl))
8090 /* init is null because we're deferring instantiating the
8091 initializer until we need it. Well, we need it now. */
8092 instantiate_decl (decl, /*defer_ok*/true, /*expl*/false);
8093 return;
8096 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (auto_node));
8098 d_init = init;
8099 if (d_init)
8101 if (TREE_CODE (d_init) == TREE_LIST
8102 && !CLASS_PLACEHOLDER_TEMPLATE (auto_node))
8103 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
8104 tf_warning_or_error);
8105 d_init = resolve_nondeduced_context (d_init, tf_warning_or_error);
8107 enum auto_deduction_context adc = adc_variable_type;
8108 if (DECL_DECOMPOSITION_P (decl))
8109 adc = adc_decomp_type;
8110 tree outer_targs = NULL_TREE;
8111 if (PLACEHOLDER_TYPE_CONSTRAINTS_INFO (auto_node)
8112 && DECL_LANG_SPECIFIC (decl)
8113 && DECL_TEMPLATE_INFO (decl)
8114 && !DECL_FUNCTION_SCOPE_P (decl))
8115 /* The outer template arguments might be needed for satisfaction.
8116 (For function scope variables, do_auto_deduction will obtain the
8117 outer template arguments from current_function_decl.) */
8118 outer_targs = DECL_TI_ARGS (decl);
8119 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init, auto_node,
8120 tf_warning_or_error, adc,
8121 outer_targs, flags);
8122 if (type == error_mark_node)
8123 return;
8124 if (TREE_CODE (type) == FUNCTION_TYPE)
8126 error ("initializer for %<decltype(auto) %D%> has function type; "
8127 "did you forget the %<()%>?", decl);
8128 TREE_TYPE (decl) = error_mark_node;
8129 return;
8131 /* As in start_decl_1, complete so TREE_READONLY is set properly. */
8132 if (!processing_template_decl
8133 && !type_uses_auto (type)
8134 && !COMPLETE_TYPE_P (complete_type (type)))
8136 error_at (location_of (decl),
8137 "deduced type %qT for %qD is incomplete", type, decl);
8138 cxx_incomplete_type_inform (type);
8139 TREE_TYPE (decl) = error_mark_node;
8140 return;
8142 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
8145 if (ensure_literal_type_for_constexpr_object (decl) == error_mark_node)
8147 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
8148 if (VAR_P (decl) && DECL_CLASS_SCOPE_P (decl))
8150 init = NULL_TREE;
8151 DECL_EXTERNAL (decl) = 1;
8155 if (VAR_P (decl)
8156 && DECL_CLASS_SCOPE_P (decl)
8157 && verify_type_context (DECL_SOURCE_LOCATION (decl),
8158 TCTX_STATIC_STORAGE, type)
8159 && DECL_INITIALIZED_IN_CLASS_P (decl))
8160 check_static_variable_definition (decl, type);
8162 if (!processing_template_decl && VAR_P (decl) && is_global_var (decl))
8164 type_context_kind context = (DECL_THREAD_LOCAL_P (decl)
8165 ? TCTX_THREAD_STORAGE
8166 : TCTX_STATIC_STORAGE);
8167 verify_type_context (input_location, context, TREE_TYPE (decl));
8170 if (init && TREE_CODE (decl) == FUNCTION_DECL)
8172 tree clone;
8173 if (init == ridpointers[(int)RID_DELETE])
8175 /* FIXME check this is 1st decl. */
8176 DECL_DELETED_FN (decl) = 1;
8177 DECL_DECLARED_INLINE_P (decl) = 1;
8178 DECL_INITIAL (decl) = error_mark_node;
8179 FOR_EACH_CLONE (clone, decl)
8181 DECL_DELETED_FN (clone) = 1;
8182 DECL_DECLARED_INLINE_P (clone) = 1;
8183 DECL_INITIAL (clone) = error_mark_node;
8185 init = NULL_TREE;
8187 else if (init == ridpointers[(int)RID_DEFAULT])
8189 if (defaultable_fn_check (decl))
8190 DECL_DEFAULTED_FN (decl) = 1;
8191 else
8192 DECL_INITIAL (decl) = NULL_TREE;
8196 if (init && VAR_P (decl))
8198 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
8199 /* If DECL is a reference, then we want to know whether init is a
8200 reference constant; init_const_expr_p as passed tells us whether
8201 it's an rvalue constant. */
8202 if (TYPE_REF_P (type))
8203 init_const_expr_p = potential_constant_expression (init);
8204 if (init_const_expr_p)
8206 /* Set these flags now for templates. We'll update the flags in
8207 store_init_value for instantiations. */
8208 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
8209 if (decl_maybe_constant_var_p (decl)
8210 /* FIXME setting TREE_CONSTANT on refs breaks the back end. */
8211 && !TYPE_REF_P (type))
8212 TREE_CONSTANT (decl) = 1;
8216 if (flag_openmp
8217 && TREE_CODE (decl) == FUNCTION_DECL
8218 /* #pragma omp declare variant on methods handled in finish_struct
8219 instead. */
8220 && (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl)
8221 || COMPLETE_TYPE_P (DECL_CONTEXT (decl))))
8222 if (tree attr = lookup_attribute ("omp declare variant base",
8223 DECL_ATTRIBUTES (decl)))
8224 omp_declare_variant_finalize (decl, attr);
8226 if (processing_template_decl)
8228 bool type_dependent_p;
8230 /* Add this declaration to the statement-tree. */
8231 if (at_function_scope_p ())
8232 add_decl_expr (decl);
8234 type_dependent_p = dependent_type_p (type);
8236 if (check_for_bare_parameter_packs (init))
8238 init = NULL_TREE;
8239 DECL_INITIAL (decl) = NULL_TREE;
8242 /* Generally, initializers in templates are expanded when the
8243 template is instantiated. But, if DECL is a variable constant
8244 then it can be used in future constant expressions, so its value
8245 must be available. */
8247 bool dep_init = false;
8249 if (!VAR_P (decl) || type_dependent_p)
8250 /* We can't do anything if the decl has dependent type. */;
8251 else if (!init && is_concept_var (decl))
8253 error ("variable concept has no initializer");
8254 init = boolean_true_node;
8256 else if (init
8257 && (init_const_expr_p || DECL_DECLARED_CONSTEXPR_P (decl))
8258 && !TYPE_REF_P (type)
8259 && decl_maybe_constant_var_p (decl)
8260 && !(dep_init = value_dependent_init_p (init)))
8262 /* This variable seems to be a non-dependent constant, so process
8263 its initializer. If check_initializer returns non-null the
8264 initialization wasn't constant after all. */
8265 tree init_code;
8266 cleanups = make_tree_vector ();
8267 init_code = check_initializer (decl, init, flags, &cleanups);
8268 if (init_code == NULL_TREE)
8269 init = NULL_TREE;
8270 release_tree_vector (cleanups);
8272 else
8274 gcc_assert (!DECL_PRETTY_FUNCTION_P (decl));
8275 /* Try to deduce array size. */
8276 maybe_deduce_size_from_array_init (decl, init);
8277 /* And complain about multiple initializers. */
8278 if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
8279 && !MAYBE_CLASS_TYPE_P (type))
8280 init = build_x_compound_expr_from_list (init, ELK_INIT,
8281 tf_warning_or_error);
8284 if (init)
8285 DECL_INITIAL (decl) = init;
8287 if (dep_init)
8289 retrofit_lang_decl (decl);
8290 SET_DECL_DEPENDENT_INIT_P (decl, true);
8293 if (VAR_P (decl) && DECL_REGISTER (decl) && asmspec)
8295 set_user_assembler_name (decl, asmspec);
8296 DECL_HARD_REGISTER (decl) = 1;
8298 return;
8301 /* Just store non-static data member initializers for later. */
8302 if (init && TREE_CODE (decl) == FIELD_DECL)
8303 DECL_INITIAL (decl) = init;
8305 /* Take care of TYPE_DECLs up front. */
8306 if (TREE_CODE (decl) == TYPE_DECL)
8308 if (type != error_mark_node
8309 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
8311 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
8312 warning (0, "shadowing previous type declaration of %q#D", decl);
8313 set_identifier_type_value (DECL_NAME (decl), decl);
8316 /* If we have installed this as the canonical typedef for this
8317 type, and that type has not been defined yet, delay emitting
8318 the debug information for it, as we will emit it later. */
8319 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
8320 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
8321 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
8323 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
8324 at_eof);
8325 return;
8328 /* A reference will be modified here, as it is initialized. */
8329 if (! DECL_EXTERNAL (decl)
8330 && TREE_READONLY (decl)
8331 && TYPE_REF_P (type))
8333 was_readonly = 1;
8334 TREE_READONLY (decl) = 0;
8337 /* This needs to happen before extend_ref_init_temps. */
8338 if (VAR_OR_FUNCTION_DECL_P (decl))
8340 if (VAR_P (decl))
8341 maybe_commonize_var (decl);
8342 determine_visibility (decl);
8345 if (VAR_P (decl))
8347 duration_kind dk = decl_storage_duration (decl);
8348 /* [dcl.constinit]/1 "The constinit specifier shall be applied
8349 only to a declaration of a variable with static or thread storage
8350 duration." */
8351 if (DECL_DECLARED_CONSTINIT_P (decl)
8352 && !(dk == dk_thread || dk == dk_static))
8354 error_at (DECL_SOURCE_LOCATION (decl),
8355 "%<constinit%> can only be applied to a variable with "
8356 "static or thread storage duration");
8357 return;
8360 /* If this is a local variable that will need a mangled name,
8361 register it now. We must do this before processing the
8362 initializer for the variable, since the initialization might
8363 require a guard variable, and since the mangled name of the
8364 guard variable will depend on the mangled name of this
8365 variable. */
8366 if (DECL_FUNCTION_SCOPE_P (decl)
8367 && TREE_STATIC (decl)
8368 && !DECL_ARTIFICIAL (decl))
8370 /* The variable holding an anonymous union will have had its
8371 discriminator set in finish_anon_union, after which it's
8372 NAME will have been cleared. */
8373 if (DECL_NAME (decl))
8374 determine_local_discriminator (decl);
8375 /* Normally has_forced_label_in_static is set during GIMPLE
8376 lowering, but [cd]tors are never actually compiled directly.
8377 We need to set this early so we can deal with the label
8378 address extension. */
8379 if ((DECL_CONSTRUCTOR_P (current_function_decl)
8380 || DECL_DESTRUCTOR_P (current_function_decl))
8381 && init)
8383 walk_tree (&init, notice_forced_label_r, NULL, NULL);
8384 add_local_decl (cfun, decl);
8386 /* And make sure it's in the symbol table for
8387 c_parse_final_cleanups to find. */
8388 varpool_node::get_create (decl);
8391 /* Convert the initializer to the type of DECL, if we have not
8392 already initialized DECL. */
8393 if (!DECL_INITIALIZED_P (decl)
8394 /* If !DECL_EXTERNAL then DECL is being defined. In the
8395 case of a static data member initialized inside the
8396 class-specifier, there can be an initializer even if DECL
8397 is *not* defined. */
8398 && (!DECL_EXTERNAL (decl) || init))
8400 cleanups = make_tree_vector ();
8401 init = check_initializer (decl, init, flags, &cleanups);
8403 /* Handle:
8405 [dcl.init]
8407 The memory occupied by any object of static storage
8408 duration is zero-initialized at program startup before
8409 any other initialization takes place.
8411 We cannot create an appropriate initializer until after
8412 the type of DECL is finalized. If DECL_INITIAL is set,
8413 then the DECL is statically initialized, and any
8414 necessary zero-initialization has already been performed. */
8415 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
8416 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
8417 /*nelts=*/NULL_TREE,
8418 /*static_storage_p=*/true);
8419 /* Remember that the initialization for this variable has
8420 taken place. */
8421 DECL_INITIALIZED_P (decl) = 1;
8422 /* This declaration is the definition of this variable,
8423 unless we are initializing a static data member within
8424 the class specifier. */
8425 if (!DECL_EXTERNAL (decl))
8426 var_definition_p = true;
8428 /* If the variable has an array type, lay out the type, even if
8429 there is no initializer. It is valid to index through the
8430 array, and we must get TYPE_ALIGN set correctly on the array
8431 type. */
8432 else if (TREE_CODE (type) == ARRAY_TYPE)
8433 layout_type (type);
8435 if (TREE_STATIC (decl)
8436 && !at_function_scope_p ()
8437 && current_function_decl == NULL)
8438 /* So decl is a global variable or a static member of a
8439 non local class. Record the types it uses
8440 so that we can decide later to emit debug info for them. */
8441 record_types_used_by_current_var_decl (decl);
8444 /* Add this declaration to the statement-tree. This needs to happen
8445 after the call to check_initializer so that the DECL_EXPR for a
8446 reference temp is added before the DECL_EXPR for the reference itself. */
8447 if (DECL_FUNCTION_SCOPE_P (decl))
8449 /* If we're building a variable sized type, and we might be
8450 reachable other than via the top of the current binding
8451 level, then create a new BIND_EXPR so that we deallocate
8452 the object at the right time. */
8453 if (VAR_P (decl)
8454 && DECL_SIZE (decl)
8455 && !TREE_CONSTANT (DECL_SIZE (decl))
8456 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
8458 tree bind;
8459 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
8460 TREE_SIDE_EFFECTS (bind) = 1;
8461 add_stmt (bind);
8462 BIND_EXPR_BODY (bind) = push_stmt_list ();
8464 add_decl_expr (decl);
8467 /* Let the middle end know about variables and functions -- but not
8468 static data members in uninstantiated class templates. */
8469 if (VAR_OR_FUNCTION_DECL_P (decl))
8471 if (VAR_P (decl))
8473 layout_var_decl (decl);
8474 if (!flag_weak)
8475 /* Check again now that we have an initializer. */
8476 maybe_commonize_var (decl);
8477 /* A class-scope constexpr variable with an out-of-class declaration.
8478 C++17 makes them implicitly inline, but still force it out. */
8479 if (DECL_INLINE_VAR_P (decl)
8480 && !DECL_VAR_DECLARED_INLINE_P (decl)
8481 && !DECL_TEMPLATE_INSTANTIATION (decl)
8482 && !in_class_decl)
8483 mark_needed (decl);
8486 if (var_definition_p
8487 /* With -fmerge-all-constants, gimplify_init_constructor
8488 might add TREE_STATIC to the variable. */
8489 && (TREE_STATIC (decl) || flag_merge_constants >= 2))
8491 /* If a TREE_READONLY variable needs initialization
8492 at runtime, it is no longer readonly and we need to
8493 avoid MEM_READONLY_P being set on RTL created for it. */
8494 if (init)
8496 if (TREE_READONLY (decl))
8497 TREE_READONLY (decl) = 0;
8498 was_readonly = 0;
8500 else if (was_readonly)
8501 TREE_READONLY (decl) = 1;
8503 /* Likewise if it needs destruction. */
8504 if (!decl_maybe_constant_destruction (decl, type))
8505 TREE_READONLY (decl) = 0;
8508 make_rtl_for_nonlocal_decl (decl, init, asmspec);
8510 /* Check for abstractness of the type. */
8511 if (var_definition_p)
8512 abstract_virtuals_error (decl, type);
8514 if (TREE_TYPE (decl) == error_mark_node)
8515 /* No initialization required. */
8517 else if (TREE_CODE (decl) == FUNCTION_DECL)
8519 if (init)
8521 if (init == ridpointers[(int)RID_DEFAULT])
8523 /* An out-of-class default definition is defined at
8524 the point where it is explicitly defaulted. */
8525 if (DECL_DELETED_FN (decl))
8526 maybe_explain_implicit_delete (decl);
8527 else if (DECL_INITIAL (decl) == error_mark_node)
8528 synthesize_method (decl);
8530 else
8531 error_at (cp_expr_loc_or_loc (init,
8532 DECL_SOURCE_LOCATION (decl)),
8533 "function %q#D is initialized like a variable",
8534 decl);
8536 /* else no initialization required. */
8538 else if (DECL_EXTERNAL (decl)
8539 && ! (DECL_LANG_SPECIFIC (decl)
8540 && DECL_NOT_REALLY_EXTERN (decl)))
8542 /* check_initializer will have done any constant initialization. */
8544 /* A variable definition. */
8545 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
8546 /* Initialize the local variable. */
8547 initialize_local_var (decl, init);
8549 /* If a variable is defined, and then a subsequent
8550 definition with external linkage is encountered, we will
8551 get here twice for the same variable. We want to avoid
8552 calling expand_static_init more than once. For variables
8553 that are not static data members, we can call
8554 expand_static_init only when we actually process the
8555 initializer. It is not legal to redeclare a static data
8556 member, so this issue does not arise in that case. */
8557 else if (var_definition_p && TREE_STATIC (decl))
8558 expand_static_init (decl, init);
8561 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
8562 reference, insert it in the statement-tree now. */
8563 if (cleanups)
8565 for (tree t : *cleanups)
8567 push_cleanup (NULL_TREE, t, false);
8568 /* As in initialize_local_var. */
8569 wrap_temporary_cleanups (init, t);
8571 release_tree_vector (cleanups);
8574 if (was_readonly)
8575 TREE_READONLY (decl) = 1;
8577 if (flag_openmp
8578 && VAR_P (decl)
8579 && lookup_attribute ("omp declare target implicit",
8580 DECL_ATTRIBUTES (decl)))
8582 DECL_ATTRIBUTES (decl)
8583 = remove_attribute ("omp declare target implicit",
8584 DECL_ATTRIBUTES (decl));
8585 complete_type (TREE_TYPE (decl));
8586 if (!cp_omp_mappable_type (TREE_TYPE (decl)))
8588 error ("%q+D in declare target directive does not have mappable"
8589 " type", decl);
8590 cp_omp_emit_unmappable_type_notes (TREE_TYPE (decl));
8592 else if (!lookup_attribute ("omp declare target",
8593 DECL_ATTRIBUTES (decl))
8594 && !lookup_attribute ("omp declare target link",
8595 DECL_ATTRIBUTES (decl)))
8597 DECL_ATTRIBUTES (decl)
8598 = tree_cons (get_identifier ("omp declare target"),
8599 NULL_TREE, DECL_ATTRIBUTES (decl));
8600 symtab_node *node = symtab_node::get (decl);
8601 if (node != NULL)
8603 node->offloadable = 1;
8604 if (ENABLE_OFFLOADING)
8606 g->have_offload = true;
8607 if (is_a <varpool_node *> (node))
8608 vec_safe_push (offload_vars, decl);
8614 /* This is the last point we can lower alignment so give the target the
8615 chance to do so. */
8616 if (VAR_P (decl)
8617 && !is_global_var (decl)
8618 && !DECL_HARD_REGISTER (decl))
8619 targetm.lower_local_decl_alignment (decl);
8621 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
8624 /* For class TYPE return itself or some its bases that contain
8625 any direct non-static data members. Return error_mark_node if an
8626 error has been diagnosed. */
8628 static tree
8629 find_decomp_class_base (location_t loc, tree type, tree ret)
8631 bool member_seen = false;
8632 for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
8633 if (TREE_CODE (field) != FIELD_DECL
8634 || DECL_ARTIFICIAL (field)
8635 || DECL_UNNAMED_BIT_FIELD (field))
8636 continue;
8637 else if (ret)
8638 return type;
8639 else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
8641 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
8642 error_at (loc, "cannot decompose class type %qT because it has an "
8643 "anonymous struct member", type);
8644 else
8645 error_at (loc, "cannot decompose class type %qT because it has an "
8646 "anonymous union member", type);
8647 inform (DECL_SOURCE_LOCATION (field), "declared here");
8648 return error_mark_node;
8650 else if (!accessible_p (type, field, true))
8652 error_at (loc, "cannot decompose inaccessible member %qD of %qT",
8653 field, type);
8654 inform (DECL_SOURCE_LOCATION (field),
8655 TREE_PRIVATE (field)
8656 ? G_("declared private here")
8657 : G_("declared protected here"));
8658 return error_mark_node;
8660 else
8661 member_seen = true;
8663 tree base_binfo, binfo;
8664 tree orig_ret = ret;
8665 int i;
8666 if (member_seen)
8667 ret = type;
8668 for (binfo = TYPE_BINFO (type), i = 0;
8669 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
8671 tree t = find_decomp_class_base (loc, TREE_TYPE (base_binfo), ret);
8672 if (t == error_mark_node)
8673 return error_mark_node;
8674 if (t != NULL_TREE && t != ret)
8676 if (ret == type)
8678 error_at (loc, "cannot decompose class type %qT: both it and "
8679 "its base class %qT have non-static data members",
8680 type, t);
8681 return error_mark_node;
8683 else if (orig_ret != NULL_TREE)
8684 return t;
8685 else if (ret != NULL_TREE)
8687 error_at (loc, "cannot decompose class type %qT: its base "
8688 "classes %qT and %qT have non-static data "
8689 "members", type, ret, t);
8690 return error_mark_node;
8692 else
8693 ret = t;
8696 return ret;
8699 /* Return std::tuple_size<TYPE>::value. */
8701 static tree
8702 get_tuple_size (tree type)
8704 tree args = make_tree_vec (1);
8705 TREE_VEC_ELT (args, 0) = type;
8706 tree inst = lookup_template_class (tuple_size_identifier, args,
8707 /*in_decl*/NULL_TREE,
8708 /*context*/std_node,
8709 /*entering_scope*/false, tf_none);
8710 inst = complete_type (inst);
8711 if (inst == error_mark_node || !COMPLETE_TYPE_P (inst))
8712 return NULL_TREE;
8713 tree val = lookup_qualified_name (inst, value_identifier,
8714 LOOK_want::NORMAL, /*complain*/false);
8715 if (TREE_CODE (val) == VAR_DECL || TREE_CODE (val) == CONST_DECL)
8716 val = maybe_constant_value (val);
8717 if (TREE_CODE (val) == INTEGER_CST)
8718 return val;
8719 else
8720 return error_mark_node;
8723 /* Return std::tuple_element<I,TYPE>::type. */
8725 static tree
8726 get_tuple_element_type (tree type, unsigned i)
8728 tree args = make_tree_vec (2);
8729 TREE_VEC_ELT (args, 0) = build_int_cst (integer_type_node, i);
8730 TREE_VEC_ELT (args, 1) = type;
8731 tree inst = lookup_template_class (tuple_element_identifier, args,
8732 /*in_decl*/NULL_TREE,
8733 /*context*/std_node,
8734 /*entering_scope*/false,
8735 tf_warning_or_error);
8736 return make_typename_type (inst, type_identifier,
8737 none_type, tf_warning_or_error);
8740 /* Return e.get<i>() or get<i>(e). */
8742 static tree
8743 get_tuple_decomp_init (tree decl, unsigned i)
8745 tree targs = make_tree_vec (1);
8746 TREE_VEC_ELT (targs, 0) = build_int_cst (integer_type_node, i);
8748 tree etype = TREE_TYPE (decl);
8749 tree e = convert_from_reference (decl);
8751 /* [The id-expression] e is an lvalue if the type of the entity e is an
8752 lvalue reference and an xvalue otherwise. */
8753 if (!TYPE_REF_P (etype)
8754 || TYPE_REF_IS_RVALUE (etype))
8755 e = move (e);
8757 tree fns = lookup_qualified_name (TREE_TYPE (e), get__identifier,
8758 LOOK_want::NORMAL, /*complain*/false);
8759 bool use_member_get = false;
8761 /* To use a member get, member lookup must find at least one
8762 declaration that is a function template
8763 whose first template parameter is a non-type parameter. */
8764 for (lkp_iterator iter (MAYBE_BASELINK_FUNCTIONS (fns)); iter; ++iter)
8766 tree fn = *iter;
8767 if (TREE_CODE (fn) == TEMPLATE_DECL)
8769 tree tparms = DECL_TEMPLATE_PARMS (fn);
8770 tree parm = TREE_VEC_ELT (INNERMOST_TEMPLATE_PARMS (tparms), 0);
8771 if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
8773 use_member_get = true;
8774 break;
8779 if (use_member_get)
8781 fns = lookup_template_function (fns, targs);
8782 return build_new_method_call (e, fns, /*args*/NULL,
8783 /*path*/NULL_TREE, LOOKUP_NORMAL,
8784 /*fn_p*/NULL, tf_warning_or_error);
8786 else
8788 releasing_vec args (make_tree_vector_single (e));
8789 fns = lookup_template_function (get__identifier, targs);
8790 fns = perform_koenig_lookup (fns, args, tf_warning_or_error);
8791 return finish_call_expr (fns, &args, /*novirt*/false,
8792 /*koenig*/true, tf_warning_or_error);
8796 /* It's impossible to recover the decltype of a tuple decomposition variable
8797 based on the actual type of the variable, so store it in a hash table. */
8799 static GTY((cache)) decl_tree_cache_map *decomp_type_table;
8801 tree
8802 lookup_decomp_type (tree v)
8804 return *decomp_type_table->get (v);
8807 /* Mangle a decomposition declaration if needed. Arguments like
8808 in cp_finish_decomp. */
8810 void
8811 cp_maybe_mangle_decomp (tree decl, tree first, unsigned int count)
8813 if (!processing_template_decl
8814 && !error_operand_p (decl)
8815 && TREE_STATIC (decl))
8817 auto_vec<tree, 16> v;
8818 v.safe_grow (count, true);
8819 tree d = first;
8820 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
8821 v[count - i - 1] = d;
8822 SET_DECL_ASSEMBLER_NAME (decl, mangle_decomp (decl, v));
8823 maybe_apply_pragma_weak (decl);
8827 /* Finish a decomposition declaration. DECL is the underlying declaration
8828 "e", FIRST is the head of a chain of decls for the individual identifiers
8829 chained through DECL_CHAIN in reverse order and COUNT is the number of
8830 those decls. */
8832 void
8833 cp_finish_decomp (tree decl, tree first, unsigned int count)
8835 if (error_operand_p (decl))
8837 error_out:
8838 while (count--)
8840 TREE_TYPE (first) = error_mark_node;
8841 if (DECL_HAS_VALUE_EXPR_P (first))
8843 SET_DECL_VALUE_EXPR (first, NULL_TREE);
8844 DECL_HAS_VALUE_EXPR_P (first) = 0;
8846 first = DECL_CHAIN (first);
8848 if (DECL_P (decl) && DECL_NAMESPACE_SCOPE_P (decl))
8849 SET_DECL_ASSEMBLER_NAME (decl, get_identifier ("<decomp>"));
8850 return;
8853 location_t loc = DECL_SOURCE_LOCATION (decl);
8854 if (type_dependent_expression_p (decl)
8855 /* This happens for range for when not in templates.
8856 Still add the DECL_VALUE_EXPRs for later processing. */
8857 || (!processing_template_decl
8858 && type_uses_auto (TREE_TYPE (decl))))
8860 for (unsigned int i = 0; i < count; i++)
8862 if (!DECL_HAS_VALUE_EXPR_P (first))
8864 tree v = build_nt (ARRAY_REF, decl,
8865 size_int (count - i - 1),
8866 NULL_TREE, NULL_TREE);
8867 SET_DECL_VALUE_EXPR (first, v);
8868 DECL_HAS_VALUE_EXPR_P (first) = 1;
8870 if (processing_template_decl)
8871 fit_decomposition_lang_decl (first, decl);
8872 first = DECL_CHAIN (first);
8874 return;
8877 auto_vec<tree, 16> v;
8878 v.safe_grow (count, true);
8879 tree d = first;
8880 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
8882 v[count - i - 1] = d;
8883 fit_decomposition_lang_decl (d, decl);
8886 tree type = TREE_TYPE (decl);
8887 tree dexp = decl;
8889 if (TYPE_REF_P (type))
8891 dexp = convert_from_reference (dexp);
8892 type = complete_type (TREE_TYPE (type));
8893 if (type == error_mark_node)
8894 goto error_out;
8895 if (!COMPLETE_TYPE_P (type))
8897 error_at (loc, "structured binding refers to incomplete type %qT",
8898 type);
8899 goto error_out;
8903 tree eltype = NULL_TREE;
8904 unsigned HOST_WIDE_INT eltscnt = 0;
8905 if (TREE_CODE (type) == ARRAY_TYPE)
8907 tree nelts;
8908 nelts = array_type_nelts_top (type);
8909 if (nelts == error_mark_node)
8910 goto error_out;
8911 if (!tree_fits_uhwi_p (nelts))
8913 error_at (loc, "cannot decompose variable length array %qT", type);
8914 goto error_out;
8916 eltscnt = tree_to_uhwi (nelts);
8917 if (count != eltscnt)
8919 cnt_mismatch:
8920 if (count > eltscnt)
8921 error_n (loc, count,
8922 "%u name provided for structured binding",
8923 "%u names provided for structured binding", count);
8924 else
8925 error_n (loc, count,
8926 "only %u name provided for structured binding",
8927 "only %u names provided for structured binding", count);
8928 inform_n (loc, eltscnt,
8929 "while %qT decomposes into %wu element",
8930 "while %qT decomposes into %wu elements",
8931 type, eltscnt);
8932 goto error_out;
8934 eltype = TREE_TYPE (type);
8935 for (unsigned int i = 0; i < count; i++)
8937 TREE_TYPE (v[i]) = eltype;
8938 layout_decl (v[i], 0);
8939 if (processing_template_decl)
8940 continue;
8941 tree t = unshare_expr (dexp);
8942 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
8943 eltype, t, size_int (i), NULL_TREE,
8944 NULL_TREE);
8945 SET_DECL_VALUE_EXPR (v[i], t);
8946 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
8949 /* 2 GNU extensions. */
8950 else if (TREE_CODE (type) == COMPLEX_TYPE)
8952 eltscnt = 2;
8953 if (count != eltscnt)
8954 goto cnt_mismatch;
8955 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
8956 for (unsigned int i = 0; i < count; i++)
8958 TREE_TYPE (v[i]) = eltype;
8959 layout_decl (v[i], 0);
8960 if (processing_template_decl)
8961 continue;
8962 tree t = unshare_expr (dexp);
8963 t = build1_loc (DECL_SOURCE_LOCATION (v[i]),
8964 i ? IMAGPART_EXPR : REALPART_EXPR, eltype,
8966 SET_DECL_VALUE_EXPR (v[i], t);
8967 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
8970 else if (TREE_CODE (type) == VECTOR_TYPE)
8972 if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&eltscnt))
8974 error_at (loc, "cannot decompose variable length vector %qT", type);
8975 goto error_out;
8977 if (count != eltscnt)
8978 goto cnt_mismatch;
8979 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
8980 for (unsigned int i = 0; i < count; i++)
8982 TREE_TYPE (v[i]) = eltype;
8983 layout_decl (v[i], 0);
8984 if (processing_template_decl)
8985 continue;
8986 tree t = unshare_expr (dexp);
8987 convert_vector_to_array_for_subscript (DECL_SOURCE_LOCATION (v[i]),
8988 &t, size_int (i));
8989 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
8990 eltype, t, size_int (i), NULL_TREE,
8991 NULL_TREE);
8992 SET_DECL_VALUE_EXPR (v[i], t);
8993 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
8996 else if (tree tsize = get_tuple_size (type))
8998 if (tsize == error_mark_node)
9000 error_at (loc, "%<std::tuple_size<%T>::value%> is not an integral "
9001 "constant expression", type);
9002 goto error_out;
9004 if (!tree_fits_uhwi_p (tsize))
9006 error_n (loc, count,
9007 "%u name provided for structured binding",
9008 "%u names provided for structured binding", count);
9009 inform (loc, "while %qT decomposes into %E elements",
9010 type, tsize);
9011 goto error_out;
9013 eltscnt = tree_to_uhwi (tsize);
9014 if (count != eltscnt)
9015 goto cnt_mismatch;
9016 int save_read = DECL_READ_P (decl);
9017 for (unsigned i = 0; i < count; ++i)
9019 location_t sloc = input_location;
9020 location_t dloc = DECL_SOURCE_LOCATION (v[i]);
9022 input_location = dloc;
9023 tree init = get_tuple_decomp_init (decl, i);
9024 tree eltype = (init == error_mark_node ? error_mark_node
9025 : get_tuple_element_type (type, i));
9026 input_location = sloc;
9028 if (VOID_TYPE_P (eltype))
9030 error ("%<std::tuple_element<%u, %T>::type%> is %<void%>",
9031 i, type);
9032 eltype = error_mark_node;
9034 if (init == error_mark_node || eltype == error_mark_node)
9036 inform (dloc, "in initialization of structured binding "
9037 "variable %qD", v[i]);
9038 goto error_out;
9040 /* Save the decltype away before reference collapse. */
9041 hash_map_safe_put<hm_ggc> (decomp_type_table, v[i], eltype);
9042 eltype = cp_build_reference_type (eltype, !lvalue_p (init));
9043 TREE_TYPE (v[i]) = eltype;
9044 layout_decl (v[i], 0);
9045 if (DECL_HAS_VALUE_EXPR_P (v[i]))
9047 /* In this case the names are variables, not just proxies. */
9048 SET_DECL_VALUE_EXPR (v[i], NULL_TREE);
9049 DECL_HAS_VALUE_EXPR_P (v[i]) = 0;
9051 if (!processing_template_decl)
9053 copy_linkage (v[i], decl);
9054 cp_finish_decl (v[i], init, /*constexpr*/false,
9055 /*asm*/NULL_TREE, LOOKUP_NORMAL);
9058 /* Ignore reads from the underlying decl performed during initialization
9059 of the individual variables. If those will be read, we'll mark
9060 the underlying decl as read at that point. */
9061 DECL_READ_P (decl) = save_read;
9063 else if (TREE_CODE (type) == UNION_TYPE)
9065 error_at (loc, "cannot decompose union type %qT", type);
9066 goto error_out;
9068 else if (!CLASS_TYPE_P (type))
9070 error_at (loc, "cannot decompose non-array non-class type %qT", type);
9071 goto error_out;
9073 else if (LAMBDA_TYPE_P (type))
9075 error_at (loc, "cannot decompose lambda closure type %qT", type);
9076 goto error_out;
9078 else if (processing_template_decl && complete_type (type) == error_mark_node)
9079 goto error_out;
9080 else if (processing_template_decl && !COMPLETE_TYPE_P (type))
9081 pedwarn (loc, 0, "structured binding refers to incomplete class type %qT",
9082 type);
9083 else
9085 tree btype = find_decomp_class_base (loc, type, NULL_TREE);
9086 if (btype == error_mark_node)
9087 goto error_out;
9088 else if (btype == NULL_TREE)
9090 error_at (loc, "cannot decompose class type %qT without non-static "
9091 "data members", type);
9092 goto error_out;
9094 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
9095 if (TREE_CODE (field) != FIELD_DECL
9096 || DECL_ARTIFICIAL (field)
9097 || DECL_UNNAMED_BIT_FIELD (field))
9098 continue;
9099 else
9100 eltscnt++;
9101 if (count != eltscnt)
9102 goto cnt_mismatch;
9103 tree t = dexp;
9104 if (type != btype)
9106 t = convert_to_base (t, btype, /*check_access*/true,
9107 /*nonnull*/false, tf_warning_or_error);
9108 type = btype;
9110 unsigned int i = 0;
9111 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
9112 if (TREE_CODE (field) != FIELD_DECL
9113 || DECL_ARTIFICIAL (field)
9114 || DECL_UNNAMED_BIT_FIELD (field))
9115 continue;
9116 else
9118 tree tt = finish_non_static_data_member (field, unshare_expr (t),
9119 NULL_TREE);
9120 if (REFERENCE_REF_P (tt))
9121 tt = TREE_OPERAND (tt, 0);
9122 TREE_TYPE (v[i]) = TREE_TYPE (tt);
9123 layout_decl (v[i], 0);
9124 if (!processing_template_decl)
9126 SET_DECL_VALUE_EXPR (v[i], tt);
9127 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
9129 i++;
9132 if (processing_template_decl)
9134 for (unsigned int i = 0; i < count; i++)
9135 if (!DECL_HAS_VALUE_EXPR_P (v[i]))
9137 tree a = build_nt (ARRAY_REF, decl, size_int (i),
9138 NULL_TREE, NULL_TREE);
9139 SET_DECL_VALUE_EXPR (v[i], a);
9140 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
9145 /* Returns a declaration for a VAR_DECL as if:
9147 extern "C" TYPE NAME;
9149 had been seen. Used to create compiler-generated global
9150 variables. */
9152 static tree
9153 declare_global_var (tree name, tree type)
9155 auto cookie = push_abi_namespace (global_namespace);
9156 tree decl = build_decl (input_location, VAR_DECL, name, type);
9157 TREE_PUBLIC (decl) = 1;
9158 DECL_EXTERNAL (decl) = 1;
9159 DECL_ARTIFICIAL (decl) = 1;
9160 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
9161 /* If the user has explicitly declared this variable (perhaps
9162 because the code we are compiling is part of a low-level runtime
9163 library), then it is possible that our declaration will be merged
9164 with theirs by pushdecl. */
9165 decl = pushdecl (decl);
9166 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
9167 pop_abi_namespace (cookie, global_namespace);
9169 return decl;
9172 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
9173 if "__cxa_atexit" is not being used) corresponding to the function
9174 to be called when the program exits. */
9176 static tree
9177 get_atexit_fn_ptr_type (void)
9179 tree fn_type;
9181 if (!atexit_fn_ptr_type_node)
9183 tree arg_type;
9184 if (flag_use_cxa_atexit
9185 && !targetm.cxx.use_atexit_for_cxa_atexit ())
9186 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
9187 arg_type = ptr_type_node;
9188 else
9189 /* The parameter to "atexit" is "void (*)(void)". */
9190 arg_type = NULL_TREE;
9192 fn_type = build_function_type_list (void_type_node,
9193 arg_type, NULL_TREE);
9194 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
9197 return atexit_fn_ptr_type_node;
9200 /* Returns a pointer to the `atexit' function. Note that if
9201 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
9202 `__cxa_atexit' function specified in the IA64 C++ ABI. */
9204 static tree
9205 get_atexit_node (void)
9207 tree atexit_fndecl;
9208 tree fn_type;
9209 tree fn_ptr_type;
9210 const char *name;
9211 bool use_aeabi_atexit;
9212 tree ctx = global_namespace;
9214 if (atexit_node)
9215 return atexit_node;
9217 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
9219 /* The declaration for `__cxa_atexit' is:
9221 int __cxa_atexit (void (*)(void *), void *, void *)
9223 We build up the argument types and then the function type
9224 itself. */
9225 tree argtype0, argtype1, argtype2;
9227 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
9228 /* First, build the pointer-to-function type for the first
9229 argument. */
9230 fn_ptr_type = get_atexit_fn_ptr_type ();
9231 /* Then, build the rest of the argument types. */
9232 argtype2 = ptr_type_node;
9233 if (use_aeabi_atexit)
9235 argtype1 = fn_ptr_type;
9236 argtype0 = ptr_type_node;
9238 else
9240 argtype1 = ptr_type_node;
9241 argtype0 = fn_ptr_type;
9243 /* And the final __cxa_atexit type. */
9244 fn_type = build_function_type_list (integer_type_node,
9245 argtype0, argtype1, argtype2,
9246 NULL_TREE);
9247 /* ... which needs noexcept. */
9248 fn_type = build_exception_variant (fn_type, noexcept_true_spec);
9249 if (use_aeabi_atexit)
9251 name = "__aeabi_atexit";
9252 push_to_top_level ();
9253 int n = push_namespace (get_identifier ("__aeabiv1"), false);
9254 ctx = current_namespace;
9255 while (n--)
9256 pop_namespace ();
9257 pop_from_top_level ();
9259 else
9261 name = "__cxa_atexit";
9262 ctx = abi_node;
9265 else
9267 /* The declaration for `atexit' is:
9269 int atexit (void (*)());
9271 We build up the argument types and then the function type
9272 itself. */
9273 fn_ptr_type = get_atexit_fn_ptr_type ();
9274 /* Build the final atexit type. */
9275 fn_type = build_function_type_list (integer_type_node,
9276 fn_ptr_type, NULL_TREE);
9277 /* ... which needs noexcept. */
9278 fn_type = build_exception_variant (fn_type, noexcept_true_spec);
9279 name = "atexit";
9282 /* Now, build the function declaration. */
9283 push_lang_context (lang_name_c);
9284 auto cookie = push_abi_namespace (ctx);
9285 atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
9286 DECL_CONTEXT (atexit_fndecl) = FROB_CONTEXT (current_namespace);
9287 /* Install as hidden builtin so we're (a) more relaxed about
9288 exception spec matching and (b) will not give a confusing location
9289 in diagnostic and (c) won't magically appear in user-visible name
9290 lookups. */
9291 DECL_SOURCE_LOCATION (atexit_fndecl) = BUILTINS_LOCATION;
9292 atexit_fndecl = pushdecl (atexit_fndecl, /*hiding=*/true);
9293 pop_abi_namespace (cookie, ctx);
9294 mark_used (atexit_fndecl);
9295 pop_lang_context ();
9296 atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
9298 return atexit_node;
9301 /* Like get_atexit_node, but for thread-local cleanups. */
9303 static tree
9304 get_thread_atexit_node (void)
9306 /* The declaration for `__cxa_thread_atexit' is:
9308 int __cxa_thread_atexit (void (*)(void *), void *, void *) */
9309 tree fn_type = build_function_type_list (integer_type_node,
9310 get_atexit_fn_ptr_type (),
9311 ptr_type_node, ptr_type_node,
9312 NULL_TREE);
9314 /* Now, build the function declaration. */
9315 tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
9316 ECF_LEAF | ECF_NOTHROW);
9317 return decay_conversion (atexit_fndecl, tf_warning_or_error);
9320 /* Returns the __dso_handle VAR_DECL. */
9322 static tree
9323 get_dso_handle_node (void)
9325 if (dso_handle_node)
9326 return dso_handle_node;
9328 /* Declare the variable. */
9329 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
9330 ptr_type_node);
9332 #ifdef HAVE_GAS_HIDDEN
9333 if (dso_handle_node != error_mark_node)
9335 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
9336 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
9338 #endif
9340 return dso_handle_node;
9343 /* Begin a new function with internal linkage whose job will be simply
9344 to destroy some particular variable. */
9346 static GTY(()) int start_cleanup_cnt;
9348 static tree
9349 start_cleanup_fn (void)
9351 char name[32];
9353 push_to_top_level ();
9355 /* No need to mangle this. */
9356 push_lang_context (lang_name_c);
9358 /* Build the name of the function. */
9359 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
9360 /* Build the function declaration. */
9361 tree fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
9362 tree fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
9363 DECL_CONTEXT (fndecl) = FROB_CONTEXT (current_namespace);
9364 /* It's a function with internal linkage, generated by the
9365 compiler. */
9366 TREE_PUBLIC (fndecl) = 0;
9367 DECL_ARTIFICIAL (fndecl) = 1;
9368 /* Make the function `inline' so that it is only emitted if it is
9369 actually needed. It is unlikely that it will be inlined, since
9370 it is only called via a function pointer, but we avoid unnecessary
9371 emissions this way. */
9372 DECL_DECLARED_INLINE_P (fndecl) = 1;
9373 DECL_INTERFACE_KNOWN (fndecl) = 1;
9374 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
9376 /* Build the parameter. */
9377 tree parmdecl = cp_build_parm_decl (fndecl, NULL_TREE, ptr_type_node);
9378 TREE_USED (parmdecl) = 1;
9379 DECL_READ_P (parmdecl) = 1;
9380 DECL_ARGUMENTS (fndecl) = parmdecl;
9383 fndecl = pushdecl (fndecl, /*hidden=*/true);
9384 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
9386 pop_lang_context ();
9388 return current_function_decl;
9391 /* Finish the cleanup function begun by start_cleanup_fn. */
9393 static void
9394 end_cleanup_fn (void)
9396 expand_or_defer_fn (finish_function (/*inline_p=*/false));
9398 pop_from_top_level ();
9401 /* Generate code to handle the destruction of DECL, an object with
9402 static storage duration. */
9404 tree
9405 register_dtor_fn (tree decl)
9407 tree cleanup;
9408 tree addr;
9409 tree compound_stmt;
9410 tree fcall;
9411 tree type;
9412 bool ob_parm, dso_parm, use_dtor;
9413 tree arg0, arg1, arg2;
9414 tree atex_node;
9416 type = TREE_TYPE (decl);
9417 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
9418 return void_node;
9420 if (decl_maybe_constant_destruction (decl, type)
9421 && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl))
9423 cxx_maybe_build_cleanup (decl, tf_warning_or_error);
9424 return void_node;
9427 /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
9428 "__aeabi_atexit"), and DECL is a class object, we can just pass the
9429 destructor to "__cxa_atexit"; we don't have to build a temporary
9430 function to do the cleanup. */
9431 dso_parm = (flag_use_cxa_atexit
9432 && !targetm.cxx.use_atexit_for_cxa_atexit ());
9433 ob_parm = (CP_DECL_THREAD_LOCAL_P (decl) || dso_parm);
9434 use_dtor = ob_parm && CLASS_TYPE_P (type);
9435 if (use_dtor)
9437 cleanup = get_class_binding (type, complete_dtor_identifier);
9439 /* Make sure it is accessible. */
9440 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
9441 tf_warning_or_error);
9443 else
9445 /* Call build_cleanup before we enter the anonymous function so
9446 that any access checks will be done relative to the current
9447 scope, rather than the scope of the anonymous function. */
9448 build_cleanup (decl);
9450 /* Now start the function. */
9451 cleanup = start_cleanup_fn ();
9453 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
9454 to the original function, rather than the anonymous one. That
9455 will make the back end think that nested functions are in use,
9456 which causes confusion. */
9457 push_deferring_access_checks (dk_no_check);
9458 fcall = build_cleanup (decl);
9459 pop_deferring_access_checks ();
9461 /* Create the body of the anonymous function. */
9462 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
9463 finish_expr_stmt (fcall);
9464 finish_compound_stmt (compound_stmt);
9465 end_cleanup_fn ();
9468 /* Call atexit with the cleanup function. */
9469 mark_used (cleanup);
9470 cleanup = build_address (cleanup);
9472 if (CP_DECL_THREAD_LOCAL_P (decl))
9473 atex_node = get_thread_atexit_node ();
9474 else
9475 atex_node = get_atexit_node ();
9477 if (use_dtor)
9479 /* We must convert CLEANUP to the type that "__cxa_atexit"
9480 expects. */
9481 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
9482 /* "__cxa_atexit" will pass the address of DECL to the
9483 cleanup function. */
9484 mark_used (decl);
9485 addr = build_address (decl);
9486 /* The declared type of the parameter to "__cxa_atexit" is
9487 "void *". For plain "T*", we could just let the
9488 machinery in cp_build_function_call convert it -- but if the
9489 type is "cv-qualified T *", then we need to convert it
9490 before passing it in, to avoid spurious errors. */
9491 addr = build_nop (ptr_type_node, addr);
9493 else
9494 /* Since the cleanup functions we build ignore the address
9495 they're given, there's no reason to pass the actual address
9496 in, and, in general, it's cheaper to pass NULL than any
9497 other value. */
9498 addr = null_pointer_node;
9500 if (dso_parm)
9501 arg2 = cp_build_addr_expr (get_dso_handle_node (),
9502 tf_warning_or_error);
9503 else if (ob_parm)
9504 /* Just pass NULL to the dso handle parm if we don't actually
9505 have a DSO handle on this target. */
9506 arg2 = null_pointer_node;
9507 else
9508 arg2 = NULL_TREE;
9510 if (ob_parm)
9512 if (!CP_DECL_THREAD_LOCAL_P (decl)
9513 && targetm.cxx.use_aeabi_atexit ())
9515 arg1 = cleanup;
9516 arg0 = addr;
9518 else
9520 arg1 = addr;
9521 arg0 = cleanup;
9524 else
9526 arg0 = cleanup;
9527 arg1 = NULL_TREE;
9529 return cp_build_function_call_nary (atex_node, tf_warning_or_error,
9530 arg0, arg1, arg2, NULL_TREE);
9533 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
9534 is its initializer. Generate code to handle the construction
9535 and destruction of DECL. */
9537 static void
9538 expand_static_init (tree decl, tree init)
9540 gcc_assert (VAR_P (decl));
9541 gcc_assert (TREE_STATIC (decl));
9543 /* Some variables require no dynamic initialization. */
9544 if (decl_maybe_constant_destruction (decl, TREE_TYPE (decl)))
9546 /* Make sure the destructor is callable. */
9547 cxx_maybe_build_cleanup (decl, tf_warning_or_error);
9548 if (!init)
9549 return;
9552 if (CP_DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
9553 && !DECL_FUNCTION_SCOPE_P (decl))
9555 location_t dloc = DECL_SOURCE_LOCATION (decl);
9556 if (init)
9557 error_at (dloc, "non-local variable %qD declared %<__thread%> "
9558 "needs dynamic initialization", decl);
9559 else
9560 error_at (dloc, "non-local variable %qD declared %<__thread%> "
9561 "has a non-trivial destructor", decl);
9562 static bool informed;
9563 if (!informed)
9565 inform (dloc, "C++11 %<thread_local%> allows dynamic "
9566 "initialization and destruction");
9567 informed = true;
9569 return;
9572 if (DECL_FUNCTION_SCOPE_P (decl))
9574 /* Emit code to perform this initialization but once. */
9575 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
9576 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
9577 tree guard, guard_addr;
9578 tree flag, begin;
9579 /* We don't need thread-safety code for thread-local vars. */
9580 bool thread_guard = (flag_threadsafe_statics
9581 && !CP_DECL_THREAD_LOCAL_P (decl));
9583 /* Emit code to perform this initialization but once. This code
9584 looks like:
9586 static <type> guard;
9587 if (!__atomic_load (guard.first_byte)) {
9588 if (__cxa_guard_acquire (&guard)) {
9589 bool flag = false;
9590 try {
9591 // Do initialization.
9592 flag = true; __cxa_guard_release (&guard);
9593 // Register variable for destruction at end of program.
9594 } catch {
9595 if (!flag) __cxa_guard_abort (&guard);
9600 Note that the `flag' variable is only set to 1 *after* the
9601 initialization is complete. This ensures that an exception,
9602 thrown during the construction, will cause the variable to
9603 reinitialized when we pass through this code again, as per:
9605 [stmt.dcl]
9607 If the initialization exits by throwing an exception, the
9608 initialization is not complete, so it will be tried again
9609 the next time control enters the declaration.
9611 This process should be thread-safe, too; multiple threads
9612 should not be able to initialize the variable more than
9613 once. */
9615 /* Create the guard variable. */
9616 guard = get_guard (decl);
9618 /* Begin the conditional initialization. */
9619 if_stmt = begin_if_stmt ();
9621 finish_if_stmt_cond (get_guard_cond (guard, thread_guard), if_stmt);
9622 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
9624 if (thread_guard)
9626 tree vfntype = NULL_TREE;
9627 tree acquire_name, release_name, abort_name;
9628 tree acquire_fn, release_fn, abort_fn;
9629 guard_addr = build_address (guard);
9631 acquire_name = get_identifier ("__cxa_guard_acquire");
9632 release_name = get_identifier ("__cxa_guard_release");
9633 abort_name = get_identifier ("__cxa_guard_abort");
9634 acquire_fn = get_global_binding (acquire_name);
9635 release_fn = get_global_binding (release_name);
9636 abort_fn = get_global_binding (abort_name);
9637 if (!acquire_fn)
9638 acquire_fn = push_library_fn
9639 (acquire_name, build_function_type_list (integer_type_node,
9640 TREE_TYPE (guard_addr),
9641 NULL_TREE),
9642 NULL_TREE, ECF_NOTHROW);
9643 if (!release_fn || !abort_fn)
9644 vfntype = build_function_type_list (void_type_node,
9645 TREE_TYPE (guard_addr),
9646 NULL_TREE);
9647 if (!release_fn)
9648 release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
9649 ECF_NOTHROW);
9650 if (!abort_fn)
9651 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
9652 ECF_NOTHROW | ECF_LEAF);
9654 inner_if_stmt = begin_if_stmt ();
9655 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
9656 inner_if_stmt);
9658 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
9659 begin = get_target_expr (boolean_false_node);
9660 flag = TARGET_EXPR_SLOT (begin);
9662 TARGET_EXPR_CLEANUP (begin)
9663 = build3 (COND_EXPR, void_type_node, flag,
9664 void_node,
9665 build_call_n (abort_fn, 1, guard_addr));
9666 CLEANUP_EH_ONLY (begin) = 1;
9668 /* Do the initialization itself. */
9669 init = add_stmt_to_compound (begin, init);
9670 init = add_stmt_to_compound (init,
9671 build2 (MODIFY_EXPR, void_type_node,
9672 flag, boolean_true_node));
9674 /* Use atexit to register a function for destroying this static
9675 variable. Do this before calling __cxa_guard_release. */
9676 init = add_stmt_to_compound (init, register_dtor_fn (decl));
9678 init = add_stmt_to_compound (init, build_call_n (release_fn, 1,
9679 guard_addr));
9681 else
9683 init = add_stmt_to_compound (init, set_guard (guard));
9685 /* Use atexit to register a function for destroying this static
9686 variable. */
9687 init = add_stmt_to_compound (init, register_dtor_fn (decl));
9690 finish_expr_stmt (init);
9692 if (thread_guard)
9694 finish_compound_stmt (inner_then_clause);
9695 finish_then_clause (inner_if_stmt);
9696 finish_if_stmt (inner_if_stmt);
9699 finish_compound_stmt (then_clause);
9700 finish_then_clause (if_stmt);
9701 finish_if_stmt (if_stmt);
9703 else if (CP_DECL_THREAD_LOCAL_P (decl))
9704 tls_aggregates = tree_cons (init, decl, tls_aggregates);
9705 else
9706 static_aggregates = tree_cons (init, decl, static_aggregates);
9710 /* Make TYPE a complete type based on INITIAL_VALUE.
9711 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
9712 2 if there was no information (in which case assume 0 if DO_DEFAULT),
9713 3 if the initializer list is empty (in pedantic mode). */
9716 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
9718 int failure;
9719 tree type, elt_type;
9721 /* Don't get confused by a CONSTRUCTOR for some other type. */
9722 if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
9723 && !BRACE_ENCLOSED_INITIALIZER_P (initial_value)
9724 && TREE_CODE (TREE_TYPE (initial_value)) != ARRAY_TYPE)
9725 return 1;
9727 if (initial_value)
9729 /* An array of character type can be initialized from a
9730 brace-enclosed string constant so call reshape_init to
9731 remove the optional braces from a braced string literal. */
9732 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
9733 && BRACE_ENCLOSED_INITIALIZER_P (initial_value))
9734 initial_value = reshape_init (*ptype, initial_value,
9735 tf_warning_or_error);
9737 /* If any of the elements are parameter packs, we can't actually
9738 complete this type now because the array size is dependent. */
9739 if (TREE_CODE (initial_value) == CONSTRUCTOR)
9740 for (auto &e: CONSTRUCTOR_ELTS (initial_value))
9741 if (PACK_EXPANSION_P (e.value))
9742 return 0;
9745 failure = complete_array_type (ptype, initial_value, do_default);
9747 /* We can create the array before the element type is complete, which
9748 means that we didn't have these two bits set in the original type
9749 either. In completing the type, we are expected to propagate these
9750 bits. See also complete_type which does the same thing for arrays
9751 of fixed size. */
9752 type = *ptype;
9753 if (type != error_mark_node && TYPE_DOMAIN (type))
9755 elt_type = TREE_TYPE (type);
9756 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
9757 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
9758 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
9761 return failure;
9764 /* As above, but either give an error or reject zero-size arrays, depending
9765 on COMPLAIN. */
9768 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
9769 bool do_default, tsubst_flags_t complain)
9771 int failure;
9772 bool sfinae = !(complain & tf_error);
9773 /* In SFINAE context we can't be lenient about zero-size arrays. */
9774 if (sfinae)
9775 ++pedantic;
9776 failure = cp_complete_array_type (ptype, initial_value, do_default);
9777 if (sfinae)
9778 --pedantic;
9779 if (failure)
9781 if (sfinae)
9782 /* Not an error. */;
9783 else if (failure == 1)
9784 error ("initializer fails to determine size of %qT", *ptype);
9785 else if (failure == 2)
9787 if (do_default)
9788 error ("array size missing in %qT", *ptype);
9790 else if (failure == 3)
9791 error ("zero-size array %qT", *ptype);
9792 *ptype = error_mark_node;
9794 return failure;
9797 /* Return zero if something is declared to be a member of type
9798 CTYPE when in the context of CUR_TYPE. STRING is the error
9799 message to print in that case. Otherwise, quietly return 1. */
9801 static int
9802 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
9804 if (ctype && ctype != cur_type)
9806 if (flags == DTOR_FLAG)
9807 error ("destructor for alien class %qT cannot be a member", ctype);
9808 else
9809 error ("constructor for alien class %qT cannot be a member", ctype);
9810 return 0;
9812 return 1;
9815 /* Subroutine of `grokdeclarator'. */
9817 /* Generate errors possibly applicable for a given set of specifiers.
9818 This is for ARM $7.1.2. */
9820 static void
9821 bad_specifiers (tree object,
9822 enum bad_spec_place type,
9823 int virtualp,
9824 int quals,
9825 int inlinep,
9826 int friendp,
9827 int raises,
9828 const location_t* locations)
9830 switch (type)
9832 case BSP_VAR:
9833 if (virtualp)
9834 error_at (locations[ds_virtual],
9835 "%qD declared as a %<virtual%> variable", object);
9836 if (quals)
9837 error ("%<const%> and %<volatile%> function specifiers on "
9838 "%qD invalid in variable declaration", object);
9839 break;
9840 case BSP_PARM:
9841 if (virtualp)
9842 error_at (locations[ds_virtual],
9843 "%qD declared as a %<virtual%> parameter", object);
9844 if (inlinep)
9845 error_at (locations[ds_inline],
9846 "%qD declared as an %<inline%> parameter", object);
9847 if (quals)
9848 error ("%<const%> and %<volatile%> function specifiers on "
9849 "%qD invalid in parameter declaration", object);
9850 break;
9851 case BSP_TYPE:
9852 if (virtualp)
9853 error_at (locations[ds_virtual],
9854 "%qD declared as a %<virtual%> type", object);
9855 if (inlinep)
9856 error_at (locations[ds_inline],
9857 "%qD declared as an %<inline%> type", object);
9858 if (quals)
9859 error ("%<const%> and %<volatile%> function specifiers on "
9860 "%qD invalid in type declaration", object);
9861 break;
9862 case BSP_FIELD:
9863 if (virtualp)
9864 error_at (locations[ds_virtual],
9865 "%qD declared as a %<virtual%> field", object);
9866 if (inlinep)
9867 error_at (locations[ds_inline],
9868 "%qD declared as an %<inline%> field", object);
9869 if (quals)
9870 error ("%<const%> and %<volatile%> function specifiers on "
9871 "%qD invalid in field declaration", object);
9872 break;
9873 default:
9874 gcc_unreachable();
9876 if (friendp)
9877 error ("%q+D declared as a friend", object);
9878 if (raises
9879 && !flag_noexcept_type
9880 && (TREE_CODE (object) == TYPE_DECL
9881 || (!TYPE_PTRFN_P (TREE_TYPE (object))
9882 && !TYPE_REFFN_P (TREE_TYPE (object))
9883 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
9884 error ("%q+D declared with an exception specification", object);
9887 /* DECL is a member function or static data member and is presently
9888 being defined. Check that the definition is taking place in a
9889 valid namespace. */
9891 static void
9892 check_class_member_definition_namespace (tree decl)
9894 /* These checks only apply to member functions and static data
9895 members. */
9896 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
9897 /* We check for problems with specializations in pt.cc in
9898 check_specialization_namespace, where we can issue better
9899 diagnostics. */
9900 if (processing_specialization)
9901 return;
9902 /* We check this in check_explicit_instantiation_namespace. */
9903 if (processing_explicit_instantiation)
9904 return;
9905 /* [class.mfct]
9907 A member function definition that appears outside of the
9908 class definition shall appear in a namespace scope enclosing
9909 the class definition.
9911 [class.static.data]
9913 The definition for a static data member shall appear in a
9914 namespace scope enclosing the member's class definition. */
9915 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
9916 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
9917 decl, DECL_CONTEXT (decl));
9920 /* Build a PARM_DECL for the "this" parameter of FN. TYPE is the
9921 METHOD_TYPE for a non-static member function; QUALS are the
9922 cv-qualifiers that apply to the function. */
9924 tree
9925 build_this_parm (tree fn, tree type, cp_cv_quals quals)
9927 tree this_type;
9928 tree qual_type;
9929 tree parm;
9930 cp_cv_quals this_quals;
9932 if (CLASS_TYPE_P (type))
9934 this_type
9935 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
9936 this_type = build_pointer_type (this_type);
9938 else
9939 this_type = type_of_this_parm (type);
9940 /* The `this' parameter is implicitly `const'; it cannot be
9941 assigned to. */
9942 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
9943 qual_type = cp_build_qualified_type (this_type, this_quals);
9944 parm = build_artificial_parm (fn, this_identifier, qual_type);
9945 cp_apply_type_quals_to_decl (this_quals, parm);
9946 return parm;
9949 /* DECL is a static member function. Complain if it was declared
9950 with function-cv-quals. */
9952 static void
9953 check_static_quals (tree decl, cp_cv_quals quals)
9955 if (quals != TYPE_UNQUALIFIED)
9956 error ("static member function %q#D declared with type qualifiers",
9957 decl);
9960 // Check that FN takes no arguments and returns bool.
9961 static void
9962 check_concept_fn (tree fn)
9964 // A constraint is nullary.
9965 if (DECL_ARGUMENTS (fn))
9966 error_at (DECL_SOURCE_LOCATION (fn),
9967 "concept %q#D declared with function parameters", fn);
9969 // The declared return type of the concept shall be bool, and
9970 // it shall not be deduced from it definition.
9971 tree type = TREE_TYPE (TREE_TYPE (fn));
9972 if (is_auto (type))
9973 error_at (DECL_SOURCE_LOCATION (fn),
9974 "concept %q#D declared with a deduced return type", fn);
9975 else if (type != boolean_type_node)
9976 error_at (DECL_SOURCE_LOCATION (fn),
9977 "concept %q#D with non-%<bool%> return type %qT", fn, type);
9980 /* Helper function. Replace the temporary this parameter injected
9981 during cp_finish_omp_declare_simd with the real this parameter. */
9983 static tree
9984 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
9986 tree this_parm = (tree) data;
9987 if (TREE_CODE (*tp) == PARM_DECL
9988 && DECL_NAME (*tp) == this_identifier
9989 && *tp != this_parm)
9990 *tp = this_parm;
9991 else if (TYPE_P (*tp))
9992 *walk_subtrees = 0;
9993 return NULL_TREE;
9996 /* CTYPE is class type, or null if non-class.
9997 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
9998 or METHOD_TYPE.
9999 DECLARATOR is the function's name.
10000 PARMS is a chain of PARM_DECLs for the function.
10001 VIRTUALP is truthvalue of whether the function is virtual or not.
10002 FLAGS are to be passed through to `grokclassfn'.
10003 QUALS are qualifiers indicating whether the function is `const'
10004 or `volatile'.
10005 RAISES is a list of exceptions that this function can raise.
10006 CHECK is 1 if we must find this method in CTYPE, 0 if we should
10007 not look, and -1 if we should not call `grokclassfn' at all.
10009 SFK is the kind of special function (if any) for the new function.
10011 Returns `NULL_TREE' if something goes wrong, after issuing
10012 applicable error messages. */
10014 static tree
10015 grokfndecl (tree ctype,
10016 tree type,
10017 tree declarator,
10018 tree parms,
10019 tree orig_declarator,
10020 const cp_decl_specifier_seq *declspecs,
10021 tree decl_reqs,
10022 int virtualp,
10023 enum overload_flags flags,
10024 cp_cv_quals quals,
10025 cp_ref_qualifier rqual,
10026 tree raises,
10027 int check,
10028 int friendp,
10029 int publicp,
10030 int inlinep,
10031 bool deletedp,
10032 special_function_kind sfk,
10033 bool funcdef_flag,
10034 bool late_return_type_p,
10035 int template_count,
10036 tree in_namespace,
10037 tree* attrlist,
10038 location_t location)
10040 tree decl;
10041 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
10042 tree t;
10044 if (location == UNKNOWN_LOCATION)
10045 location = input_location;
10047 /* Was the concept specifier present? */
10048 bool concept_p = inlinep & 4;
10050 /* Concept declarations must have a corresponding definition. */
10051 if (concept_p && !funcdef_flag)
10053 error_at (location, "concept %qD has no definition", declarator);
10054 return NULL_TREE;
10057 type = build_cp_fntype_variant (type, rqual, raises, late_return_type_p);
10059 decl = build_lang_decl_loc (location, FUNCTION_DECL, declarator, type);
10061 /* Set the constraints on the declaration. */
10062 if (flag_concepts)
10064 tree tmpl_reqs = NULL_TREE;
10065 tree ctx = friendp ? current_class_type : ctype;
10066 bool block_local = TREE_CODE (current_scope ()) == FUNCTION_DECL;
10067 bool memtmpl = (!block_local
10068 && (current_template_depth
10069 > template_class_depth (ctx)));
10070 if (memtmpl)
10072 if (!current_template_parms)
10073 /* If there are no template parameters, something must have
10074 gone wrong. */
10075 gcc_assert (seen_error ());
10076 else
10077 tmpl_reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
10079 tree ci = build_constraints (tmpl_reqs, decl_reqs);
10080 if (concept_p && ci)
10082 error_at (location, "a function concept cannot be constrained");
10083 ci = NULL_TREE;
10085 /* C++20 CA378: Remove non-templated constrained functions. */
10086 if (ci
10087 && (block_local
10088 || (!flag_concepts_ts
10089 && (!processing_template_decl
10090 || (friendp && !memtmpl && !funcdef_flag)))))
10092 error_at (location, "constraints on a non-templated function");
10093 ci = NULL_TREE;
10095 set_constraints (decl, ci);
10098 if (TREE_CODE (type) == METHOD_TYPE)
10100 tree parm = build_this_parm (decl, type, quals);
10101 DECL_CHAIN (parm) = parms;
10102 parms = parm;
10104 /* Allocate space to hold the vptr bit if needed. */
10105 SET_DECL_ALIGN (decl, MINIMUM_METHOD_BOUNDARY);
10108 DECL_ARGUMENTS (decl) = parms;
10109 for (t = parms; t; t = DECL_CHAIN (t))
10110 DECL_CONTEXT (t) = decl;
10112 /* Propagate volatile out from type to decl. */
10113 if (TYPE_VOLATILE (type))
10114 TREE_THIS_VOLATILE (decl) = 1;
10116 /* Setup decl according to sfk. */
10117 switch (sfk)
10119 case sfk_constructor:
10120 case sfk_copy_constructor:
10121 case sfk_move_constructor:
10122 DECL_CXX_CONSTRUCTOR_P (decl) = 1;
10123 DECL_NAME (decl) = ctor_identifier;
10124 break;
10125 case sfk_destructor:
10126 DECL_CXX_DESTRUCTOR_P (decl) = 1;
10127 DECL_NAME (decl) = dtor_identifier;
10128 break;
10129 default:
10130 break;
10133 if (friendp && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
10135 if (funcdef_flag)
10136 error_at (location,
10137 "defining explicit specialization %qD in friend declaration",
10138 orig_declarator);
10139 else
10141 tree fns = TREE_OPERAND (orig_declarator, 0);
10142 tree args = TREE_OPERAND (orig_declarator, 1);
10144 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
10146 /* Something like `template <class T> friend void f<T>()'. */
10147 error_at (location,
10148 "invalid use of template-id %qD in declaration "
10149 "of primary template",
10150 orig_declarator);
10151 return NULL_TREE;
10155 /* A friend declaration of the form friend void f<>(). Record
10156 the information in the TEMPLATE_ID_EXPR. */
10157 SET_DECL_IMPLICIT_INSTANTIATION (decl);
10159 gcc_assert (identifier_p (fns) || OVL_P (fns));
10160 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
10162 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
10163 if (TREE_PURPOSE (t)
10164 && TREE_CODE (TREE_PURPOSE (t)) == DEFERRED_PARSE)
10166 error_at (defparse_location (TREE_PURPOSE (t)),
10167 "default arguments are not allowed in declaration "
10168 "of friend template specialization %qD",
10169 decl);
10170 return NULL_TREE;
10173 if (inlinep & 1)
10175 error_at (declspecs->locations[ds_inline],
10176 "%<inline%> is not allowed in declaration of friend "
10177 "template specialization %qD",
10178 decl);
10179 return NULL_TREE;
10184 /* C++17 11.3.6/4: "If a friend declaration specifies a default argument
10185 expression, that declaration shall be a definition..." */
10186 if (friendp && !funcdef_flag)
10188 for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
10189 t && t != void_list_node; t = TREE_CHAIN (t))
10190 if (TREE_PURPOSE (t))
10192 permerror (DECL_SOURCE_LOCATION (decl),
10193 "friend declaration of %qD specifies default "
10194 "arguments and isn%'t a definition", decl);
10195 break;
10199 /* If this decl has namespace scope, set that up. */
10200 if (in_namespace)
10201 set_decl_namespace (decl, in_namespace, friendp);
10202 else if (ctype)
10203 DECL_CONTEXT (decl) = ctype;
10204 else
10205 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
10207 /* `main' and builtins have implicit 'C' linkage. */
10208 if (ctype == NULL_TREE
10209 && DECL_FILE_SCOPE_P (decl)
10210 && current_lang_name == lang_name_cplusplus
10211 && (MAIN_NAME_P (declarator)
10212 || (IDENTIFIER_LENGTH (declarator) > 10
10213 && IDENTIFIER_POINTER (declarator)[0] == '_'
10214 && IDENTIFIER_POINTER (declarator)[1] == '_'
10215 && startswith (IDENTIFIER_POINTER (declarator) + 2,
10216 "builtin_"))
10217 || (targetcm.cxx_implicit_extern_c
10218 && (targetcm.cxx_implicit_extern_c
10219 (IDENTIFIER_POINTER (declarator))))))
10220 SET_DECL_LANGUAGE (decl, lang_c);
10222 /* Should probably propagate const out from type to decl I bet (mrs). */
10223 if (staticp)
10225 DECL_STATIC_FUNCTION_P (decl) = 1;
10226 DECL_CONTEXT (decl) = ctype;
10229 if (deletedp)
10230 DECL_DELETED_FN (decl) = 1;
10232 if (ctype && funcdef_flag)
10233 check_class_member_definition_namespace (decl);
10235 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
10237 if (PROCESSING_REAL_TEMPLATE_DECL_P())
10238 error_at (location, "cannot declare %<::main%> to be a template");
10239 if (inlinep & 1)
10240 error_at (declspecs->locations[ds_inline],
10241 "cannot declare %<::main%> to be inline");
10242 if (inlinep & 2)
10243 error_at (declspecs->locations[ds_constexpr],
10244 "cannot declare %<::main%> to be %qs", "constexpr");
10245 if (inlinep & 8)
10246 error_at (declspecs->locations[ds_consteval],
10247 "cannot declare %<::main%> to be %qs", "consteval");
10248 if (!publicp)
10249 error_at (location, "cannot declare %<::main%> to be static");
10250 inlinep = 0;
10251 publicp = 1;
10254 /* Members of anonymous types and local classes have no linkage; make
10255 them internal. If a typedef is made later, this will be changed. */
10256 if (ctype && (!TREE_PUBLIC (TYPE_MAIN_DECL (ctype))
10257 || decl_function_context (TYPE_MAIN_DECL (ctype))))
10258 publicp = 0;
10260 if (publicp && cxx_dialect == cxx98)
10262 /* [basic.link]: A name with no linkage (notably, the name of a class
10263 or enumeration declared in a local scope) shall not be used to
10264 declare an entity with linkage.
10266 DR 757 relaxes this restriction for C++0x. */
10267 no_linkage_error (decl);
10270 TREE_PUBLIC (decl) = publicp;
10271 if (! publicp)
10273 DECL_INTERFACE_KNOWN (decl) = 1;
10274 DECL_NOT_REALLY_EXTERN (decl) = 1;
10277 /* If the declaration was declared inline, mark it as such. */
10278 if (inlinep)
10280 DECL_DECLARED_INLINE_P (decl) = 1;
10281 if (publicp)
10282 DECL_COMDAT (decl) = 1;
10284 if (inlinep & 2)
10285 DECL_DECLARED_CONSTEXPR_P (decl) = true;
10286 else if (inlinep & 8)
10288 DECL_DECLARED_CONSTEXPR_P (decl) = true;
10289 SET_DECL_IMMEDIATE_FUNCTION_P (decl);
10292 // If the concept declaration specifier was found, check
10293 // that the declaration satisfies the necessary requirements.
10294 if (concept_p)
10296 DECL_DECLARED_CONCEPT_P (decl) = true;
10297 check_concept_fn (decl);
10300 DECL_EXTERNAL (decl) = 1;
10301 if (TREE_CODE (type) == FUNCTION_TYPE)
10303 if (quals || rqual)
10304 TREE_TYPE (decl) = apply_memfn_quals (TREE_TYPE (decl),
10305 TYPE_UNQUALIFIED,
10306 REF_QUAL_NONE);
10308 if (quals)
10310 error (ctype
10311 ? G_("static member function %qD cannot have cv-qualifier")
10312 : G_("non-member function %qD cannot have cv-qualifier"),
10313 decl);
10314 quals = TYPE_UNQUALIFIED;
10317 if (rqual)
10319 error (ctype
10320 ? G_("static member function %qD cannot have ref-qualifier")
10321 : G_("non-member function %qD cannot have ref-qualifier"),
10322 decl);
10323 rqual = REF_QUAL_NONE;
10327 if (deduction_guide_p (decl))
10329 tree type = TREE_TYPE (DECL_NAME (decl));
10330 if (in_namespace == NULL_TREE
10331 && CP_DECL_CONTEXT (decl) != CP_TYPE_CONTEXT (type))
10333 error_at (location, "deduction guide %qD must be declared in the "
10334 "same scope as %qT", decl, type);
10335 inform (location_of (type), " declared here");
10336 return NULL_TREE;
10338 if (DECL_CLASS_SCOPE_P (decl)
10339 && current_access_specifier != declared_access (TYPE_NAME (type)))
10341 error_at (location, "deduction guide %qD must have the same access "
10342 "as %qT", decl, type);
10343 inform (location_of (type), " declared here");
10345 if (funcdef_flag)
10346 error_at (location,
10347 "deduction guide %qD must not have a function body", decl);
10349 else if (IDENTIFIER_ANY_OP_P (DECL_NAME (decl))
10350 && !grok_op_properties (decl, /*complain=*/true))
10351 return NULL_TREE;
10352 else if (UDLIT_OPER_P (DECL_NAME (decl)))
10354 bool long_long_unsigned_p;
10355 bool long_double_p;
10356 const char *suffix = NULL;
10357 /* [over.literal]/6: Literal operators shall not have C linkage. */
10358 if (DECL_LANGUAGE (decl) == lang_c)
10360 error_at (location, "literal operator with C linkage");
10361 maybe_show_extern_c_location ();
10362 return NULL_TREE;
10365 if (DECL_NAMESPACE_SCOPE_P (decl))
10367 if (!check_literal_operator_args (decl, &long_long_unsigned_p,
10368 &long_double_p))
10370 error_at (location, "%qD has invalid argument list", decl);
10371 return NULL_TREE;
10374 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
10375 if (long_long_unsigned_p)
10377 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
10378 warning_at (location, 0, "integer suffix %qs"
10379 " shadowed by implementation", suffix);
10381 else if (long_double_p)
10383 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
10384 warning_at (location, 0, "floating-point suffix %qs"
10385 " shadowed by implementation", suffix);
10387 /* 17.6.3.3.5 */
10388 if (suffix[0] != '_'
10389 && !current_function_decl && !(friendp && !funcdef_flag))
10390 warning_at (location, OPT_Wliteral_suffix,
10391 "literal operator suffixes not preceded by %<_%>"
10392 " are reserved for future standardization");
10394 else
10396 error_at (location, "%qD must be a non-member function", decl);
10397 return NULL_TREE;
10401 if (funcdef_flag)
10402 /* Make the init_value nonzero so pushdecl knows this is not
10403 tentative. error_mark_node is replaced later with the BLOCK. */
10404 DECL_INITIAL (decl) = error_mark_node;
10406 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
10407 TREE_NOTHROW (decl) = 1;
10409 if (flag_openmp || flag_openmp_simd)
10411 /* Adjust "omp declare simd" attributes. */
10412 tree ods = lookup_attribute ("omp declare simd", *attrlist);
10413 if (ods)
10415 tree attr;
10416 for (attr = ods; attr;
10417 attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
10419 if (TREE_CODE (type) == METHOD_TYPE)
10420 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
10421 DECL_ARGUMENTS (decl), NULL);
10422 if (TREE_VALUE (attr) != NULL_TREE)
10424 tree cl = TREE_VALUE (TREE_VALUE (attr));
10425 cl = c_omp_declare_simd_clauses_to_numbers
10426 (DECL_ARGUMENTS (decl), cl);
10427 if (cl)
10428 TREE_VALUE (TREE_VALUE (attr)) = cl;
10429 else
10430 TREE_VALUE (attr) = NULL_TREE;
10436 /* Caller will do the rest of this. */
10437 if (check < 0)
10438 return decl;
10440 if (ctype != NULL_TREE)
10441 grokclassfn (ctype, decl, flags);
10443 /* 12.4/3 */
10444 if (cxx_dialect >= cxx11
10445 && DECL_DESTRUCTOR_P (decl)
10446 && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
10447 && !processing_template_decl)
10448 deduce_noexcept_on_destructor (decl);
10450 set_originating_module (decl);
10452 decl = check_explicit_specialization (orig_declarator, decl,
10453 template_count,
10454 2 * funcdef_flag +
10455 4 * (friendp != 0) +
10456 8 * concept_p,
10457 *attrlist);
10458 if (decl == error_mark_node)
10459 return NULL_TREE;
10461 if (DECL_STATIC_FUNCTION_P (decl))
10462 check_static_quals (decl, quals);
10464 if (attrlist)
10466 cplus_decl_attributes (&decl, *attrlist, 0);
10467 *attrlist = NULL_TREE;
10470 /* Check main's type after attributes have been applied. */
10471 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
10473 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
10474 integer_type_node))
10476 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
10477 tree newtype;
10478 error_at (declspecs->locations[ds_type_spec],
10479 "%<::main%> must return %<int%>");
10480 newtype = build_function_type (integer_type_node, oldtypeargs);
10481 TREE_TYPE (decl) = newtype;
10483 if (warn_main)
10484 check_main_parameter_types (decl);
10487 if (ctype != NULL_TREE && check)
10489 tree old_decl = check_classfn (ctype, decl,
10490 (current_template_depth
10491 > template_class_depth (ctype))
10492 ? current_template_parms
10493 : NULL_TREE);
10495 if (old_decl == error_mark_node)
10496 return NULL_TREE;
10498 if (old_decl)
10500 tree ok;
10501 tree pushed_scope;
10503 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
10504 /* Because grokfndecl is always supposed to return a
10505 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
10506 here. We depend on our callers to figure out that its
10507 really a template that's being returned. */
10508 old_decl = DECL_TEMPLATE_RESULT (old_decl);
10510 if (DECL_STATIC_FUNCTION_P (old_decl)
10511 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
10513 /* Remove the `this' parm added by grokclassfn. */
10514 revert_static_member_fn (decl);
10515 check_static_quals (decl, quals);
10517 if (DECL_ARTIFICIAL (old_decl))
10519 error ("definition of implicitly-declared %qD", old_decl);
10520 return NULL_TREE;
10522 else if (DECL_DEFAULTED_FN (old_decl))
10524 error ("definition of explicitly-defaulted %q+D", decl);
10525 inform (DECL_SOURCE_LOCATION (old_decl),
10526 "%q#D explicitly defaulted here", old_decl);
10527 return NULL_TREE;
10530 /* Since we've smashed OLD_DECL to its
10531 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
10532 if (TREE_CODE (decl) == TEMPLATE_DECL)
10533 decl = DECL_TEMPLATE_RESULT (decl);
10535 /* Attempt to merge the declarations. This can fail, in
10536 the case of some invalid specialization declarations. */
10537 pushed_scope = push_scope (ctype);
10538 ok = duplicate_decls (decl, old_decl);
10539 if (pushed_scope)
10540 pop_scope (pushed_scope);
10541 if (!ok)
10543 error ("no %q#D member function declared in class %qT",
10544 decl, ctype);
10545 return NULL_TREE;
10547 if (ok == error_mark_node)
10548 return NULL_TREE;
10549 return old_decl;
10553 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
10554 return NULL_TREE;
10556 if (ctype == NULL_TREE || check)
10557 return decl;
10559 if (virtualp)
10560 DECL_VIRTUAL_P (decl) = 1;
10562 return decl;
10565 /* decl is a FUNCTION_DECL.
10566 specifiers are the parsed virt-specifiers.
10568 Set flags to reflect the virt-specifiers.
10570 Returns decl. */
10572 static tree
10573 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
10575 if (decl == NULL_TREE)
10576 return decl;
10577 if (specifiers & VIRT_SPEC_OVERRIDE)
10578 DECL_OVERRIDE_P (decl) = 1;
10579 if (specifiers & VIRT_SPEC_FINAL)
10580 DECL_FINAL_P (decl) = 1;
10581 return decl;
10584 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
10585 the linkage that DECL will receive in the object file. */
10587 static void
10588 set_linkage_for_static_data_member (tree decl)
10590 /* A static data member always has static storage duration and
10591 external linkage. Note that static data members are forbidden in
10592 local classes -- the only situation in which a class has
10593 non-external linkage. */
10594 TREE_PUBLIC (decl) = 1;
10595 TREE_STATIC (decl) = 1;
10596 /* For non-template classes, static data members are always put
10597 out in exactly those files where they are defined, just as
10598 with ordinary namespace-scope variables. */
10599 if (!processing_template_decl)
10600 DECL_INTERFACE_KNOWN (decl) = 1;
10603 /* Create a VAR_DECL named NAME with the indicated TYPE.
10605 If SCOPE is non-NULL, it is the class type or namespace containing
10606 the variable. If SCOPE is NULL, the variable should is created in
10607 the innermost enclosing scope. */
10609 static tree
10610 grokvardecl (tree type,
10611 tree name,
10612 tree orig_declarator,
10613 const cp_decl_specifier_seq *declspecs,
10614 int initialized,
10615 int type_quals,
10616 int inlinep,
10617 bool conceptp,
10618 int template_count,
10619 tree scope,
10620 location_t location)
10622 tree decl;
10623 tree explicit_scope;
10625 gcc_assert (!name || identifier_p (name));
10627 bool constp = (type_quals & TYPE_QUAL_CONST) != 0;
10628 bool volatilep = (type_quals & TYPE_QUAL_VOLATILE) != 0;
10630 /* Compute the scope in which to place the variable, but remember
10631 whether or not that scope was explicitly specified by the user. */
10632 explicit_scope = scope;
10633 if (!scope)
10635 /* An explicit "extern" specifier indicates a namespace-scope
10636 variable. */
10637 if (declspecs->storage_class == sc_extern)
10638 scope = current_decl_namespace ();
10639 else if (!at_function_scope_p ())
10640 scope = current_scope ();
10643 if (scope
10644 && (/* If the variable is a namespace-scope variable declared in a
10645 template, we need DECL_LANG_SPECIFIC. */
10646 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
10647 /* Similarly for namespace-scope variables with language linkage
10648 other than C++. */
10649 || (TREE_CODE (scope) == NAMESPACE_DECL
10650 && current_lang_name != lang_name_cplusplus)
10651 /* Similarly for static data members. */
10652 || TYPE_P (scope)
10653 /* Similarly for explicit specializations. */
10654 || (orig_declarator
10655 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
10656 decl = build_lang_decl_loc (location, VAR_DECL, name, type);
10657 else
10658 decl = build_decl (location, VAR_DECL, name, type);
10660 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
10661 set_decl_namespace (decl, explicit_scope, 0);
10662 else
10663 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
10665 if (declspecs->storage_class == sc_extern)
10667 DECL_THIS_EXTERN (decl) = 1;
10668 DECL_EXTERNAL (decl) = !initialized;
10671 if (DECL_CLASS_SCOPE_P (decl))
10673 set_linkage_for_static_data_member (decl);
10674 /* This function is only called with out-of-class definitions. */
10675 DECL_EXTERNAL (decl) = 0;
10676 check_class_member_definition_namespace (decl);
10678 /* At top level, either `static' or no s.c. makes a definition
10679 (perhaps tentative), and absence of `static' makes it public. */
10680 else if (toplevel_bindings_p ())
10682 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
10683 && (DECL_THIS_EXTERN (decl)
10684 || ! constp
10685 || volatilep
10686 || inlinep));
10687 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
10689 /* Not at top level, only `static' makes a static definition. */
10690 else
10692 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
10693 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
10696 set_originating_module (decl);
10698 if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
10700 if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
10702 CP_DECL_THREAD_LOCAL_P (decl) = true;
10703 if (!processing_template_decl)
10704 set_decl_tls_model (decl, decl_default_tls_model (decl));
10706 if (declspecs->gnu_thread_keyword_p)
10707 SET_DECL_GNU_TLS_P (decl);
10710 /* If the type of the decl has no linkage, make sure that we'll
10711 notice that in mark_used. */
10712 if (cxx_dialect > cxx98
10713 && decl_linkage (decl) != lk_none
10714 && DECL_LANG_SPECIFIC (decl) == NULL
10715 && !DECL_EXTERN_C_P (decl)
10716 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
10717 retrofit_lang_decl (decl);
10719 if (TREE_PUBLIC (decl))
10721 /* [basic.link]: A name with no linkage (notably, the name of a class
10722 or enumeration declared in a local scope) shall not be used to
10723 declare an entity with linkage.
10725 DR 757 relaxes this restriction for C++0x. */
10726 if (cxx_dialect < cxx11)
10727 no_linkage_error (decl);
10729 else
10730 DECL_INTERFACE_KNOWN (decl) = 1;
10732 if (DECL_NAME (decl)
10733 && MAIN_NAME_P (DECL_NAME (decl))
10734 && scope == global_namespace)
10735 error_at (DECL_SOURCE_LOCATION (decl),
10736 "cannot declare %<::main%> to be a global variable");
10738 /* Check that the variable can be safely declared as a concept.
10739 Note that this also forbids explicit specializations. */
10740 if (conceptp)
10742 if (!processing_template_decl)
10744 error_at (declspecs->locations[ds_concept],
10745 "a non-template variable cannot be %<concept%>");
10746 return NULL_TREE;
10748 else if (!at_namespace_scope_p ())
10750 error_at (declspecs->locations[ds_concept],
10751 "concept must be defined at namespace scope");
10752 return NULL_TREE;
10754 else
10755 DECL_DECLARED_CONCEPT_P (decl) = true;
10756 if (!same_type_ignoring_top_level_qualifiers_p (type, boolean_type_node))
10757 error_at (declspecs->locations[ds_type_spec],
10758 "concept must have type %<bool%>");
10759 if (TEMPLATE_PARMS_CONSTRAINTS (current_template_parms))
10761 error_at (location, "a variable concept cannot be constrained");
10762 TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = NULL_TREE;
10765 else if (flag_concepts
10766 && current_template_depth > template_class_depth (scope))
10768 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
10769 tree ci = build_constraints (reqs, NULL_TREE);
10771 set_constraints (decl, ci);
10774 // Handle explicit specializations and instantiations of variable templates.
10775 if (orig_declarator)
10776 decl = check_explicit_specialization (orig_declarator, decl,
10777 template_count, conceptp * 8);
10779 return decl != error_mark_node ? decl : NULL_TREE;
10782 /* Create and return a canonical pointer to member function type, for
10783 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
10785 tree
10786 build_ptrmemfunc_type (tree type)
10788 tree field, fields;
10789 tree t;
10791 if (type == error_mark_node)
10792 return type;
10794 /* Make sure that we always have the unqualified pointer-to-member
10795 type first. */
10796 if (cp_cv_quals quals = cp_type_quals (type))
10798 tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
10799 return cp_build_qualified_type (unqual, quals);
10802 /* If a canonical type already exists for this type, use it. We use
10803 this method instead of type_hash_canon, because it only does a
10804 simple equality check on the list of field members. */
10806 t = TYPE_PTRMEMFUNC_TYPE (type);
10807 if (t)
10808 return t;
10810 t = make_node (RECORD_TYPE);
10812 /* Let the front end know this is a pointer to member function. */
10813 TYPE_PTRMEMFUNC_FLAG (t) = 1;
10815 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
10816 DECL_NONADDRESSABLE_P (field) = 1;
10817 fields = field;
10819 field = build_decl (input_location, FIELD_DECL, delta_identifier,
10820 delta_type_node);
10821 DECL_NONADDRESSABLE_P (field) = 1;
10822 DECL_CHAIN (field) = fields;
10823 fields = field;
10825 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
10827 /* Zap out the name so that the back end will give us the debugging
10828 information for this anonymous RECORD_TYPE. */
10829 TYPE_NAME (t) = NULL_TREE;
10831 /* Cache this pointer-to-member type so that we can find it again
10832 later. */
10833 TYPE_PTRMEMFUNC_TYPE (type) = t;
10835 if (TYPE_STRUCTURAL_EQUALITY_P (type))
10836 SET_TYPE_STRUCTURAL_EQUALITY (t);
10837 else if (TYPE_CANONICAL (type) != type)
10838 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
10840 return t;
10843 /* Create and return a pointer to data member type. */
10845 tree
10846 build_ptrmem_type (tree class_type, tree member_type)
10848 if (TREE_CODE (member_type) == METHOD_TYPE)
10850 cp_cv_quals quals = type_memfn_quals (member_type);
10851 cp_ref_qualifier rqual = type_memfn_rqual (member_type);
10852 member_type = build_memfn_type (member_type, class_type, quals, rqual);
10853 return build_ptrmemfunc_type (build_pointer_type (member_type));
10855 else
10857 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
10858 return build_offset_type (class_type, member_type);
10862 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
10863 Check to see that the definition is valid. Issue appropriate error
10864 messages. */
10866 static void
10867 check_static_variable_definition (tree decl, tree type)
10869 /* Avoid redundant diagnostics on out-of-class definitions. */
10870 if (!current_class_type || !TYPE_BEING_DEFINED (current_class_type))
10872 /* Can't check yet if we don't know the type. */
10873 else if (dependent_type_p (type))
10875 /* If DECL is declared constexpr, we'll do the appropriate checks
10876 in check_initializer. Similarly for inline static data members. */
10877 else if (DECL_P (decl)
10878 && (DECL_DECLARED_CONSTEXPR_P (decl)
10879 || DECL_VAR_DECLARED_INLINE_P (decl)))
10881 else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
10883 if (!COMPLETE_TYPE_P (type))
10884 error_at (DECL_SOURCE_LOCATION (decl),
10885 "in-class initialization of static data member %q#D of "
10886 "incomplete type", decl);
10887 else if (literal_type_p (type))
10888 permerror (DECL_SOURCE_LOCATION (decl),
10889 "%<constexpr%> needed for in-class initialization of "
10890 "static data member %q#D of non-integral type", decl);
10891 else
10892 error_at (DECL_SOURCE_LOCATION (decl),
10893 "in-class initialization of static data member %q#D of "
10894 "non-literal type", decl);
10896 /* Motion 10 at San Diego: If a static const integral data member is
10897 initialized with an integral constant expression, the initializer
10898 may appear either in the declaration (within the class), or in
10899 the definition, but not both. If it appears in the class, the
10900 member is a member constant. The file-scope definition is always
10901 required. */
10902 else if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
10903 error_at (DECL_SOURCE_LOCATION (decl),
10904 "invalid in-class initialization of static data member "
10905 "of non-integral type %qT",
10906 type);
10907 else if (!CP_TYPE_CONST_P (type))
10908 error_at (DECL_SOURCE_LOCATION (decl),
10909 "ISO C++ forbids in-class initialization of non-const "
10910 "static member %qD",
10911 decl);
10912 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
10913 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
10914 "ISO C++ forbids initialization of member constant "
10915 "%qD of non-integral type %qT", decl, type);
10918 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
10919 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
10920 expressions out into temporary variables so that walk_tree doesn't
10921 step into them (c++/15764). */
10923 static tree
10924 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
10926 hash_set<tree> *pset = (hash_set<tree> *)data;
10927 tree expr = *expr_p;
10928 if (TREE_CODE (expr) == SAVE_EXPR)
10930 tree op = TREE_OPERAND (expr, 0);
10931 cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
10932 if (TREE_SIDE_EFFECTS (op))
10933 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
10934 *walk_subtrees = 0;
10936 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
10937 *walk_subtrees = 0;
10938 return NULL;
10941 /* Entry point for the above. */
10943 static void
10944 stabilize_vla_size (tree size)
10946 hash_set<tree> pset;
10947 /* Break out any function calls into temporary variables. */
10948 cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
10951 /* Reduce a SIZEOF_EXPR to its value. */
10953 tree
10954 fold_sizeof_expr (tree t)
10956 tree r;
10957 if (SIZEOF_EXPR_TYPE_P (t))
10958 r = cxx_sizeof_or_alignof_type (EXPR_LOCATION (t),
10959 TREE_TYPE (TREE_OPERAND (t, 0)),
10960 SIZEOF_EXPR, false, false);
10961 else if (TYPE_P (TREE_OPERAND (t, 0)))
10962 r = cxx_sizeof_or_alignof_type (EXPR_LOCATION (t),
10963 TREE_OPERAND (t, 0), SIZEOF_EXPR,
10964 false, false);
10965 else
10966 r = cxx_sizeof_or_alignof_expr (EXPR_LOCATION (t),
10967 TREE_OPERAND (t, 0), SIZEOF_EXPR,
10968 false, false);
10969 if (r == error_mark_node)
10970 r = size_one_node;
10971 return r;
10974 /* Given the SIZE (i.e., number of elements) in an array, compute
10975 an appropriate index type for the array. If non-NULL, NAME is
10976 the name of the entity being declared. */
10978 static tree
10979 compute_array_index_type_loc (location_t name_loc, tree name, tree size,
10980 tsubst_flags_t complain)
10982 if (error_operand_p (size))
10983 return error_mark_node;
10985 /* The type of the index being computed. */
10986 tree itype;
10988 /* The original numeric size as seen in the source code before
10989 conversion to size_t. */
10990 tree origsize = size;
10992 location_t loc = cp_expr_loc_or_loc (size, name ? name_loc : input_location);
10994 if (!type_dependent_expression_p (size))
10996 origsize = size = mark_rvalue_use (size);
10998 if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
10999 && TREE_SIDE_EFFECTS (size))
11000 /* In C++98, we mark a non-constant array bound with a magic
11001 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
11002 else
11004 size = build_converted_constant_expr (size_type_node, size, complain);
11005 /* Pedantically a constant expression is required here and so
11006 __builtin_is_constant_evaluated () should fold to true if it
11007 is successfully folded into a constant. */
11008 size = fold_non_dependent_expr (size, complain,
11009 /*manifestly_const_eval=*/true);
11011 if (!TREE_CONSTANT (size))
11012 size = origsize;
11015 if (error_operand_p (size))
11016 return error_mark_node;
11018 /* The array bound must be an integer type. */
11019 tree type = TREE_TYPE (size);
11020 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
11022 if (!(complain & tf_error))
11023 return error_mark_node;
11024 if (name)
11025 error_at (loc, "size of array %qD has non-integral type %qT",
11026 name, type);
11027 else
11028 error_at (loc, "size of array has non-integral type %qT", type);
11029 size = integer_one_node;
11033 /* A type is dependent if it is...an array type constructed from any
11034 dependent type or whose size is specified by a constant expression
11035 that is value-dependent. */
11036 /* We can only call value_dependent_expression_p on integral constant
11037 expressions. */
11038 if (processing_template_decl
11039 && potential_constant_expression (size)
11040 && value_dependent_expression_p (size))
11042 /* Just build the index type and mark that it requires
11043 structural equality checks. */
11044 in_template:
11045 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
11046 size, size_one_node));
11047 TYPE_DEPENDENT_P (itype) = 1;
11048 TYPE_DEPENDENT_P_VALID (itype) = 1;
11049 SET_TYPE_STRUCTURAL_EQUALITY (itype);
11050 return itype;
11053 if (TREE_CODE (size) != INTEGER_CST)
11055 tree folded = cp_fully_fold (size);
11056 if (TREE_CODE (folded) == INTEGER_CST)
11058 if (name)
11059 pedwarn (loc, OPT_Wpedantic, "size of array %qD is not an "
11060 "integral constant-expression", name);
11061 else
11062 pedwarn (loc, OPT_Wpedantic,
11063 "size of array is not an integral constant-expression");
11065 if (TREE_CONSTANT (size) && !TREE_CONSTANT (folded))
11066 /* We might have lost the TREE_CONSTANT flag e.g. when we are
11067 folding a conversion from a pointer to integral type. In that
11068 case issue an error below and don't treat this as a VLA. */;
11069 else
11070 /* Use the folded result for VLAs, too; it will have resolved
11071 SIZEOF_EXPR. */
11072 size = folded;
11075 /* Normally, the array-bound will be a constant. */
11076 if (TREE_CODE (size) == INTEGER_CST)
11078 /* The size to use in diagnostics that reflects the constant
11079 size used in the source, rather than SIZE massaged above. */
11080 tree diagsize = size;
11082 /* If the original size before conversion to size_t was signed
11083 and negative, convert it to ssizetype to restore the sign. */
11084 if (!TYPE_UNSIGNED (TREE_TYPE (origsize))
11085 && TREE_CODE (size) == INTEGER_CST
11086 && tree_int_cst_sign_bit (size))
11088 diagsize = fold_convert (ssizetype, size);
11090 /* Clear the overflow bit that may have been set as a result
11091 of the conversion from the sizetype of the new size to
11092 ssizetype. */
11093 TREE_OVERFLOW (diagsize) = false;
11096 /* Verify that the array has a positive number of elements
11097 and issue the appropriate diagnostic if it doesn't. */
11098 if (!valid_array_size_p (loc, diagsize, name, (complain & tf_error)))
11100 if (!(complain & tf_error))
11101 return error_mark_node;
11102 size = integer_one_node;
11104 /* As an extension we allow zero-sized arrays. */
11105 else if (integer_zerop (size))
11107 if (!(complain & tf_error))
11108 /* We must fail if performing argument deduction (as
11109 indicated by the state of complain), so that
11110 another substitution can be found. */
11111 return error_mark_node;
11112 else if (name)
11113 pedwarn (loc, OPT_Wpedantic,
11114 "ISO C++ forbids zero-size array %qD", name);
11115 else
11116 pedwarn (loc, OPT_Wpedantic,
11117 "ISO C++ forbids zero-size array");
11120 else if (TREE_CONSTANT (size)
11121 /* We don't allow VLAs at non-function scopes, or during
11122 tentative template substitution. */
11123 || !at_function_scope_p ()
11124 || !(complain & tf_error))
11126 if (!(complain & tf_error))
11127 return error_mark_node;
11128 /* `(int) &fn' is not a valid array bound. */
11129 if (name)
11130 error_at (loc,
11131 "size of array %qD is not an integral constant-expression",
11132 name);
11133 else
11134 error_at (loc, "size of array is not an integral constant-expression");
11135 size = integer_one_node;
11137 else if (pedantic && warn_vla != 0)
11139 if (name)
11140 pedwarn (name_loc, OPT_Wvla,
11141 "ISO C++ forbids variable length array %qD", name);
11142 else
11143 pedwarn (input_location, OPT_Wvla,
11144 "ISO C++ forbids variable length array");
11146 else if (warn_vla > 0)
11148 if (name)
11149 warning_at (name_loc, OPT_Wvla,
11150 "variable length array %qD is used", name);
11151 else
11152 warning (OPT_Wvla,
11153 "variable length array is used");
11156 if (processing_template_decl && !TREE_CONSTANT (size))
11157 goto in_template;
11158 else
11160 if (!TREE_CONSTANT (size))
11162 /* A variable sized array. Arrange for the SAVE_EXPR on the inside
11163 of the MINUS_EXPR, which allows the -1 to get folded with the +1
11164 that happens when building TYPE_SIZE. */
11165 size = variable_size (size);
11166 stabilize_vla_size (size);
11169 /* Compute the index of the largest element in the array. It is
11170 one less than the number of elements in the array. We save
11171 and restore PROCESSING_TEMPLATE_DECL so that computations in
11172 cp_build_binary_op will be appropriately folded. */
11174 processing_template_decl_sentinel s;
11175 itype = cp_build_binary_op (input_location,
11176 MINUS_EXPR,
11177 cp_convert (ssizetype, size, complain),
11178 cp_convert (ssizetype, integer_one_node,
11179 complain),
11180 complain);
11181 itype = maybe_constant_value (itype, NULL_TREE, true);
11184 if (!TREE_CONSTANT (itype))
11186 if (sanitize_flags_p (SANITIZE_VLA)
11187 && current_function_decl != NULL_TREE)
11189 /* We have to add 1 -- in the ubsan routine we generate
11190 LE_EXPR rather than LT_EXPR. */
11191 tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
11192 build_one_cst (TREE_TYPE (itype)));
11193 t = ubsan_instrument_vla (input_location, t);
11194 finish_expr_stmt (t);
11197 /* Make sure that there was no overflow when creating to a signed
11198 index type. (For example, on a 32-bit machine, an array with
11199 size 2^32 - 1 is too big.) */
11200 else if (TREE_CODE (itype) == INTEGER_CST
11201 && TREE_OVERFLOW (itype))
11203 if (!(complain & tf_error))
11204 return error_mark_node;
11205 error ("overflow in array dimension");
11206 TREE_OVERFLOW (itype) = 0;
11210 /* Create and return the appropriate index type. */
11211 itype = build_index_type (itype);
11213 /* If the index type were dependent, we would have returned early, so
11214 remember that it isn't. */
11215 TYPE_DEPENDENT_P (itype) = 0;
11216 TYPE_DEPENDENT_P_VALID (itype) = 1;
11217 return itype;
11220 tree
11221 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
11223 return compute_array_index_type_loc (input_location, name, size, complain);
11226 /* Returns the scope (if any) in which the entity declared by
11227 DECLARATOR will be located. If the entity was declared with an
11228 unqualified name, NULL_TREE is returned. */
11230 tree
11231 get_scope_of_declarator (const cp_declarator *declarator)
11233 while (declarator && declarator->kind != cdk_id)
11234 declarator = declarator->declarator;
11236 /* If the declarator-id is a SCOPE_REF, the scope in which the
11237 declaration occurs is the first operand. */
11238 if (declarator
11239 && declarator->u.id.qualifying_scope)
11240 return declarator->u.id.qualifying_scope;
11242 /* Otherwise, the declarator is not a qualified name; the entity will
11243 be declared in the current scope. */
11244 return NULL_TREE;
11247 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
11248 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
11249 with this type. */
11251 static tree
11252 create_array_type_for_decl (tree name, tree type, tree size, location_t loc)
11254 tree itype = NULL_TREE;
11256 /* If things have already gone awry, bail now. */
11257 if (type == error_mark_node || size == error_mark_node)
11258 return error_mark_node;
11260 /* [dcl.type.class.deduct] prohibits forming an array of placeholder
11261 for a deduced class type. */
11262 if (template_placeholder_p (type))
11264 if (name)
11265 error_at (loc, "%qD declared as array of template placeholder "
11266 "type %qT", name, type);
11267 else
11268 error ("creating array of template placeholder type %qT", type);
11269 return error_mark_node;
11272 /* If there are some types which cannot be array elements,
11273 issue an error-message and return. */
11274 switch (TREE_CODE (type))
11276 case VOID_TYPE:
11277 if (name)
11278 error_at (loc, "declaration of %qD as array of void", name);
11279 else
11280 error ("creating array of void");
11281 return error_mark_node;
11283 case FUNCTION_TYPE:
11284 if (name)
11285 error_at (loc, "declaration of %qD as array of functions", name);
11286 else
11287 error ("creating array of functions");
11288 return error_mark_node;
11290 case REFERENCE_TYPE:
11291 if (name)
11292 error_at (loc, "declaration of %qD as array of references", name);
11293 else
11294 error ("creating array of references");
11295 return error_mark_node;
11297 case METHOD_TYPE:
11298 if (name)
11299 error_at (loc, "declaration of %qD as array of function members",
11300 name);
11301 else
11302 error ("creating array of function members");
11303 return error_mark_node;
11305 default:
11306 break;
11309 if (!verify_type_context (name ? loc : input_location,
11310 TCTX_ARRAY_ELEMENT, type))
11311 return error_mark_node;
11313 /* [dcl.array]
11315 The constant expressions that specify the bounds of the arrays
11316 can be omitted only for the first member of the sequence. */
11317 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
11319 if (name)
11320 error_at (loc, "declaration of %qD as multidimensional array must "
11321 "have bounds for all dimensions except the first",
11322 name);
11323 else
11324 error ("multidimensional array must have bounds for all "
11325 "dimensions except the first");
11327 return error_mark_node;
11330 /* Figure out the index type for the array. */
11331 if (size)
11333 itype = compute_array_index_type_loc (loc, name, size,
11334 tf_warning_or_error);
11335 if (type_uses_auto (type)
11336 && variably_modified_type_p (itype, /*fn=*/NULL_TREE))
11338 sorry_at (loc, "variable-length array of %<auto%>");
11339 return error_mark_node;
11343 return build_cplus_array_type (type, itype);
11346 /* Returns the smallest location that is not UNKNOWN_LOCATION. */
11348 static location_t
11349 min_location (location_t loca, location_t locb)
11351 if (loca == UNKNOWN_LOCATION
11352 || (locb != UNKNOWN_LOCATION
11353 && linemap_location_before_p (line_table, locb, loca)))
11354 return locb;
11355 return loca;
11358 /* Returns the smallest location != UNKNOWN_LOCATION among the
11359 three stored in LOCATIONS[ds_const], LOCATIONS[ds_volatile],
11360 and LOCATIONS[ds_restrict]. */
11362 static location_t
11363 smallest_type_quals_location (int type_quals, const location_t* locations)
11365 location_t loc = UNKNOWN_LOCATION;
11367 if (type_quals & TYPE_QUAL_CONST)
11368 loc = locations[ds_const];
11370 if (type_quals & TYPE_QUAL_VOLATILE)
11371 loc = min_location (loc, locations[ds_volatile]);
11373 if (type_quals & TYPE_QUAL_RESTRICT)
11374 loc = min_location (loc, locations[ds_restrict]);
11376 return loc;
11379 /* Returns the smallest among the latter and locations[ds_type_spec]. */
11381 static location_t
11382 smallest_type_location (int type_quals, const location_t* locations)
11384 location_t loc = smallest_type_quals_location (type_quals, locations);
11385 return min_location (loc, locations[ds_type_spec]);
11388 static location_t
11389 smallest_type_location (const cp_decl_specifier_seq *declspecs)
11391 int type_quals = get_type_quals (declspecs);
11392 return smallest_type_location (type_quals, declspecs->locations);
11395 /* Check that it's OK to declare a function with the indicated TYPE
11396 and TYPE_QUALS. SFK indicates the kind of special function (if any)
11397 that this function is. OPTYPE is the type given in a conversion
11398 operator declaration, or the class type for a constructor/destructor.
11399 Returns the actual return type of the function; that may be different
11400 than TYPE if an error occurs, or for certain special functions. */
11402 static tree
11403 check_special_function_return_type (special_function_kind sfk,
11404 tree type,
11405 tree optype,
11406 int type_quals,
11407 const location_t* locations)
11409 switch (sfk)
11411 case sfk_constructor:
11412 if (type)
11413 error_at (smallest_type_location (type_quals, locations),
11414 "return type specification for constructor invalid");
11415 else if (type_quals != TYPE_UNQUALIFIED)
11416 error_at (smallest_type_quals_location (type_quals, locations),
11417 "qualifiers are not allowed on constructor declaration");
11419 if (targetm.cxx.cdtor_returns_this ())
11420 type = build_pointer_type (optype);
11421 else
11422 type = void_type_node;
11423 break;
11425 case sfk_destructor:
11426 if (type)
11427 error_at (smallest_type_location (type_quals, locations),
11428 "return type specification for destructor invalid");
11429 else if (type_quals != TYPE_UNQUALIFIED)
11430 error_at (smallest_type_quals_location (type_quals, locations),
11431 "qualifiers are not allowed on destructor declaration");
11433 /* We can't use the proper return type here because we run into
11434 problems with ambiguous bases and covariant returns. */
11435 if (targetm.cxx.cdtor_returns_this ())
11436 type = build_pointer_type (void_type_node);
11437 else
11438 type = void_type_node;
11439 break;
11441 case sfk_conversion:
11442 if (type)
11443 error_at (smallest_type_location (type_quals, locations),
11444 "return type specified for %<operator %T%>", optype);
11445 else if (type_quals != TYPE_UNQUALIFIED)
11446 error_at (smallest_type_quals_location (type_quals, locations),
11447 "qualifiers are not allowed on declaration of "
11448 "%<operator %T%>", optype);
11450 type = optype;
11451 break;
11453 case sfk_deduction_guide:
11454 if (type)
11455 error_at (smallest_type_location (type_quals, locations),
11456 "return type specified for deduction guide");
11457 else if (type_quals != TYPE_UNQUALIFIED)
11458 error_at (smallest_type_quals_location (type_quals, locations),
11459 "qualifiers are not allowed on declaration of "
11460 "deduction guide");
11461 if (TREE_CODE (optype) == TEMPLATE_TEMPLATE_PARM)
11463 error ("template template parameter %qT in declaration of "
11464 "deduction guide", optype);
11465 type = error_mark_node;
11467 else
11468 type = make_template_placeholder (CLASSTYPE_TI_TEMPLATE (optype));
11469 for (int i = 0; i < ds_last; ++i)
11470 if (i != ds_explicit && locations[i])
11471 error_at (locations[i],
11472 "%<decl-specifier%> in declaration of deduction guide");
11473 break;
11475 default:
11476 gcc_unreachable ();
11479 return type;
11482 /* A variable or data member (whose unqualified name is IDENTIFIER)
11483 has been declared with the indicated TYPE. If the TYPE is not
11484 acceptable, issue an error message and return a type to use for
11485 error-recovery purposes. */
11487 tree
11488 check_var_type (tree identifier, tree type, location_t loc)
11490 if (VOID_TYPE_P (type))
11492 if (!identifier)
11493 error_at (loc, "unnamed variable or field declared void");
11494 else if (identifier_p (identifier))
11496 gcc_assert (!IDENTIFIER_ANY_OP_P (identifier));
11497 error_at (loc, "variable or field %qE declared void",
11498 identifier);
11500 else
11501 error_at (loc, "variable or field declared void");
11502 type = error_mark_node;
11505 return type;
11508 /* Handle declaring DECL as an inline variable. */
11510 static void
11511 mark_inline_variable (tree decl, location_t loc)
11513 bool inlinep = true;
11514 if (! toplevel_bindings_p ())
11516 error_at (loc, "%<inline%> specifier invalid for variable "
11517 "%qD declared at block scope", decl);
11518 inlinep = false;
11520 else if (cxx_dialect < cxx17)
11521 pedwarn (loc, OPT_Wc__17_extensions, "inline variables are only available "
11522 "with %<-std=c++17%> or %<-std=gnu++17%>");
11523 if (inlinep)
11525 retrofit_lang_decl (decl);
11526 SET_DECL_VAR_DECLARED_INLINE_P (decl);
11531 /* Assign a typedef-given name to a class or enumeration type declared
11532 as anonymous at first. This was split out of grokdeclarator
11533 because it is also used in libcc1. */
11535 void
11536 name_unnamed_type (tree type, tree decl)
11538 gcc_assert (TYPE_UNNAMED_P (type));
11540 /* Replace the anonymous decl with the real decl. Be careful not to
11541 rename other typedefs (such as the self-reference) of type. */
11542 tree orig = TYPE_NAME (type);
11543 for (tree t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
11544 if (TYPE_NAME (t) == orig)
11545 TYPE_NAME (t) = decl;
11547 /* If this is a typedef within a template class, the nested
11548 type is a (non-primary) template. The name for the
11549 template needs updating as well. */
11550 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
11551 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)) = DECL_NAME (decl);
11553 /* Adjust linkage now that we aren't unnamed anymore. */
11554 reset_type_linkage (type);
11556 /* FIXME remangle member functions; member functions of a
11557 type with external linkage have external linkage. */
11559 /* Check that our job is done, and that it would fail if we
11560 attempted to do it again. */
11561 gcc_assert (!TYPE_UNNAMED_P (type));
11564 /* Check that decltype(auto) was well-formed: only plain decltype(auto)
11565 is allowed. TYPE might contain a decltype(auto). Returns true if
11566 there was a problem, false otherwise. */
11568 static bool
11569 check_decltype_auto (location_t loc, tree type)
11571 if (tree a = type_uses_auto (type))
11573 if (AUTO_IS_DECLTYPE (a))
11575 if (a != type)
11577 error_at (loc, "%qT as type rather than plain "
11578 "%<decltype(auto)%>", type);
11579 return true;
11581 else if (TYPE_QUALS (type) != TYPE_UNQUALIFIED)
11583 error_at (loc, "%<decltype(auto)%> cannot be cv-qualified");
11584 return true;
11588 return false;
11591 /* Given declspecs and a declarator (abstract or otherwise), determine
11592 the name and type of the object declared and construct a DECL node
11593 for it.
11595 DECLSPECS points to the representation of declaration-specifier
11596 sequence that precedes declarator.
11598 DECL_CONTEXT says which syntactic context this declaration is in:
11599 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
11600 FUNCDEF for a function definition. Like NORMAL but a few different
11601 error messages in each case. Return value may be zero meaning
11602 this definition is too screwy to try to parse.
11603 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
11604 handle member functions (which have FIELD context).
11605 Return value may be zero meaning this definition is too screwy to
11606 try to parse.
11607 PARM for a parameter declaration (either within a function prototype
11608 or before a function body). Make a PARM_DECL, or return void_type_node.
11609 TPARM for a template parameter declaration.
11610 CATCHPARM for a parameter declaration before a catch clause.
11611 TYPENAME if for a typename (in a cast or sizeof).
11612 Don't make a DECL node; just return the ..._TYPE node.
11613 FIELD for a struct or union field; make a FIELD_DECL.
11614 BITFIELD for a field with specified width.
11616 INITIALIZED is as for start_decl.
11618 ATTRLIST is a pointer to the list of attributes, which may be NULL
11619 if there are none; *ATTRLIST may be modified if attributes from inside
11620 the declarator should be applied to the declaration.
11622 When this function is called, scoping variables (such as
11623 CURRENT_CLASS_TYPE) should reflect the scope in which the
11624 declaration occurs, not the scope in which the new declaration will
11625 be placed. For example, on:
11627 void S::f() { ... }
11629 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
11630 should not be `S'.
11632 Returns a DECL (if a declarator is present), a TYPE (if there is no
11633 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
11634 error occurs. */
11636 tree
11637 grokdeclarator (const cp_declarator *declarator,
11638 cp_decl_specifier_seq *declspecs,
11639 enum decl_context decl_context,
11640 int initialized,
11641 tree* attrlist)
11643 tree type = NULL_TREE;
11644 int longlong = 0;
11645 int explicit_intN = 0;
11646 int int_n_alt = 0;
11647 int virtualp, explicitp, friendp, inlinep, staticp;
11648 int explicit_int = 0;
11649 int explicit_char = 0;
11650 int defaulted_int = 0;
11652 tree typedef_decl = NULL_TREE;
11653 const char *name = NULL;
11654 tree typedef_type = NULL_TREE;
11655 /* True if this declarator is a function definition. */
11656 bool funcdef_flag = false;
11657 cp_declarator_kind innermost_code = cdk_error;
11658 int bitfield = 0;
11659 #if 0
11660 /* See the code below that used this. */
11661 tree decl_attr = NULL_TREE;
11662 #endif
11664 /* Keep track of what sort of function is being processed
11665 so that we can warn about default return values, or explicit
11666 return values which do not match prescribed defaults. */
11667 special_function_kind sfk = sfk_none;
11669 tree dname = NULL_TREE;
11670 tree ctor_return_type = NULL_TREE;
11671 enum overload_flags flags = NO_SPECIAL;
11672 /* cv-qualifiers that apply to the declarator, for a declaration of
11673 a member function. */
11674 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
11675 /* virt-specifiers that apply to the declarator, for a declaration of
11676 a member function. */
11677 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
11678 /* ref-qualifier that applies to the declarator, for a declaration of
11679 a member function. */
11680 cp_ref_qualifier rqual = REF_QUAL_NONE;
11681 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
11682 int type_quals = get_type_quals (declspecs);
11683 tree raises = NULL_TREE;
11684 int template_count = 0;
11685 tree returned_attrs = NULL_TREE;
11686 tree parms = NULL_TREE;
11687 const cp_declarator *id_declarator;
11688 /* The unqualified name of the declarator; either an
11689 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
11690 tree unqualified_id;
11691 /* The class type, if any, in which this entity is located,
11692 or NULL_TREE if none. Note that this value may be different from
11693 the current class type; for example if an attempt is made to declare
11694 "A::f" inside "B", this value will be "A". */
11695 tree ctype = current_class_type;
11696 /* The NAMESPACE_DECL for the namespace in which this entity is
11697 located. If an unqualified name is used to declare the entity,
11698 this value will be NULL_TREE, even if the entity is located at
11699 namespace scope. */
11700 tree in_namespace = NULL_TREE;
11701 cp_storage_class storage_class;
11702 bool unsigned_p, signed_p, short_p, long_p, thread_p;
11703 bool type_was_error_mark_node = false;
11704 bool parameter_pack_p = declarator ? declarator->parameter_pack_p : false;
11705 bool template_type_arg = false;
11706 bool template_parm_flag = false;
11707 bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
11708 bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
11709 bool constinit_p = decl_spec_seq_has_spec_p (declspecs, ds_constinit);
11710 bool consteval_p = decl_spec_seq_has_spec_p (declspecs, ds_consteval);
11711 bool late_return_type_p = false;
11712 bool array_parameter_p = false;
11713 tree reqs = NULL_TREE;
11715 signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
11716 unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
11717 short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
11718 long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
11719 longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
11720 explicit_intN = declspecs->explicit_intN_p;
11721 int_n_alt = declspecs->int_n_alt;
11722 thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
11724 // Was concept_p specified? Note that ds_concept
11725 // implies ds_constexpr!
11726 bool concept_p = decl_spec_seq_has_spec_p (declspecs, ds_concept);
11727 if (concept_p)
11728 constexpr_p = true;
11730 if (decl_context == FUNCDEF)
11731 funcdef_flag = true, decl_context = NORMAL;
11732 else if (decl_context == MEMFUNCDEF)
11733 funcdef_flag = true, decl_context = FIELD;
11734 else if (decl_context == BITFIELD)
11735 bitfield = 1, decl_context = FIELD;
11736 else if (decl_context == TEMPLATE_TYPE_ARG)
11737 template_type_arg = true, decl_context = TYPENAME;
11738 else if (decl_context == TPARM)
11739 template_parm_flag = true, decl_context = PARM;
11741 if (initialized == SD_DEFAULTED || initialized == SD_DELETED)
11742 funcdef_flag = true;
11744 location_t typespec_loc = loc_or_input_loc (smallest_type_location
11745 (type_quals,
11746 declspecs->locations));
11747 location_t id_loc;
11748 location_t init_loc;
11749 if (declarator)
11751 id_loc = loc_or_input_loc (declarator->id_loc);
11752 init_loc = loc_or_input_loc (declarator->init_loc);
11754 else
11755 init_loc = id_loc = input_location;
11757 /* Look inside a declarator for the name being declared
11758 and get it as a string, for an error message. */
11759 for (id_declarator = declarator;
11760 id_declarator;
11761 id_declarator = id_declarator->declarator)
11763 if (id_declarator->kind != cdk_id)
11764 innermost_code = id_declarator->kind;
11766 switch (id_declarator->kind)
11768 case cdk_function:
11769 if (id_declarator->declarator
11770 && id_declarator->declarator->kind == cdk_id)
11772 sfk = id_declarator->declarator->u.id.sfk;
11773 if (sfk == sfk_destructor)
11774 flags = DTOR_FLAG;
11776 break;
11778 case cdk_id:
11780 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
11781 tree decl = id_declarator->u.id.unqualified_name;
11782 if (!decl)
11783 break;
11784 if (qualifying_scope)
11786 if (check_for_bare_parameter_packs (qualifying_scope,
11787 id_declarator->id_loc))
11788 return error_mark_node;
11789 if (at_function_scope_p ())
11791 /* [dcl.meaning]
11793 A declarator-id shall not be qualified except
11794 for ...
11796 None of the cases are permitted in block
11797 scope. */
11798 if (qualifying_scope == global_namespace)
11799 error ("invalid use of qualified-name %<::%D%>",
11800 decl);
11801 else if (TYPE_P (qualifying_scope))
11802 error ("invalid use of qualified-name %<%T::%D%>",
11803 qualifying_scope, decl);
11804 else
11805 error ("invalid use of qualified-name %<%D::%D%>",
11806 qualifying_scope, decl);
11807 return error_mark_node;
11809 else if (TYPE_P (qualifying_scope))
11811 ctype = qualifying_scope;
11812 if (!MAYBE_CLASS_TYPE_P (ctype))
11814 error_at (id_declarator->id_loc,
11815 "%q#T is not a class or namespace", ctype);
11816 ctype = NULL_TREE;
11818 else if (innermost_code != cdk_function
11819 && current_class_type
11820 && !uniquely_derived_from_p (ctype,
11821 current_class_type))
11823 error_at (id_declarator->id_loc,
11824 "invalid use of qualified-name %<%T::%D%>",
11825 qualifying_scope, decl);
11826 return error_mark_node;
11829 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
11830 in_namespace = qualifying_scope;
11832 switch (TREE_CODE (decl))
11834 case BIT_NOT_EXPR:
11836 if (innermost_code != cdk_function)
11838 error_at (EXPR_LOCATION (decl),
11839 "declaration of %qE as non-function", decl);
11840 return error_mark_node;
11842 else if (!qualifying_scope
11843 && !(current_class_type && at_class_scope_p ()))
11845 error_at (EXPR_LOCATION (decl),
11846 "declaration of %qE as non-member", decl);
11847 return error_mark_node;
11850 tree type = TREE_OPERAND (decl, 0);
11851 if (TYPE_P (type))
11852 type = constructor_name (type);
11853 name = identifier_to_locale (IDENTIFIER_POINTER (type));
11854 dname = decl;
11856 break;
11858 case TEMPLATE_ID_EXPR:
11860 tree fns = TREE_OPERAND (decl, 0);
11862 dname = fns;
11863 if (!identifier_p (dname))
11864 dname = OVL_NAME (dname);
11866 /* Fall through. */
11868 case IDENTIFIER_NODE:
11869 if (identifier_p (decl))
11870 dname = decl;
11872 if (IDENTIFIER_KEYWORD_P (dname))
11874 error ("declarator-id missing; using reserved word %qD",
11875 dname);
11876 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
11878 else if (!IDENTIFIER_CONV_OP_P (dname))
11879 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
11880 else
11882 gcc_assert (flags == NO_SPECIAL);
11883 flags = TYPENAME_FLAG;
11884 sfk = sfk_conversion;
11885 tree glob = get_global_binding (dname);
11886 if (glob && TREE_CODE (glob) == TYPE_DECL)
11887 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
11888 else
11889 name = "<invalid operator>";
11891 break;
11893 default:
11894 gcc_unreachable ();
11896 break;
11899 case cdk_array:
11900 case cdk_pointer:
11901 case cdk_reference:
11902 case cdk_ptrmem:
11903 break;
11905 case cdk_decomp:
11906 name = "structured binding";
11907 break;
11909 case cdk_error:
11910 return error_mark_node;
11912 default:
11913 gcc_unreachable ();
11915 if (id_declarator->kind == cdk_id)
11916 break;
11919 /* [dcl.fct.edf]
11921 The declarator in a function-definition shall have the form
11922 D1 ( parameter-declaration-clause) ... */
11923 if (funcdef_flag && innermost_code != cdk_function)
11925 error_at (id_loc, "function definition does not declare parameters");
11926 return error_mark_node;
11929 if (flags == TYPENAME_FLAG
11930 && innermost_code != cdk_function
11931 && ! (ctype && !declspecs->any_specifiers_p))
11933 error_at (id_loc, "declaration of %qD as non-function", dname);
11934 return error_mark_node;
11937 if (dname && identifier_p (dname))
11939 if (UDLIT_OPER_P (dname)
11940 && innermost_code != cdk_function)
11942 error_at (id_loc, "declaration of %qD as non-function", dname);
11943 return error_mark_node;
11946 if (IDENTIFIER_ANY_OP_P (dname))
11948 if (typedef_p)
11950 error_at (id_loc, "declaration of %qD as %<typedef%>", dname);
11951 return error_mark_node;
11953 else if (decl_context == PARM || decl_context == CATCHPARM)
11955 error_at (id_loc, "declaration of %qD as parameter", dname);
11956 return error_mark_node;
11961 /* Anything declared one level down from the top level
11962 must be one of the parameters of a function
11963 (because the body is at least two levels down). */
11965 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
11966 by not allowing C++ class definitions to specify their parameters
11967 with xdecls (must be spec.d in the parmlist).
11969 Since we now wait to push a class scope until we are sure that
11970 we are in a legitimate method context, we must set oldcname
11971 explicitly (since current_class_name is not yet alive).
11973 We also want to avoid calling this a PARM if it is in a namespace. */
11975 if (decl_context == NORMAL && !toplevel_bindings_p ())
11977 cp_binding_level *b = current_binding_level;
11978 current_binding_level = b->level_chain;
11979 if (current_binding_level != 0 && toplevel_bindings_p ())
11980 decl_context = PARM;
11981 current_binding_level = b;
11984 if (name == NULL)
11985 name = decl_context == PARM ? "parameter" : "type name";
11987 if (consteval_p && constexpr_p)
11989 error_at (declspecs->locations[ds_consteval],
11990 "both %qs and %qs specified", "constexpr", "consteval");
11991 return error_mark_node;
11994 if (concept_p && typedef_p)
11996 error_at (declspecs->locations[ds_concept],
11997 "%qs cannot appear in a typedef declaration", "concept");
11998 return error_mark_node;
12001 if (constexpr_p && typedef_p)
12003 error_at (declspecs->locations[ds_constexpr],
12004 "%qs cannot appear in a typedef declaration", "constexpr");
12005 return error_mark_node;
12008 if (consteval_p && typedef_p)
12010 error_at (declspecs->locations[ds_consteval],
12011 "%qs cannot appear in a typedef declaration", "consteval");
12012 return error_mark_node;
12015 if (constinit_p && typedef_p)
12017 error_at (declspecs->locations[ds_constinit],
12018 "%qs cannot appear in a typedef declaration", "constinit");
12019 return error_mark_node;
12022 /* [dcl.spec]/2 "At most one of the constexpr, consteval, and constinit
12023 keywords shall appear in a decl-specifier-seq." */
12024 if (constinit_p && constexpr_p)
12026 gcc_rich_location richloc (declspecs->locations[ds_constinit]);
12027 richloc.add_range (declspecs->locations[ds_constexpr]);
12028 error_at (&richloc,
12029 "can use at most one of the %<constinit%> and %<constexpr%> "
12030 "specifiers");
12031 return error_mark_node;
12034 /* If there were multiple types specified in the decl-specifier-seq,
12035 issue an error message. */
12036 if (declspecs->multiple_types_p)
12038 error_at (typespec_loc,
12039 "two or more data types in declaration of %qs", name);
12040 return error_mark_node;
12043 if (declspecs->conflicting_specifiers_p)
12045 error_at (min_location (declspecs->locations[ds_typedef],
12046 declspecs->locations[ds_storage_class]),
12047 "conflicting specifiers in declaration of %qs", name);
12048 return error_mark_node;
12051 /* Extract the basic type from the decl-specifier-seq. */
12052 type = declspecs->type;
12053 if (type == error_mark_node)
12055 type = NULL_TREE;
12056 type_was_error_mark_node = true;
12059 /* Ignore erroneous attributes. */
12060 if (attrlist && *attrlist == error_mark_node)
12061 *attrlist = NULL_TREE;
12063 /* An object declared as __attribute__((unavailable)) suppresses
12064 any reports of being declared with unavailable or deprecated
12065 items. An object declared as __attribute__((deprecated))
12066 suppresses warnings of uses of other deprecated items. */
12067 auto ds = make_temp_override (deprecated_state);
12068 if (attrlist && lookup_attribute ("unavailable", *attrlist))
12069 deprecated_state = UNAVAILABLE_DEPRECATED_SUPPRESS;
12070 else if (attrlist && lookup_attribute ("deprecated", *attrlist))
12071 deprecated_state = DEPRECATED_SUPPRESS;
12073 cp_handle_deprecated_or_unavailable (type);
12074 if (type && TREE_CODE (type) == TYPE_DECL)
12076 cp_warn_deprecated_use_scopes (CP_DECL_CONTEXT (type));
12077 typedef_decl = type;
12078 type = TREE_TYPE (typedef_decl);
12079 if (DECL_ARTIFICIAL (typedef_decl))
12080 cp_handle_deprecated_or_unavailable (type);
12082 /* No type at all: default to `int', and set DEFAULTED_INT
12083 because it was not a user-defined typedef. */
12084 if (type == NULL_TREE)
12086 if (signed_p || unsigned_p || long_p || short_p)
12088 /* These imply 'int'. */
12089 type = integer_type_node;
12090 defaulted_int = 1;
12092 /* If we just have "complex", it is equivalent to "complex double". */
12093 else if (!longlong && !explicit_intN
12094 && decl_spec_seq_has_spec_p (declspecs, ds_complex))
12096 type = double_type_node;
12097 pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
12098 "ISO C++ does not support plain %<complex%> meaning "
12099 "%<double complex%>");
12102 /* Gather flags. */
12103 explicit_int = declspecs->explicit_int_p;
12104 explicit_char = declspecs->explicit_char_p;
12106 #if 0
12107 /* See the code below that used this. */
12108 if (typedef_decl)
12109 decl_attr = DECL_ATTRIBUTES (typedef_decl);
12110 #endif
12111 typedef_type = type;
12113 if (sfk == sfk_conversion || sfk == sfk_deduction_guide)
12114 ctor_return_type = TREE_TYPE (dname);
12115 else
12116 ctor_return_type = ctype;
12118 if (sfk != sfk_none)
12120 type = check_special_function_return_type (sfk, type,
12121 ctor_return_type,
12122 type_quals,
12123 declspecs->locations);
12124 type_quals = TYPE_UNQUALIFIED;
12126 else if (type == NULL_TREE)
12128 int is_main;
12130 explicit_int = -1;
12132 /* We handle `main' specially here, because 'main () { }' is so
12133 common. With no options, it is allowed. With -Wreturn-type,
12134 it is a warning. It is only an error with -pedantic-errors. */
12135 is_main = (funcdef_flag
12136 && dname && identifier_p (dname)
12137 && MAIN_NAME_P (dname)
12138 && ctype == NULL_TREE
12139 && in_namespace == NULL_TREE
12140 && current_namespace == global_namespace);
12142 if (type_was_error_mark_node)
12143 /* We've already issued an error, don't complain more. */;
12144 else if (in_system_header_at (id_loc) || flag_ms_extensions)
12145 /* Allow it, sigh. */;
12146 else if (! is_main)
12147 permerror (id_loc, "ISO C++ forbids declaration of %qs with no type",
12148 name);
12149 else if (pedantic)
12150 pedwarn (id_loc, OPT_Wpedantic,
12151 "ISO C++ forbids declaration of %qs with no type", name);
12152 else
12153 warning_at (id_loc, OPT_Wreturn_type,
12154 "ISO C++ forbids declaration of %qs with no type", name);
12156 if (type_was_error_mark_node && template_parm_flag)
12157 /* FIXME we should be able to propagate the error_mark_node as is
12158 for other contexts too. */
12159 type = error_mark_node;
12160 else
12161 type = integer_type_node;
12164 ctype = NULL_TREE;
12166 if (explicit_intN)
12168 if (! int_n_enabled_p[declspecs->int_n_idx])
12170 error_at (declspecs->locations[ds_type_spec],
12171 "%<__int%d%> is not supported by this target",
12172 int_n_data[declspecs->int_n_idx].bitsize);
12173 explicit_intN = false;
12175 /* Don't pedwarn if the alternate "__intN__" form has been used instead
12176 of "__intN". */
12177 else if (!int_n_alt && pedantic)
12178 pedwarn (declspecs->locations[ds_type_spec], OPT_Wpedantic,
12179 "ISO C++ does not support %<__int%d%> for %qs",
12180 int_n_data[declspecs->int_n_idx].bitsize, name);
12183 /* Now process the modifiers that were specified
12184 and check for invalid combinations. */
12186 /* Long double is a special combination. */
12187 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
12189 long_p = false;
12190 type = cp_build_qualified_type (long_double_type_node,
12191 cp_type_quals (type));
12194 /* Check all other uses of type modifiers. */
12196 if (unsigned_p || signed_p || long_p || short_p)
12198 location_t loc;
12199 const char *key;
12200 if (unsigned_p)
12202 key = "unsigned";
12203 loc = declspecs->locations[ds_unsigned];
12205 else if (signed_p)
12207 key = "signed";
12208 loc = declspecs->locations[ds_signed];
12210 else if (longlong)
12212 key = "long long";
12213 loc = declspecs->locations[ds_long_long];
12215 else if (long_p)
12217 key = "long";
12218 loc = declspecs->locations[ds_long];
12220 else /* if (short_p) */
12222 key = "short";
12223 loc = declspecs->locations[ds_short];
12226 int ok = 0;
12228 if (signed_p && unsigned_p)
12230 gcc_rich_location richloc (declspecs->locations[ds_signed]);
12231 richloc.add_range (declspecs->locations[ds_unsigned]);
12232 error_at (&richloc,
12233 "%<signed%> and %<unsigned%> specified together");
12235 else if (long_p && short_p)
12237 gcc_rich_location richloc (declspecs->locations[ds_long]);
12238 richloc.add_range (declspecs->locations[ds_short]);
12239 error_at (&richloc, "%<long%> and %<short%> specified together");
12241 else if (TREE_CODE (type) != INTEGER_TYPE
12242 || type == char8_type_node
12243 || type == char16_type_node
12244 || type == char32_type_node
12245 || ((long_p || short_p)
12246 && (explicit_char || explicit_intN)))
12247 error_at (loc, "%qs specified with %qT", key, type);
12248 else if (!explicit_int && !defaulted_int
12249 && !explicit_char && !explicit_intN)
12251 if (typedef_decl)
12253 pedwarn (loc, OPT_Wpedantic, "%qs specified with %qT",
12254 key, type);
12255 ok = !flag_pedantic_errors;
12256 type = DECL_ORIGINAL_TYPE (typedef_decl);
12257 typedef_decl = NULL_TREE;
12259 else if (declspecs->decltype_p)
12260 error_at (loc, "%qs specified with %<decltype%>", key);
12261 else
12262 error_at (loc, "%qs specified with %<typeof%>", key);
12264 else
12265 ok = 1;
12267 /* Discard the type modifiers if they are invalid. */
12268 if (! ok)
12270 unsigned_p = false;
12271 signed_p = false;
12272 long_p = false;
12273 short_p = false;
12274 longlong = 0;
12278 /* Decide whether an integer type is signed or not.
12279 Optionally treat bitfields as signed by default. */
12280 if (unsigned_p
12281 /* [class.bit]
12283 It is implementation-defined whether a plain (neither
12284 explicitly signed or unsigned) char, short, int, or long
12285 bit-field is signed or unsigned.
12287 Naturally, we extend this to long long as well. Note that
12288 this does not include wchar_t. */
12289 || (bitfield && !flag_signed_bitfields
12290 && !signed_p
12291 /* A typedef for plain `int' without `signed' can be
12292 controlled just like plain `int', but a typedef for
12293 `signed int' cannot be so controlled. */
12294 && !(typedef_decl
12295 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
12296 && TREE_CODE (type) == INTEGER_TYPE
12297 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
12299 if (explicit_intN)
12300 type = int_n_trees[declspecs->int_n_idx].unsigned_type;
12301 else if (longlong)
12302 type = long_long_unsigned_type_node;
12303 else if (long_p)
12304 type = long_unsigned_type_node;
12305 else if (short_p)
12306 type = short_unsigned_type_node;
12307 else if (type == char_type_node)
12308 type = unsigned_char_type_node;
12309 else if (typedef_decl)
12310 type = unsigned_type_for (type);
12311 else
12312 type = unsigned_type_node;
12314 else if (signed_p && type == char_type_node)
12315 type = signed_char_type_node;
12316 else if (explicit_intN)
12317 type = int_n_trees[declspecs->int_n_idx].signed_type;
12318 else if (longlong)
12319 type = long_long_integer_type_node;
12320 else if (long_p)
12321 type = long_integer_type_node;
12322 else if (short_p)
12323 type = short_integer_type_node;
12325 if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
12327 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
12328 error_at (declspecs->locations[ds_complex],
12329 "complex invalid for %qs", name);
12330 /* If a modifier is specified, the resulting complex is the complex
12331 form of TYPE. E.g, "complex short" is "complex short int". */
12332 else if (type == integer_type_node)
12333 type = complex_integer_type_node;
12334 else if (type == float_type_node)
12335 type = complex_float_type_node;
12336 else if (type == double_type_node)
12337 type = complex_double_type_node;
12338 else if (type == long_double_type_node)
12339 type = complex_long_double_type_node;
12340 else
12341 type = build_complex_type (type);
12344 /* If we're using the injected-class-name to form a compound type or a
12345 declaration, replace it with the underlying class so we don't get
12346 redundant typedefs in the debug output. But if we are returning the
12347 type unchanged, leave it alone so that it's available to
12348 maybe_get_template_decl_from_type_decl. */
12349 if (CLASS_TYPE_P (type)
12350 && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
12351 && type == TREE_TYPE (TYPE_NAME (type))
12352 && (declarator || type_quals))
12353 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
12355 type_quals |= cp_type_quals (type);
12356 type = cp_build_qualified_type_real
12357 (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
12358 || declspecs->decltype_p)
12359 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
12360 /* We might have ignored or rejected some of the qualifiers. */
12361 type_quals = cp_type_quals (type);
12363 if (cxx_dialect >= cxx17 && type && is_auto (type)
12364 && innermost_code != cdk_function
12365 && id_declarator && declarator != id_declarator)
12366 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (type))
12368 error_at (typespec_loc, "template placeholder type %qT must be followed "
12369 "by a simple declarator-id", type);
12370 inform (DECL_SOURCE_LOCATION (tmpl), "%qD declared here", tmpl);
12371 type = error_mark_node;
12374 staticp = 0;
12375 inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
12376 virtualp = decl_spec_seq_has_spec_p (declspecs, ds_virtual);
12377 explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
12379 storage_class = declspecs->storage_class;
12380 if (storage_class == sc_static)
12381 staticp = 1 + (decl_context == FIELD);
12382 else if (decl_context == FIELD && sfk == sfk_deduction_guide)
12383 /* Treat class-scope deduction guides as static member functions
12384 so that they get a FUNCTION_TYPE instead of a METHOD_TYPE. */
12385 staticp = 2;
12387 if (virtualp)
12389 if (staticp == 2)
12391 gcc_rich_location richloc (declspecs->locations[ds_virtual]);
12392 richloc.add_range (declspecs->locations[ds_storage_class]);
12393 error_at (&richloc, "member %qD cannot be declared both %<virtual%> "
12394 "and %<static%>", dname);
12395 storage_class = sc_none;
12396 staticp = 0;
12398 if (constexpr_p && pedantic && cxx_dialect < cxx20)
12400 gcc_rich_location richloc (declspecs->locations[ds_virtual]);
12401 richloc.add_range (declspecs->locations[ds_constexpr]);
12402 pedwarn (&richloc, OPT_Wc__20_extensions, "member %qD can be "
12403 "declared both %<virtual%> and %<constexpr%> only in "
12404 "%<-std=c++20%> or %<-std=gnu++20%>", dname);
12407 friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
12409 /* Issue errors about use of storage classes for parameters. */
12410 if (decl_context == PARM)
12412 if (typedef_p)
12414 error_at (declspecs->locations[ds_typedef],
12415 "typedef declaration invalid in parameter declaration");
12416 return error_mark_node;
12418 else if (template_parm_flag && storage_class != sc_none)
12420 error_at (min_location (declspecs->locations[ds_thread],
12421 declspecs->locations[ds_storage_class]),
12422 "storage class specified for template parameter %qs",
12423 name);
12424 return error_mark_node;
12426 else if (storage_class == sc_static
12427 || storage_class == sc_extern
12428 || thread_p)
12430 error_at (min_location (declspecs->locations[ds_thread],
12431 declspecs->locations[ds_storage_class]),
12432 "storage class specified for parameter %qs", name);
12433 return error_mark_node;
12436 /* Function parameters cannot be concept. */
12437 if (concept_p)
12439 error_at (declspecs->locations[ds_concept],
12440 "a parameter cannot be declared %qs", "concept");
12441 concept_p = 0;
12442 constexpr_p = 0;
12444 /* Function parameters cannot be constexpr. If we saw one, moan
12445 and pretend it wasn't there. */
12446 else if (constexpr_p)
12448 error_at (declspecs->locations[ds_constexpr],
12449 "a parameter cannot be declared %qs", "constexpr");
12450 constexpr_p = 0;
12452 if (constinit_p)
12454 error_at (declspecs->locations[ds_constinit],
12455 "a parameter cannot be declared %qs", "constinit");
12456 constinit_p = 0;
12458 if (consteval_p)
12460 error_at (declspecs->locations[ds_consteval],
12461 "a parameter cannot be declared %qs", "consteval");
12462 consteval_p = 0;
12466 /* Give error if `virtual' is used outside of class declaration. */
12467 if (virtualp
12468 && (current_class_name == NULL_TREE || decl_context != FIELD))
12470 error_at (declspecs->locations[ds_virtual],
12471 "%<virtual%> outside class declaration");
12472 virtualp = 0;
12475 if (innermost_code == cdk_decomp)
12477 location_t loc = (declarator->kind == cdk_reference
12478 ? declarator->declarator->id_loc : declarator->id_loc);
12479 if (inlinep)
12480 error_at (declspecs->locations[ds_inline],
12481 "structured binding declaration cannot be %qs", "inline");
12482 if (typedef_p)
12483 error_at (declspecs->locations[ds_typedef],
12484 "structured binding declaration cannot be %qs", "typedef");
12485 if (constexpr_p && !concept_p)
12486 error_at (declspecs->locations[ds_constexpr], "structured "
12487 "binding declaration cannot be %qs", "constexpr");
12488 if (consteval_p)
12489 error_at (declspecs->locations[ds_consteval], "structured "
12490 "binding declaration cannot be %qs", "consteval");
12491 if (thread_p && cxx_dialect < cxx20)
12492 pedwarn (declspecs->locations[ds_thread], OPT_Wc__20_extensions,
12493 "structured binding declaration can be %qs only in "
12494 "%<-std=c++20%> or %<-std=gnu++20%>",
12495 declspecs->gnu_thread_keyword_p
12496 ? "__thread" : "thread_local");
12497 if (concept_p)
12498 error_at (declspecs->locations[ds_concept],
12499 "structured binding declaration cannot be %qs", "concept");
12500 /* [dcl.struct.bind] "A cv that includes volatile is deprecated." */
12501 if (type_quals & TYPE_QUAL_VOLATILE)
12502 warning_at (declspecs->locations[ds_volatile], OPT_Wvolatile,
12503 "%<volatile%>-qualified structured binding is deprecated");
12504 switch (storage_class)
12506 case sc_none:
12507 break;
12508 case sc_register:
12509 error_at (loc, "structured binding declaration cannot be %qs",
12510 "register");
12511 break;
12512 case sc_static:
12513 if (cxx_dialect < cxx20)
12514 pedwarn (loc, OPT_Wc__20_extensions,
12515 "structured binding declaration can be %qs only in "
12516 "%<-std=c++20%> or %<-std=gnu++20%>", "static");
12517 break;
12518 case sc_extern:
12519 error_at (loc, "structured binding declaration cannot be %qs",
12520 "extern");
12521 break;
12522 case sc_mutable:
12523 error_at (loc, "structured binding declaration cannot be %qs",
12524 "mutable");
12525 break;
12526 case sc_auto:
12527 error_at (loc, "structured binding declaration cannot be "
12528 "C++98 %<auto%>");
12529 break;
12530 default:
12531 gcc_unreachable ();
12533 if (TREE_CODE (type) != TEMPLATE_TYPE_PARM
12534 || TYPE_IDENTIFIER (type) != auto_identifier)
12536 if (type != error_mark_node)
12538 error_at (loc, "structured binding declaration cannot have "
12539 "type %qT", type);
12540 inform (loc,
12541 "type must be cv-qualified %<auto%> or reference to "
12542 "cv-qualified %<auto%>");
12544 type = build_qualified_type (make_auto (), type_quals);
12545 declspecs->type = type;
12547 inlinep = 0;
12548 typedef_p = 0;
12549 constexpr_p = 0;
12550 consteval_p = 0;
12551 concept_p = 0;
12552 if (storage_class != sc_static)
12554 storage_class = sc_none;
12555 declspecs->storage_class = sc_none;
12559 /* Static anonymous unions are dealt with here. */
12560 if (staticp && decl_context == TYPENAME
12561 && declspecs->type
12562 && ANON_AGGR_TYPE_P (declspecs->type))
12563 decl_context = FIELD;
12565 /* Warn about storage classes that are invalid for certain
12566 kinds of declarations (parameters, typenames, etc.). */
12567 if (thread_p
12568 && ((storage_class
12569 && storage_class != sc_extern
12570 && storage_class != sc_static)
12571 || typedef_p))
12573 location_t loc
12574 = min_location (declspecs->locations[ds_thread],
12575 declspecs->locations[ds_storage_class]);
12576 error_at (loc, "multiple storage classes in declaration of %qs", name);
12577 thread_p = false;
12579 if (decl_context != NORMAL
12580 && ((storage_class != sc_none
12581 && storage_class != sc_mutable)
12582 || thread_p))
12584 if ((decl_context == PARM || decl_context == CATCHPARM)
12585 && (storage_class == sc_register
12586 || storage_class == sc_auto))
12588 else if (typedef_p)
12590 else if (decl_context == FIELD
12591 /* C++ allows static class elements. */
12592 && storage_class == sc_static)
12593 /* C++ also allows inlines and signed and unsigned elements,
12594 but in those cases we don't come in here. */
12596 else
12598 location_t loc
12599 = min_location (declspecs->locations[ds_thread],
12600 declspecs->locations[ds_storage_class]);
12601 if (decl_context == FIELD)
12602 error_at (loc, "storage class specified for %qs", name);
12603 else if (decl_context == PARM || decl_context == CATCHPARM)
12604 error_at (loc, "storage class specified for parameter %qs", name);
12605 else
12606 error_at (loc, "storage class specified for typename");
12607 if (storage_class == sc_register
12608 || storage_class == sc_auto
12609 || storage_class == sc_extern
12610 || thread_p)
12611 storage_class = sc_none;
12614 else if (storage_class == sc_extern && funcdef_flag
12615 && ! toplevel_bindings_p ())
12616 error ("nested function %qs declared %<extern%>", name);
12617 else if (toplevel_bindings_p ())
12619 if (storage_class == sc_auto)
12620 error_at (declspecs->locations[ds_storage_class],
12621 "top-level declaration of %qs specifies %<auto%>", name);
12623 else if (thread_p
12624 && storage_class != sc_extern
12625 && storage_class != sc_static)
12627 if (declspecs->gnu_thread_keyword_p)
12628 pedwarn (declspecs->locations[ds_thread],
12629 0, "function-scope %qs implicitly auto and "
12630 "declared %<__thread%>", name);
12632 /* When thread_local is applied to a variable of block scope the
12633 storage-class-specifier static is implied if it does not appear
12634 explicitly. */
12635 storage_class = declspecs->storage_class = sc_static;
12636 staticp = 1;
12639 if (storage_class && friendp)
12641 error_at (min_location (declspecs->locations[ds_thread],
12642 declspecs->locations[ds_storage_class]),
12643 "storage class specifiers invalid in friend function "
12644 "declarations");
12645 storage_class = sc_none;
12646 staticp = 0;
12649 if (!id_declarator)
12650 unqualified_id = NULL_TREE;
12651 else
12653 unqualified_id = id_declarator->u.id.unqualified_name;
12654 switch (TREE_CODE (unqualified_id))
12656 case BIT_NOT_EXPR:
12657 unqualified_id = TREE_OPERAND (unqualified_id, 0);
12658 if (TYPE_P (unqualified_id))
12659 unqualified_id = constructor_name (unqualified_id);
12660 break;
12662 case IDENTIFIER_NODE:
12663 case TEMPLATE_ID_EXPR:
12664 break;
12666 default:
12667 gcc_unreachable ();
12671 if (declspecs->std_attributes)
12673 location_t attr_loc = declspecs->locations[ds_std_attribute];
12674 if (warning_at (attr_loc, OPT_Wattributes, "attribute ignored"))
12675 inform (attr_loc, "an attribute that appertains to a type-specifier "
12676 "is ignored");
12679 /* Determine the type of the entity declared by recurring on the
12680 declarator. */
12681 for (; declarator; declarator = declarator->declarator)
12683 const cp_declarator *inner_declarator;
12684 tree attrs;
12686 if (type == error_mark_node)
12687 return error_mark_node;
12689 attrs = declarator->attributes;
12690 if (attrs)
12692 int attr_flags;
12694 attr_flags = 0;
12695 if (declarator->kind == cdk_id)
12696 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
12697 if (declarator->kind == cdk_function)
12698 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
12699 if (declarator->kind == cdk_array)
12700 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
12701 tree late_attrs = NULL_TREE;
12702 if (decl_context != PARM && decl_context != TYPENAME)
12703 /* Assume that any attributes that get applied late to
12704 templates will DTRT when applied to the declaration
12705 as a whole. */
12706 late_attrs = splice_template_attributes (&attrs, type);
12707 returned_attrs = decl_attributes (&type,
12708 chainon (returned_attrs, attrs),
12709 attr_flags);
12710 returned_attrs = chainon (late_attrs, returned_attrs);
12713 inner_declarator = declarator->declarator;
12715 /* We don't want to warn in parameter context because we don't
12716 yet know if the parse will succeed, and this might turn out
12717 to be a constructor call. */
12718 if (decl_context != PARM
12719 && decl_context != TYPENAME
12720 && !typedef_p
12721 && declarator->parenthesized != UNKNOWN_LOCATION
12722 /* If the type is class-like and the inner name used a
12723 global namespace qualifier, we need the parens.
12724 Unfortunately all we can tell is whether a qualified name
12725 was used or not. */
12726 && !(inner_declarator
12727 && inner_declarator->kind == cdk_id
12728 && inner_declarator->u.id.qualifying_scope
12729 && (MAYBE_CLASS_TYPE_P (type)
12730 || TREE_CODE (type) == ENUMERAL_TYPE)))
12732 if (warning_at (declarator->parenthesized, OPT_Wparentheses,
12733 "unnecessary parentheses in declaration of %qs",
12734 name))
12736 gcc_rich_location iloc (declarator->parenthesized);
12737 iloc.add_fixit_remove (get_start (declarator->parenthesized));
12738 iloc.add_fixit_remove (get_finish (declarator->parenthesized));
12739 inform (&iloc, "remove parentheses");
12742 if (declarator->kind == cdk_id || declarator->kind == cdk_decomp)
12743 break;
12745 switch (declarator->kind)
12747 case cdk_array:
12748 type = create_array_type_for_decl (dname, type,
12749 declarator->u.array.bounds,
12750 declarator->id_loc);
12751 if (!valid_array_size_p (dname
12752 ? declarator->id_loc : input_location,
12753 type, dname))
12754 type = error_mark_node;
12756 if (declarator->std_attributes)
12757 /* [dcl.array]/1:
12759 The optional attribute-specifier-seq appertains to the
12760 array. */
12761 returned_attrs = chainon (returned_attrs,
12762 declarator->std_attributes);
12763 break;
12765 case cdk_function:
12767 tree arg_types;
12768 int funcdecl_p;
12770 /* Declaring a function type. */
12772 /* Pick up type qualifiers which should be applied to `this'. */
12773 memfn_quals = declarator->u.function.qualifiers;
12774 /* Pick up virt-specifiers. */
12775 virt_specifiers = declarator->u.function.virt_specifiers;
12776 /* And ref-qualifier, too */
12777 rqual = declarator->u.function.ref_qualifier;
12778 /* And tx-qualifier. */
12779 tree tx_qual = declarator->u.function.tx_qualifier;
12780 /* Pick up the exception specifications. */
12781 raises = declarator->u.function.exception_specification;
12782 /* If the exception-specification is ill-formed, let's pretend
12783 there wasn't one. */
12784 if (raises == error_mark_node)
12785 raises = NULL_TREE;
12787 if (reqs)
12788 error_at (location_of (reqs), "requires-clause on return type");
12789 reqs = declarator->u.function.requires_clause;
12791 /* Say it's a definition only for the CALL_EXPR
12792 closest to the identifier. */
12793 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
12795 /* Handle a late-specified return type. */
12796 tree late_return_type = declarator->u.function.late_return_type;
12797 if (tree auto_node = type_uses_auto (type))
12799 if (!late_return_type)
12801 if (!funcdecl_p)
12802 /* auto (*fp)() = f; is OK. */;
12803 else if (current_class_type
12804 && LAMBDA_TYPE_P (current_class_type))
12805 /* OK for C++11 lambdas. */;
12806 else if (cxx_dialect < cxx14)
12808 error_at (typespec_loc, "%qs function uses "
12809 "%<auto%> type specifier without "
12810 "trailing return type", name);
12811 inform (typespec_loc,
12812 "deduced return type only available "
12813 "with %<-std=c++14%> or %<-std=gnu++14%>");
12815 else if (virtualp)
12817 error_at (typespec_loc, "virtual function "
12818 "cannot have deduced return type");
12819 virtualp = false;
12822 else if (!is_auto (type) && sfk != sfk_conversion)
12824 error_at (typespec_loc, "%qs function with trailing "
12825 "return type has %qT as its type rather "
12826 "than plain %<auto%>", name, type);
12827 return error_mark_node;
12829 else if (is_auto (type) && AUTO_IS_DECLTYPE (type))
12831 if (funcdecl_p)
12832 error_at (typespec_loc,
12833 "%qs function with trailing return type "
12834 "has %<decltype(auto)%> as its type "
12835 "rather than plain %<auto%>", name);
12836 else
12837 error_at (typespec_loc,
12838 "invalid use of %<decltype(auto)%>");
12839 return error_mark_node;
12841 tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node);
12842 if (!tmpl)
12843 if (tree late_auto = type_uses_auto (late_return_type))
12844 tmpl = CLASS_PLACEHOLDER_TEMPLATE (late_auto);
12845 if (tmpl)
12847 if (!funcdecl_p || !dguide_name_p (unqualified_id))
12849 error_at (typespec_loc, "deduced class "
12850 "type %qD in function return type",
12851 DECL_NAME (tmpl));
12852 inform (DECL_SOURCE_LOCATION (tmpl),
12853 "%qD declared here", tmpl);
12854 return error_mark_node;
12856 else if (!late_return_type)
12858 error_at (declarator->id_loc, "deduction guide "
12859 "for %qT must have trailing return "
12860 "type", TREE_TYPE (tmpl));
12861 inform (DECL_SOURCE_LOCATION (tmpl),
12862 "%qD declared here", tmpl);
12863 return error_mark_node;
12865 else if (CLASS_TYPE_P (late_return_type)
12866 && CLASSTYPE_TEMPLATE_INFO (late_return_type)
12867 && (CLASSTYPE_TI_TEMPLATE (late_return_type)
12868 == tmpl))
12869 /* OK */;
12870 else
12871 error ("trailing return type %qT of deduction guide "
12872 "is not a specialization of %qT",
12873 late_return_type, TREE_TYPE (tmpl));
12876 else if (late_return_type
12877 && sfk != sfk_conversion)
12879 if (late_return_type == error_mark_node)
12880 return error_mark_node;
12881 if (cxx_dialect < cxx11)
12882 /* Not using maybe_warn_cpp0x because this should
12883 always be an error. */
12884 error_at (typespec_loc,
12885 "trailing return type only available "
12886 "with %<-std=c++11%> or %<-std=gnu++11%>");
12887 else
12888 error_at (typespec_loc, "%qs function with trailing "
12889 "return type not declared with %<auto%> "
12890 "type specifier", name);
12891 return error_mark_node;
12893 if (late_return_type && sfk == sfk_conversion)
12895 error ("a conversion function cannot have a trailing return type");
12896 return error_mark_node;
12898 type = splice_late_return_type (type, late_return_type);
12899 if (type == error_mark_node)
12900 return error_mark_node;
12902 if (late_return_type)
12904 late_return_type_p = true;
12905 type_quals = cp_type_quals (type);
12908 if (type_quals != TYPE_UNQUALIFIED)
12910 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
12911 warning_at (typespec_loc, OPT_Wignored_qualifiers, "type "
12912 "qualifiers ignored on function return type");
12913 /* [dcl.fct] "A volatile-qualified return type is
12914 deprecated." */
12915 if (type_quals & TYPE_QUAL_VOLATILE)
12916 warning_at (typespec_loc, OPT_Wvolatile,
12917 "%<volatile%>-qualified return type is "
12918 "deprecated");
12920 /* We now know that the TYPE_QUALS don't apply to the
12921 decl, but to its return type. */
12922 type_quals = TYPE_UNQUALIFIED;
12925 /* Error about some types functions can't return. */
12927 if (TREE_CODE (type) == FUNCTION_TYPE)
12929 error_at (typespec_loc, "%qs declared as function returning "
12930 "a function", name);
12931 return error_mark_node;
12933 if (TREE_CODE (type) == ARRAY_TYPE)
12935 error_at (typespec_loc, "%qs declared as function returning "
12936 "an array", name);
12937 return error_mark_node;
12939 if (constinit_p)
12941 error_at (declspecs->locations[ds_constinit],
12942 "%<constinit%> on function return type is not "
12943 "allowed");
12944 return error_mark_node;
12947 if (check_decltype_auto (typespec_loc, type))
12948 return error_mark_node;
12950 if (ctype == NULL_TREE
12951 && decl_context == FIELD
12952 && funcdecl_p
12953 && friendp == 0)
12954 ctype = current_class_type;
12956 if (ctype && (sfk == sfk_constructor
12957 || sfk == sfk_destructor))
12959 /* We are within a class's scope. If our declarator name
12960 is the same as the class name, and we are defining
12961 a function, then it is a constructor/destructor, and
12962 therefore returns a void type. */
12964 /* ISO C++ 12.4/2. A destructor may not be declared
12965 const or volatile. A destructor may not be static.
12966 A destructor may not be declared with ref-qualifier.
12968 ISO C++ 12.1. A constructor may not be declared
12969 const or volatile. A constructor may not be
12970 virtual. A constructor may not be static.
12971 A constructor may not be declared with ref-qualifier. */
12972 if (staticp == 2)
12973 error_at (declspecs->locations[ds_storage_class],
12974 (flags == DTOR_FLAG)
12975 ? G_("destructor cannot be static member "
12976 "function")
12977 : G_("constructor cannot be static member "
12978 "function"));
12979 if (memfn_quals)
12981 error ((flags == DTOR_FLAG)
12982 ? G_("destructors may not be cv-qualified")
12983 : G_("constructors may not be cv-qualified"));
12984 memfn_quals = TYPE_UNQUALIFIED;
12987 if (rqual)
12989 maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
12990 error ((flags == DTOR_FLAG)
12991 ? G_("destructors may not be ref-qualified")
12992 : G_("constructors may not be ref-qualified"));
12993 rqual = REF_QUAL_NONE;
12996 if (decl_context == FIELD
12997 && !member_function_or_else (ctype,
12998 current_class_type,
12999 flags))
13000 return error_mark_node;
13002 if (flags != DTOR_FLAG)
13004 /* It's a constructor. */
13005 if (explicitp == 1)
13006 explicitp = 2;
13007 if (virtualp)
13009 permerror (declspecs->locations[ds_virtual],
13010 "constructors cannot be declared %<virtual%>");
13011 virtualp = 0;
13013 if (decl_context == FIELD
13014 && sfk != sfk_constructor)
13015 return error_mark_node;
13017 if (decl_context == FIELD)
13018 staticp = 0;
13020 else if (friendp)
13022 if (virtualp)
13024 /* Cannot be both friend and virtual. */
13025 gcc_rich_location richloc (declspecs->locations[ds_virtual]);
13026 richloc.add_range (declspecs->locations[ds_friend]);
13027 error_at (&richloc, "virtual functions cannot be friends");
13028 friendp = 0;
13030 if (decl_context == NORMAL)
13031 error_at (declarator->id_loc,
13032 "friend declaration not in class definition");
13033 if (current_function_decl && funcdef_flag)
13035 error_at (declarator->id_loc,
13036 "cannot define friend function %qs in a local "
13037 "class definition", name);
13038 friendp = 0;
13040 /* [class.friend]/6: A function can be defined in a friend
13041 declaration if the function name is unqualified. */
13042 if (funcdef_flag && in_namespace)
13044 if (in_namespace == global_namespace)
13045 error_at (declarator->id_loc,
13046 "friend function definition %qs cannot have "
13047 "a name qualified with %<::%>", name);
13048 else
13049 error_at (declarator->id_loc,
13050 "friend function definition %qs cannot have "
13051 "a name qualified with %<%D::%>", name,
13052 in_namespace);
13055 else if (ctype && sfk == sfk_conversion)
13057 if (explicitp == 1)
13059 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
13060 explicitp = 2;
13063 else if (sfk == sfk_deduction_guide)
13065 if (explicitp == 1)
13066 explicitp = 2;
13069 tree pushed_scope = NULL_TREE;
13070 if (funcdecl_p
13071 && decl_context != FIELD
13072 && inner_declarator->u.id.qualifying_scope
13073 && CLASS_TYPE_P (inner_declarator->u.id.qualifying_scope))
13074 pushed_scope
13075 = push_scope (inner_declarator->u.id.qualifying_scope);
13077 arg_types = grokparms (declarator->u.function.parameters, &parms);
13079 if (pushed_scope)
13080 pop_scope (pushed_scope);
13082 if (inner_declarator
13083 && inner_declarator->kind == cdk_id
13084 && inner_declarator->u.id.sfk == sfk_destructor
13085 && arg_types != void_list_node)
13087 error_at (declarator->id_loc,
13088 "destructors may not have parameters");
13089 arg_types = void_list_node;
13090 parms = NULL_TREE;
13093 type = build_function_type (type, arg_types);
13095 tree attrs = declarator->std_attributes;
13096 if (tx_qual)
13098 tree att = build_tree_list (tx_qual, NULL_TREE);
13099 /* transaction_safe applies to the type, but
13100 transaction_safe_dynamic applies to the function. */
13101 if (is_attribute_p ("transaction_safe", tx_qual))
13102 attrs = chainon (attrs, att);
13103 else
13104 returned_attrs = chainon (returned_attrs, att);
13106 if (attrs)
13107 /* [dcl.fct]/2:
13109 The optional attribute-specifier-seq appertains to
13110 the function type. */
13111 cplus_decl_attributes (&type, attrs, 0);
13113 if (raises)
13114 type = build_exception_variant (type, raises);
13116 break;
13118 case cdk_pointer:
13119 case cdk_reference:
13120 case cdk_ptrmem:
13121 /* Filter out pointers-to-references and references-to-references.
13122 We can get these if a TYPE_DECL is used. */
13124 if (TYPE_REF_P (type))
13126 if (declarator->kind != cdk_reference)
13128 error ("cannot declare pointer to %q#T", type);
13129 type = TREE_TYPE (type);
13132 /* In C++0x, we allow reference to reference declarations
13133 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
13134 and template type arguments [14.3.1/4 temp.arg.type]. The
13135 check for direct reference to reference declarations, which
13136 are still forbidden, occurs below. Reasoning behind the change
13137 can be found in DR106, DR540, and the rvalue reference
13138 proposals. */
13139 else if (cxx_dialect == cxx98)
13141 error ("cannot declare reference to %q#T", type);
13142 type = TREE_TYPE (type);
13145 else if (VOID_TYPE_P (type))
13147 if (declarator->kind == cdk_reference)
13148 error ("cannot declare reference to %q#T", type);
13149 else if (declarator->kind == cdk_ptrmem)
13150 error ("cannot declare pointer to %q#T member", type);
13153 /* We now know that the TYPE_QUALS don't apply to the decl,
13154 but to the target of the pointer. */
13155 type_quals = TYPE_UNQUALIFIED;
13157 /* This code used to handle METHOD_TYPE, but I don't think it's
13158 possible to get it here anymore. */
13159 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
13160 if (declarator->kind == cdk_ptrmem
13161 && TREE_CODE (type) == FUNCTION_TYPE)
13163 memfn_quals |= type_memfn_quals (type);
13164 type = build_memfn_type (type,
13165 declarator->u.pointer.class_type,
13166 memfn_quals,
13167 rqual);
13168 if (type == error_mark_node)
13169 return error_mark_node;
13171 rqual = REF_QUAL_NONE;
13172 memfn_quals = TYPE_UNQUALIFIED;
13175 if (TREE_CODE (type) == FUNCTION_TYPE
13176 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
13177 || type_memfn_rqual (type) != REF_QUAL_NONE))
13178 error (declarator->kind == cdk_reference
13179 ? G_("cannot declare reference to qualified function type %qT")
13180 : G_("cannot declare pointer to qualified function type %qT"),
13181 type);
13183 /* When the pointed-to type involves components of variable size,
13184 care must be taken to ensure that the size evaluation code is
13185 emitted early enough to dominate all the possible later uses
13186 and late enough for the variables on which it depends to have
13187 been assigned.
13189 This is expected to happen automatically when the pointed-to
13190 type has a name/declaration of it's own, but special attention
13191 is required if the type is anonymous.
13193 We handle the NORMAL and FIELD contexts here by inserting a
13194 dummy statement that just evaluates the size at a safe point
13195 and ensures it is not deferred until e.g. within a deeper
13196 conditional context (c++/43555).
13198 We expect nothing to be needed here for PARM or TYPENAME.
13199 Evaluating the size at this point for TYPENAME would
13200 actually be incorrect, as we might be in the middle of an
13201 expression with side effects on the pointed-to type size
13202 "arguments" prior to the pointer declaration point and the
13203 size evaluation could end up prior to the side effects. */
13205 if (!TYPE_NAME (type)
13206 && (decl_context == NORMAL || decl_context == FIELD)
13207 && at_function_scope_p ()
13208 && variably_modified_type_p (type, NULL_TREE))
13210 TYPE_NAME (type) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
13211 NULL_TREE, type);
13212 add_decl_expr (TYPE_NAME (type));
13215 if (declarator->kind == cdk_reference)
13217 /* In C++0x, the type we are creating a reference to might be
13218 a typedef which is itself a reference type. In that case,
13219 we follow the reference collapsing rules in
13220 [7.1.3/8 dcl.typedef] to create the final reference type:
13222 "If a typedef TD names a type that is a reference to a type
13223 T, an attempt to create the type 'lvalue reference to cv TD'
13224 creates the type 'lvalue reference to T,' while an attempt
13225 to create the type "rvalue reference to cv TD' creates the
13226 type TD."
13228 if (VOID_TYPE_P (type))
13229 /* We already gave an error. */;
13230 else if (TYPE_REF_P (type))
13232 if (declarator->u.reference.rvalue_ref)
13233 /* Leave type alone. */;
13234 else
13235 type = cp_build_reference_type (TREE_TYPE (type), false);
13237 else
13238 type = cp_build_reference_type
13239 (type, declarator->u.reference.rvalue_ref);
13241 /* In C++0x, we need this check for direct reference to
13242 reference declarations, which are forbidden by
13243 [8.3.2/5 dcl.ref]. Reference to reference declarations
13244 are only allowed indirectly through typedefs and template
13245 type arguments. Example:
13247 void foo(int & &); // invalid ref-to-ref decl
13249 typedef int & int_ref;
13250 void foo(int_ref &); // valid ref-to-ref decl
13252 if (inner_declarator && inner_declarator->kind == cdk_reference)
13253 error ("cannot declare reference to %q#T, which is not "
13254 "a typedef or a template type argument", type);
13256 else if (TREE_CODE (type) == METHOD_TYPE)
13257 type = build_ptrmemfunc_type (build_pointer_type (type));
13258 else if (declarator->kind == cdk_ptrmem)
13260 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
13261 != NAMESPACE_DECL);
13262 if (declarator->u.pointer.class_type == error_mark_node)
13263 /* We will already have complained. */
13264 type = error_mark_node;
13265 else
13266 type = build_ptrmem_type (declarator->u.pointer.class_type,
13267 type);
13269 else
13270 type = build_pointer_type (type);
13272 /* Process a list of type modifier keywords (such as
13273 const or volatile) that were given inside the `*' or `&'. */
13275 if (declarator->u.pointer.qualifiers)
13277 type
13278 = cp_build_qualified_type (type,
13279 declarator->u.pointer.qualifiers);
13280 type_quals = cp_type_quals (type);
13283 /* Apply C++11 attributes to the pointer, and not to the
13284 type pointed to. This is unlike what is done for GNU
13285 attributes above. It is to comply with [dcl.ptr]/1:
13287 [the optional attribute-specifier-seq (7.6.1) appertains
13288 to the pointer and not to the object pointed to]. */
13289 if (declarator->std_attributes)
13290 decl_attributes (&type, declarator->std_attributes,
13293 ctype = NULL_TREE;
13294 break;
13296 case cdk_error:
13297 break;
13299 default:
13300 gcc_unreachable ();
13304 id_loc = declarator ? declarator->id_loc : input_location;
13306 if (innermost_code != cdk_function
13307 /* Don't check this if it can be the artifical decltype(auto)
13308 we created when building a constraint in a compound-requirement:
13309 that the type-constraint is plain is going to be checked in
13310 cp_parser_compound_requirement. */
13311 && decl_context != TYPENAME
13312 && check_decltype_auto (id_loc, type))
13313 return error_mark_node;
13315 /* A `constexpr' specifier used in an object declaration declares
13316 the object as `const'. */
13317 if (constexpr_p && innermost_code != cdk_function)
13319 /* DR1688 says that a `constexpr' specifier in combination with
13320 `volatile' is valid. */
13322 if (!TYPE_REF_P (type))
13324 type_quals |= TYPE_QUAL_CONST;
13325 type = cp_build_qualified_type (type, type_quals);
13329 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
13330 && !FUNC_OR_METHOD_TYPE_P (type)
13331 && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
13333 error ("template-id %qD used as a declarator",
13334 unqualified_id);
13335 unqualified_id = dname;
13338 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
13339 qualified with a class-name, turn it into a METHOD_TYPE, unless
13340 we know that the function is static. We take advantage of this
13341 opportunity to do other processing that pertains to entities
13342 explicitly declared to be class members. Note that if DECLARATOR
13343 is non-NULL, we know it is a cdk_id declarator; otherwise, we
13344 would not have exited the loop above. */
13345 if (declarator
13346 && declarator->kind == cdk_id
13347 && declarator->u.id.qualifying_scope
13348 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
13350 ctype = declarator->u.id.qualifying_scope;
13351 ctype = TYPE_MAIN_VARIANT (ctype);
13352 template_count = num_template_headers_for_class (ctype);
13354 if (ctype == current_class_type)
13356 if (friendp)
13358 permerror (declspecs->locations[ds_friend],
13359 "member functions are implicitly "
13360 "friends of their class");
13361 friendp = 0;
13363 else
13364 permerror (id_loc, "extra qualification %<%T::%> on member %qs",
13365 ctype, name);
13367 else if (/* If the qualifying type is already complete, then we
13368 can skip the following checks. */
13369 !COMPLETE_TYPE_P (ctype)
13370 && (/* If the function is being defined, then
13371 qualifying type must certainly be complete. */
13372 funcdef_flag
13373 /* A friend declaration of "T::f" is OK, even if
13374 "T" is a template parameter. But, if this
13375 function is not a friend, the qualifying type
13376 must be a class. */
13377 || (!friendp && !CLASS_TYPE_P (ctype))
13378 /* For a declaration, the type need not be
13379 complete, if either it is dependent (since there
13380 is no meaningful definition of complete in that
13381 case) or the qualifying class is currently being
13382 defined. */
13383 || !(dependent_type_p (ctype)
13384 || currently_open_class (ctype)))
13385 /* Check that the qualifying type is complete. */
13386 && !complete_type_or_else (ctype, NULL_TREE))
13387 return error_mark_node;
13388 else if (TREE_CODE (type) == FUNCTION_TYPE)
13390 if (current_class_type
13391 && (!friendp || funcdef_flag || initialized))
13393 error_at (id_loc, funcdef_flag || initialized
13394 ? G_("cannot define member function %<%T::%s%> "
13395 "within %qT")
13396 : G_("cannot declare member function %<%T::%s%> "
13397 "within %qT"),
13398 ctype, name, current_class_type);
13399 return error_mark_node;
13402 else if (typedef_p && current_class_type)
13404 error_at (id_loc, "cannot declare member %<%T::%s%> within %qT",
13405 ctype, name, current_class_type);
13406 return error_mark_node;
13410 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
13411 ctype = current_class_type;
13413 /* Now TYPE has the actual type. */
13415 if (returned_attrs)
13417 if (attrlist)
13418 *attrlist = chainon (returned_attrs, *attrlist);
13419 else
13420 attrlist = &returned_attrs;
13423 if (declarator
13424 && declarator->kind == cdk_id
13425 && declarator->std_attributes
13426 && attrlist != NULL)
13428 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
13429 a declarator-id appertains to the entity that is declared. */
13430 if (declarator->std_attributes != error_mark_node)
13431 *attrlist = chainon (*attrlist, declarator->std_attributes);
13432 else
13433 /* We should have already diagnosed the issue (c++/78344). */
13434 gcc_assert (seen_error ());
13437 /* Handle parameter packs. */
13438 if (parameter_pack_p)
13440 if (decl_context == PARM)
13441 /* Turn the type into a pack expansion.*/
13442 type = make_pack_expansion (type);
13443 else
13444 error ("non-parameter %qs cannot be a parameter pack", name);
13447 if ((decl_context == FIELD || decl_context == PARM)
13448 && !processing_template_decl
13449 && variably_modified_type_p (type, NULL_TREE))
13451 if (decl_context == FIELD)
13452 error_at (id_loc,
13453 "data member may not have variably modified type %qT", type);
13454 else
13455 error_at (id_loc,
13456 "parameter may not have variably modified type %qT", type);
13457 type = error_mark_node;
13460 if (explicitp == 1 || (explicitp && friendp))
13462 /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
13463 in the declaration of a constructor or conversion function within
13464 a class definition. */
13465 if (!current_class_type)
13466 error_at (declspecs->locations[ds_explicit],
13467 "%<explicit%> outside class declaration");
13468 else if (friendp)
13469 error_at (declspecs->locations[ds_explicit],
13470 "%<explicit%> in friend declaration");
13471 else
13472 error_at (declspecs->locations[ds_explicit],
13473 "only declarations of constructors and conversion operators "
13474 "can be %<explicit%>");
13475 explicitp = 0;
13478 if (storage_class == sc_mutable)
13480 location_t sloc = declspecs->locations[ds_storage_class];
13481 if (decl_context != FIELD || friendp)
13483 error_at (sloc, "non-member %qs cannot be declared %<mutable%>",
13484 name);
13485 storage_class = sc_none;
13487 else if (decl_context == TYPENAME || typedef_p)
13489 error_at (sloc,
13490 "non-object member %qs cannot be declared %<mutable%>",
13491 name);
13492 storage_class = sc_none;
13494 else if (FUNC_OR_METHOD_TYPE_P (type))
13496 error_at (sloc, "function %qs cannot be declared %<mutable%>",
13497 name);
13498 storage_class = sc_none;
13500 else if (staticp)
13502 error_at (sloc, "%<static%> %qs cannot be declared %<mutable%>",
13503 name);
13504 storage_class = sc_none;
13506 else if (type_quals & TYPE_QUAL_CONST)
13508 error_at (sloc, "%<const%> %qs cannot be declared %<mutable%>",
13509 name);
13510 storage_class = sc_none;
13512 else if (TYPE_REF_P (type))
13514 permerror (sloc, "reference %qs cannot be declared %<mutable%>",
13515 name);
13516 storage_class = sc_none;
13520 /* If this is declaring a typedef name, return a TYPE_DECL. */
13521 if (typedef_p && decl_context != TYPENAME)
13523 bool alias_p = decl_spec_seq_has_spec_p (declspecs, ds_alias);
13524 tree decl;
13526 if (funcdef_flag)
13528 if (decl_context == NORMAL)
13529 error_at (id_loc,
13530 "typedef may not be a function definition");
13531 else
13532 error_at (id_loc,
13533 "typedef may not be a member function definition");
13534 return error_mark_node;
13537 /* This declaration:
13539 typedef void f(int) const;
13541 declares a function type which is not a member of any
13542 particular class, but which is cv-qualified; for
13543 example "f S::*" declares a pointer to a const-qualified
13544 member function of S. We record the cv-qualification in the
13545 function type. */
13546 if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
13548 type = apply_memfn_quals (type, memfn_quals, rqual);
13550 /* We have now dealt with these qualifiers. */
13551 memfn_quals = TYPE_UNQUALIFIED;
13552 rqual = REF_QUAL_NONE;
13555 if (type_uses_auto (type))
13557 if (alias_p)
13558 error_at (declspecs->locations[ds_type_spec],
13559 "%<auto%> not allowed in alias declaration");
13560 else
13561 error_at (declspecs->locations[ds_type_spec],
13562 "typedef declared %<auto%>");
13563 type = error_mark_node;
13566 if (reqs)
13567 error_at (location_of (reqs), "requires-clause on typedef");
13569 if (id_declarator && declarator->u.id.qualifying_scope)
13571 error_at (id_loc, "typedef name may not be a nested-name-specifier");
13572 type = error_mark_node;
13575 if (decl_context == FIELD)
13576 decl = build_lang_decl_loc (id_loc, TYPE_DECL, unqualified_id, type);
13577 else
13578 decl = build_decl (id_loc, TYPE_DECL, unqualified_id, type);
13580 if (decl_context != FIELD)
13582 if (!current_function_decl)
13583 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
13584 else if (DECL_MAYBE_IN_CHARGE_CDTOR_P (current_function_decl))
13585 /* The TYPE_DECL is "abstract" because there will be
13586 clones of this constructor/destructor, and there will
13587 be copies of this TYPE_DECL generated in those
13588 clones. The decloning optimization (for space) may
13589 revert this subsequently if it determines that
13590 the clones should share a common implementation. */
13591 DECL_ABSTRACT_P (decl) = true;
13593 set_originating_module (decl);
13595 else if (current_class_type
13596 && constructor_name_p (unqualified_id, current_class_type))
13597 permerror (id_loc, "ISO C++ forbids nested type %qD with same name "
13598 "as enclosing class",
13599 unqualified_id);
13601 /* If the user declares "typedef struct {...} foo" then the
13602 struct will have an anonymous name. Fill that name in now.
13603 Nothing can refer to it, so nothing needs know about the name
13604 change. */
13605 if (type != error_mark_node
13606 && unqualified_id
13607 && TYPE_NAME (type)
13608 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
13609 && TYPE_UNNAMED_P (type)
13610 && declspecs->type_definition_p
13611 && attributes_naming_typedef_ok (*attrlist)
13612 && cp_type_quals (type) == TYPE_UNQUALIFIED)
13613 name_unnamed_type (type, decl);
13615 if (signed_p
13616 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
13617 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
13619 bad_specifiers (decl, BSP_TYPE, virtualp,
13620 memfn_quals != TYPE_UNQUALIFIED,
13621 inlinep, friendp, raises != NULL_TREE,
13622 declspecs->locations);
13624 if (alias_p)
13625 /* Acknowledge that this was written:
13626 `using analias = atype;'. */
13627 TYPE_DECL_ALIAS_P (decl) = 1;
13629 return decl;
13632 /* Detect the case of an array type of unspecified size
13633 which came, as such, direct from a typedef name.
13634 We must copy the type, so that the array's domain can be
13635 individually set by the object's initializer. */
13637 if (type && typedef_type
13638 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
13639 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
13640 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
13642 /* Detect where we're using a typedef of function type to declare a
13643 function. PARMS will not be set, so we must create it now. */
13645 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
13647 tree decls = NULL_TREE;
13648 tree args;
13650 for (args = TYPE_ARG_TYPES (type);
13651 args && args != void_list_node;
13652 args = TREE_CHAIN (args))
13654 tree decl = cp_build_parm_decl (NULL_TREE, NULL_TREE,
13655 TREE_VALUE (args));
13657 DECL_CHAIN (decl) = decls;
13658 decls = decl;
13661 parms = nreverse (decls);
13663 if (decl_context != TYPENAME)
13665 /* The qualifiers on the function type become the qualifiers on
13666 the non-static member function. */
13667 memfn_quals |= type_memfn_quals (type);
13668 rqual = type_memfn_rqual (type);
13669 type_quals = TYPE_UNQUALIFIED;
13670 raises = TYPE_RAISES_EXCEPTIONS (type);
13674 /* If this is a type name (such as, in a cast or sizeof),
13675 compute the type and return it now. */
13677 if (decl_context == TYPENAME)
13679 /* Note that here we don't care about type_quals. */
13681 /* Special case: "friend class foo" looks like a TYPENAME context. */
13682 if (friendp)
13684 if (inlinep)
13686 error ("%<inline%> specified for friend class declaration");
13687 inlinep = 0;
13690 if (!current_aggr)
13692 /* Don't allow friend declaration without a class-key. */
13693 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
13694 permerror (input_location, "template parameters cannot be friends");
13695 else if (TREE_CODE (type) == TYPENAME_TYPE)
13696 permerror (input_location, "friend declaration requires class-key, "
13697 "i.e. %<friend class %T::%D%>",
13698 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
13699 else
13700 permerror (input_location, "friend declaration requires class-key, "
13701 "i.e. %<friend %#T%>",
13702 type);
13705 /* Only try to do this stuff if we didn't already give up. */
13706 if (type != integer_type_node)
13708 /* A friendly class? */
13709 if (current_class_type)
13710 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
13711 /*complain=*/true);
13712 else
13713 error ("trying to make class %qT a friend of global scope",
13714 type);
13716 type = void_type_node;
13719 else if (memfn_quals || rqual)
13721 if (ctype == NULL_TREE
13722 && TREE_CODE (type) == METHOD_TYPE)
13723 ctype = TYPE_METHOD_BASETYPE (type);
13725 if (ctype)
13726 type = build_memfn_type (type, ctype, memfn_quals, rqual);
13727 /* Core issue #547: need to allow this in template type args.
13728 Allow it in general in C++11 for alias-declarations. */
13729 else if ((template_type_arg || cxx_dialect >= cxx11)
13730 && TREE_CODE (type) == FUNCTION_TYPE)
13731 type = apply_memfn_quals (type, memfn_quals, rqual);
13732 else
13733 error ("invalid qualifiers on non-member function type");
13736 if (reqs)
13737 error_at (location_of (reqs), "requires-clause on type-id");
13739 return type;
13741 else if (unqualified_id == NULL_TREE && decl_context != PARM
13742 && decl_context != CATCHPARM
13743 && TREE_CODE (type) != UNION_TYPE
13744 && ! bitfield
13745 && innermost_code != cdk_decomp)
13747 error ("abstract declarator %qT used as declaration", type);
13748 return error_mark_node;
13751 if (!FUNC_OR_METHOD_TYPE_P (type))
13753 /* Only functions may be declared using an operator-function-id. */
13754 if (dname && IDENTIFIER_ANY_OP_P (dname))
13756 error_at (id_loc, "declaration of %qD as non-function", dname);
13757 return error_mark_node;
13760 if (reqs)
13761 error_at (location_of (reqs),
13762 "requires-clause on declaration of non-function type %qT",
13763 type);
13766 /* We don't check parameter types here because we can emit a better
13767 error message later. */
13768 if (decl_context != PARM)
13770 type = check_var_type (unqualified_id, type, id_loc);
13771 if (type == error_mark_node)
13772 return error_mark_node;
13775 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
13776 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
13778 if (decl_context == PARM || decl_context == CATCHPARM)
13780 if (ctype || in_namespace)
13781 error ("cannot use %<::%> in parameter declaration");
13783 tree auto_node = type_uses_auto (type);
13784 if (auto_node && !(cxx_dialect >= cxx17 && template_parm_flag))
13786 if (cxx_dialect >= cxx14)
13788 if (decl_context == PARM && AUTO_IS_DECLTYPE (auto_node))
13789 error_at (typespec_loc,
13790 "cannot declare a parameter with %<decltype(auto)%>");
13791 else if (tree c = CLASS_PLACEHOLDER_TEMPLATE (auto_node))
13793 auto_diagnostic_group g;
13794 error_at (typespec_loc,
13795 "class template placeholder %qE not permitted "
13796 "in this context", c);
13797 if (decl_context == PARM && cxx_dialect >= cxx20)
13798 inform (typespec_loc, "use %<auto%> for an "
13799 "abbreviated function template");
13801 else
13802 error_at (typespec_loc,
13803 "%<auto%> parameter not permitted in this context");
13805 else
13806 error_at (typespec_loc, "parameter declared %<auto%>");
13807 type = error_mark_node;
13810 /* A parameter declared as an array of T is really a pointer to T.
13811 One declared as a function is really a pointer to a function.
13812 One declared as a member is really a pointer to member. */
13814 if (TREE_CODE (type) == ARRAY_TYPE)
13816 /* Transfer const-ness of array into that of type pointed to. */
13817 type = build_pointer_type (TREE_TYPE (type));
13818 type_quals = TYPE_UNQUALIFIED;
13819 array_parameter_p = true;
13821 else if (TREE_CODE (type) == FUNCTION_TYPE)
13822 type = build_pointer_type (type);
13825 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
13826 && !(unqualified_id
13827 && identifier_p (unqualified_id)
13828 && IDENTIFIER_NEWDEL_OP_P (unqualified_id)))
13830 cp_cv_quals real_quals = memfn_quals;
13831 if (cxx_dialect < cxx14 && constexpr_p
13832 && sfk != sfk_constructor && sfk != sfk_destructor)
13833 real_quals |= TYPE_QUAL_CONST;
13834 type = build_memfn_type (type, ctype, real_quals, rqual);
13838 tree decl = NULL_TREE;
13840 if (decl_context == PARM)
13842 decl = cp_build_parm_decl (NULL_TREE, unqualified_id, type);
13843 DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
13845 bad_specifiers (decl, BSP_PARM, virtualp,
13846 memfn_quals != TYPE_UNQUALIFIED,
13847 inlinep, friendp, raises != NULL_TREE,
13848 declspecs->locations);
13850 else if (decl_context == FIELD)
13852 if (!staticp && !friendp && !FUNC_OR_METHOD_TYPE_P (type))
13853 if (tree auto_node = type_uses_auto (type))
13855 location_t tloc = declspecs->locations[ds_type_spec];
13856 if (CLASS_PLACEHOLDER_TEMPLATE (auto_node))
13857 error_at (tloc, "invalid use of template-name %qE without an "
13858 "argument list",
13859 CLASS_PLACEHOLDER_TEMPLATE (auto_node));
13860 else
13861 error_at (tloc, "non-static data member declared with "
13862 "placeholder %qT", auto_node);
13863 type = error_mark_node;
13866 /* The C99 flexible array extension. */
13867 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
13868 && TYPE_DOMAIN (type) == NULL_TREE)
13870 if (ctype
13871 && (TREE_CODE (ctype) == UNION_TYPE
13872 || TREE_CODE (ctype) == QUAL_UNION_TYPE))
13874 error_at (id_loc, "flexible array member in union");
13875 type = error_mark_node;
13877 else
13879 /* Array is a flexible member. */
13880 if (name)
13881 pedwarn (id_loc, OPT_Wpedantic,
13882 "ISO C++ forbids flexible array member %qs", name);
13883 else
13884 pedwarn (input_location, OPT_Wpedantic,
13885 "ISO C++ forbids flexible array members");
13887 /* Flexible array member has a null domain. */
13888 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
13892 if (type == error_mark_node)
13894 /* Happens when declaring arrays of sizes which
13895 are error_mark_node, for example. */
13896 decl = NULL_TREE;
13898 else if (in_namespace && !friendp)
13900 /* Something like struct S { int N::j; }; */
13901 error_at (id_loc, "invalid use of %<::%>");
13902 return error_mark_node;
13904 else if (FUNC_OR_METHOD_TYPE_P (type) && unqualified_id)
13906 int publicp = 0;
13907 tree function_context;
13909 if (friendp == 0)
13911 /* This should never happen in pure C++ (the check
13912 could be an assert). It could happen in
13913 Objective-C++ if someone writes invalid code that
13914 uses a function declaration for an instance
13915 variable or property (instance variables and
13916 properties are parsed as FIELD_DECLs, but they are
13917 part of an Objective-C class, not a C++ class).
13918 That code is invalid and is caught by this
13919 check. */
13920 if (!ctype)
13922 error ("declaration of function %qD in invalid context",
13923 unqualified_id);
13924 return error_mark_node;
13927 /* ``A union may [ ... ] not [ have ] virtual functions.''
13928 ARM 9.5 */
13929 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
13931 error_at (declspecs->locations[ds_virtual],
13932 "function %qD declared %<virtual%> inside a union",
13933 unqualified_id);
13934 return error_mark_node;
13937 if (virtualp
13938 && identifier_p (unqualified_id)
13939 && IDENTIFIER_NEWDEL_OP_P (unqualified_id))
13941 error_at (declspecs->locations[ds_virtual],
13942 "%qD cannot be declared %<virtual%>, since it "
13943 "is always static", unqualified_id);
13944 virtualp = 0;
13948 /* Check that the name used for a destructor makes sense. */
13949 if (sfk == sfk_destructor)
13951 tree uqname = id_declarator->u.id.unqualified_name;
13953 if (!ctype)
13955 gcc_assert (friendp);
13956 error_at (id_loc, "expected qualified name in friend "
13957 "declaration for destructor %qD", uqname);
13958 return error_mark_node;
13961 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
13963 error_at (id_loc, "declaration of %qD as member of %qT",
13964 uqname, ctype);
13965 return error_mark_node;
13967 if (concept_p)
13969 error_at (declspecs->locations[ds_concept],
13970 "a destructor cannot be %qs", "concept");
13971 return error_mark_node;
13973 if (constexpr_p && cxx_dialect < cxx20)
13975 error_at (declspecs->locations[ds_constexpr],
13976 "%<constexpr%> destructors only available"
13977 " with %<-std=c++20%> or %<-std=gnu++20%>");
13978 return error_mark_node;
13980 if (consteval_p)
13982 error_at (declspecs->locations[ds_consteval],
13983 "a destructor cannot be %qs", "consteval");
13984 return error_mark_node;
13987 else if (sfk == sfk_constructor && friendp && !ctype)
13989 error ("expected qualified name in friend declaration "
13990 "for constructor %qD",
13991 id_declarator->u.id.unqualified_name);
13992 return error_mark_node;
13994 if (sfk == sfk_constructor)
13995 if (concept_p)
13997 error_at (declspecs->locations[ds_concept],
13998 "a constructor cannot be %<concept%>");
13999 return error_mark_node;
14001 if (concept_p)
14003 error_at (declspecs->locations[ds_concept],
14004 "a concept cannot be a member function");
14005 concept_p = false;
14007 else if (consteval_p
14008 && identifier_p (unqualified_id)
14009 && IDENTIFIER_NEWDEL_OP_P (unqualified_id))
14011 error_at (declspecs->locations[ds_consteval],
14012 "%qD cannot be %qs", unqualified_id, "consteval");
14013 consteval_p = false;
14016 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
14018 tree tmpl = TREE_OPERAND (unqualified_id, 0);
14019 if (variable_template_p (tmpl))
14021 error_at (id_loc, "specialization of variable template "
14022 "%qD declared as function", tmpl);
14023 inform (DECL_SOURCE_LOCATION (tmpl),
14024 "variable template declared here");
14025 return error_mark_node;
14029 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
14030 function_context
14031 = (ctype != NULL_TREE
14032 ? decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE);
14033 publicp = ((! friendp || ! staticp)
14034 && function_context == NULL_TREE);
14036 decl = grokfndecl (ctype, type,
14037 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
14038 ? unqualified_id : dname,
14039 parms,
14040 unqualified_id,
14041 declspecs,
14042 reqs,
14043 virtualp, flags, memfn_quals, rqual, raises,
14044 friendp ? -1 : 0, friendp, publicp,
14045 inlinep | (2 * constexpr_p) | (4 * concept_p)
14046 | (8 * consteval_p),
14047 initialized == SD_DELETED, sfk,
14048 funcdef_flag, late_return_type_p,
14049 template_count, in_namespace,
14050 attrlist, id_loc);
14051 decl = set_virt_specifiers (decl, virt_specifiers);
14052 if (decl == NULL_TREE)
14053 return error_mark_node;
14054 #if 0
14055 /* This clobbers the attrs stored in `decl' from `attrlist'. */
14056 /* The decl and setting of decl_attr is also turned off. */
14057 decl = build_decl_attribute_variant (decl, decl_attr);
14058 #endif
14060 /* [class.conv.ctor]
14062 A constructor declared without the function-specifier
14063 explicit that can be called with a single parameter
14064 specifies a conversion from the type of its first
14065 parameter to the type of its class. Such a constructor
14066 is called a converting constructor. */
14067 if (explicitp == 2)
14068 DECL_NONCONVERTING_P (decl) = 1;
14070 if (declspecs->explicit_specifier)
14071 store_explicit_specifier (decl, declspecs->explicit_specifier);
14073 else if (!staticp
14074 && ((current_class_type
14075 && same_type_p (type, current_class_type))
14076 || (!dependent_type_p (type)
14077 && !COMPLETE_TYPE_P (complete_type (type))
14078 && (!complete_or_array_type_p (type)
14079 || initialized == SD_UNINITIALIZED))))
14081 if (TREE_CODE (type) != ARRAY_TYPE
14082 || !COMPLETE_TYPE_P (TREE_TYPE (type)))
14084 if (unqualified_id)
14086 error_at (id_loc, "field %qD has incomplete type %qT",
14087 unqualified_id, type);
14088 cxx_incomplete_type_inform (strip_array_types (type));
14090 else
14091 error ("name %qT has incomplete type", type);
14093 type = error_mark_node;
14094 decl = NULL_TREE;
14097 else if (!verify_type_context (input_location,
14098 staticp
14099 ? TCTX_STATIC_STORAGE
14100 : TCTX_FIELD, type))
14102 type = error_mark_node;
14103 decl = NULL_TREE;
14105 else
14107 if (friendp)
14109 if (unqualified_id)
14110 error_at (id_loc,
14111 "%qE is neither function nor member function; "
14112 "cannot be declared friend", unqualified_id);
14113 else
14114 error ("unnamed field is neither function nor member "
14115 "function; cannot be declared friend");
14116 return error_mark_node;
14118 decl = NULL_TREE;
14121 if (friendp)
14123 /* Packages tend to use GNU attributes on friends, so we only
14124 warn for standard attributes. */
14125 if (attrlist && !funcdef_flag && cxx11_attribute_p (*attrlist))
14127 *attrlist = NULL_TREE;
14128 if (warning_at (id_loc, OPT_Wattributes, "attribute ignored"))
14129 inform (id_loc, "an attribute that appertains to a friend "
14130 "declaration that is not a definition is ignored");
14132 /* Friends are treated specially. */
14133 if (ctype == current_class_type)
14134 ; /* We already issued a permerror. */
14135 else if (decl && DECL_NAME (decl))
14137 set_originating_module (decl, true);
14139 if (initialized)
14140 /* Kludge: We need funcdef_flag to be true in do_friend for
14141 in-class defaulted functions, but that breaks grokfndecl.
14142 So set it here. */
14143 funcdef_flag = true;
14145 if (template_class_depth (current_class_type) == 0)
14147 decl = check_explicit_specialization
14148 (unqualified_id, decl, template_count,
14149 2 * funcdef_flag + 4);
14150 if (decl == error_mark_node)
14151 return error_mark_node;
14154 decl = do_friend (ctype, unqualified_id, decl,
14155 flags, funcdef_flag);
14156 return decl;
14158 else
14159 return error_mark_node;
14162 /* Structure field. It may not be a function, except for C++. */
14164 if (decl == NULL_TREE)
14166 if (staticp)
14168 /* C++ allows static class members. All other work
14169 for this is done by grokfield. */
14170 decl = build_lang_decl_loc (id_loc, VAR_DECL,
14171 unqualified_id, type);
14172 set_linkage_for_static_data_member (decl);
14173 if (concept_p)
14174 error_at (declspecs->locations[ds_concept],
14175 "static data member %qE declared %qs",
14176 unqualified_id, "concept");
14177 else if (constexpr_p && !initialized)
14179 error_at (DECL_SOURCE_LOCATION (decl),
14180 "%<constexpr%> static data member %qD must "
14181 "have an initializer", decl);
14182 constexpr_p = false;
14184 if (consteval_p)
14185 error_at (declspecs->locations[ds_consteval],
14186 "static data member %qE declared %qs",
14187 unqualified_id, "consteval");
14189 if (inlinep)
14190 mark_inline_variable (decl, declspecs->locations[ds_inline]);
14192 if (!DECL_VAR_DECLARED_INLINE_P (decl)
14193 && !(cxx_dialect >= cxx17 && constexpr_p))
14194 /* Even if there is an in-class initialization, DECL
14195 is considered undefined until an out-of-class
14196 definition is provided, unless this is an inline
14197 variable. */
14198 DECL_EXTERNAL (decl) = 1;
14200 if (thread_p)
14202 CP_DECL_THREAD_LOCAL_P (decl) = true;
14203 if (!processing_template_decl)
14204 set_decl_tls_model (decl, decl_default_tls_model (decl));
14205 if (declspecs->gnu_thread_keyword_p)
14206 SET_DECL_GNU_TLS_P (decl);
14209 /* Set the constraints on the declaration. */
14210 bool memtmpl = (current_template_depth
14211 > template_class_depth (current_class_type));
14212 if (memtmpl)
14214 tree tmpl_reqs
14215 = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
14216 tree ci = build_constraints (tmpl_reqs, NULL_TREE);
14217 set_constraints (decl, ci);
14220 else
14222 if (concept_p)
14224 error_at (declspecs->locations[ds_concept],
14225 "non-static data member %qE declared %qs",
14226 unqualified_id, "concept");
14227 concept_p = false;
14228 constexpr_p = false;
14230 else if (constexpr_p)
14232 error_at (declspecs->locations[ds_constexpr],
14233 "non-static data member %qE declared %qs",
14234 unqualified_id, "constexpr");
14235 constexpr_p = false;
14237 if (constinit_p)
14239 error_at (declspecs->locations[ds_constinit],
14240 "non-static data member %qE declared %qs",
14241 unqualified_id, "constinit");
14242 constinit_p = false;
14244 if (consteval_p)
14246 error_at (declspecs->locations[ds_consteval],
14247 "non-static data member %qE declared %qs",
14248 unqualified_id, "consteval");
14249 consteval_p = false;
14251 decl = build_decl (id_loc, FIELD_DECL, unqualified_id, type);
14252 DECL_NONADDRESSABLE_P (decl) = bitfield;
14253 if (bitfield && !unqualified_id)
14254 DECL_PADDING_P (decl) = 1;
14256 if (storage_class == sc_mutable)
14258 DECL_MUTABLE_P (decl) = 1;
14259 storage_class = sc_none;
14262 if (initialized)
14264 /* An attempt is being made to initialize a non-static
14265 member. This is new in C++11. */
14266 maybe_warn_cpp0x (CPP0X_NSDMI, init_loc);
14268 /* If this has been parsed with static storage class, but
14269 errors forced staticp to be cleared, ensure NSDMI is
14270 not present. */
14271 if (declspecs->storage_class == sc_static)
14272 DECL_INITIAL (decl) = error_mark_node;
14276 bad_specifiers (decl, BSP_FIELD, virtualp,
14277 memfn_quals != TYPE_UNQUALIFIED,
14278 staticp ? false : inlinep, friendp,
14279 raises != NULL_TREE,
14280 declspecs->locations);
14283 else if (FUNC_OR_METHOD_TYPE_P (type))
14285 tree original_name;
14286 int publicp = 0;
14288 if (!unqualified_id)
14289 return error_mark_node;
14291 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
14292 original_name = dname;
14293 else
14294 original_name = unqualified_id;
14295 // FIXME:gcc_assert (original_name == dname);
14297 if (storage_class == sc_auto)
14298 error_at (declspecs->locations[ds_storage_class],
14299 "storage class %<auto%> invalid for function %qs", name);
14300 else if (storage_class == sc_register)
14301 error_at (declspecs->locations[ds_storage_class],
14302 "storage class %<register%> invalid for function %qs",
14303 name);
14304 else if (thread_p)
14306 if (declspecs->gnu_thread_keyword_p)
14307 error_at (declspecs->locations[ds_thread],
14308 "storage class %<__thread%> invalid for function %qs",
14309 name);
14310 else
14311 error_at (declspecs->locations[ds_thread],
14312 "storage class %<thread_local%> invalid for "
14313 "function %qs", name);
14316 if (virt_specifiers)
14317 error ("virt-specifiers in %qs not allowed outside a class "
14318 "definition", name);
14319 /* Function declaration not at top level.
14320 Storage classes other than `extern' are not allowed
14321 and `extern' makes no difference. */
14322 if (! toplevel_bindings_p ()
14323 && (storage_class == sc_static
14324 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
14325 && pedantic)
14327 if (storage_class == sc_static)
14328 pedwarn (declspecs->locations[ds_storage_class], OPT_Wpedantic,
14329 "%<static%> specifier invalid for function %qs "
14330 "declared out of global scope", name);
14331 else
14332 pedwarn (declspecs->locations[ds_inline], OPT_Wpedantic,
14333 "%<inline%> specifier invalid for function %qs "
14334 "declared out of global scope", name);
14337 if (ctype == NULL_TREE)
14339 if (virtualp)
14341 error ("virtual non-class function %qs", name);
14342 virtualp = 0;
14344 else if (sfk == sfk_constructor
14345 || sfk == sfk_destructor)
14347 error (funcdef_flag
14348 ? G_("%qs defined in a non-class scope")
14349 : G_("%qs declared in a non-class scope"), name);
14350 sfk = sfk_none;
14353 if (consteval_p
14354 && identifier_p (unqualified_id)
14355 && IDENTIFIER_NEWDEL_OP_P (unqualified_id))
14357 error_at (declspecs->locations[ds_consteval],
14358 "%qD cannot be %qs", unqualified_id, "consteval");
14359 consteval_p = false;
14362 /* Record whether the function is public. */
14363 publicp = (ctype != NULL_TREE
14364 || storage_class != sc_static);
14366 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
14367 declspecs,
14368 reqs, virtualp, flags, memfn_quals, rqual, raises,
14369 1, friendp,
14370 publicp,
14371 inlinep | (2 * constexpr_p) | (4 * concept_p)
14372 | (8 * consteval_p),
14373 initialized == SD_DELETED,
14374 sfk,
14375 funcdef_flag,
14376 late_return_type_p,
14377 template_count, in_namespace, attrlist,
14378 id_loc);
14379 if (decl == NULL_TREE)
14380 return error_mark_node;
14382 if (explicitp == 2)
14383 DECL_NONCONVERTING_P (decl) = 1;
14384 if (staticp == 1)
14386 int invalid_static = 0;
14388 /* Don't allow a static member function in a class, and forbid
14389 declaring main to be static. */
14390 if (TREE_CODE (type) == METHOD_TYPE)
14392 permerror (input_location, "cannot declare member function %qD to have "
14393 "static linkage", decl);
14394 invalid_static = 1;
14396 else if (current_function_decl)
14398 /* 7.1.1: There can be no static function declarations within a
14399 block. */
14400 error_at (declspecs->locations[ds_storage_class],
14401 "cannot declare static function inside another function");
14402 invalid_static = 1;
14405 if (invalid_static)
14407 staticp = 0;
14408 storage_class = sc_none;
14411 if (declspecs->explicit_specifier)
14412 store_explicit_specifier (decl, declspecs->explicit_specifier);
14414 else
14416 /* It's a variable. */
14418 /* An uninitialized decl with `extern' is a reference. */
14419 decl = grokvardecl (type, dname, unqualified_id,
14420 declspecs,
14421 initialized,
14422 type_quals,
14423 inlinep,
14424 concept_p,
14425 template_count,
14426 ctype ? ctype : in_namespace,
14427 id_loc);
14428 if (decl == NULL_TREE)
14429 return error_mark_node;
14431 bad_specifiers (decl, BSP_VAR, virtualp,
14432 memfn_quals != TYPE_UNQUALIFIED,
14433 inlinep, friendp, raises != NULL_TREE,
14434 declspecs->locations);
14436 if (ctype)
14438 DECL_CONTEXT (decl) = ctype;
14439 if (staticp == 1)
14441 permerror (declspecs->locations[ds_storage_class],
14442 "%<static%> may not be used when defining "
14443 "(as opposed to declaring) a static data member");
14444 staticp = 0;
14445 storage_class = sc_none;
14447 if (storage_class == sc_register && TREE_STATIC (decl))
14449 error ("static member %qD declared %<register%>", decl);
14450 storage_class = sc_none;
14452 if (storage_class == sc_extern && pedantic)
14454 pedwarn (input_location, OPT_Wpedantic,
14455 "cannot explicitly declare member %q#D to have "
14456 "extern linkage", decl);
14457 storage_class = sc_none;
14460 else if (constexpr_p && DECL_EXTERNAL (decl))
14462 error_at (DECL_SOURCE_LOCATION (decl),
14463 "declaration of %<constexpr%> variable %qD "
14464 "is not a definition", decl);
14465 constexpr_p = false;
14467 if (consteval_p)
14469 error_at (DECL_SOURCE_LOCATION (decl),
14470 "a variable cannot be declared %<consteval%>");
14471 consteval_p = false;
14474 if (inlinep)
14475 mark_inline_variable (decl, declspecs->locations[ds_inline]);
14476 if (innermost_code == cdk_decomp)
14478 gcc_assert (declarator && declarator->kind == cdk_decomp);
14479 DECL_SOURCE_LOCATION (decl) = id_loc;
14480 DECL_ARTIFICIAL (decl) = 1;
14481 fit_decomposition_lang_decl (decl, NULL_TREE);
14485 if (VAR_P (decl) && !initialized)
14486 if (tree auto_node = type_uses_auto (type))
14487 if (!CLASS_PLACEHOLDER_TEMPLATE (auto_node))
14489 location_t loc = declspecs->locations[ds_type_spec];
14490 error_at (loc, "declaration of %q#D has no initializer", decl);
14491 TREE_TYPE (decl) = error_mark_node;
14494 if (storage_class == sc_extern && initialized && !funcdef_flag)
14496 if (toplevel_bindings_p ())
14498 /* It's common practice (and completely valid) to have a const
14499 be initialized and declared extern. */
14500 if (!(type_quals & TYPE_QUAL_CONST))
14501 warning_at (DECL_SOURCE_LOCATION (decl), 0,
14502 "%qs initialized and declared %<extern%>", name);
14504 else
14506 error_at (DECL_SOURCE_LOCATION (decl),
14507 "%qs has both %<extern%> and initializer", name);
14508 return error_mark_node;
14512 /* Record `register' declaration for warnings on &
14513 and in case doing stupid register allocation. */
14515 if (storage_class == sc_register)
14517 DECL_REGISTER (decl) = 1;
14518 /* Warn about register storage specifiers on PARM_DECLs. */
14519 if (TREE_CODE (decl) == PARM_DECL)
14521 if (cxx_dialect >= cxx17)
14522 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
14523 "ISO C++17 does not allow %<register%> storage "
14524 "class specifier");
14525 else
14526 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
14527 "%<register%> storage class specifier used");
14530 else if (storage_class == sc_extern)
14531 DECL_THIS_EXTERN (decl) = 1;
14532 else if (storage_class == sc_static)
14533 DECL_THIS_STATIC (decl) = 1;
14535 if (VAR_P (decl))
14537 /* Set constexpr flag on vars (functions got it in grokfndecl). */
14538 if (constexpr_p)
14539 DECL_DECLARED_CONSTEXPR_P (decl) = true;
14540 /* And the constinit flag (which only applies to variables). */
14541 else if (constinit_p)
14542 DECL_DECLARED_CONSTINIT_P (decl) = true;
14545 /* Record constancy and volatility on the DECL itself . There's
14546 no need to do this when processing a template; we'll do this
14547 for the instantiated declaration based on the type of DECL. */
14548 if (!processing_template_decl)
14549 cp_apply_type_quals_to_decl (type_quals, decl);
14551 return decl;
14555 /* Subroutine of start_function. Ensure that each of the parameter
14556 types (as listed in PARMS) is complete, as is required for a
14557 function definition. */
14559 static void
14560 require_complete_types_for_parms (tree parms)
14562 for (; parms; parms = DECL_CHAIN (parms))
14564 if (dependent_type_p (TREE_TYPE (parms)))
14565 continue;
14566 if (!VOID_TYPE_P (TREE_TYPE (parms))
14567 && complete_type_or_else (TREE_TYPE (parms), parms))
14569 relayout_decl (parms);
14570 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
14572 abstract_virtuals_error (parms, TREE_TYPE (parms));
14573 maybe_warn_parm_abi (TREE_TYPE (parms),
14574 DECL_SOURCE_LOCATION (parms));
14576 else
14577 /* grokparms or complete_type_or_else will have already issued
14578 an error. */
14579 TREE_TYPE (parms) = error_mark_node;
14583 /* Returns nonzero if T is a local variable. */
14586 local_variable_p (const_tree t)
14588 if ((VAR_P (t)
14589 && (DECL_LOCAL_DECL_P (t)
14590 || !DECL_CONTEXT (t)
14591 || TREE_CODE (DECL_CONTEXT (t)) == FUNCTION_DECL))
14592 || (TREE_CODE (t) == PARM_DECL))
14593 return 1;
14595 return 0;
14598 /* Like local_variable_p, but suitable for use as a tree-walking
14599 function. */
14601 static tree
14602 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
14603 void * /*data*/)
14605 if (unevaluated_p (TREE_CODE (*tp)))
14607 /* DR 2082 permits local variables in unevaluated contexts
14608 within a default argument. */
14609 *walk_subtrees = 0;
14610 return NULL_TREE;
14613 if (local_variable_p (*tp)
14614 && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
14615 return *tp;
14616 else if (TYPE_P (*tp))
14617 *walk_subtrees = 0;
14619 return NULL_TREE;
14622 /* Check that ARG, which is a default-argument expression for a
14623 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
14624 something goes wrong. DECL may also be a _TYPE node, rather than a
14625 DECL, if there is no DECL available. */
14627 tree
14628 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
14630 tree var;
14631 tree decl_type;
14633 if (TREE_CODE (arg) == DEFERRED_PARSE)
14634 /* We get a DEFERRED_PARSE when looking at an in-class declaration
14635 with a default argument. Ignore the argument for now; we'll
14636 deal with it after the class is complete. */
14637 return arg;
14639 if (TYPE_P (decl))
14641 decl_type = decl;
14642 decl = NULL_TREE;
14644 else
14645 decl_type = TREE_TYPE (decl);
14647 if (arg == error_mark_node
14648 || decl == error_mark_node
14649 || TREE_TYPE (arg) == error_mark_node
14650 || decl_type == error_mark_node)
14651 /* Something already went wrong. There's no need to check
14652 further. */
14653 return error_mark_node;
14655 /* [dcl.fct.default]
14657 A default argument expression is implicitly converted to the
14658 parameter type. */
14659 ++cp_unevaluated_operand;
14660 /* Avoid digest_init clobbering the initializer. */
14661 tree carg = BRACE_ENCLOSED_INITIALIZER_P (arg) ? unshare_expr (arg): arg;
14662 perform_implicit_conversion_flags (decl_type, carg, complain,
14663 LOOKUP_IMPLICIT);
14664 --cp_unevaluated_operand;
14666 /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
14667 the call sites. */
14668 if (TYPE_PTR_OR_PTRMEM_P (decl_type)
14669 && null_ptr_cst_p (arg)
14670 /* Don't lose side-effects as in PR90473. */
14671 && !TREE_SIDE_EFFECTS (arg))
14672 return nullptr_node;
14674 /* [dcl.fct.default]
14676 Local variables shall not be used in default argument
14677 expressions.
14679 The keyword `this' shall not be used in a default argument of a
14680 member function. */
14681 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
14682 if (var)
14684 if (complain & tf_warning_or_error)
14686 if (DECL_NAME (var) == this_identifier)
14687 permerror (input_location, "default argument %qE uses %qD",
14688 arg, var);
14689 else
14690 error ("default argument %qE uses local variable %qD", arg, var);
14692 return error_mark_node;
14695 /* All is well. */
14696 return arg;
14699 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
14701 static tree
14702 type_is_deprecated (tree type)
14704 enum tree_code code;
14705 if (TREE_DEPRECATED (type))
14706 return type;
14707 if (TYPE_NAME (type))
14709 if (TREE_DEPRECATED (TYPE_NAME (type)))
14710 return type;
14711 else
14713 cp_warn_deprecated_use_scopes (CP_DECL_CONTEXT (TYPE_NAME (type)));
14714 return NULL_TREE;
14718 /* Do warn about using typedefs to a deprecated class. */
14719 if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
14720 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
14722 code = TREE_CODE (type);
14724 if (code == POINTER_TYPE || code == REFERENCE_TYPE
14725 || code == OFFSET_TYPE || code == FUNCTION_TYPE
14726 || code == METHOD_TYPE || code == ARRAY_TYPE)
14727 return type_is_deprecated (TREE_TYPE (type));
14729 if (TYPE_PTRMEMFUNC_P (type))
14730 return type_is_deprecated
14731 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
14733 return NULL_TREE;
14736 /* Returns an unavailable type used within TYPE, or NULL_TREE if none. */
14738 static tree
14739 type_is_unavailable (tree type)
14741 enum tree_code code;
14742 if (TREE_UNAVAILABLE (type))
14743 return type;
14744 if (TYPE_NAME (type))
14746 if (TREE_UNAVAILABLE (TYPE_NAME (type)))
14747 return type;
14748 else
14750 cp_warn_deprecated_use_scopes (CP_DECL_CONTEXT (TYPE_NAME (type)));
14751 return NULL_TREE;
14755 /* Do warn about using typedefs to a deprecated class. */
14756 if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
14757 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
14759 code = TREE_CODE (type);
14761 if (code == POINTER_TYPE || code == REFERENCE_TYPE
14762 || code == OFFSET_TYPE || code == FUNCTION_TYPE
14763 || code == METHOD_TYPE || code == ARRAY_TYPE)
14764 return type_is_unavailable (TREE_TYPE (type));
14766 if (TYPE_PTRMEMFUNC_P (type))
14767 return type_is_unavailable
14768 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
14770 return NULL_TREE;
14773 /* Decode the list of parameter types for a function type.
14774 Given the list of things declared inside the parens,
14775 return a list of types.
14777 If this parameter does not end with an ellipsis, we append
14778 void_list_node.
14780 *PARMS is set to the chain of PARM_DECLs created. */
14782 tree
14783 grokparms (tree parmlist, tree *parms)
14785 tree result = NULL_TREE;
14786 tree decls = NULL_TREE;
14787 tree parm;
14788 int any_error = 0;
14790 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
14792 tree type = NULL_TREE;
14793 tree init = TREE_PURPOSE (parm);
14794 tree decl = TREE_VALUE (parm);
14796 if (parm == void_list_node || parm == explicit_void_list_node)
14797 break;
14799 if (! decl || TREE_TYPE (decl) == error_mark_node)
14801 any_error = 1;
14802 continue;
14805 type = TREE_TYPE (decl);
14806 if (VOID_TYPE_P (type))
14808 if (same_type_p (type, void_type_node)
14809 && !init
14810 && !DECL_NAME (decl) && !result
14811 && TREE_CHAIN (parm) == void_list_node)
14812 /* DR 577: A parameter list consisting of a single
14813 unnamed parameter of non-dependent type 'void'. */
14814 break;
14815 else if (cv_qualified_p (type))
14816 error_at (DECL_SOURCE_LOCATION (decl),
14817 "invalid use of cv-qualified type %qT in "
14818 "parameter declaration", type);
14819 else
14820 error_at (DECL_SOURCE_LOCATION (decl),
14821 "invalid use of type %<void%> in parameter "
14822 "declaration");
14823 /* It's not a good idea to actually create parameters of
14824 type `void'; other parts of the compiler assume that a
14825 void type terminates the parameter list. */
14826 type = error_mark_node;
14827 TREE_TYPE (decl) = error_mark_node;
14830 if (type != error_mark_node)
14832 if (deprecated_state != UNAVAILABLE_DEPRECATED_SUPPRESS)
14834 tree unavailtype = type_is_unavailable (type);
14835 if (unavailtype)
14836 cp_handle_deprecated_or_unavailable (unavailtype);
14838 if (deprecated_state != DEPRECATED_SUPPRESS
14839 && deprecated_state != UNAVAILABLE_DEPRECATED_SUPPRESS)
14841 tree deptype = type_is_deprecated (type);
14842 if (deptype)
14843 cp_handle_deprecated_or_unavailable (deptype);
14846 /* [dcl.fct] "A parameter with volatile-qualified type is
14847 deprecated." */
14848 if (CP_TYPE_VOLATILE_P (type))
14849 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wvolatile,
14850 "%<volatile%>-qualified parameter is "
14851 "deprecated");
14853 /* Top-level qualifiers on the parameters are
14854 ignored for function types. */
14855 type = cp_build_qualified_type (type, 0);
14856 if (TREE_CODE (type) == METHOD_TYPE)
14858 error ("parameter %qD invalidly declared method type", decl);
14859 type = build_pointer_type (type);
14860 TREE_TYPE (decl) = type;
14862 else if (cxx_dialect < cxx17 && INDIRECT_TYPE_P (type))
14864 /* Before C++17 DR 393:
14865 [dcl.fct]/6, parameter types cannot contain pointers
14866 (references) to arrays of unknown bound. */
14867 tree t = TREE_TYPE (type);
14868 int ptr = TYPE_PTR_P (type);
14870 while (1)
14872 if (TYPE_PTR_P (t))
14873 ptr = 1;
14874 else if (TREE_CODE (t) != ARRAY_TYPE)
14875 break;
14876 else if (!TYPE_DOMAIN (t))
14877 break;
14878 t = TREE_TYPE (t);
14880 if (TREE_CODE (t) == ARRAY_TYPE)
14881 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
14883 ? G_("parameter %qD includes pointer to array of "
14884 "unknown bound %qT")
14885 : G_("parameter %qD includes reference to array of "
14886 "unknown bound %qT"),
14887 decl, t);
14890 if (init && !processing_template_decl)
14891 init = check_default_argument (decl, init, tf_warning_or_error);
14894 DECL_CHAIN (decl) = decls;
14895 decls = decl;
14896 result = tree_cons (init, type, result);
14898 decls = nreverse (decls);
14899 result = nreverse (result);
14900 if (parm)
14901 result = chainon (result, void_list_node);
14902 *parms = decls;
14903 if (any_error)
14904 result = NULL_TREE;
14906 if (any_error)
14907 /* We had parm errors, recover by giving the function (...) type. */
14908 result = NULL_TREE;
14910 return result;
14914 /* D is a constructor or overloaded `operator='.
14916 Let T be the class in which D is declared. Then, this function
14917 returns:
14919 -1 if D's is an ill-formed constructor or copy assignment operator
14920 whose first parameter is of type `T'.
14921 0 if D is not a copy constructor or copy assignment
14922 operator.
14923 1 if D is a copy constructor or copy assignment operator whose
14924 first parameter is a reference to non-const qualified T.
14925 2 if D is a copy constructor or copy assignment operator whose
14926 first parameter is a reference to const qualified T.
14928 This function can be used as a predicate. Positive values indicate
14929 a copy constructor and nonzero values indicate a copy assignment
14930 operator. */
14933 copy_fn_p (const_tree d)
14935 tree args;
14936 tree arg_type;
14937 int result = 1;
14939 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
14941 if (TREE_CODE (d) == TEMPLATE_DECL
14942 || (DECL_TEMPLATE_INFO (d)
14943 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
14944 /* Instantiations of template member functions are never copy
14945 functions. Note that member functions of templated classes are
14946 represented as template functions internally, and we must
14947 accept those as copy functions. */
14948 return 0;
14950 if (!DECL_CONSTRUCTOR_P (d)
14951 && DECL_NAME (d) != assign_op_identifier)
14952 return 0;
14954 args = FUNCTION_FIRST_USER_PARMTYPE (d);
14955 if (!args)
14956 return 0;
14958 arg_type = TREE_VALUE (args);
14959 if (arg_type == error_mark_node)
14960 return 0;
14962 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
14964 /* Pass by value copy assignment operator. */
14965 result = -1;
14967 else if (TYPE_REF_P (arg_type)
14968 && !TYPE_REF_IS_RVALUE (arg_type)
14969 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
14971 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
14972 result = 2;
14974 else
14975 return 0;
14977 args = TREE_CHAIN (args);
14979 if (args && args != void_list_node && !TREE_PURPOSE (args))
14980 /* There are more non-optional args. */
14981 return 0;
14983 return result;
14986 /* D is a constructor or overloaded `operator='.
14988 Let T be the class in which D is declared. Then, this function
14989 returns true when D is a move constructor or move assignment
14990 operator, false otherwise. */
14992 bool
14993 move_fn_p (const_tree d)
14995 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
14997 if (cxx_dialect == cxx98)
14998 /* There are no move constructors if we are in C++98 mode. */
14999 return false;
15001 if (TREE_CODE (d) == TEMPLATE_DECL
15002 || (DECL_TEMPLATE_INFO (d)
15003 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
15004 /* Instantiations of template member functions are never move
15005 functions. Note that member functions of templated classes are
15006 represented as template functions internally, and we must
15007 accept those as move functions. */
15008 return 0;
15010 return move_signature_fn_p (d);
15013 /* D is a constructor or overloaded `operator='.
15015 Then, this function returns true when D has the same signature as a move
15016 constructor or move assignment operator (because either it is such a
15017 ctor/op= or it is a template specialization with the same signature),
15018 false otherwise. */
15020 bool
15021 move_signature_fn_p (const_tree d)
15023 tree args;
15024 tree arg_type;
15025 bool result = false;
15027 if (!DECL_CONSTRUCTOR_P (d)
15028 && DECL_NAME (d) != assign_op_identifier)
15029 return 0;
15031 args = FUNCTION_FIRST_USER_PARMTYPE (d);
15032 if (!args)
15033 return 0;
15035 arg_type = TREE_VALUE (args);
15036 if (arg_type == error_mark_node)
15037 return 0;
15039 if (TYPE_REF_P (arg_type)
15040 && TYPE_REF_IS_RVALUE (arg_type)
15041 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
15042 DECL_CONTEXT (d)))
15043 result = true;
15045 args = TREE_CHAIN (args);
15047 if (args && args != void_list_node && !TREE_PURPOSE (args))
15048 /* There are more non-optional args. */
15049 return false;
15051 return result;
15054 /* Remember any special properties of member function DECL. */
15056 void
15057 grok_special_member_properties (tree decl)
15059 tree class_type;
15061 if (TREE_CODE (decl) == USING_DECL
15062 || !DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
15063 return;
15065 class_type = DECL_CONTEXT (decl);
15066 if (IDENTIFIER_CTOR_P (DECL_NAME (decl)))
15068 int ctor = copy_fn_p (decl);
15070 if (!DECL_ARTIFICIAL (decl))
15071 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
15073 if (ctor > 0)
15075 /* [class.copy]
15077 A non-template constructor for class X is a copy
15078 constructor if its first parameter is of type X&, const
15079 X&, volatile X& or const volatile X&, and either there
15080 are no other parameters or else all other parameters have
15081 default arguments. */
15082 TYPE_HAS_COPY_CTOR (class_type) = 1;
15083 if (ctor > 1)
15084 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
15087 if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
15088 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
15090 if (is_list_ctor (decl))
15091 TYPE_HAS_LIST_CTOR (class_type) = 1;
15093 if (maybe_constexpr_fn (decl)
15094 && !ctor && !move_fn_p (decl))
15095 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
15097 else if (DECL_NAME (decl) == assign_op_identifier)
15099 /* [class.copy]
15101 A non-template assignment operator for class X is a copy
15102 assignment operator if its parameter is of type X, X&, const
15103 X&, volatile X& or const volatile X&. */
15105 int assop = copy_fn_p (decl);
15107 if (assop)
15109 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
15110 if (assop != 1)
15111 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
15114 else if (IDENTIFIER_CONV_OP_P (DECL_NAME (decl)))
15115 TYPE_HAS_CONVERSION (class_type) = true;
15117 /* Destructors are handled in check_methods. */
15120 /* Check a constructor DECL has the correct form. Complains
15121 if the class has a constructor of the form X(X). */
15123 bool
15124 grok_ctor_properties (const_tree ctype, const_tree decl)
15126 int ctor_parm = copy_fn_p (decl);
15128 if (ctor_parm < 0)
15130 /* [class.copy]
15132 A declaration of a constructor for a class X is ill-formed if
15133 its first parameter is of type (optionally cv-qualified) X
15134 and either there are no other parameters or else all other
15135 parameters have default arguments.
15137 We *don't* complain about member template instantiations that
15138 have this form, though; they can occur as we try to decide
15139 what constructor to use during overload resolution. Since
15140 overload resolution will never prefer such a constructor to
15141 the non-template copy constructor (which is either explicitly
15142 or implicitly defined), there's no need to worry about their
15143 existence. Theoretically, they should never even be
15144 instantiated, but that's hard to forestall. */
15145 error_at (DECL_SOURCE_LOCATION (decl),
15146 "invalid constructor; you probably meant %<%T (const %T&)%>",
15147 ctype, ctype);
15148 return false;
15151 return true;
15154 /* DECL is a declaration for an overloaded or conversion operator. If
15155 COMPLAIN is true, errors are issued for invalid declarations. */
15157 bool
15158 grok_op_properties (tree decl, bool complain)
15160 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
15161 bool methodp = TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE;
15162 tree name = DECL_NAME (decl);
15163 location_t loc = DECL_SOURCE_LOCATION (decl);
15165 tree class_type = DECL_CONTEXT (decl);
15166 if (class_type && !CLASS_TYPE_P (class_type))
15167 class_type = NULL_TREE;
15169 tree_code operator_code;
15170 unsigned op_flags;
15171 if (IDENTIFIER_CONV_OP_P (name))
15173 /* Conversion operators are TYPE_EXPR for the purposes of this
15174 function. */
15175 operator_code = TYPE_EXPR;
15176 op_flags = OVL_OP_FLAG_UNARY;
15178 else
15180 const ovl_op_info_t *ovl_op = IDENTIFIER_OVL_OP_INFO (name);
15182 operator_code = ovl_op->tree_code;
15183 op_flags = ovl_op->flags;
15184 gcc_checking_assert (operator_code != ERROR_MARK);
15185 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
15188 if (op_flags & OVL_OP_FLAG_ALLOC)
15190 /* operator new and operator delete are quite special. */
15191 if (class_type)
15192 switch (op_flags)
15194 case OVL_OP_FLAG_ALLOC:
15195 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
15196 break;
15198 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE:
15199 TYPE_GETS_DELETE (class_type) |= 1;
15200 break;
15202 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_VEC:
15203 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
15204 break;
15206 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE | OVL_OP_FLAG_VEC:
15207 TYPE_GETS_DELETE (class_type) |= 2;
15208 break;
15210 default:
15211 gcc_unreachable ();
15214 /* [basic.std.dynamic.allocation]/1:
15216 A program is ill-formed if an allocation function is declared
15217 in a namespace scope other than global scope or declared
15218 static in global scope.
15220 The same also holds true for deallocation functions. */
15221 if (DECL_NAMESPACE_SCOPE_P (decl))
15223 if (CP_DECL_CONTEXT (decl) != global_namespace)
15225 error_at (loc, "%qD may not be declared within a namespace",
15226 decl);
15227 return false;
15230 if (!TREE_PUBLIC (decl))
15232 error_at (loc, "%qD may not be declared as static", decl);
15233 return false;
15237 if (op_flags & OVL_OP_FLAG_DELETE)
15239 DECL_SET_IS_OPERATOR_DELETE (decl, true);
15240 coerce_delete_type (decl, loc);
15242 else
15244 DECL_SET_IS_OPERATOR_NEW (decl, true);
15245 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl), loc);
15248 return true;
15251 /* An operator function must either be a non-static member function
15252 or have at least one parameter of a class, a reference to a class,
15253 an enumeration, or a reference to an enumeration. 13.4.0.6 */
15254 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
15256 if (operator_code == TYPE_EXPR
15257 || operator_code == CALL_EXPR
15258 || operator_code == COMPONENT_REF
15259 || operator_code == ARRAY_REF
15260 || operator_code == NOP_EXPR)
15262 error_at (loc, "%qD must be a non-static member function", decl);
15263 return false;
15266 if (DECL_STATIC_FUNCTION_P (decl))
15268 error_at (loc, "%qD must be either a non-static member "
15269 "function or a non-member function", decl);
15270 return false;
15273 for (tree arg = argtypes; ; arg = TREE_CHAIN (arg))
15275 if (!arg || arg == void_list_node)
15277 if (complain)
15278 error_at(loc, "%qD must have an argument of class or "
15279 "enumerated type", decl);
15280 return false;
15283 tree type = non_reference (TREE_VALUE (arg));
15284 if (type == error_mark_node)
15285 return false;
15287 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
15288 because these checks are performed even on template
15289 functions. */
15290 if (MAYBE_CLASS_TYPE_P (type)
15291 || TREE_CODE (type) == ENUMERAL_TYPE)
15292 break;
15296 if (operator_code == CALL_EXPR)
15297 /* There are no further restrictions on the arguments to an overloaded
15298 "operator ()". */
15299 return true;
15301 if (operator_code == COND_EXPR)
15303 /* 13.4.0.3 */
15304 error_at (loc, "ISO C++ prohibits overloading %<operator ?:%>");
15305 return false;
15308 /* Count the number of arguments and check for ellipsis. */
15309 int arity = 0;
15310 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
15312 if (!arg)
15314 /* Variadic. */
15315 if (operator_code == ARRAY_REF && cxx_dialect >= cxx23)
15316 break;
15318 error_at (loc, "%qD must not have variable number of arguments",
15319 decl);
15320 return false;
15322 ++arity;
15325 /* Verify correct number of arguments. */
15326 switch (op_flags)
15328 case OVL_OP_FLAG_AMBIARY:
15329 if (arity == 1)
15331 /* We have a unary instance of an ambi-ary op. Remap to the
15332 unary one. */
15333 unsigned alt = ovl_op_alternate[ovl_op_mapping [operator_code]];
15334 const ovl_op_info_t *ovl_op = &ovl_op_info[false][alt];
15335 gcc_checking_assert (ovl_op->flags == OVL_OP_FLAG_UNARY);
15336 operator_code = ovl_op->tree_code;
15337 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
15339 else if (arity != 2)
15341 /* This was an ambiguous operator but is invalid. */
15342 error_at (loc,
15343 methodp
15344 ? G_("%qD must have either zero or one argument")
15345 : G_("%qD must have either one or two arguments"), decl);
15346 return false;
15348 else if ((operator_code == POSTINCREMENT_EXPR
15349 || operator_code == POSTDECREMENT_EXPR)
15350 && ! processing_template_decl
15351 /* x++ and x--'s second argument must be an int. */
15352 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)),
15353 integer_type_node))
15355 error_at (loc,
15356 methodp
15357 ? G_("postfix %qD must have %<int%> as its argument")
15358 : G_("postfix %qD must have %<int%> as its second argument"),
15359 decl);
15360 return false;
15362 break;
15364 case OVL_OP_FLAG_UNARY:
15365 if (arity != 1)
15367 error_at (loc,
15368 methodp
15369 ? G_("%qD must have no arguments")
15370 : G_("%qD must have exactly one argument"), decl);
15371 return false;
15373 break;
15375 case OVL_OP_FLAG_BINARY:
15376 if (arity != 2)
15378 if (operator_code == ARRAY_REF && cxx_dialect >= cxx23)
15379 break;
15380 error_at (loc,
15381 methodp
15382 ? G_("%qD must have exactly one argument")
15383 : G_("%qD must have exactly two arguments"), decl);
15384 return false;
15386 break;
15388 default:
15389 gcc_unreachable ();
15392 /* There can be no default arguments. */
15393 for (tree arg = argtypes; arg && arg != void_list_node;
15394 arg = TREE_CHAIN (arg))
15395 if (TREE_PURPOSE (arg))
15397 TREE_PURPOSE (arg) = NULL_TREE;
15398 error_at (loc, "%qD cannot have default arguments", decl);
15399 return false;
15402 /* At this point the declaration is well-formed. It may not be
15403 sensible though. */
15405 /* Check member function warnings only on the in-class declaration.
15406 There's no point warning on an out-of-class definition. */
15407 if (class_type && class_type != current_class_type)
15408 return true;
15410 /* Warn about conversion operators that will never be used. */
15411 if (IDENTIFIER_CONV_OP_P (name)
15412 && ! DECL_TEMPLATE_INFO (decl)
15413 && warn_class_conversion)
15415 tree t = TREE_TYPE (name);
15416 int ref = TYPE_REF_P (t);
15418 if (ref)
15419 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
15421 if (VOID_TYPE_P (t))
15422 warning_at (loc, OPT_Wclass_conversion, "converting %qT to %<void%> "
15423 "will never use a type conversion operator", class_type);
15424 else if (class_type)
15426 if (same_type_ignoring_top_level_qualifiers_p (t, class_type))
15427 warning_at (loc, OPT_Wclass_conversion,
15429 ? G_("converting %qT to a reference to the same type "
15430 "will never use a type conversion operator")
15431 : G_("converting %qT to the same type "
15432 "will never use a type conversion operator"),
15433 class_type);
15434 /* Don't force t to be complete here. */
15435 else if (MAYBE_CLASS_TYPE_P (t)
15436 && COMPLETE_TYPE_P (t)
15437 && DERIVED_FROM_P (t, class_type))
15438 warning_at (loc, OPT_Wclass_conversion,
15440 ? G_("converting %qT to a reference to a base class "
15441 "%qT will never use a type conversion operator")
15442 : G_("converting %qT to a base class %qT "
15443 "will never use a type conversion operator"),
15444 class_type, t);
15448 if (!warn_ecpp)
15449 return true;
15451 /* Effective C++ rules below. */
15453 /* More Effective C++ rule 7. */
15454 if (operator_code == TRUTH_ANDIF_EXPR
15455 || operator_code == TRUTH_ORIF_EXPR
15456 || operator_code == COMPOUND_EXPR)
15457 warning_at (loc, OPT_Weffc__,
15458 "user-defined %qD always evaluates both arguments", decl);
15460 /* More Effective C++ rule 6. */
15461 if (operator_code == POSTINCREMENT_EXPR
15462 || operator_code == POSTDECREMENT_EXPR
15463 || operator_code == PREINCREMENT_EXPR
15464 || operator_code == PREDECREMENT_EXPR)
15466 tree arg = TREE_VALUE (argtypes);
15467 tree ret = TREE_TYPE (TREE_TYPE (decl));
15468 if (methodp || TYPE_REF_P (arg))
15469 arg = TREE_TYPE (arg);
15470 arg = TYPE_MAIN_VARIANT (arg);
15472 if (operator_code == PREINCREMENT_EXPR
15473 || operator_code == PREDECREMENT_EXPR)
15475 if (!TYPE_REF_P (ret)
15476 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)), arg))
15477 warning_at (loc, OPT_Weffc__, "prefix %qD should return %qT", decl,
15478 build_reference_type (arg));
15480 else
15482 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
15483 warning_at (loc, OPT_Weffc__,
15484 "postfix %qD should return %qT", decl, arg);
15488 /* Effective C++ rule 23. */
15489 if (!DECL_ASSIGNMENT_OPERATOR_P (decl)
15490 && (operator_code == PLUS_EXPR
15491 || operator_code == MINUS_EXPR
15492 || operator_code == TRUNC_DIV_EXPR
15493 || operator_code == MULT_EXPR
15494 || operator_code == TRUNC_MOD_EXPR)
15495 && TYPE_REF_P (TREE_TYPE (TREE_TYPE (decl))))
15496 warning_at (loc, OPT_Weffc__, "%qD should return by value", decl);
15498 return true;
15501 /* Return a string giving the keyword associate with CODE. */
15503 static const char *
15504 tag_name (enum tag_types code)
15506 switch (code)
15508 case record_type:
15509 return "struct";
15510 case class_type:
15511 return "class";
15512 case union_type:
15513 return "union";
15514 case enum_type:
15515 return "enum";
15516 case typename_type:
15517 return "typename";
15518 default:
15519 gcc_unreachable ();
15523 /* Name lookup in an elaborated-type-specifier (after the keyword
15524 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
15525 elaborated-type-specifier is invalid, issue a diagnostic and return
15526 error_mark_node; otherwise, return the *_TYPE to which it referred.
15527 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
15529 tree
15530 check_elaborated_type_specifier (enum tag_types tag_code,
15531 tree decl,
15532 bool allow_template_p)
15534 tree type;
15536 /* In the case of:
15538 struct S { struct S *p; };
15540 name lookup will find the TYPE_DECL for the implicit "S::S"
15541 typedef. Adjust for that here. */
15542 if (DECL_SELF_REFERENCE_P (decl))
15543 decl = TYPE_NAME (TREE_TYPE (decl));
15545 type = TREE_TYPE (decl);
15547 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
15548 is false for this case as well. */
15549 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
15551 error ("using template type parameter %qT after %qs",
15552 type, tag_name (tag_code));
15553 return error_mark_node;
15555 /* Accept template template parameters. */
15556 else if (allow_template_p
15557 && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
15558 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
15560 /* [dcl.type.elab]
15562 If the identifier resolves to a typedef-name or the
15563 simple-template-id resolves to an alias template
15564 specialization, the elaborated-type-specifier is ill-formed.
15566 In other words, the only legitimate declaration to use in the
15567 elaborated type specifier is the implicit typedef created when
15568 the type is declared. */
15569 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
15570 && !DECL_SELF_REFERENCE_P (decl)
15571 && tag_code != typename_type)
15573 if (alias_template_specialization_p (type, nt_opaque))
15574 error ("using alias template specialization %qT after %qs",
15575 type, tag_name (tag_code));
15576 else
15577 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
15578 inform (DECL_SOURCE_LOCATION (decl),
15579 "%qD has a previous declaration here", decl);
15580 return error_mark_node;
15582 else if (TREE_CODE (type) != RECORD_TYPE
15583 && TREE_CODE (type) != UNION_TYPE
15584 && tag_code != enum_type
15585 && tag_code != typename_type)
15587 error ("%qT referred to as %qs", type, tag_name (tag_code));
15588 inform (location_of (type), "%qT has a previous declaration here", type);
15589 return error_mark_node;
15591 else if (TREE_CODE (type) != ENUMERAL_TYPE
15592 && tag_code == enum_type)
15594 error ("%qT referred to as enum", type);
15595 inform (location_of (type), "%qT has a previous declaration here", type);
15596 return error_mark_node;
15598 else if (!allow_template_p
15599 && TREE_CODE (type) == RECORD_TYPE
15600 && CLASSTYPE_IS_TEMPLATE (type))
15602 /* If a class template appears as elaborated type specifier
15603 without a template header such as:
15605 template <class T> class C {};
15606 void f(class C); // No template header here
15608 then the required template argument is missing. */
15609 error ("template argument required for %<%s %T%>",
15610 tag_name (tag_code),
15611 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
15612 return error_mark_node;
15615 return type;
15618 /* Lookup NAME of an elaborated type specifier according to SCOPE and
15619 issue diagnostics if necessary. Return *_TYPE node upon success,
15620 NULL_TREE when the NAME is not found, and ERROR_MARK_NODE for type
15621 error. */
15623 static tree
15624 lookup_and_check_tag (enum tag_types tag_code, tree name,
15625 TAG_how how, bool template_header_p)
15627 tree decl;
15628 if (how == TAG_how::GLOBAL)
15630 /* First try ordinary name lookup, ignoring hidden class name
15631 injected via friend declaration. */
15632 decl = lookup_name (name, LOOK_want::TYPE);
15633 decl = strip_using_decl (decl);
15634 /* If that fails, the name will be placed in the smallest
15635 non-class, non-function-prototype scope according to 3.3.1/5.
15636 We may already have a hidden name declared as friend in this
15637 scope. So lookup again but not ignoring hidden names.
15638 If we find one, that name will be made visible rather than
15639 creating a new tag. */
15640 if (!decl)
15641 decl = lookup_elaborated_type (name, TAG_how::INNERMOST_NON_CLASS);
15643 else
15644 decl = lookup_elaborated_type (name, how);
15646 if (!decl)
15647 /* We found nothing. */
15648 return NULL_TREE;
15650 if (TREE_CODE (decl) == TREE_LIST)
15652 error ("reference to %qD is ambiguous", name);
15653 print_candidates (decl);
15654 return error_mark_node;
15657 if (DECL_CLASS_TEMPLATE_P (decl)
15658 && !template_header_p
15659 && how == TAG_how::CURRENT_ONLY)
15661 error ("class template %qD redeclared as non-template", name);
15662 inform (location_of (decl), "previous declaration here");
15663 CLASSTYPE_ERRONEOUS (TREE_TYPE (decl)) = true;
15664 return error_mark_node;
15667 if (DECL_CLASS_TEMPLATE_P (decl)
15668 /* If scope is TAG_how::CURRENT_ONLY we're defining a class,
15669 so ignore a template template parameter. */
15670 || (how != TAG_how::CURRENT_ONLY && DECL_TEMPLATE_TEMPLATE_PARM_P (decl)))
15671 decl = DECL_TEMPLATE_RESULT (decl);
15673 if (TREE_CODE (decl) != TYPE_DECL)
15674 /* Found not-a-type. */
15675 return NULL_TREE;
15677 /* Look for invalid nested type:
15678 class C {
15679 class C {};
15680 }; */
15681 if (how == TAG_how::CURRENT_ONLY && DECL_SELF_REFERENCE_P (decl))
15683 error ("%qD has the same name as the class in which it is "
15684 "declared", decl);
15685 return error_mark_node;
15688 /* Two cases we need to consider when deciding if a class
15689 template is allowed as an elaborated type specifier:
15690 1. It is a self reference to its own class.
15691 2. It comes with a template header.
15693 For example:
15695 template <class T> class C {
15696 class C *c1; // DECL_SELF_REFERENCE_P is true
15697 class D;
15699 template <class U> class C; // template_header_p is true
15700 template <class T> class C<T>::D {
15701 class C *c2; // DECL_SELF_REFERENCE_P is true
15702 }; */
15704 tree t = check_elaborated_type_specifier (tag_code, decl,
15705 template_header_p
15706 | DECL_SELF_REFERENCE_P (decl));
15707 if (template_header_p && t && CLASS_TYPE_P (t)
15708 && (!CLASSTYPE_TEMPLATE_INFO (t)
15709 || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))))
15711 error ("%qT is not a template", t);
15712 inform (location_of (t), "previous declaration here");
15713 if (TYPE_CLASS_SCOPE_P (t)
15714 && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t)))
15715 inform (input_location,
15716 "perhaps you want to explicitly add %<%T::%>",
15717 TYPE_CONTEXT (t));
15718 return error_mark_node;
15721 return t;
15724 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
15725 Define the tag as a forward-reference if it is not defined.
15727 If a declaration is given, process it here, and report an error if
15728 multiple declarations are not identical.
15730 SCOPE is TS_CURRENT when this is also a definition. Only look in
15731 the current frame for the name (since C++ allows new names in any
15732 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
15733 declaration. Only look beginning from the current scope outward up
15734 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
15736 TEMPLATE_HEADER_P is true when this declaration is preceded by
15737 a set of template parameters. */
15739 tree
15740 xref_tag (enum tag_types tag_code, tree name,
15741 TAG_how how, bool template_header_p)
15743 enum tree_code code;
15744 tree context = NULL_TREE;
15746 auto_cond_timevar tv (TV_NAME_LOOKUP);
15748 gcc_assert (identifier_p (name));
15750 switch (tag_code)
15752 case record_type:
15753 case class_type:
15754 code = RECORD_TYPE;
15755 break;
15756 case union_type:
15757 code = UNION_TYPE;
15758 break;
15759 case enum_type:
15760 code = ENUMERAL_TYPE;
15761 break;
15762 default:
15763 gcc_unreachable ();
15766 /* In case of anonymous name, xref_tag is only called to
15767 make type node and push name. Name lookup is not required. */
15768 tree t = NULL_TREE;
15769 if (!IDENTIFIER_ANON_P (name))
15770 t = lookup_and_check_tag (tag_code, name, how, template_header_p);
15772 if (t == error_mark_node)
15773 return error_mark_node;
15775 if (how != TAG_how::CURRENT_ONLY && t && current_class_type
15776 && template_class_depth (current_class_type)
15777 && template_header_p)
15779 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
15780 return t;
15782 /* Since HOW is not TAG_how::CURRENT_ONLY, we are not looking at
15783 a definition of this tag. Since, in addition, we are
15784 currently processing a (member) template declaration of a
15785 template class, we must be very careful; consider:
15787 template <class X> struct S1
15789 template <class U> struct S2
15791 template <class V> friend struct S1;
15794 Here, the S2::S1 declaration should not be confused with the
15795 outer declaration. In particular, the inner version should
15796 have a template parameter of level 2, not level 1.
15798 On the other hand, when presented with:
15800 template <class T> struct S1
15802 template <class U> struct S2 {};
15803 template <class U> friend struct S2;
15806 the friend must find S1::S2 eventually. We accomplish this
15807 by making sure that the new type we create to represent this
15808 declaration has the right TYPE_CONTEXT. */
15809 context = TYPE_CONTEXT (t);
15810 t = NULL_TREE;
15813 if (! t)
15815 /* If no such tag is yet defined, create a forward-reference node
15816 and record it as the "definition".
15817 When a real declaration of this type is found,
15818 the forward-reference will be altered into a real type. */
15819 if (code == ENUMERAL_TYPE)
15821 error ("use of enum %q#D without previous declaration", name);
15822 return error_mark_node;
15825 t = make_class_type (code);
15826 TYPE_CONTEXT (t) = context;
15827 if (IDENTIFIER_LAMBDA_P (name))
15828 /* Mark it as a lambda type right now. Our caller will
15829 correct the value. */
15830 CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
15831 t = pushtag (name, t, how);
15833 else
15835 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
15837 /* Check that we aren't trying to overload a class with different
15838 constraints. */
15839 tree constr = NULL_TREE;
15840 if (current_template_parms)
15842 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
15843 constr = build_constraints (reqs, NULL_TREE);
15845 if (!redeclare_class_template (t, current_template_parms, constr))
15846 return error_mark_node;
15848 else if (!processing_template_decl
15849 && CLASS_TYPE_P (t)
15850 && CLASSTYPE_IS_TEMPLATE (t))
15852 error ("redeclaration of %qT as a non-template", t);
15853 inform (location_of (t), "previous declaration %qD", t);
15854 return error_mark_node;
15857 if (modules_p ()
15858 && how == TAG_how::CURRENT_ONLY)
15860 tree decl = TYPE_NAME (t);
15861 if (!module_may_redeclare (decl))
15863 error ("cannot declare %qD in a different module", decl);
15864 inform (DECL_SOURCE_LOCATION (decl), "declared here");
15865 return error_mark_node;
15868 tree maybe_tmpl = decl;
15869 if (CLASS_TYPE_P (t) && CLASSTYPE_IS_TEMPLATE (t))
15870 maybe_tmpl = CLASSTYPE_TI_TEMPLATE (t);
15872 if (DECL_LANG_SPECIFIC (decl)
15873 && DECL_MODULE_IMPORT_P (decl)
15874 && TREE_CODE (CP_DECL_CONTEXT (decl)) == NAMESPACE_DECL)
15876 /* Push it into this TU's symbol slot. */
15877 gcc_checking_assert (current_namespace == CP_DECL_CONTEXT (decl));
15878 if (maybe_tmpl != decl)
15879 /* We're in the template parm binding level.
15880 Pushtag has logic to slide under that, but we're
15881 not pushing a *new* type. */
15882 push_nested_namespace (CP_DECL_CONTEXT (decl));
15884 pushdecl (maybe_tmpl);
15885 if (maybe_tmpl != decl)
15886 pop_nested_namespace (CP_DECL_CONTEXT (decl));
15889 set_instantiating_module (maybe_tmpl);
15893 return t;
15896 /* Create the binfo hierarchy for REF with (possibly NULL) base list
15897 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
15898 access_* node, and the TREE_VALUE is the type of the base-class.
15899 Non-NULL TREE_TYPE indicates virtual inheritance. */
15901 void
15902 xref_basetypes (tree ref, tree base_list)
15904 tree *basep;
15905 tree binfo, base_binfo;
15906 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
15907 unsigned max_bases = 0; /* Maximum direct bases. */
15908 unsigned max_dvbases = 0; /* Maximum direct virtual bases. */
15909 int i;
15910 tree default_access;
15911 tree igo_prev; /* Track Inheritance Graph Order. */
15913 if (ref == error_mark_node)
15914 return;
15916 /* The base of a derived class is private by default, all others are
15917 public. */
15918 default_access = (TREE_CODE (ref) == RECORD_TYPE
15919 && CLASSTYPE_DECLARED_CLASS (ref)
15920 ? access_private_node : access_public_node);
15922 /* First, make sure that any templates in base-classes are
15923 instantiated. This ensures that if we call ourselves recursively
15924 we do not get confused about which classes are marked and which
15925 are not. */
15926 basep = &base_list;
15927 while (*basep)
15929 tree basetype = TREE_VALUE (*basep);
15931 /* The dependent_type_p call below should really be dependent_scope_p
15932 so that we give a hard error about using an incomplete type as a
15933 base, but we allow it with a pedwarn for backward
15934 compatibility. */
15935 if (processing_template_decl
15936 && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
15937 cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
15938 if (!dependent_type_p (basetype)
15939 && !complete_type_or_else (basetype, NULL))
15940 /* An incomplete type. Remove it from the list. */
15941 *basep = TREE_CHAIN (*basep);
15942 else
15944 max_bases++;
15945 if (TREE_TYPE (*basep))
15946 max_dvbases++;
15947 if (CLASS_TYPE_P (basetype))
15948 max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
15949 basep = &TREE_CHAIN (*basep);
15952 max_vbases += max_dvbases;
15954 TYPE_MARKED_P (ref) = 1;
15956 /* The binfo slot should be empty, unless this is an (ill-formed)
15957 redefinition. */
15958 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
15960 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
15962 binfo = make_tree_binfo (max_bases);
15964 TYPE_BINFO (ref) = binfo;
15965 BINFO_OFFSET (binfo) = size_zero_node;
15966 BINFO_TYPE (binfo) = ref;
15968 /* Apply base-class info set up to the variants of this type. */
15969 fixup_type_variants (ref);
15971 if (max_bases)
15973 vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
15974 /* A C++98 POD cannot have base classes. */
15975 CLASSTYPE_NON_LAYOUT_POD_P (ref) = true;
15977 if (TREE_CODE (ref) == UNION_TYPE)
15979 error ("derived union %qT invalid", ref);
15980 return;
15984 if (max_bases > 1)
15985 warning (OPT_Wmultiple_inheritance,
15986 "%qT defined with multiple direct bases", ref);
15988 if (max_vbases)
15990 /* An aggregate can't have virtual base classes. */
15991 CLASSTYPE_NON_AGGREGATE (ref) = true;
15993 vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
15995 if (max_dvbases)
15996 warning (OPT_Wvirtual_inheritance,
15997 "%qT defined with direct virtual base", ref);
16000 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
16002 tree access = TREE_PURPOSE (base_list);
16003 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
16004 tree basetype = TREE_VALUE (base_list);
16006 if (access == access_default_node)
16007 access = default_access;
16009 /* Before C++17, an aggregate cannot have base classes. In C++17, an
16010 aggregate can't have virtual, private, or protected base classes. */
16011 if (cxx_dialect < cxx17
16012 || access != access_public_node
16013 || via_virtual)
16014 CLASSTYPE_NON_AGGREGATE (ref) = true;
16016 if (PACK_EXPANSION_P (basetype))
16017 basetype = PACK_EXPANSION_PATTERN (basetype);
16018 if (TREE_CODE (basetype) == TYPE_DECL)
16019 basetype = TREE_TYPE (basetype);
16020 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
16022 error ("base type %qT fails to be a struct or class type",
16023 basetype);
16024 goto dropped_base;
16027 base_binfo = NULL_TREE;
16028 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
16030 base_binfo = TYPE_BINFO (basetype);
16031 /* The original basetype could have been a typedef'd type. */
16032 basetype = BINFO_TYPE (base_binfo);
16034 /* Inherit flags from the base. */
16035 TYPE_HAS_NEW_OPERATOR (ref)
16036 |= TYPE_HAS_NEW_OPERATOR (basetype);
16037 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
16038 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
16039 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
16040 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
16041 CLASSTYPE_DIAMOND_SHAPED_P (ref)
16042 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
16043 CLASSTYPE_REPEATED_BASE_P (ref)
16044 |= CLASSTYPE_REPEATED_BASE_P (basetype);
16047 /* We must do this test after we've seen through a typedef
16048 type. */
16049 if (TYPE_MARKED_P (basetype))
16051 if (basetype == ref)
16052 error ("recursive type %qT undefined", basetype);
16053 else
16054 error ("duplicate base type %qT invalid", basetype);
16055 goto dropped_base;
16058 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
16059 /* Regenerate the pack expansion for the bases. */
16060 basetype = make_pack_expansion (basetype);
16062 TYPE_MARKED_P (basetype) = 1;
16064 base_binfo = copy_binfo (base_binfo, basetype, ref,
16065 &igo_prev, via_virtual);
16066 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
16067 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
16069 BINFO_BASE_APPEND (binfo, base_binfo);
16070 BINFO_BASE_ACCESS_APPEND (binfo, access);
16071 continue;
16073 dropped_base:
16074 /* Update max_vbases to reflect the reality that we are dropping
16075 this base: if it reaches zero we want to undo the vec_alloc
16076 above to avoid inconsistencies during error-recovery: eg, in
16077 build_special_member_call, CLASSTYPE_VBASECLASSES non null
16078 and vtt null (c++/27952). */
16079 if (via_virtual)
16080 max_vbases--;
16081 if (CLASS_TYPE_P (basetype))
16082 max_vbases
16083 -= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
16086 if (CLASSTYPE_VBASECLASSES (ref)
16087 && max_vbases == 0)
16088 vec_free (CLASSTYPE_VBASECLASSES (ref));
16090 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
16091 /* If we didn't get max_vbases vbases, we must have shared at
16092 least one of them, and are therefore diamond shaped. */
16093 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
16095 /* Unmark all the types. */
16096 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
16097 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
16098 TYPE_MARKED_P (ref) = 0;
16100 /* Now see if we have a repeated base type. */
16101 if (!CLASSTYPE_REPEATED_BASE_P (ref))
16103 for (base_binfo = binfo; base_binfo;
16104 base_binfo = TREE_CHAIN (base_binfo))
16106 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
16108 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
16109 break;
16111 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
16113 for (base_binfo = binfo; base_binfo;
16114 base_binfo = TREE_CHAIN (base_binfo))
16115 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
16116 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
16117 else
16118 break;
16123 /* Copies the enum-related properties from type SRC to type DST.
16124 Used with the underlying type of an enum and the enum itself. */
16125 static void
16126 copy_type_enum (tree dst, tree src)
16128 tree t;
16129 for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
16131 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
16132 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
16133 TYPE_SIZE (t) = TYPE_SIZE (src);
16134 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
16135 SET_TYPE_MODE (dst, TYPE_MODE (src));
16136 TYPE_PRECISION (t) = TYPE_PRECISION (src);
16137 unsigned valign = TYPE_ALIGN (src);
16138 if (TYPE_USER_ALIGN (t))
16139 valign = MAX (valign, TYPE_ALIGN (t));
16140 else
16141 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
16142 SET_TYPE_ALIGN (t, valign);
16143 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
16147 /* Begin compiling the definition of an enumeration type.
16148 NAME is its name,
16150 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
16152 UNDERLYING_TYPE is the type that will be used as the storage for
16153 the enumeration type. This should be NULL_TREE if no storage type
16154 was specified.
16156 ATTRIBUTES are any attributes specified after the enum-key.
16158 SCOPED_ENUM_P is true if this is a scoped enumeration type.
16160 if IS_NEW is not NULL, gets TRUE iff a new type is created.
16162 Returns the type object, as yet incomplete.
16163 Also records info about it so that build_enumerator
16164 may be used to declare the individual values as they are read. */
16166 tree
16167 start_enum (tree name, tree enumtype, tree underlying_type,
16168 tree attributes, bool scoped_enum_p, bool *is_new)
16170 tree prevtype = NULL_TREE;
16171 gcc_assert (identifier_p (name));
16173 if (is_new)
16174 *is_new = false;
16175 /* [C++0x dcl.enum]p5:
16177 If not explicitly specified, the underlying type of a scoped
16178 enumeration type is int. */
16179 if (!underlying_type && scoped_enum_p)
16180 underlying_type = integer_type_node;
16182 if (underlying_type)
16183 underlying_type = cv_unqualified (underlying_type);
16185 /* If this is the real definition for a previous forward reference,
16186 fill in the contents in the same object that used to be the
16187 forward reference. */
16188 if (!enumtype)
16189 enumtype = lookup_and_check_tag (enum_type, name,
16190 /*tag_scope=*/TAG_how::CURRENT_ONLY,
16191 /*template_header_p=*/false);
16193 /* In case of a template_decl, the only check that should be deferred
16194 to instantiation time is the comparison of underlying types. */
16195 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
16197 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
16199 error_at (input_location, "scoped/unscoped mismatch "
16200 "in enum %q#T", enumtype);
16201 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
16202 "previous definition here");
16203 enumtype = error_mark_node;
16205 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
16207 error_at (input_location, "underlying type mismatch "
16208 "in enum %q#T", enumtype);
16209 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
16210 "previous definition here");
16211 enumtype = error_mark_node;
16213 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
16214 && !same_type_p (underlying_type,
16215 ENUM_UNDERLYING_TYPE (enumtype)))
16217 error_at (input_location, "different underlying type "
16218 "in enum %q#T", enumtype);
16219 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
16220 "previous definition here");
16221 underlying_type = NULL_TREE;
16224 if (modules_p ())
16226 if (!module_may_redeclare (TYPE_NAME (enumtype)))
16228 error ("cannot define %qD in different module",
16229 TYPE_NAME (enumtype));
16230 inform (DECL_SOURCE_LOCATION (TYPE_NAME (enumtype)),
16231 "declared here");
16232 enumtype = error_mark_node;
16234 set_instantiating_module (TYPE_NAME (enumtype));
16238 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
16239 || processing_template_decl)
16241 /* In case of error, make a dummy enum to allow parsing to
16242 continue. */
16243 if (enumtype == error_mark_node)
16245 name = make_anon_name ();
16246 enumtype = NULL_TREE;
16249 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
16250 of an opaque enum, or an opaque enum of an already defined
16251 enumeration (C++11).
16252 In any other case, it'll be NULL_TREE. */
16253 if (!enumtype)
16255 if (is_new)
16256 *is_new = true;
16258 prevtype = enumtype;
16260 /* Do not push the decl more than once. */
16261 if (!enumtype
16262 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
16264 enumtype = cxx_make_type (ENUMERAL_TYPE);
16265 enumtype = pushtag (name, enumtype);
16267 /* std::byte aliases anything. */
16268 if (enumtype != error_mark_node
16269 && TYPE_CONTEXT (enumtype) == std_node
16270 && !strcmp ("byte", TYPE_NAME_STRING (enumtype)))
16271 TYPE_ALIAS_SET (enumtype) = 0;
16273 else
16274 enumtype = xref_tag (enum_type, name);
16276 if (enumtype == error_mark_node)
16277 return error_mark_node;
16279 /* The enum is considered opaque until the opening '{' of the
16280 enumerator list. */
16281 SET_OPAQUE_ENUM_P (enumtype, true);
16282 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
16285 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
16287 cplus_decl_attributes (&enumtype, attributes, (int)ATTR_FLAG_TYPE_IN_PLACE);
16289 if (underlying_type)
16291 if (ENUM_UNDERLYING_TYPE (enumtype))
16292 /* We already checked that it matches, don't change it to a different
16293 typedef variant. */;
16294 else if (CP_INTEGRAL_TYPE_P (underlying_type))
16296 copy_type_enum (enumtype, underlying_type);
16297 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
16299 else if (dependent_type_p (underlying_type))
16300 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
16301 else
16302 error ("underlying type %qT of %qT must be an integral type",
16303 underlying_type, enumtype);
16306 /* If into a template class, the returned enum is always the first
16307 declaration (opaque or not) seen. This way all the references to
16308 this type will be to the same declaration. The following ones are used
16309 only to check for definition errors. */
16310 if (prevtype && processing_template_decl)
16311 return prevtype;
16312 else
16313 return enumtype;
16316 /* After processing and defining all the values of an enumeration type,
16317 install their decls in the enumeration type.
16318 ENUMTYPE is the type object. */
16320 void
16321 finish_enum_value_list (tree enumtype)
16323 tree values;
16324 tree underlying_type;
16325 tree decl;
16326 tree value;
16327 tree minnode, maxnode;
16328 tree t;
16330 bool fixed_underlying_type_p
16331 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
16333 /* We built up the VALUES in reverse order. */
16334 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
16336 /* For an enum defined in a template, just set the type of the values;
16337 all further processing is postponed until the template is
16338 instantiated. We need to set the type so that tsubst of a CONST_DECL
16339 works. */
16340 if (processing_template_decl)
16342 for (values = TYPE_VALUES (enumtype);
16343 values;
16344 values = TREE_CHAIN (values))
16345 TREE_TYPE (TREE_VALUE (values)) = enumtype;
16346 return;
16349 /* Determine the minimum and maximum values of the enumerators. */
16350 if (TYPE_VALUES (enumtype))
16352 minnode = maxnode = NULL_TREE;
16354 for (values = TYPE_VALUES (enumtype);
16355 values;
16356 values = TREE_CHAIN (values))
16358 decl = TREE_VALUE (values);
16360 /* [dcl.enum]: Following the closing brace of an enum-specifier,
16361 each enumerator has the type of its enumeration. Prior to the
16362 closing brace, the type of each enumerator is the type of its
16363 initializing value. */
16364 TREE_TYPE (decl) = enumtype;
16366 /* Update the minimum and maximum values, if appropriate. */
16367 value = DECL_INITIAL (decl);
16368 if (TREE_CODE (value) != INTEGER_CST)
16369 value = integer_zero_node;
16370 /* Figure out what the minimum and maximum values of the
16371 enumerators are. */
16372 if (!minnode)
16373 minnode = maxnode = value;
16374 else if (tree_int_cst_lt (maxnode, value))
16375 maxnode = value;
16376 else if (tree_int_cst_lt (value, minnode))
16377 minnode = value;
16380 else
16381 /* [dcl.enum]
16383 If the enumerator-list is empty, the underlying type is as if
16384 the enumeration had a single enumerator with value 0. */
16385 minnode = maxnode = integer_zero_node;
16387 if (!fixed_underlying_type_p)
16389 /* Compute the number of bits require to represent all values of the
16390 enumeration. We must do this before the type of MINNODE and
16391 MAXNODE are transformed, since tree_int_cst_min_precision relies
16392 on the TREE_TYPE of the value it is passed. */
16393 signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
16394 int lowprec = tree_int_cst_min_precision (minnode, sgn);
16395 int highprec = tree_int_cst_min_precision (maxnode, sgn);
16396 int precision = MAX (lowprec, highprec);
16397 unsigned int itk;
16398 bool use_short_enum;
16400 /* Determine the underlying type of the enumeration.
16402 [dcl.enum]
16404 The underlying type of an enumeration is an integral type that
16405 can represent all the enumerator values defined in the
16406 enumeration. It is implementation-defined which integral type is
16407 used as the underlying type for an enumeration except that the
16408 underlying type shall not be larger than int unless the value of
16409 an enumerator cannot fit in an int or unsigned int.
16411 We use "int" or an "unsigned int" as the underlying type, even if
16412 a smaller integral type would work, unless the user has
16413 explicitly requested that we use the smallest possible type. The
16414 user can request that for all enumerations with a command line
16415 flag, or for just one enumeration with an attribute. */
16417 use_short_enum = flag_short_enums
16418 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
16420 /* If the precision of the type was specified with an attribute and it
16421 was too small, give an error. Otherwise, use it. */
16422 if (TYPE_PRECISION (enumtype))
16424 if (precision > TYPE_PRECISION (enumtype))
16425 error ("specified mode too small for enumerated values");
16426 else
16428 use_short_enum = true;
16429 precision = TYPE_PRECISION (enumtype);
16433 for (itk = (use_short_enum ? itk_char : itk_int);
16434 itk != itk_none;
16435 itk++)
16437 underlying_type = integer_types[itk];
16438 if (underlying_type != NULL_TREE
16439 && TYPE_PRECISION (underlying_type) >= precision
16440 && TYPE_SIGN (underlying_type) == sgn)
16441 break;
16443 if (itk == itk_none)
16445 /* DR 377
16447 IF no integral type can represent all the enumerator values, the
16448 enumeration is ill-formed. */
16449 error ("no integral type can represent all of the enumerator values "
16450 "for %qT", enumtype);
16451 precision = TYPE_PRECISION (long_long_integer_type_node);
16452 underlying_type = integer_types[itk_unsigned_long_long];
16455 /* [dcl.enum]
16457 The value of sizeof() applied to an enumeration type, an object
16458 of an enumeration type, or an enumerator, is the value of sizeof()
16459 applied to the underlying type. */
16460 copy_type_enum (enumtype, underlying_type);
16462 /* Compute the minimum and maximum values for the type.
16464 [dcl.enum]
16466 For an enumeration where emin is the smallest enumerator and emax
16467 is the largest, the values of the enumeration are the values of the
16468 underlying type in the range bmin to bmax, where bmin and bmax are,
16469 respectively, the smallest and largest values of the smallest bit-
16470 field that can store emin and emax. */
16472 /* The middle-end currently assumes that types with TYPE_PRECISION
16473 narrower than their underlying type are suitably zero or sign
16474 extended to fill their mode. Similarly, it assumes that the front
16475 end assures that a value of a particular type must be within
16476 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
16478 We used to set these fields based on bmin and bmax, but that led
16479 to invalid assumptions like optimizing away bounds checking. So
16480 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
16481 TYPE_MAX_VALUE to the values for the mode above and only restrict
16482 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
16483 ENUM_UNDERLYING_TYPE (enumtype)
16484 = build_distinct_type_copy (underlying_type);
16485 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
16486 set_min_and_max_values_for_integral_type
16487 (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
16489 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
16490 if (flag_strict_enums)
16491 set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
16493 else
16494 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
16496 /* If the enum is exported, mark the consts too. */
16497 bool export_p = (UNSCOPED_ENUM_P (enumtype)
16498 && DECL_MODULE_EXPORT_P (TYPE_STUB_DECL (enumtype))
16499 && at_namespace_scope_p ());
16501 /* Convert each of the enumerators to the type of the underlying
16502 type of the enumeration. */
16503 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
16505 decl = TREE_VALUE (values);
16506 iloc_sentinel ils (DECL_SOURCE_LOCATION (decl));
16507 if (fixed_underlying_type_p)
16508 /* If the enumeration type has a fixed underlying type, we
16509 already checked all of the enumerator values. */
16510 value = DECL_INITIAL (decl);
16511 else
16512 value = perform_implicit_conversion (underlying_type,
16513 DECL_INITIAL (decl),
16514 tf_warning_or_error);
16515 /* Do not clobber shared ints. */
16516 if (value != error_mark_node)
16518 value = copy_node (value);
16520 TREE_TYPE (value) = enumtype;
16522 DECL_INITIAL (decl) = value;
16523 if (export_p)
16524 DECL_MODULE_EXPORT_P (decl) = true;
16527 /* Fix up all variant types of this enum type. */
16528 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
16529 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
16531 if (at_class_scope_p ()
16532 && COMPLETE_TYPE_P (current_class_type)
16533 && UNSCOPED_ENUM_P (enumtype))
16535 insert_late_enum_def_bindings (current_class_type, enumtype);
16536 /* TYPE_FIELDS needs fixup. */
16537 fixup_type_variants (current_class_type);
16540 /* Finish debugging output for this type. */
16541 rest_of_type_compilation (enumtype, namespace_bindings_p ());
16543 /* Each enumerator now has the type of its enumeration. Clear the cache
16544 so that this change in types doesn't confuse us later on. */
16545 clear_cv_and_fold_caches ();
16548 /* Finishes the enum type. This is called only the first time an
16549 enumeration is seen, be it opaque or odinary.
16550 ENUMTYPE is the type object. */
16552 void
16553 finish_enum (tree enumtype)
16555 if (processing_template_decl)
16557 if (at_function_scope_p ())
16558 add_stmt (build_min (TAG_DEFN, enumtype));
16559 return;
16562 /* If this is a forward declaration, there should not be any variants,
16563 though we can get a variant in the middle of an enum-specifier with
16564 wacky code like 'enum E { e = sizeof(const E*) };' */
16565 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
16566 && (TYPE_VALUES (enumtype)
16567 || !TYPE_NEXT_VARIANT (enumtype)));
16570 /* Build and install a CONST_DECL for an enumeration constant of the
16571 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
16572 Apply ATTRIBUTES if available. LOC is the location of NAME.
16573 Assignment of sequential values by default is handled here. */
16575 tree
16576 build_enumerator (tree name, tree value, tree enumtype, tree attributes,
16577 location_t loc)
16579 tree decl;
16580 tree context;
16581 tree type;
16583 /* scalar_constant_value will pull out this expression, so make sure
16584 it's folded as appropriate. */
16585 if (processing_template_decl)
16586 value = fold_non_dependent_expr (value);
16588 /* If the VALUE was erroneous, pretend it wasn't there; that will
16589 result in the enum being assigned the next value in sequence. */
16590 if (value == error_mark_node)
16591 value = NULL_TREE;
16593 /* Remove no-op casts from the value. */
16594 if (value)
16595 STRIP_TYPE_NOPS (value);
16597 if (! processing_template_decl)
16599 /* Validate and default VALUE. */
16600 if (value != NULL_TREE)
16602 if (!ENUM_UNDERLYING_TYPE (enumtype))
16604 tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
16605 value, true);
16606 if (tmp_value)
16607 value = tmp_value;
16609 else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
16610 (TREE_TYPE (value)))
16611 value = perform_implicit_conversion_flags
16612 (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
16613 LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
16615 if (value == error_mark_node)
16616 value = NULL_TREE;
16618 if (value != NULL_TREE)
16620 if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
16621 (TREE_TYPE (value)))
16623 error_at (cp_expr_loc_or_input_loc (value),
16624 "enumerator value for %qD must have integral or "
16625 "unscoped enumeration type", name);
16626 value = NULL_TREE;
16628 else
16630 value = cxx_constant_value (value);
16632 if (TREE_CODE (value) != INTEGER_CST)
16634 error ("enumerator value for %qD is not an integer "
16635 "constant", name);
16636 value = NULL_TREE;
16642 /* Default based on previous value. */
16643 if (value == NULL_TREE)
16645 if (TYPE_VALUES (enumtype))
16647 tree prev_value;
16649 /* C++03 7.2/4: If no initializer is specified for the first
16650 enumerator, the type is an unspecified integral
16651 type. Otherwise the type is the same as the type of the
16652 initializing value of the preceding enumerator unless the
16653 incremented value is not representable in that type, in
16654 which case the type is an unspecified integral type
16655 sufficient to contain the incremented value. */
16656 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
16657 if (TREE_CODE (prev_value) != INTEGER_CST)
16658 value = error_mark_node;
16659 else
16661 wi::overflow_type overflowed;
16662 tree type = TREE_TYPE (prev_value);
16663 signop sgn = TYPE_SIGN (type);
16664 widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
16665 &overflowed);
16666 if (!overflowed)
16668 bool pos = !wi::neg_p (wi, sgn);
16669 if (!wi::fits_to_tree_p (wi, type))
16671 unsigned int itk;
16672 for (itk = itk_int; itk != itk_none; itk++)
16674 type = integer_types[itk];
16675 if (type != NULL_TREE
16676 && (pos || !TYPE_UNSIGNED (type))
16677 && wi::fits_to_tree_p (wi, type))
16678 break;
16680 if (type && cxx_dialect < cxx11
16681 && itk > itk_unsigned_long)
16682 pedwarn (input_location, OPT_Wlong_long,
16683 pos ? G_("\
16684 incremented enumerator value is too large for %<unsigned long%>") : G_("\
16685 incremented enumerator value is too large for %<long%>"));
16687 if (type == NULL_TREE)
16688 overflowed = wi::OVF_UNKNOWN;
16689 else
16690 value = wide_int_to_tree (type, wi);
16693 if (overflowed)
16695 error ("overflow in enumeration values at %qD", name);
16696 value = error_mark_node;
16700 else
16701 value = integer_zero_node;
16704 /* Remove no-op casts from the value. */
16705 STRIP_TYPE_NOPS (value);
16707 /* If the underlying type of the enum is fixed, check whether
16708 the enumerator values fits in the underlying type. If it
16709 does not fit, the program is ill-formed [C++0x dcl.enum]. */
16710 if (ENUM_UNDERLYING_TYPE (enumtype)
16711 && value
16712 && TREE_CODE (value) == INTEGER_CST)
16714 if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
16715 error ("enumerator value %qE is outside the range of underlying "
16716 "type %qT", value, ENUM_UNDERLYING_TYPE (enumtype));
16718 /* Convert the value to the appropriate type. */
16719 value = fold_convert (ENUM_UNDERLYING_TYPE (enumtype), value);
16723 /* C++ associates enums with global, function, or class declarations. */
16724 context = current_scope ();
16726 /* Build the actual enumeration constant. Note that the enumeration
16727 constants have the underlying type of the enum (if it is fixed)
16728 or the type of their initializer (if the underlying type of the
16729 enum is not fixed):
16731 [ C++0x dcl.enum ]
16733 If the underlying type is fixed, the type of each enumerator
16734 prior to the closing brace is the underlying type; if the
16735 initializing value of an enumerator cannot be represented by
16736 the underlying type, the program is ill-formed. If the
16737 underlying type is not fixed, the type of each enumerator is
16738 the type of its initializing value.
16740 If the underlying type is not fixed, it will be computed by
16741 finish_enum and we will reset the type of this enumerator. Of
16742 course, if we're processing a template, there may be no value. */
16743 type = value ? TREE_TYPE (value) : NULL_TREE;
16745 decl = build_decl (loc, CONST_DECL, name, type);
16747 DECL_CONTEXT (decl) = enumtype;
16748 TREE_CONSTANT (decl) = 1;
16749 TREE_READONLY (decl) = 1;
16750 DECL_INITIAL (decl) = value;
16752 if (attributes)
16753 cplus_decl_attributes (&decl, attributes, 0);
16755 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
16757 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
16758 on the TYPE_FIELDS list for `S'. (That's so that you can say
16759 things like `S::i' later.) */
16761 /* The enumerator may be getting declared outside of its enclosing
16762 class, like so:
16764 class S { public: enum E : int; }; enum S::E : int { i = 7; };
16766 For which case we need to make sure that the access of `S::i'
16767 matches the access of `S::E'. */
16768 auto cas = make_temp_override (current_access_specifier);
16769 set_current_access_from_decl (TYPE_NAME (enumtype));
16770 finish_member_declaration (decl);
16772 else
16773 pushdecl (decl);
16775 /* Add this enumeration constant to the list for this type. */
16776 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
16778 return decl;
16781 /* Look for an enumerator with the given NAME within the enumeration
16782 type ENUMTYPE. This routine is used primarily for qualified name
16783 lookup into an enumerator in C++0x, e.g.,
16785 enum class Color { Red, Green, Blue };
16787 Color color = Color::Red;
16789 Returns the value corresponding to the enumerator, or
16790 NULL_TREE if no such enumerator was found. */
16791 tree
16792 lookup_enumerator (tree enumtype, tree name)
16794 tree e;
16795 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
16797 e = purpose_member (name, TYPE_VALUES (enumtype));
16798 return e? TREE_VALUE (e) : NULL_TREE;
16801 /* Implement LANG_HOOKS_SIMULATE_ENUM_DECL. */
16803 tree
16804 cxx_simulate_enum_decl (location_t loc, const char *name,
16805 vec<string_int_pair> *values)
16807 location_t saved_loc = input_location;
16808 input_location = loc;
16810 tree enumtype = start_enum (get_identifier (name), NULL_TREE, NULL_TREE,
16811 NULL_TREE, false, NULL);
16812 if (!OPAQUE_ENUM_P (enumtype))
16814 error_at (loc, "multiple definition of %q#T", enumtype);
16815 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
16816 "previous definition here");
16817 return enumtype;
16819 SET_OPAQUE_ENUM_P (enumtype, false);
16820 DECL_SOURCE_LOCATION (TYPE_NAME (enumtype)) = loc;
16822 for (const string_int_pair &value : values)
16823 build_enumerator (get_identifier (value.first),
16824 build_int_cst (integer_type_node, value.second),
16825 enumtype, NULL_TREE, loc);
16827 finish_enum_value_list (enumtype);
16828 finish_enum (enumtype);
16830 input_location = saved_loc;
16831 return enumtype;
16834 /* Implement LANG_HOOKS_SIMULATE_RECORD_DECL. */
16836 tree
16837 cxx_simulate_record_decl (location_t loc, const char *name,
16838 array_slice<const tree> fields)
16840 iloc_sentinel ils (loc);
16842 tree ident = get_identifier (name);
16843 tree type = xref_tag (/*tag_code=*/record_type, ident);
16844 if (type != error_mark_node
16845 && (TREE_CODE (type) != RECORD_TYPE || COMPLETE_TYPE_P (type)))
16847 error ("redefinition of %q#T", type);
16848 type = error_mark_node;
16850 if (type == error_mark_node)
16851 return lhd_simulate_record_decl (loc, name, fields);
16853 xref_basetypes (type, NULL_TREE);
16854 type = begin_class_definition (type);
16855 if (type == error_mark_node)
16856 return lhd_simulate_record_decl (loc, name, fields);
16858 for (tree field : fields)
16859 finish_member_declaration (field);
16861 type = finish_struct (type, NULL_TREE);
16863 tree decl = build_decl (loc, TYPE_DECL, ident, type);
16864 set_underlying_type (decl);
16865 lang_hooks.decls.pushdecl (decl);
16867 return type;
16870 /* We're defining DECL. Make sure that its type is OK. */
16872 static void
16873 check_function_type (tree decl, tree current_function_parms)
16875 tree fntype = TREE_TYPE (decl);
16876 tree return_type = complete_type (TREE_TYPE (fntype));
16878 /* In a function definition, arg types must be complete. */
16879 require_complete_types_for_parms (current_function_parms);
16881 if (dependent_type_p (return_type)
16882 || type_uses_auto (return_type))
16883 return;
16884 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
16886 tree args = TYPE_ARG_TYPES (fntype);
16888 error ("return type %q#T is incomplete", return_type);
16890 /* Make it return void instead. */
16891 if (TREE_CODE (fntype) == METHOD_TYPE)
16892 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
16893 void_type_node,
16894 TREE_CHAIN (args));
16895 else
16896 fntype = build_function_type (void_type_node, args);
16897 fntype = (cp_build_type_attribute_variant
16898 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
16899 fntype = cxx_copy_lang_qualifiers (fntype, TREE_TYPE (decl));
16900 TREE_TYPE (decl) = fntype;
16902 else
16904 abstract_virtuals_error (decl, TREE_TYPE (fntype));
16905 maybe_warn_parm_abi (TREE_TYPE (fntype),
16906 DECL_SOURCE_LOCATION (decl));
16910 /* True iff FN is an implicitly-defined default constructor. */
16912 static bool
16913 implicit_default_ctor_p (tree fn)
16915 return (DECL_CONSTRUCTOR_P (fn)
16916 && !user_provided_p (fn)
16917 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)));
16920 /* Clobber the contents of *this to let the back end know that the object
16921 storage is dead when we enter the constructor or leave the destructor. */
16923 static tree
16924 build_clobber_this ()
16926 /* Clobbering an empty base is pointless, and harmful if its one byte
16927 TYPE_SIZE overlays real data. */
16928 if (is_empty_class (current_class_type))
16929 return void_node;
16931 /* If we have virtual bases, clobber the whole object, but only if we're in
16932 charge. If we don't have virtual bases, clobber the as-base type so we
16933 don't mess with tail padding. */
16934 bool vbases = CLASSTYPE_VBASECLASSES (current_class_type);
16936 tree ctype = current_class_type;
16937 if (!vbases)
16938 ctype = CLASSTYPE_AS_BASE (ctype);
16940 tree clobber = build_clobber (ctype);
16942 tree thisref = current_class_ref;
16943 if (ctype != current_class_type)
16945 thisref = build_nop (build_reference_type (ctype), current_class_ptr);
16946 thisref = convert_from_reference (thisref);
16949 tree exprstmt = build2 (MODIFY_EXPR, void_type_node, thisref, clobber);
16950 if (vbases)
16951 exprstmt = build_if_in_charge (exprstmt);
16953 return exprstmt;
16956 /* Create the FUNCTION_DECL for a function definition.
16957 DECLSPECS and DECLARATOR are the parts of the declaration;
16958 they describe the function's name and the type it returns,
16959 but twisted together in a fashion that parallels the syntax of C.
16961 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
16962 DECLARATOR is really the DECL for the function we are about to
16963 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
16964 indicating that the function is an inline defined in-class.
16966 This function creates a binding context for the function body
16967 as well as setting up the FUNCTION_DECL in current_function_decl.
16969 For C++, we must first check whether that datum makes any sense.
16970 For example, "class A local_a(1,2);" means that variable local_a
16971 is an aggregate of type A, which should have a constructor
16972 applied to it with the argument list [1, 2].
16974 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
16975 or may be a BLOCK if the function has been defined previously
16976 in this translation unit. On exit, DECL_INITIAL (decl1) will be
16977 error_mark_node if the function has never been defined, or
16978 a BLOCK if the function has been defined somewhere. */
16980 bool
16981 start_preparsed_function (tree decl1, tree attrs, int flags)
16983 tree ctype = NULL_TREE;
16984 bool doing_friend = false;
16986 /* Sanity check. */
16987 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
16988 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
16990 tree fntype = TREE_TYPE (decl1);
16991 if (TREE_CODE (fntype) == METHOD_TYPE)
16992 ctype = TYPE_METHOD_BASETYPE (fntype);
16993 else
16995 ctype = DECL_FRIEND_CONTEXT (decl1);
16997 if (ctype)
16998 doing_friend = true;
17001 if (DECL_DECLARED_INLINE_P (decl1)
17002 && lookup_attribute ("noinline", attrs))
17003 warning_at (DECL_SOURCE_LOCATION (decl1), 0,
17004 "inline function %qD given attribute %qs", decl1, "noinline");
17006 /* Handle gnu_inline attribute. */
17007 if (GNU_INLINE_P (decl1))
17009 DECL_EXTERNAL (decl1) = 1;
17010 DECL_NOT_REALLY_EXTERN (decl1) = 0;
17011 DECL_INTERFACE_KNOWN (decl1) = 1;
17012 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
17015 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
17016 /* This is a constructor, we must ensure that any default args
17017 introduced by this definition are propagated to the clones
17018 now. The clones are used directly in overload resolution. */
17019 adjust_clone_args (decl1);
17021 /* Sometimes we don't notice that a function is a static member, and
17022 build a METHOD_TYPE for it. Fix that up now. */
17023 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
17024 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
17026 /* Set up current_class_type, and enter the scope of the class, if
17027 appropriate. */
17028 if (ctype)
17029 push_nested_class (ctype);
17030 else if (DECL_STATIC_FUNCTION_P (decl1))
17031 push_nested_class (DECL_CONTEXT (decl1));
17033 /* Now that we have entered the scope of the class, we must restore
17034 the bindings for any template parameters surrounding DECL1, if it
17035 is an inline member template. (Order is important; consider the
17036 case where a template parameter has the same name as a field of
17037 the class.) It is not until after this point that
17038 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
17039 if (flags & SF_INCLASS_INLINE)
17040 maybe_begin_member_template_processing (decl1);
17042 /* Effective C++ rule 15. */
17043 if (warn_ecpp
17044 && DECL_ASSIGNMENT_OPERATOR_P (decl1)
17045 && DECL_OVERLOADED_OPERATOR_IS (decl1, NOP_EXPR)
17046 && VOID_TYPE_P (TREE_TYPE (fntype)))
17047 warning (OPT_Weffc__,
17048 "%<operator=%> should return a reference to %<*this%>");
17050 /* Make the init_value nonzero so pushdecl knows this is not tentative.
17051 error_mark_node is replaced below (in poplevel) with the BLOCK. */
17052 if (!DECL_INITIAL (decl1))
17053 DECL_INITIAL (decl1) = error_mark_node;
17055 /* This function exists in static storage.
17056 (This does not mean `static' in the C sense!) */
17057 TREE_STATIC (decl1) = 1;
17059 /* We must call push_template_decl after current_class_type is set
17060 up. (If we are processing inline definitions after exiting a
17061 class scope, current_class_type will be NULL_TREE until set above
17062 by push_nested_class.) */
17063 if (processing_template_decl)
17065 tree newdecl1 = push_template_decl (decl1, doing_friend);
17066 if (newdecl1 == error_mark_node)
17068 if (ctype || DECL_STATIC_FUNCTION_P (decl1))
17069 pop_nested_class ();
17070 return false;
17072 decl1 = newdecl1;
17075 /* Make sure the parameter and return types are reasonable. When
17076 you declare a function, these types can be incomplete, but they
17077 must be complete when you define the function. */
17078 check_function_type (decl1, DECL_ARGUMENTS (decl1));
17080 /* Build the return declaration for the function. */
17081 tree restype = TREE_TYPE (fntype);
17083 if (DECL_RESULT (decl1) == NULL_TREE)
17085 tree resdecl;
17087 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
17088 DECL_ARTIFICIAL (resdecl) = 1;
17089 DECL_IGNORED_P (resdecl) = 1;
17090 DECL_RESULT (decl1) = resdecl;
17092 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
17095 /* Record the decl so that the function name is defined.
17096 If we already have a decl for this name, and it is a FUNCTION_DECL,
17097 use the old decl. */
17098 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
17100 /* A specialization is not used to guide overload resolution. */
17101 if (!DECL_FUNCTION_MEMBER_P (decl1)
17102 && !(DECL_USE_TEMPLATE (decl1) &&
17103 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
17105 tree olddecl = pushdecl (decl1);
17107 if (olddecl == error_mark_node)
17108 /* If something went wrong when registering the declaration,
17109 use DECL1; we have to have a FUNCTION_DECL to use when
17110 parsing the body of the function. */
17112 else
17114 /* Otherwise, OLDDECL is either a previous declaration
17115 of the same function or DECL1 itself. */
17117 if (warn_missing_declarations
17118 && olddecl == decl1
17119 && !DECL_MAIN_P (decl1)
17120 && TREE_PUBLIC (decl1)
17121 && !DECL_DECLARED_INLINE_P (decl1))
17123 tree context;
17125 /* Check whether DECL1 is in an anonymous
17126 namespace. */
17127 for (context = DECL_CONTEXT (decl1);
17128 context;
17129 context = DECL_CONTEXT (context))
17131 if (TREE_CODE (context) == NAMESPACE_DECL
17132 && DECL_NAME (context) == NULL_TREE)
17133 break;
17136 if (context == NULL)
17137 warning_at (DECL_SOURCE_LOCATION (decl1),
17138 OPT_Wmissing_declarations,
17139 "no previous declaration for %qD", decl1);
17142 decl1 = olddecl;
17145 else
17147 /* We need to set the DECL_CONTEXT. */
17148 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
17149 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
17151 fntype = TREE_TYPE (decl1);
17152 restype = TREE_TYPE (fntype);
17154 /* If #pragma weak applies, mark the decl appropriately now.
17155 The pragma only applies to global functions. Because
17156 determining whether or not the #pragma applies involves
17157 computing the mangled name for the declaration, we cannot
17158 apply the pragma until after we have merged this declaration
17159 with any previous declarations; if the original declaration
17160 has a linkage specification, that specification applies to
17161 the definition as well, and may affect the mangled name. */
17162 if (DECL_FILE_SCOPE_P (decl1))
17163 maybe_apply_pragma_weak (decl1);
17166 /* We are now in the scope of the function being defined. */
17167 current_function_decl = decl1;
17169 /* Save the parm names or decls from this function's declarator
17170 where store_parm_decls will find them. */
17171 tree current_function_parms = DECL_ARGUMENTS (decl1);
17173 /* Let the user know we're compiling this function. */
17174 announce_function (decl1);
17176 gcc_assert (DECL_INITIAL (decl1));
17178 /* This function may already have been parsed, in which case just
17179 return; our caller will skip over the body without parsing. */
17180 if (DECL_INITIAL (decl1) != error_mark_node)
17181 return true;
17183 /* Initialize RTL machinery. We cannot do this until
17184 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
17185 even when processing a template; this is how we get
17186 CFUN set up, and our per-function variables initialized.
17187 FIXME factor out the non-RTL stuff. */
17188 cp_binding_level *bl = current_binding_level;
17189 allocate_struct_function (decl1, processing_template_decl);
17191 /* Initialize the language data structures. Whenever we start
17192 a new function, we destroy temporaries in the usual way. */
17193 cfun->language = ggc_cleared_alloc<language_function> ();
17194 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
17195 current_binding_level = bl;
17197 /* If we are (erroneously) defining a function that we have already
17198 defined before, wipe out what we knew before. */
17199 gcc_checking_assert (!DECL_PENDING_INLINE_P (decl1));
17200 FNDECL_USED_AUTO (decl1) = false;
17201 DECL_SAVED_AUTO_RETURN_TYPE (decl1) = NULL;
17203 if (!processing_template_decl && type_uses_auto (restype))
17205 FNDECL_USED_AUTO (decl1) = true;
17206 DECL_SAVED_AUTO_RETURN_TYPE (decl1) = restype;
17209 /* Start the statement-tree, start the tree now. */
17210 DECL_SAVED_TREE (decl1) = push_stmt_list ();
17212 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
17214 /* We know that this was set up by `grokclassfn'. We do not
17215 wait until `store_parm_decls', since evil parse errors may
17216 never get us to that point. Here we keep the consistency
17217 between `current_class_type' and `current_class_ptr'. */
17218 tree t = DECL_ARGUMENTS (decl1);
17220 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
17221 gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
17223 cp_function_chain->x_current_class_ref
17224 = cp_build_fold_indirect_ref (t);
17225 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
17226 cp_function_chain->x_current_class_ptr = t;
17228 /* Constructors and destructors need to know whether they're "in
17229 charge" of initializing virtual base classes. */
17230 t = DECL_CHAIN (t);
17231 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
17233 current_in_charge_parm = t;
17234 t = DECL_CHAIN (t);
17236 if (DECL_HAS_VTT_PARM_P (decl1))
17238 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
17239 current_vtt_parm = t;
17243 bool honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
17244 /* Implicitly-defined methods (like the
17245 destructor for a class in which no destructor
17246 is explicitly declared) must not be defined
17247 until their definition is needed. So, we
17248 ignore interface specifications for
17249 compiler-generated functions. */
17250 && !DECL_ARTIFICIAL (decl1));
17251 struct c_fileinfo *finfo
17252 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
17254 if (processing_template_decl)
17255 /* Don't mess with interface flags. */;
17256 else if (DECL_INTERFACE_KNOWN (decl1))
17258 tree ctx = decl_function_context (decl1);
17260 if (DECL_NOT_REALLY_EXTERN (decl1))
17261 DECL_EXTERNAL (decl1) = 0;
17263 if (ctx != NULL_TREE && vague_linkage_p (ctx))
17264 /* This is a function in a local class in an extern inline
17265 or template function. */
17266 comdat_linkage (decl1);
17268 /* If this function belongs to an interface, it is public.
17269 If it belongs to someone else's interface, it is also external.
17270 This only affects inlines and template instantiations. */
17271 else if (!finfo->interface_unknown && honor_interface)
17273 if (DECL_DECLARED_INLINE_P (decl1)
17274 || DECL_TEMPLATE_INSTANTIATION (decl1))
17276 DECL_EXTERNAL (decl1)
17277 = (finfo->interface_only
17278 || (DECL_DECLARED_INLINE_P (decl1)
17279 && ! flag_implement_inlines
17280 && !DECL_VINDEX (decl1)));
17282 /* For WIN32 we also want to put these in linkonce sections. */
17283 maybe_make_one_only (decl1);
17285 else
17286 DECL_EXTERNAL (decl1) = 0;
17287 DECL_INTERFACE_KNOWN (decl1) = 1;
17288 /* If this function is in an interface implemented in this file,
17289 make sure that the back end knows to emit this function
17290 here. */
17291 if (!DECL_EXTERNAL (decl1))
17292 mark_needed (decl1);
17294 else if (finfo->interface_unknown && finfo->interface_only
17295 && honor_interface)
17297 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
17298 interface, we will have both finfo->interface_unknown and
17299 finfo->interface_only set. In that case, we don't want to
17300 use the normal heuristics because someone will supply a
17301 #pragma implementation elsewhere, and deducing it here would
17302 produce a conflict. */
17303 comdat_linkage (decl1);
17304 DECL_EXTERNAL (decl1) = 0;
17305 DECL_INTERFACE_KNOWN (decl1) = 1;
17306 DECL_DEFER_OUTPUT (decl1) = 1;
17308 else
17310 /* This is a definition, not a reference.
17311 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
17312 if (!GNU_INLINE_P (decl1))
17313 DECL_EXTERNAL (decl1) = 0;
17315 if ((DECL_DECLARED_INLINE_P (decl1)
17316 || DECL_TEMPLATE_INSTANTIATION (decl1))
17317 && ! DECL_INTERFACE_KNOWN (decl1))
17318 DECL_DEFER_OUTPUT (decl1) = 1;
17319 else
17320 DECL_INTERFACE_KNOWN (decl1) = 1;
17323 /* Determine the ELF visibility attribute for the function. We must not
17324 do this before calling "pushdecl", as we must allow "duplicate_decls"
17325 to merge any attributes appropriately. We also need to wait until
17326 linkage is set. */
17327 if (!DECL_CLONED_FUNCTION_P (decl1))
17328 determine_visibility (decl1);
17330 if (!processing_template_decl)
17331 maybe_instantiate_noexcept (decl1);
17333 begin_scope (sk_function_parms, decl1);
17335 ++function_depth;
17337 if (DECL_DESTRUCTOR_P (decl1)
17338 || (DECL_CONSTRUCTOR_P (decl1)
17339 && targetm.cxx.cdtor_returns_this ()))
17341 cdtor_label = create_artificial_label (input_location);
17342 LABEL_DECL_CDTOR (cdtor_label) = true;
17345 start_fname_decls ();
17347 store_parm_decls (current_function_parms);
17349 if (!processing_template_decl
17350 && (flag_lifetime_dse > 1)
17351 && DECL_CONSTRUCTOR_P (decl1)
17352 && !DECL_CLONED_FUNCTION_P (decl1)
17353 /* Clobbering an empty base is harmful if it overlays real data. */
17354 && !is_empty_class (current_class_type)
17355 /* We can't clobber safely for an implicitly-defined default constructor
17356 because part of the initialization might happen before we enter the
17357 constructor, via AGGR_INIT_ZERO_FIRST (c++/68006). */
17358 && !implicit_default_ctor_p (decl1))
17359 finish_expr_stmt (build_clobber_this ());
17361 if (!processing_template_decl
17362 && DECL_CONSTRUCTOR_P (decl1)
17363 && sanitize_flags_p (SANITIZE_VPTR)
17364 && !DECL_CLONED_FUNCTION_P (decl1)
17365 && !implicit_default_ctor_p (decl1))
17366 cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr);
17368 if (!DECL_OMP_DECLARE_REDUCTION_P (decl1))
17369 start_lambda_scope (decl1);
17371 return true;
17375 /* Like start_preparsed_function, except that instead of a
17376 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
17378 Returns true on success. If the DECLARATOR is not suitable
17379 for a function, we return false, which tells the parser to
17380 skip the entire function. */
17382 bool
17383 start_function (cp_decl_specifier_seq *declspecs,
17384 const cp_declarator *declarator,
17385 tree attrs)
17387 tree decl1;
17389 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
17390 invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION, decl1);
17391 if (decl1 == error_mark_node)
17392 return false;
17394 if (DECL_MAIN_P (decl1))
17395 /* main must return int. grokfndecl should have corrected it
17396 (and issued a diagnostic) if the user got it wrong. */
17397 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
17398 integer_type_node));
17400 return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
17403 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
17404 FN. */
17406 static bool
17407 use_eh_spec_block (tree fn)
17409 return (flag_exceptions && flag_enforce_eh_specs
17410 && !processing_template_decl
17411 /* We insert the EH_SPEC_BLOCK only in the original
17412 function; then, it is copied automatically to the
17413 clones. */
17414 && !DECL_CLONED_FUNCTION_P (fn)
17415 /* Implicitly-generated constructors and destructors have
17416 exception specifications. However, those specifications
17417 are the union of the possible exceptions specified by the
17418 constructors/destructors for bases and members, so no
17419 unallowed exception will ever reach this function. By
17420 not creating the EH_SPEC_BLOCK we save a little memory,
17421 and we avoid spurious warnings about unreachable
17422 code. */
17423 && !DECL_DEFAULTED_FN (fn)
17424 && !type_throw_all_p (TREE_TYPE (fn)));
17427 /* Helper function to push ARGS into the current lexical scope. DECL
17428 is the function declaration. NONPARMS is used to handle enum
17429 constants. */
17431 void
17432 do_push_parm_decls (tree decl, tree args, tree *nonparms)
17434 /* If we're doing semantic analysis, then we'll call pushdecl
17435 for each of these. We must do them in reverse order so that
17436 they end in the correct forward order. */
17437 args = nreverse (args);
17439 tree next;
17440 for (tree parm = args; parm; parm = next)
17442 next = DECL_CHAIN (parm);
17443 if (TREE_CODE (parm) == PARM_DECL)
17444 pushdecl (parm);
17445 else if (nonparms)
17447 /* If we find an enum constant or a type tag, put it aside for
17448 the moment. */
17449 TREE_CHAIN (parm) = NULL_TREE;
17450 *nonparms = chainon (*nonparms, parm);
17454 /* Get the decls in their original chain order and record in the
17455 function. This is all and only the PARM_DECLs that were
17456 pushed into scope by the loop above. */
17457 DECL_ARGUMENTS (decl) = get_local_decls ();
17460 /* Store the parameter declarations into the current function declaration.
17461 This is called after parsing the parameter declarations, before
17462 digesting the body of the function.
17464 Also install to binding contour return value identifier, if any. */
17466 static void
17467 store_parm_decls (tree current_function_parms)
17469 tree fndecl = current_function_decl;
17471 /* This is a chain of any other decls that came in among the parm
17472 declarations. If a parm is declared with enum {foo, bar} x;
17473 then CONST_DECLs for foo and bar are put here. */
17474 tree nonparms = NULL_TREE;
17476 if (current_function_parms)
17478 /* This case is when the function was defined with an ANSI prototype.
17479 The parms already have decls, so we need not do anything here
17480 except record them as in effect
17481 and complain if any redundant old-style parm decls were written. */
17483 tree specparms = current_function_parms;
17485 /* Must clear this because it might contain TYPE_DECLs declared
17486 at class level. */
17487 current_binding_level->names = NULL;
17489 do_push_parm_decls (fndecl, specparms, &nonparms);
17491 else
17492 DECL_ARGUMENTS (fndecl) = NULL_TREE;
17494 /* Now store the final chain of decls for the arguments
17495 as the decl-chain of the current lexical scope.
17496 Put the enumerators in as well, at the front so that
17497 DECL_ARGUMENTS is not modified. */
17498 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
17500 if (use_eh_spec_block (current_function_decl))
17501 current_eh_spec_block = begin_eh_spec_block ();
17505 /* Set the return value of the constructor (if present). */
17507 static void
17508 finish_constructor_body (void)
17510 tree val;
17511 tree exprstmt;
17513 if (targetm.cxx.cdtor_returns_this ())
17515 /* Any return from a constructor will end up here. */
17516 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
17518 val = DECL_ARGUMENTS (current_function_decl);
17519 suppress_warning (val, OPT_Wuse_after_free);
17520 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
17521 DECL_RESULT (current_function_decl), val);
17522 /* Return the address of the object. */
17523 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
17524 add_stmt (exprstmt);
17528 /* Do all the processing for the beginning of a destructor; set up the
17529 vtable pointers and cleanups for bases and members. */
17531 static void
17532 begin_destructor_body (void)
17534 tree compound_stmt;
17536 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
17537 issued an error message. We still want to try to process the
17538 body of the function, but initialize_vtbl_ptrs will crash if
17539 TYPE_BINFO is NULL. */
17540 if (COMPLETE_TYPE_P (current_class_type))
17542 compound_stmt = begin_compound_stmt (0);
17543 /* Make all virtual function table pointers in non-virtual base
17544 classes point to CURRENT_CLASS_TYPE's virtual function
17545 tables. */
17546 initialize_vtbl_ptrs (current_class_ptr);
17547 finish_compound_stmt (compound_stmt);
17549 if (flag_lifetime_dse
17550 /* Clobbering an empty base is harmful if it overlays real data. */
17551 && !is_empty_class (current_class_type))
17553 if (sanitize_flags_p (SANITIZE_VPTR)
17554 && (flag_sanitize_recover & SANITIZE_VPTR) == 0
17555 && TYPE_CONTAINS_VPTR_P (current_class_type))
17557 tree binfo = TYPE_BINFO (current_class_type);
17558 tree ref
17559 = cp_build_fold_indirect_ref (current_class_ptr);
17561 tree vtbl_ptr = build_vfield_ref (ref, TREE_TYPE (binfo));
17562 tree vtbl = build_zero_cst (TREE_TYPE (vtbl_ptr));
17563 tree stmt = cp_build_modify_expr (input_location, vtbl_ptr,
17564 NOP_EXPR, vtbl,
17565 tf_warning_or_error);
17566 /* If the vptr is shared with some virtual nearly empty base,
17567 don't clear it if not in charge, the dtor of the virtual
17568 nearly empty base will do that later. */
17569 if (CLASSTYPE_VBASECLASSES (current_class_type))
17571 tree c = current_class_type;
17572 while (CLASSTYPE_PRIMARY_BINFO (c))
17574 if (BINFO_VIRTUAL_P (CLASSTYPE_PRIMARY_BINFO (c)))
17576 stmt = convert_to_void (stmt, ICV_STATEMENT,
17577 tf_warning_or_error);
17578 stmt = build_if_in_charge (stmt);
17579 break;
17581 c = BINFO_TYPE (CLASSTYPE_PRIMARY_BINFO (c));
17584 finish_decl_cleanup (NULL_TREE, stmt);
17586 else
17587 finish_decl_cleanup (NULL_TREE, build_clobber_this ());
17590 /* And insert cleanups for our bases and members so that they
17591 will be properly destroyed if we throw. */
17592 push_base_cleanups ();
17596 /* At the end of every destructor we generate code to delete the object if
17597 necessary. Do that now. */
17599 static void
17600 finish_destructor_body (void)
17602 tree exprstmt;
17604 /* Any return from a destructor will end up here; that way all base
17605 and member cleanups will be run when the function returns. */
17606 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
17608 if (targetm.cxx.cdtor_returns_this ())
17610 tree val;
17612 val = DECL_ARGUMENTS (current_function_decl);
17613 suppress_warning (val, OPT_Wuse_after_free);
17614 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
17615 DECL_RESULT (current_function_decl), val);
17616 /* Return the address of the object. */
17617 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
17618 add_stmt (exprstmt);
17622 /* Do the necessary processing for the beginning of a function body, which
17623 in this case includes member-initializers, but not the catch clauses of
17624 a function-try-block. Currently, this means opening a binding level
17625 for the member-initializers (in a ctor), member cleanups (in a dtor),
17626 and capture proxies (in a lambda operator()). */
17628 tree
17629 begin_function_body (void)
17631 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
17632 return NULL_TREE;
17634 if (processing_template_decl)
17635 /* Do nothing now. */;
17636 else
17637 /* Always keep the BLOCK node associated with the outermost pair of
17638 curly braces of a function. These are needed for correct
17639 operation of dwarfout.c. */
17640 keep_next_level (true);
17642 tree stmt = begin_compound_stmt (BCS_FN_BODY);
17644 if (processing_template_decl)
17645 /* Do nothing now. */;
17646 else if (DECL_DESTRUCTOR_P (current_function_decl))
17647 begin_destructor_body ();
17649 return stmt;
17652 /* Do the processing for the end of a function body. Currently, this means
17653 closing out the cleanups for fully-constructed bases and members, and in
17654 the case of the destructor, deleting the object if desired. Again, this
17655 is only meaningful for [cd]tors, since they are the only functions where
17656 there is a significant distinction between the main body and any
17657 function catch clauses. Handling, say, main() return semantics here
17658 would be wrong, as flowing off the end of a function catch clause for
17659 main() would also need to return 0. */
17661 void
17662 finish_function_body (tree compstmt)
17664 if (compstmt == NULL_TREE)
17665 return;
17667 /* Close the block. */
17668 finish_compound_stmt (compstmt);
17670 if (processing_template_decl)
17671 /* Do nothing now. */;
17672 else if (DECL_CONSTRUCTOR_P (current_function_decl))
17673 finish_constructor_body ();
17674 else if (DECL_DESTRUCTOR_P (current_function_decl))
17675 finish_destructor_body ();
17678 /* Given a function, returns the BLOCK corresponding to the outermost level
17679 of curly braces, skipping the artificial block created for constructor
17680 initializers. */
17682 tree
17683 outer_curly_brace_block (tree fndecl)
17685 tree block = DECL_INITIAL (fndecl);
17686 if (BLOCK_OUTER_CURLY_BRACE_P (block))
17687 return block;
17688 block = BLOCK_SUBBLOCKS (block);
17689 if (BLOCK_OUTER_CURLY_BRACE_P (block))
17690 return block;
17691 block = BLOCK_SUBBLOCKS (block);
17692 gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
17693 return block;
17696 /* If FNDECL is a class's key method, add the class to the list of
17697 keyed classes that should be emitted. */
17699 static void
17700 record_key_method_defined (tree fndecl)
17702 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
17703 && DECL_VIRTUAL_P (fndecl)
17704 && !processing_template_decl)
17706 tree fnclass = DECL_CONTEXT (fndecl);
17707 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
17708 vec_safe_push (keyed_classes, fnclass);
17712 /* Attempt to add a fix-it hint to RICHLOC suggesting the insertion
17713 of "return *this;" immediately before its location, using FNDECL's
17714 first statement (if any) to give the indentation, if appropriate. */
17716 static void
17717 add_return_star_this_fixit (gcc_rich_location *richloc, tree fndecl)
17719 location_t indent = UNKNOWN_LOCATION;
17720 tree stmts = expr_first (DECL_SAVED_TREE (fndecl));
17721 if (stmts)
17722 indent = EXPR_LOCATION (stmts);
17723 richloc->add_fixit_insert_formatted ("return *this;",
17724 richloc->get_loc (),
17725 indent);
17728 /* This function carries out the subset of finish_function operations needed
17729 to emit the compiler-generated outlined helper functions used by the
17730 coroutines implementation. */
17732 static void
17733 emit_coro_helper (tree helper)
17735 /* This is a partial set of the operations done by finish_function()
17736 plus emitting the result. */
17737 set_cfun (NULL);
17738 current_function_decl = helper;
17739 begin_scope (sk_function_parms, NULL);
17740 store_parm_decls (DECL_ARGUMENTS (helper));
17741 announce_function (helper);
17742 allocate_struct_function (helper, false);
17743 cfun->language = ggc_cleared_alloc<language_function> ();
17744 poplevel (1, 0, 1);
17745 maybe_save_constexpr_fundef (helper);
17746 /* We must start each function with a clear fold cache. */
17747 clear_fold_cache ();
17748 cp_fold_function (helper);
17749 DECL_CONTEXT (DECL_RESULT (helper)) = helper;
17750 BLOCK_SUPERCONTEXT (DECL_INITIAL (helper)) = helper;
17751 /* This function has coroutine IFNs that we should handle in middle
17752 end lowering. */
17753 cfun->coroutine_component = true;
17754 cp_genericize (helper);
17755 expand_or_defer_fn (helper);
17758 /* Finish up a function declaration and compile that function
17759 all the way to assembler language output. The free the storage
17760 for the function definition. INLINE_P is TRUE if we just
17761 finished processing the body of an in-class inline function
17762 definition. (This processing will have taken place after the
17763 class definition is complete.) */
17765 tree
17766 finish_function (bool inline_p)
17768 tree fndecl = current_function_decl;
17769 tree fntype, ctype = NULL_TREE;
17770 tree resumer = NULL_TREE, destroyer = NULL_TREE;
17771 bool coro_p = flag_coroutines
17772 && !processing_template_decl
17773 && DECL_COROUTINE_P (fndecl);
17774 bool coro_emit_helpers = false;
17776 /* When we get some parse errors, we can end up without a
17777 current_function_decl, so cope. */
17778 if (fndecl == NULL_TREE)
17779 return error_mark_node;
17781 if (!DECL_OMP_DECLARE_REDUCTION_P (fndecl))
17782 finish_lambda_scope ();
17784 if (c_dialect_objc ())
17785 objc_finish_function ();
17787 record_key_method_defined (fndecl);
17789 fntype = TREE_TYPE (fndecl);
17791 /* TREE_READONLY (fndecl) = 1;
17792 This caused &foo to be of type ptr-to-const-function
17793 which then got a warning when stored in a ptr-to-function variable. */
17795 gcc_assert (building_stmt_list_p ());
17796 /* The current function is being defined, so its DECL_INITIAL should
17797 be set, and unless there's a multiple definition, it should be
17798 error_mark_node. */
17799 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
17801 if (coro_p)
17803 /* Only try to emit the coroutine outlined helper functions if the
17804 transforms succeeded. Otherwise, treat errors in the same way as
17805 a regular function. */
17806 coro_emit_helpers = morph_fn_to_coro (fndecl, &resumer, &destroyer);
17808 /* We should handle coroutine IFNs in middle end lowering. */
17809 cfun->coroutine_component = true;
17811 /* Do not try to process the ramp's EH unless outlining succeeded. */
17812 if (coro_emit_helpers && use_eh_spec_block (fndecl))
17813 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
17814 (TREE_TYPE (fndecl)),
17815 current_eh_spec_block);
17817 else
17818 /* For a cloned function, we've already got all the code we need;
17819 there's no need to add any extra bits. */
17820 if (!DECL_CLONED_FUNCTION_P (fndecl))
17822 /* Make it so that `main' always returns 0 by default. */
17823 if (DECL_MAIN_P (current_function_decl))
17824 finish_return_stmt (integer_zero_node);
17826 if (use_eh_spec_block (current_function_decl))
17827 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
17828 (TREE_TYPE (current_function_decl)),
17829 current_eh_spec_block);
17832 /* If we're saving up tree structure, tie off the function now. */
17833 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
17835 finish_fname_decls ();
17837 /* If this function can't throw any exceptions, remember that. */
17838 if (!processing_template_decl
17839 && !cp_function_chain->can_throw
17840 && !flag_non_call_exceptions
17841 && !decl_replaceable_p (fndecl,
17842 opt_for_fn (fndecl, flag_semantic_interposition)))
17843 TREE_NOTHROW (fndecl) = 1;
17845 /* This must come after expand_function_end because cleanups might
17846 have declarations (from inline functions) that need to go into
17847 this function's blocks. */
17849 /* If the current binding level isn't the outermost binding level
17850 for this function, either there is a bug, or we have experienced
17851 syntax errors and the statement tree is malformed. */
17852 if (current_binding_level->kind != sk_function_parms)
17854 /* Make sure we have already experienced errors. */
17855 gcc_assert (errorcount);
17857 /* Throw away the broken statement tree and extra binding
17858 levels. */
17859 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
17861 while (current_binding_level->kind != sk_function_parms)
17863 if (current_binding_level->kind == sk_class)
17864 pop_nested_class ();
17865 else
17866 poplevel (0, 0, 0);
17869 poplevel (1, 0, 1);
17871 /* Statements should always be full-expressions at the outermost set
17872 of curly braces for a function. */
17873 gcc_assert (stmts_are_full_exprs_p ());
17875 /* If there are no return statements in a function with auto return type,
17876 the return type is void. But if the declared type is something like
17877 auto*, this is an error. */
17878 if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
17879 && TREE_TYPE (fntype) == DECL_SAVED_AUTO_RETURN_TYPE (fndecl))
17881 if (is_auto (DECL_SAVED_AUTO_RETURN_TYPE (fndecl))
17882 && !current_function_returns_value
17883 && !current_function_returns_null)
17885 /* We haven't applied return type deduction because we haven't
17886 seen any return statements. Do that now. */
17887 tree node = type_uses_auto (DECL_SAVED_AUTO_RETURN_TYPE (fndecl));
17888 do_auto_deduction (DECL_SAVED_AUTO_RETURN_TYPE (fndecl),
17889 void_node, node, tf_warning_or_error,
17890 adc_return_type);
17892 apply_deduced_return_type (fndecl, void_type_node);
17893 fntype = TREE_TYPE (fndecl);
17895 else if (!current_function_returns_value
17896 && !current_function_returns_null)
17898 error ("no return statements in function returning %qT",
17899 DECL_SAVED_AUTO_RETURN_TYPE (fndecl));
17900 inform (input_location, "only plain %<auto%> return type can be "
17901 "deduced to %<void%>");
17905 /* Remember that we were in class scope. */
17906 if (current_class_name)
17907 ctype = current_class_type;
17909 if (DECL_DELETED_FN (fndecl))
17911 DECL_INITIAL (fndecl) = error_mark_node;
17912 DECL_SAVED_TREE (fndecl) = NULL_TREE;
17913 goto cleanup;
17916 // If this is a concept, check that the definition is reasonable.
17917 if (DECL_DECLARED_CONCEPT_P (fndecl))
17918 check_function_concept (fndecl);
17920 if (flag_openmp)
17921 if (tree attr = lookup_attribute ("omp declare variant base",
17922 DECL_ATTRIBUTES (fndecl)))
17923 omp_declare_variant_finalize (fndecl, attr);
17925 /* Complain if there's just no return statement. */
17926 if ((warn_return_type
17927 || (cxx_dialect >= cxx14
17928 && DECL_DECLARED_CONSTEXPR_P (fndecl)))
17929 && !VOID_TYPE_P (TREE_TYPE (fntype))
17930 && !dependent_type_p (TREE_TYPE (fntype))
17931 && !current_function_returns_value && !current_function_returns_null
17932 /* Don't complain if we abort or throw. */
17933 && !current_function_returns_abnormally
17934 /* Don't complain if there's an infinite loop. */
17935 && !current_function_infinite_loop
17936 /* Don't complain if we are declared noreturn. */
17937 && !TREE_THIS_VOLATILE (fndecl)
17938 && !DECL_NAME (DECL_RESULT (fndecl))
17939 && !warning_suppressed_p (fndecl, OPT_Wreturn_type)
17940 /* Structor return values (if any) are set by the compiler. */
17941 && !DECL_CONSTRUCTOR_P (fndecl)
17942 && !DECL_DESTRUCTOR_P (fndecl)
17943 && targetm.warn_func_return (fndecl))
17945 gcc_rich_location richloc (input_location);
17946 /* Potentially add a "return *this;" fix-it hint for
17947 assignment operators. */
17948 if (IDENTIFIER_ASSIGN_OP_P (DECL_NAME (fndecl)))
17950 tree valtype = TREE_TYPE (DECL_RESULT (fndecl));
17951 if (TREE_CODE (valtype) == REFERENCE_TYPE
17952 && current_class_ref
17953 && same_type_ignoring_top_level_qualifiers_p
17954 (TREE_TYPE (valtype), TREE_TYPE (current_class_ref))
17955 && global_dc->option_enabled (OPT_Wreturn_type,
17956 global_dc->lang_mask,
17957 global_dc->option_state))
17958 add_return_star_this_fixit (&richloc, fndecl);
17960 if (cxx_dialect >= cxx14
17961 && DECL_DECLARED_CONSTEXPR_P (fndecl))
17962 error_at (&richloc, "no return statement in %<constexpr%> function "
17963 "returning non-void");
17964 else if (warning_at (&richloc, OPT_Wreturn_type,
17965 "no return statement in function returning "
17966 "non-void"))
17967 suppress_warning (fndecl, OPT_Wreturn_type);
17970 /* Lambda closure members are implicitly constexpr if possible. */
17971 if (cxx_dialect >= cxx17
17972 && LAMBDA_TYPE_P (CP_DECL_CONTEXT (fndecl)))
17973 DECL_DECLARED_CONSTEXPR_P (fndecl)
17974 = ((processing_template_decl
17975 || is_valid_constexpr_fn (fndecl, /*complain*/false))
17976 && potential_constant_expression (DECL_SAVED_TREE (fndecl)));
17978 /* Save constexpr function body before it gets munged by
17979 the NRV transformation. */
17980 maybe_save_constexpr_fundef (fndecl);
17982 /* Invoke the pre-genericize plugin before we start munging things. */
17983 if (!processing_template_decl)
17984 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
17986 /* Perform delayed folding before NRV transformation. */
17987 if (!processing_template_decl
17988 && !DECL_IMMEDIATE_FUNCTION_P (fndecl)
17989 && !DECL_OMP_DECLARE_REDUCTION_P (fndecl))
17990 cp_fold_function (fndecl);
17992 /* Set up the named return value optimization, if we can. Candidate
17993 variables are selected in check_return_expr. */
17994 if (current_function_return_value)
17996 tree r = current_function_return_value;
17997 tree outer;
17999 if (r != error_mark_node
18000 /* This is only worth doing for fns that return in memory--and
18001 simpler, since we don't have to worry about promoted modes. */
18002 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
18003 /* Only allow this for variables declared in the outer scope of
18004 the function so we know that their lifetime always ends with a
18005 return; see g++.dg/opt/nrv6.C. We could be more flexible if
18006 we were to do this optimization in tree-ssa. */
18007 && (outer = outer_curly_brace_block (fndecl))
18008 && chain_member (r, BLOCK_VARS (outer)))
18009 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
18011 current_function_return_value = NULL_TREE;
18014 /* Must mark the RESULT_DECL as being in this function. */
18015 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
18017 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
18018 to the FUNCTION_DECL node itself. */
18019 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
18021 /* Store the end of the function, so that we get good line number
18022 info for the epilogue. */
18023 cfun->function_end_locus = input_location;
18025 /* Complain about parameters that are only set, but never otherwise used. */
18026 if (warn_unused_but_set_parameter
18027 && !processing_template_decl
18028 && errorcount == unused_but_set_errorcount
18029 && !DECL_CLONED_FUNCTION_P (fndecl))
18031 tree decl;
18033 for (decl = DECL_ARGUMENTS (fndecl);
18034 decl;
18035 decl = DECL_CHAIN (decl))
18036 if (TREE_USED (decl)
18037 && TREE_CODE (decl) == PARM_DECL
18038 && !DECL_READ_P (decl)
18039 && DECL_NAME (decl)
18040 && !DECL_ARTIFICIAL (decl)
18041 && !warning_suppressed_p (decl,OPT_Wunused_but_set_parameter)
18042 && !DECL_IN_SYSTEM_HEADER (decl)
18043 && TREE_TYPE (decl) != error_mark_node
18044 && !TYPE_REF_P (TREE_TYPE (decl))
18045 && (!CLASS_TYPE_P (TREE_TYPE (decl))
18046 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
18047 warning_at (DECL_SOURCE_LOCATION (decl),
18048 OPT_Wunused_but_set_parameter,
18049 "parameter %qD set but not used", decl);
18050 unused_but_set_errorcount = errorcount;
18053 /* Complain about locally defined typedefs that are not used in this
18054 function. */
18055 maybe_warn_unused_local_typedefs ();
18057 /* Possibly warn about unused parameters. */
18058 if (warn_unused_parameter
18059 && !processing_template_decl
18060 && !DECL_CLONED_FUNCTION_P (fndecl))
18061 do_warn_unused_parameter (fndecl);
18063 /* Genericize before inlining. */
18064 if (!processing_template_decl
18065 && !DECL_IMMEDIATE_FUNCTION_P (fndecl)
18066 && !DECL_OMP_DECLARE_REDUCTION_P (fndecl))
18067 cp_genericize (fndecl);
18069 /* Emit the resumer and destroyer functions now, providing that we have
18070 not encountered some fatal error. */
18071 if (coro_emit_helpers)
18073 emit_coro_helper (resumer);
18074 emit_coro_helper (destroyer);
18077 cleanup:
18078 /* We're leaving the context of this function, so zap cfun. It's still in
18079 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
18080 set_cfun (NULL);
18081 current_function_decl = NULL;
18083 /* If this is an in-class inline definition, we may have to pop the
18084 bindings for the template parameters that we added in
18085 maybe_begin_member_template_processing when start_function was
18086 called. */
18087 if (inline_p)
18088 maybe_end_member_template_processing ();
18090 /* Leave the scope of the class. */
18091 if (ctype)
18092 pop_nested_class ();
18094 --function_depth;
18096 /* Clean up. */
18097 current_function_decl = NULL_TREE;
18099 invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
18100 return fndecl;
18103 /* Create the FUNCTION_DECL for a function definition.
18104 DECLSPECS and DECLARATOR are the parts of the declaration;
18105 they describe the return type and the name of the function,
18106 but twisted together in a fashion that parallels the syntax of C.
18108 This function creates a binding context for the function body
18109 as well as setting up the FUNCTION_DECL in current_function_decl.
18111 Returns a FUNCTION_DECL on success.
18113 If the DECLARATOR is not suitable for a function (it defines a datum
18114 instead), we return 0, which tells yyparse to report a parse error.
18116 May return void_type_node indicating that this method is actually
18117 a friend. See grokfield for more details.
18119 Came here with a `.pushlevel' .
18121 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
18122 CHANGES TO CODE IN `grokfield'. */
18124 tree
18125 grokmethod (cp_decl_specifier_seq *declspecs,
18126 const cp_declarator *declarator, tree attrlist)
18128 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
18129 &attrlist);
18131 if (fndecl == error_mark_node)
18132 return error_mark_node;
18134 if (attrlist)
18135 cplus_decl_attributes (&fndecl, attrlist, 0);
18137 /* Pass friends other than inline friend functions back. */
18138 if (fndecl == void_type_node)
18139 return fndecl;
18141 if (DECL_IN_AGGR_P (fndecl))
18143 if (DECL_CLASS_SCOPE_P (fndecl))
18144 error ("%qD is already defined in class %qT", fndecl,
18145 DECL_CONTEXT (fndecl));
18146 return error_mark_node;
18149 check_template_shadow (fndecl);
18151 /* p1779 ABI-Isolation makes inline not a default for in-class
18152 definitions in named module purview. If the user explicitly
18153 made it inline, grokdeclarator will already have done the right
18154 things. */
18155 if ((!named_module_purview_p ()
18156 || flag_module_implicit_inline
18157 /* Lambda's operator function remains inline. */
18158 || LAMBDA_TYPE_P (DECL_CONTEXT (fndecl)))
18159 /* If the user explicitly asked for this to be inline, we don't
18160 need to do more, but more importantly we want to warn if we
18161 can't inline it. */
18162 && !DECL_DECLARED_INLINE_P (fndecl))
18164 if (TREE_PUBLIC (fndecl))
18165 DECL_COMDAT (fndecl) = 1;
18166 DECL_DECLARED_INLINE_P (fndecl) = 1;
18167 /* It's ok if we can't inline this. */
18168 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
18171 /* We process method specializations in finish_struct_1. */
18172 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
18174 /* Avoid calling decl_spec_seq... until we have to. */
18175 bool friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
18176 fndecl = push_template_decl (fndecl, friendp);
18177 if (fndecl == error_mark_node)
18178 return fndecl;
18181 if (DECL_CHAIN (fndecl) && !decl_spec_seq_has_spec_p (declspecs, ds_friend))
18183 fndecl = copy_node (fndecl);
18184 TREE_CHAIN (fndecl) = NULL_TREE;
18187 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
18189 DECL_IN_AGGR_P (fndecl) = 1;
18190 return fndecl;
18194 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
18195 we can lay it out later, when and if its type becomes complete.
18197 Also handle constexpr variables where the initializer involves
18198 an unlowered PTRMEM_CST because the class isn't complete yet. */
18200 void
18201 maybe_register_incomplete_var (tree var)
18203 gcc_assert (VAR_P (var));
18205 /* Keep track of variables with incomplete types. */
18206 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
18207 && DECL_EXTERNAL (var))
18209 tree inner_type = TREE_TYPE (var);
18211 while (TREE_CODE (inner_type) == ARRAY_TYPE)
18212 inner_type = TREE_TYPE (inner_type);
18213 inner_type = TYPE_MAIN_VARIANT (inner_type);
18215 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
18216 /* RTTI TD entries are created while defining the type_info. */
18217 || (TYPE_LANG_SPECIFIC (inner_type)
18218 && TYPE_BEING_DEFINED (inner_type)))
18220 incomplete_var iv = {var, inner_type};
18221 vec_safe_push (incomplete_vars, iv);
18223 else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
18224 && decl_constant_var_p (var)
18225 && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
18227 /* When the outermost open class is complete we can resolve any
18228 pointers-to-members. */
18229 tree context = outermost_open_class ();
18230 incomplete_var iv = {var, context};
18231 vec_safe_push (incomplete_vars, iv);
18236 /* Called when a class type (given by TYPE) is defined. If there are
18237 any existing VAR_DECLs whose type has been completed by this
18238 declaration, update them now. */
18240 void
18241 complete_vars (tree type)
18243 unsigned ix;
18244 incomplete_var *iv;
18246 for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
18248 if (same_type_p (type, iv->incomplete_type))
18250 tree var = iv->decl;
18251 tree type = TREE_TYPE (var);
18253 if (type != error_mark_node
18254 && (TYPE_MAIN_VARIANT (strip_array_types (type))
18255 == iv->incomplete_type))
18257 /* Complete the type of the variable. */
18258 complete_type (type);
18259 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
18260 if (COMPLETE_TYPE_P (type))
18261 layout_var_decl (var);
18264 /* Remove this entry from the list. */
18265 incomplete_vars->unordered_remove (ix);
18267 else
18268 ix++;
18272 /* If DECL is of a type which needs a cleanup, build and return an
18273 expression to perform that cleanup here. Return NULL_TREE if no
18274 cleanup need be done. DECL can also be a _REF when called from
18275 split_nonconstant_init_1. */
18277 tree
18278 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
18280 tree type;
18281 tree attr;
18282 tree cleanup;
18284 /* Assume no cleanup is required. */
18285 cleanup = NULL_TREE;
18287 if (error_operand_p (decl))
18288 return cleanup;
18290 /* Handle "__attribute__((cleanup))". We run the cleanup function
18291 before the destructor since the destructor is what actually
18292 terminates the lifetime of the object. */
18293 if (DECL_P (decl))
18294 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
18295 else
18296 attr = NULL_TREE;
18297 if (attr)
18299 tree id;
18300 tree fn;
18301 tree arg;
18303 /* Get the name specified by the user for the cleanup function. */
18304 id = TREE_VALUE (TREE_VALUE (attr));
18305 /* Look up the name to find the cleanup function to call. It is
18306 important to use lookup_name here because that is what is
18307 used in c-common.cc:handle_cleanup_attribute when performing
18308 initial checks on the attribute. Note that those checks
18309 include ensuring that the function found is not an overloaded
18310 function, or an object with an overloaded call operator,
18311 etc.; we can rely on the fact that the function found is an
18312 ordinary FUNCTION_DECL. */
18313 fn = lookup_name (id);
18314 arg = build_address (decl);
18315 if (!mark_used (decl, complain) && !(complain & tf_error))
18316 return error_mark_node;
18317 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
18318 if (cleanup == error_mark_node)
18319 return error_mark_node;
18321 /* Handle ordinary C++ destructors. */
18322 type = TREE_TYPE (decl);
18323 if (type_build_dtor_call (type))
18325 int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
18326 tree addr;
18327 tree call;
18329 if (TREE_CODE (type) == ARRAY_TYPE)
18330 addr = decl;
18331 else
18332 addr = build_address (decl);
18334 call = build_delete (input_location, TREE_TYPE (addr), addr,
18335 sfk_complete_destructor, flags, 0, complain);
18336 if (call == error_mark_node)
18337 cleanup = error_mark_node;
18338 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
18339 /* Discard the call. */;
18340 else if (decl_maybe_constant_destruction (decl, type)
18341 && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl))
18342 cxx_constant_dtor (call, decl);
18343 else if (cleanup)
18344 cleanup = cp_build_compound_expr (cleanup, call, complain);
18345 else
18346 cleanup = call;
18349 /* build_delete sets the location of the destructor call to the
18350 current location, even though the destructor is going to be
18351 called later, at the end of the current scope. This can lead to
18352 a "jumpy" behavior for users of debuggers when they step around
18353 the end of the block. So let's unset the location of the
18354 destructor call instead. */
18355 protected_set_expr_location (cleanup, UNKNOWN_LOCATION);
18356 if (cleanup && CONVERT_EXPR_P (cleanup))
18357 protected_set_expr_location (TREE_OPERAND (cleanup, 0), UNKNOWN_LOCATION);
18359 if (cleanup
18360 && DECL_P (decl)
18361 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl)))
18362 /* Treat objects with destructors as used; the destructor may do
18363 something substantive. */
18364 && !mark_used (decl, complain) && !(complain & tf_error))
18365 return error_mark_node;
18367 if (cleanup && cfun && !processing_template_decl
18368 && !expr_noexcept_p (cleanup, tf_none))
18369 cp_function_chain->throwing_cleanup = true;
18371 return cleanup;
18375 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
18376 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
18377 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
18379 tree
18380 static_fn_type (tree memfntype)
18382 tree fntype;
18383 tree args;
18385 if (TYPE_PTRMEMFUNC_P (memfntype))
18386 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
18387 if (INDIRECT_TYPE_P (memfntype)
18388 || TREE_CODE (memfntype) == FUNCTION_DECL)
18389 memfntype = TREE_TYPE (memfntype);
18390 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
18391 return memfntype;
18392 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
18393 args = TYPE_ARG_TYPES (memfntype);
18394 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
18395 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype));
18396 fntype = (cp_build_type_attribute_variant
18397 (fntype, TYPE_ATTRIBUTES (memfntype)));
18398 fntype = cxx_copy_lang_qualifiers (fntype, memfntype);
18399 return fntype;
18402 /* DECL was originally constructed as a non-static member function,
18403 but turned out to be static. Update it accordingly. */
18405 void
18406 revert_static_member_fn (tree decl)
18408 tree stype = static_fn_type (decl);
18409 cp_cv_quals quals = type_memfn_quals (stype);
18410 cp_ref_qualifier rqual = type_memfn_rqual (stype);
18412 if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
18413 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
18415 TREE_TYPE (decl) = stype;
18417 if (DECL_ARGUMENTS (decl))
18418 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
18419 DECL_STATIC_FUNCTION_P (decl) = 1;
18422 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
18423 one of the language-independent trees. */
18425 enum cp_tree_node_structure_enum
18426 cp_tree_node_structure (union lang_tree_node * t)
18428 switch (TREE_CODE (&t->generic))
18430 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
18431 case BASELINK: return TS_CP_BASELINK;
18432 case CONSTRAINT_INFO: return TS_CP_CONSTRAINT_INFO;
18433 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
18434 case DEFERRED_PARSE: return TS_CP_DEFERRED_PARSE;
18435 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
18436 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
18437 case BINDING_VECTOR: return TS_CP_BINDING_VECTOR;
18438 case OVERLOAD: return TS_CP_OVERLOAD;
18439 case PTRMEM_CST: return TS_CP_PTRMEM;
18440 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
18441 case TEMPLATE_DECL: return TS_CP_TEMPLATE_DECL;
18442 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
18443 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
18444 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
18445 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
18446 default: return TS_CP_GENERIC;
18450 /* Build the void_list_node (void_type_node having been created). */
18451 tree
18452 build_void_list_node (void)
18454 tree t = build_tree_list (NULL_TREE, void_type_node);
18455 return t;
18458 bool
18459 cp_missing_noreturn_ok_p (tree decl)
18461 /* A missing noreturn is ok for the `main' function. */
18462 return DECL_MAIN_P (decl);
18465 /* Return the decl used to identify the COMDAT group into which DECL should
18466 be placed. */
18468 tree
18469 cxx_comdat_group (tree decl)
18471 /* Virtual tables, construction virtual tables, and virtual table
18472 tables all go in a single COMDAT group, named after the primary
18473 virtual table. */
18474 if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
18475 decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
18476 /* For all other DECLs, the COMDAT group is the mangled name of the
18477 declaration itself. */
18478 else
18480 while (DECL_THUNK_P (decl))
18482 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
18483 into the same section as the target function. In that case
18484 we must return target's name. */
18485 tree target = THUNK_TARGET (decl);
18486 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
18487 && DECL_SECTION_NAME (target) != NULL
18488 && DECL_ONE_ONLY (target))
18489 decl = target;
18490 else
18491 break;
18495 return decl;
18498 /* Returns the return type for FN as written by the user, which may include
18499 a placeholder for a deduced return type. */
18501 tree
18502 fndecl_declared_return_type (tree fn)
18504 fn = STRIP_TEMPLATE (fn);
18505 if (FNDECL_USED_AUTO (fn))
18506 return DECL_SAVED_AUTO_RETURN_TYPE (fn);
18508 return TREE_TYPE (TREE_TYPE (fn));
18511 /* Returns true iff DECL is a variable or function declared with an auto type
18512 that has not yet been deduced to a real type. */
18514 bool
18515 undeduced_auto_decl (tree decl)
18517 if (cxx_dialect < cxx11)
18518 return false;
18519 STRIP_ANY_LOCATION_WRAPPER (decl);
18520 return ((VAR_OR_FUNCTION_DECL_P (decl)
18521 || TREE_CODE (decl) == TEMPLATE_DECL)
18522 && type_uses_auto (TREE_TYPE (decl)));
18525 /* Complain if DECL has an undeduced return type. */
18527 bool
18528 require_deduced_type (tree decl, tsubst_flags_t complain)
18530 if (undeduced_auto_decl (decl))
18532 if (warning_suppressed_p (decl) && seen_error ())
18533 /* We probably already complained about deduction failure. */;
18534 else if (complain & tf_error)
18535 error ("use of %qD before deduction of %<auto%>", decl);
18536 note_failed_type_completion_for_satisfaction (decl);
18537 return false;
18539 return true;
18542 /* Create a representation of the explicit-specifier with
18543 constant-expression of EXPR. COMPLAIN is as for tsubst. */
18545 tree
18546 build_explicit_specifier (tree expr, tsubst_flags_t complain)
18548 if (check_for_bare_parameter_packs (expr))
18549 return error_mark_node;
18551 if (instantiation_dependent_expression_p (expr))
18552 /* Wait for instantiation, tsubst_function_decl will handle it. */
18553 return expr;
18555 expr = build_converted_constant_bool_expr (expr, complain);
18556 expr = instantiate_non_dependent_expr_sfinae (expr, complain);
18557 expr = cxx_constant_value (expr);
18558 return expr;
18561 #include "gt-cp-decl.h"