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)
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. */
31 #include "coretypes.h"
33 #include "c-family/c-target.h"
36 #include "stringpool.h"
38 #include "stor-layout.h"
42 #include "tree-iterator.h"
46 #include "c-family/c-objc.h"
47 #include "c-family/c-pragma.h"
48 #include "c-family/c-ubsan.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. */
60 #include "langhooks-def.h" /* For lhd_simulate_record_decl */
62 /* Possible cases of bad specifiers type used by bad_specifiers. */
64 BSP_VAR
, /* variable */
65 BSP_PARM
, /* parameter */
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.
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[]'
125 tree vtbl_ptr_type_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.
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. */
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
;
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. */
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. */
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. */
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. */
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.) */
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
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
{
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. */
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;
270 /* Scan through the template parameter scopes. */
271 for (b
= current_binding_level
;
272 b
->kind
== sk_template_parms
;
275 /* If we see a specialization scope inside a parameter scope,
276 then something is wrong. That corresponds to a declaration
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;
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
;
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'. */
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
;
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
345 return innermost_specialization_p
? tsk_expl_spec
: tsk_template
;
348 /* Exit the current scope. */
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. */
360 check_label_used (tree label
)
362 if (!processing_template_decl
)
364 if (DECL_INITIAL (label
) == NULL_TREE
)
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
));
375 warn_for_unused_label (label
);
379 /* Helper function to sort named label entries in a vector by DECL_UID. */
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
396 pop_labels (tree block
)
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
);
415 labels
.quick_push (ent
->label_decl
);
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. */
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
;
446 ent
= ggc_cleared_alloc
<named_label_entry
> ();
452 /* The following two routines are used to interface to Objective-C++.
453 The binding level is purposely treated as an opaque type. */
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. */
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
)
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
)
487 /* True if B is the level for the condition of a constexpr if. */
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. */
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
)
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
)
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
;
532 ent
->in_try_scope
= true;
535 ent
->in_catch_scope
= true;
538 ent
->in_omp_scope
= true;
541 ent
->in_transaction_scope
= true;
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;
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;
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
586 If REVERSE is nonzero, reverse the order of decls before putting
587 them into the BLOCK. */
590 poplevel (int keep
, int reverse
, int functionbody
)
593 /* The chain of decls was accumulated in reverse order.
594 Put it into forward order, just for cleanliness. */
601 auto_cond_timevar
tv (TV_NAME_LOOKUP
);
606 gcc_assert (current_binding_level
->kind
!= sk_class
607 && current_binding_level
->kind
!= sk_namespace
);
609 if (current_binding_level
->kind
== sk_cleanup
)
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
)
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
;
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. */
644 /* Avoid function body block if possible. */
645 if (functionbody
&& subblocks
&& BLOCK_CHAIN (subblocks
) == NULL_TREE
)
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. */
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
);
673 && (! TREE_USED (decl
) || !DECL_READ_P (decl
))
674 && ! DECL_IN_SYSTEM_HEADER (decl
)
675 /* For structured bindings, consider only real variables, not
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");
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");
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
))
717 if (TREE_CODE (link
) == TREE_LIST
)
719 decl
= TREE_VALUE (link
);
720 name
= TREE_PURPOSE (link
);
721 gcc_checking_assert (name
);
726 name
= DECL_NAME (decl
);
729 /* Remove the binding. */
730 if (TREE_CODE (decl
) == LABEL_DECL
)
731 pop_local_label (name
, decl
);
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. */
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
);
759 d
= &DECL_CHAIN (*d
);
763 /* If the level being exited is the top level of a function,
764 check over all the labels. */
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;
776 pop_labels (subblocks
);
779 kind
= current_binding_level
->kind
;
780 if (kind
== sk_cleanup
)
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
);
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
;
801 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl
))
803 if (BLOCK_SUBBLOCKS (subblocks
))
804 BLOCK_OUTER_CURLY_BRACE_P (BLOCK_SUBBLOCKS (subblocks
)) = 1;
807 BLOCK_OUTER_CURLY_BRACE_P (subblocks
) = 1;
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. */
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". */
827 TREE_USED (block
) = 1;
829 /* All temporary bindings created for cleanups are popped silently. */
830 if (kind
== sk_cleanup
)
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
);
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. */
870 /* Write out any globals that need to be output. */
871 return wrapup_global_declarations (statics
->address (),
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. */
883 create_implicit_typedef (tree name
, tree type
)
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
892 SET_DECL_IMPLICIT_TYPEDEF_P (decl
);
893 TYPE_NAME (type
) = decl
;
894 TYPE_STUB_DECL (type
) = 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. */
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
];
923 gcc_checking_assert (d
!= decl
);
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. */
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
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
))
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
989 decls_match (tree newdecl
, tree olddecl
, bool record_versions
/* = true */)
993 if (newdecl
== olddecl
)
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. */
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
)
1010 tree t2
= (DECL_USE_TEMPLATE (olddecl
)
1011 ? DECL_TI_TEMPLATE (olddecl
)
1016 if (CP_DECL_CONTEXT (newdecl
) != CP_DECL_CONTEXT (olddecl
)
1017 && ! (DECL_EXTERN_C_P (newdecl
)
1018 && DECL_EXTERN_C_P (olddecl
)))
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
))
1027 tree f1
= TREE_TYPE (newdecl
);
1028 tree f2
= TREE_TYPE (olddecl
);
1029 if (TREE_CODE (f1
) != TREE_CODE (f2
))
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
);
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);
1060 /* Two function declarations match if either has a requires-clause
1061 then both have a requires-clause and their constraints-expressions
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. */
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
)));
1081 else if (TREE_CODE (newdecl
) == TEMPLATE_DECL
)
1083 if (!template_heads_equivalent_p (newdecl
, olddecl
))
1086 tree oldres
= DECL_TEMPLATE_RESULT (olddecl
);
1087 tree newres
= DECL_TEMPLATE_RESULT (newdecl
);
1089 if (TREE_CODE (newres
) != TREE_CODE (oldres
))
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
));
1097 types_match
= decls_match (newres
, oldres
);
1101 /* Need to check scope for variable declaration (VAR_DECL).
1102 For typedef (TYPE_DECL), scope is ignored. */
1104 && CP_DECL_CONTEXT (newdecl
) != CP_DECL_CONTEXT (olddecl
)
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
1110 && !(DECL_EXTERN_C_P (olddecl
) && DECL_EXTERN_C_P (newdecl
)))
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
)
1120 types_match
= comptypes (TREE_TYPE (newdecl
),
1121 TREE_TYPE (olddecl
),
1122 COMPARE_REDECLARATION
);
1128 /* Mark DECL as versioned if it isn't already. */
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
))
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. */
1148 maybe_version_functions (tree newdecl
, tree olddecl
, bool record
)
1150 if (!targetm
.target_option
.function_versions (newdecl
, olddecl
))
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
);
1172 cgraph_node::record_function_versions (olddecl
, newdecl
);
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. */
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
)
1195 /* Don't get confused by static member functions; that's a different
1197 if (TREE_CODE (newdecl
) == FUNCTION_DECL
1198 && DECL_STATIC_FUNCTION_P (newdecl
))
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
))
1206 /* It's OK to declare a builtin function as `static'. */
1207 if (TREE_CODE (olddecl
) == FUNCTION_DECL
1208 && DECL_ARTIFICIAL (olddecl
))
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. */
1223 check_redeclaration_exception_specification (tree new_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
))
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
));
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
);
1264 error_at (new_loc
, msg
, new_decl
);
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. */
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
))
1282 if (DECL_DECLARED_CONSTEXPR_P (old_decl
)
1283 == DECL_DECLARED_CONSTEXPR_P (new_decl
))
1285 if (TREE_CODE (old_decl
) != FUNCTION_DECL
)
1287 if (DECL_IMMEDIATE_FUNCTION_P (old_decl
)
1288 == DECL_IMMEDIATE_FUNCTION_P (new_decl
))
1291 if (TREE_CODE (old_decl
) == FUNCTION_DECL
)
1293 /* With -fimplicit-constexpr, ignore changes in the constexpr
1295 if (flag_implicit_constexpr
1296 && (DECL_IMMEDIATE_FUNCTION_P (new_decl
)
1297 == DECL_IMMEDIATE_FUNCTION_P (old_decl
)))
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
);
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
))
1315 const char *kind
= "constexpr";
1316 if (DECL_IMMEDIATE_FUNCTION_P (old_decl
)
1317 || DECL_IMMEDIATE_FUNCTION_P (new_decl
))
1319 error_at (DECL_SOURCE_LOCATION (new_decl
),
1320 "redeclaration %qD differs in %qs "
1321 "from previous declaration", new_decl
,
1323 inform (DECL_SOURCE_LOCATION (old_decl
),
1324 "previous declaration %qD", old_decl
);
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.
1334 check_concept_refinement (tree olddecl
, tree newdecl
)
1336 if (!DECL_DECLARED_CONCEPT_P (olddecl
) || !DECL_DECLARED_CONCEPT_P (newdecl
))
1339 tree d1
= DECL_TEMPLATE_RESULT (olddecl
);
1340 tree d2
= DECL_TEMPLATE_RESULT (newdecl
);
1341 if (TREE_CODE (d1
) != TREE_CODE (d2
))
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
);
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. */
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 "
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." */
1390 check_no_redeclaration_friend_default_args (tree olddecl
, tree newdecl
)
1392 if (!DECL_UNIQUE_FRIEND_P (olddecl
) && !DECL_UNIQUE_FRIEND_P (newdecl
))
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
);
1412 /* Merge tree bits that correspond to attributes noreturn, nothrow,
1413 const, malloc, and pure from NEWDECL with those of OLDDECL. */
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. */
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
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
);
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. */
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. */
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");
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
;
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
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. */
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
)
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. */
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",
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
,
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. */
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",
1589 error_at (newdecl_loc
,
1590 "declaration of %q#D conflicts with built-in "
1591 "declaration %q#D", newdecl
, olddecl
);
1594 else if (!types_match
)
1596 /* Avoid warnings redeclaring built-ins which have not been
1597 explicitly declared. */
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
))
1609 for (t1
= TYPE_ARG_TYPES (TREE_TYPE (newdecl
)),
1610 t2
= TYPE_ARG_TYPES (TREE_TYPE (olddecl
));
1612 t1
= TREE_CHAIN (t1
), t2
= TREE_CHAIN (t2
))
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
);
1622 if (TREE_VALUE (t2
) == builtin_structptr_types
[i
].node
)
1624 tree t
= TREE_VALUE (t1
);
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
);
1637 return duplicate_decls (newdecl
, olddecl
,
1638 hiding
, was_hidden
);
1639 TYPE_ARG_TYPES (TREE_TYPE (olddecl
)) = oldargs
;
1644 if (! same_type_p (TREE_VALUE (t1
), TREE_VALUE (t2
)))
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
1662 if (fndecl_built_in_p (olddecl
))
1664 tree id
= DECL_NAME (olddecl
);
1665 const char *name
= IDENTIFIER_POINTER (id
);
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
)
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
);
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
);
1707 /* Discard the old built-in function. */
1710 /* Replace the old RTL to avoid problems with inlining. */
1711 COPY_DECL_RTL (newdecl
, olddecl
);
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
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
1785 if (!UDLIT_OPER_P (DECL_NAME (newdecl
)))
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
);
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. */
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. */
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
;
1849 else if (check_concept_refinement (olddecl
, newdecl
))
1850 return error_mark_node
;
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",
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
;
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. */
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. */
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
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
)))
1944 /* Leave it to update_binding to merge or report error. */
1949 const char *errmsg
= redeclaration_error_message (newdecl
, olddecl
);
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
))
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
1998 which is clearly wrong. Therefore, we now treat objects
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
));
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
)
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
);
2043 = DECL_INNERMOST_TEMPLATE_PARMS (DECL_TI_TEMPLATE (olddecl
));
2044 merge_default_template_args (new_parms
, old_parms
,
2050 tree t1
= FUNCTION_FIRST_USER_PARMTYPE (olddecl
);
2051 tree t2
= FUNCTION_FIRST_USER_PARMTYPE (newdecl
);
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",
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",
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:
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
)))
2102 if (DECL_TEMPLATE_PARM_P (olddecl
) != DECL_TEMPLATE_PARM_P (newdecl
))
2105 if (!validate_constexpr_redeclaration (olddecl
, newdecl
))
2106 return error_mark_node
;
2109 && TREE_CODE (CP_DECL_CONTEXT (olddecl
)) == NAMESPACE_DECL
2110 && TREE_CODE (olddecl
) != NAMESPACE_DECL
2113 if (DECL_ARTIFICIAL (olddecl
))
2115 if (!(global_purview_p () || not_module_p ()))
2116 error ("declaration %qD conflicts with builtin", newdecl
);
2118 DECL_MODULE_EXPORT_P (olddecl
) = DECL_MODULE_EXPORT_P (newdecl
);
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,
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
)
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. */
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
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
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",
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
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. */
2260 DECL_ATTRIBUTES (newdecl
)
2261 = (*targetm
.merge_decl_attributes
) (olddecl
, newdecl
);
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
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
,
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;
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
);
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
))
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
);
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
);
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
);
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
2395 if (tree orig
= DECL_ORIGINAL_TYPE (newdecl
))
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
));
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
);
2416 else if (merge_attr
)
2417 newtype
= merge_types (TREE_TYPE (newdecl
), TREE_TYPE (olddecl
));
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;
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
);
2544 merge_attribute_bits (newdecl
, olddecl
);
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
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. */
2571 /* Clean out any memory we had of the old declaration. */
2572 tree oldstatic
= value_member (olddecl
, static_aggregates
);
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;
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
)
2696 /* Merge parameter attributes. */
2697 tree oldarg
, newarg
;
2698 for (oldarg
= DECL_ARGUMENTS(olddecl
), newarg
= DECL_ARGUMENTS(newdecl
);
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",
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
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;
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
;
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
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. */
2822 case BUILT_IN_STPCPY
:
2823 set_builtin_decl_implicit_p (fncode
, true);
2826 set_builtin_decl_declared_p (fncode
, true);
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
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
2936 cgraph_node::delete_function_version_by_decl (newdecl
);
2939 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
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
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
,
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
))
3001 struct symtab_node
*snode
= NULL
;
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
;
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 *));
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
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
);
3043 oldsym
= varpool_node::get_create (olddecl
);
3044 newsym
= symtab_node::get (newdecl
);
3045 oldsym
->set_comdat_group (newsym
->get_comdat_group ());
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
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
);
3090 if (TREE_CODE (olddecl
) == FUNCTION_DECL
)
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. */
3103 remove_constraints (newdecl
);
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. */
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
)))
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
)
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
);
3167 return G_("%q+D redeclared inline with "
3168 "%<gnu_inline%> attribute");
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
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
)));
3193 else if (TREE_CODE (newdecl
) == TEMPLATE_DECL
)
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
))
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
);
3225 return G_("%q+D redeclared inline with "
3226 "%<gnu_inline%> attribute");
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");
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");
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:
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:
3290 if (DECL_EXTERNAL (newdecl
) || DECL_EXTERNAL (olddecl
))
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
3297 if (cxx_dialect
>= cxx17
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
);
3317 /* Reject two definitions. */
3318 return G_("redefinition of %q#D");
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");
3332 /* Hash and equality functions for the named_label table. */
3335 named_label_hash::hash (const value_type entry
)
3337 return IDENTIFIER_HASH_VALUE (entry
->name
);
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
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
);
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
)
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");
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
)
3389 ent
= ggc_cleared_alloc
<named_label_entry
> ();
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
);
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
;
3412 /* Wrapper for lookup_label_1. */
3415 lookup_label (tree id
)
3417 named_label_entry
*ent
= lookup_label_1 (id
, false);
3418 return ent
? ent
->label_decl
: NULL_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. */
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
)
3446 if (DECL_NONTRIVIALLY_INITIALIZED_P (decl
)
3447 || variably_modified_type_p (type
, NULL_TREE
))
3450 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
))
3456 /* A subroutine of check_previous_goto_1 and check_goto to identify a branch
3460 identify_goto (tree decl
, location_t loc
, const location_t
*locus
,
3461 diagnostic_t diag_kind
)
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");
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. */
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;
3485 bool saw_eh
= false, saw_omp
= false, saw_tm
= false, saw_cxif
= false;
3486 bool saw_ceif
= false;
3490 complained
= identify_goto (decl
, input_location
, locus
, DK_ERROR
);
3492 inform (input_location
, " exits OpenMP structured block");
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
);
3511 complained
= identify_goto (decl
, input_location
, locus
,
3513 ? DK_ERROR
: DK_PERMERROR
);
3519 inform (DECL_SOURCE_LOCATION (new_decls
),
3520 " crosses initialization of %q#D", new_decls
);
3522 inform (DECL_SOURCE_LOCATION (new_decls
),
3523 " enters scope of %q#D, which has "
3524 "non-trivial destructor", new_decls
);
3531 const char *inf
= NULL
;
3532 location_t loc
= input_location
;
3537 inf
= G_(" enters %<try%> block");
3543 inf
= G_(" enters %<catch%> block");
3549 inf
= G_(" enters OpenMP structured block");
3553 case sk_transaction
:
3555 inf
= G_(" enters synchronized or atomic statement");
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
);
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
);
3581 complained
= identify_goto (decl
, input_location
, locus
, DK_ERROR
);
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
);
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. */
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
)
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
)
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. */
3632 && ent
->uses
->names_in_scope
== current_binding_level
->names
)
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
;
3647 bool saw_catch
= false, complained
= false;
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
);
3680 inform (DECL_SOURCE_LOCATION (bad
), " enters %<catch%> block");
3683 else if (complained
)
3686 inform (DECL_SOURCE_LOCATION (bad
),
3687 " skips initialization of %q#D", bad
);
3689 inform (DECL_SOURCE_LOCATION (bad
),
3690 " enters scope of %q#D which has "
3691 "non-trivial destructor", bad
);
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
)
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
)
3719 if (b
->kind
== sk_omp
)
3723 complained
= identify_goto (decl
,
3724 DECL_SOURCE_LOCATION (decl
),
3725 &input_location
, DK_ERROR
);
3729 inform (input_location
, " exits OpenMP structured block");
3735 /* Check that a return is ok wrt OpenMP structured blocks.
3736 Called by finish_return_stmt. Returns true if all is well. */
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");
3747 else if (b
->kind
== sk_function_parms
)
3752 /* Define a label, specifying the location in the source file.
3753 Return the LABEL_DECL node for the label. */
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
;
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
;
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
);
3795 cp_binding_level
*level
;
3796 struct cp_switch
*next
;
3797 /* The SWITCH_STMT being built. */
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. */
3805 /* Remember whether a default: case label has been seen. */
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. */
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;
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
,
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
;
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. */
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. */
3895 note_iteration_stmt_body_start (void)
3899 bool ret
= switch_stack
->in_loop_body_p
;
3900 switch_stack
->in_loop_body_p
= true;
3904 /* Note the end of processing of an iteration statement's body. */
3907 note_iteration_stmt_body_end (bool prev
)
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. */
3919 case_conversion (tree type
, tree value
)
3921 if (value
== NULL_TREE
)
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. */;
3940 /* The already integral case. */
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. */
3950 finish_case_label (location_t loc
, tree low_value
, tree high_value
)
3953 cp_binding_level
*p
;
3956 if (low_value
== NULL_TREE
&& high_value
== NULL_TREE
)
3957 switch_stack
->has_default_p
= true;
3959 if (processing_template_decl
)
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
;
3991 p
->more_cleanups_ok
= 0;
3996 struct typename_info
{
4004 struct typename_hasher
: ggc_ptr_hash
<tree_node
>
4006 typedef typename_info
*compare_type
;
4008 /* Hash a TYPENAME_TYPE. */
4015 hash
= (htab_hash_pointer (TYPE_CONTEXT (t
))
4016 ^ htab_hash_pointer (TYPE_IDENTIFIER (t
)));
4021 /* Compare two TYPENAME_TYPEs. */
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
;
4042 build_typename_type (tree context
, tree name
, tree fullname
,
4043 enum tag_types tag_type
)
4047 if (typename_htab
== NULL
)
4048 typename_htab
= hash_table
<typename_hasher
>::create_ggc (61);
4050 ti
.scope
= FROB_CONTEXT (context
);
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
);
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
);
4077 TYPE_STUB_DECL (t
) = d
;
4078 DECL_CONTEXT (d
) = ti
.scope
;
4079 DECL_ARTIFICIAL (d
) = 1;
4081 /* Store it in the hash table. */
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
);
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. */
4102 make_typename_type (tree context
, tree name
, enum tag_types tag_type
,
4103 tsubst_flags_t complain
)
4109 if (name
== error_mark_node
4110 || context
== NULL_TREE
4111 || context
== error_mark_node
)
4112 return error_mark_node
;
4116 if (!(TYPE_LANG_SPECIFIC (name
)
4117 && (CLASSTYPE_IS_TEMPLATE (name
)
4118 || CLASSTYPE_USE_TEMPLATE (name
))))
4119 name
= TYPE_IDENTIFIER (name
);
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
);
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);
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
;
4186 if (complain
& tf_error
)
4188 if (!COMPLETE_TYPE_P (context
))
4189 cxx_incomplete_type_error (NULL_TREE
, context
);
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). */
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",
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). */;
4226 if (complain
& tf_error
)
4227 error ("%<typename %T::%D%> names %q#T, which is not a type",
4229 return error_mark_node
;
4233 if (!check_accessibility_of_qualified_id (t
, /*object_type=*/NULL_TREE
,
4235 return error_mark_node
;
4237 if (!want_template
&& DECL_TYPE_TEMPLATE_P (t
))
4238 return make_template_placeholder (t
);
4242 t
= lookup_template_class (t
, TREE_OPERAND (fullname
, 1),
4244 /*entering_scope=*/0,
4245 complain
| tf_user
);
4246 if (t
== error_mark_node
)
4247 return error_mark_node
;
4251 if (DECL_ARTIFICIAL (t
) || !(complain
& tf_keep_type_decl
))
4254 maybe_record_typedef_use (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. */
4269 make_unbound_class_template (tree context
, tree name
, tree parm_list
,
4270 tsubst_flags_t complain
)
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
;
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
,
4310 return error_mark_node
;
4315 return make_unbound_class_template_raw (context
, name
, parm_list
);
4318 /* Build an UNBOUND_CLASS_TEMPLATE. */
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
);
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
;
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. */
4354 record_builtin_type (enum rid rid_index
,
4358 tree decl
= NULL_TREE
;
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
);
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
);
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. */
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. */
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
;
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. */
4488 cxx_init_decl_processing (void)
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
,
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
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
;
4522 current_lang_name
= lang_name_c
;
4524 /* Create the `std' namespace. */
4525 push_namespace (get_identifier ("std"));
4526 std_node
= current_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
);
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
,
4549 = add_builtin_function ("__builtin_is_corresponding_member",
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
);
4556 = add_builtin_function ("__builtin_is_pointer_interconvertible_with_class",
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
),
4582 record_builtin_type (RID_MAX
, NULL
, string_type_node
);
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
);
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
4598 conv_op_marker
= build_lang_decl (FUNCTION_DECL
, conv_op_identifier
,
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
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
);
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
;
4645 any_targ_node
= make_node (LANG_TYPE
);
4646 record_unknown_type (any_targ_node
, "any type");
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
;
4670 = build_function_type_list (ptr_type_node
, size_type_node
, NULL_TREE
);
4671 if (cxx_dialect
== cxx98
)
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
;
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
);
4687 = add_exception_specifier (NULL_TREE
, bad_alloc_type_node
, -1);
4690 new_eh_spec
= noexcept_false_spec
;
4692 /* Ensure attribs.cc is initialized. */
4695 extvisattr
= build_tree_list (get_identifier ("externally_visible"),
4697 newattrs
= tree_cons (get_identifier ("alloc_size"),
4698 build_tree_list (NULL_TREE
, integer_one_node
),
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
,
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
,
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 ())
4804 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype
,
4805 ECF_NORETURN
| ECF_NOTHROW
| ECF_COLD
);
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 ();
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. */
4870 push_abi_namespace (tree node
)
4872 push_nested_namespace (node
);
4873 push_visibility ("default", 2);
4874 unsigned flags
= module_kind
;
4879 /* Pop an abi namespace, FLAGS is the cookie push_abi_namespace gave
4883 pop_abi_namespace (unsigned flags
, tree node
)
4885 module_kind
= flags
;
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. */
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
)
4910 else if (type_dep
== 0)
4913 name
= fname_as_string (type_dep
);
4914 release_name
= true;
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
);
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
);
4934 TREE_TYPE (init
) = type
;
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
);
4961 DECL_THIS_STATIC (decl
) = true;
4962 decl
= pushdecl_top_level_and_finish (decl
, NULL_TREE
);
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 '_*'. */
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. */
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. */
4998 /* All builtins that don't begin with an '_' should additionally
4999 go in the 'std' namespace. */
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
);
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
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
);
5032 /* Implement LANG_HOOKS_SIMULATE_BUILTIN_FUNCTION_DECL. */
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. */
5049 build_library_fn (tree name
, enum tree_code operator_code
, tree type
,
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
);
5067 /* Returns the _DECL for a library function with C++ linkage. */
5070 build_cp_library_fn (tree name
, enum tree_code operator_code
, tree type
,
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
);
5079 /* Like build_library_fn, but takes a C string instead of an
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
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
,
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. */
5103 push_library_fn (tree name
, tree type
, tree raises
, int ecf_flags
)
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. */
5116 push_cp_library_fn (enum tree_code operator_code
, tree type
,
5119 tree fn
= build_cp_library_fn (ovl_op_identifier (false, operator_code
),
5120 operator_code
, type
, ecf_flags
);
5123 apply_tm_attr (fn
, get_identifier ("transaction_safe"));
5127 /* Like push_library_fn, but also note that this function throws
5128 and does not return. Used for __throw_foo and the like. */
5131 push_throw_library_fn (tree name
, tree type
)
5133 tree fn
= push_library_fn (name
, type
, NULL_TREE
, ECF_NORETURN
| ECF_COLD
);
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
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
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
);
5165 prev_p
= &DECL_CHAIN (probe
);
5167 if (DECL_ARTIFICIAL (probe
)
5168 && (!DECL_IMPLICIT_TYPEDEF_P (probe
)
5169 || TYPE_ANON_P (TREE_TYPE (probe
))))
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. */
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
))
5188 if (flag_permissive
&& !hint
)
5191 inform (DECL_SOURCE_LOCATION (probe
),
5192 "this flexibility is deprecated and will be "
5200 /* Splice all functions out of CLASSTYPE_MEMBER_VEC. */
5201 vec
<tree
,va_gc
>* vec
= CLASSTYPE_MEMBER_VEC (t
);
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
)
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. */
5251 warn_misplaced_attr_for_class_type (location_t location
,
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
))
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. */
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
;
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. */
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
);
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
)
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
5357 error_at (declspecs
->locations
[ds_typedef
],
5358 "missing type-name in typedef-declaration");
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");
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");
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 "
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 "
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 "
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 "
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 "
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
)
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
);
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
5437 if (warning_at (loc
, OPT_Wattributes
,
5438 "attribute ignored in explicit instantiation %q#T",
5441 "no attribute can be applied to "
5442 "an explicit instantiation");
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. */
5465 shadow_tag (cp_decl_specifier_seq
*declspecs
)
5467 tree t
= check_tag_decl (declspecs
,
5468 /*explicit_type_instantiation_p=*/false);
5473 if (maybe_process_partial_specialization (t
) == error_mark_node
)
5476 /* This is where the variables in an anonymous union are
5477 declared. An anonymous union declaration looks like:
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
);
5496 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
5499 groktypename (cp_decl_specifier_seq
*type_specifiers
,
5500 const cp_declarator
*declarator
,
5501 bool is_template_arg
)
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
);
5520 cplus_decl_attributes (&type
, attrs
, 0);
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
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. */
5549 start_decl (const cp_declarator
*declarator
,
5550 cp_decl_specifier_seq
*declspecs
,
5553 tree prefix_attributes
,
5554 tree
*pushed_scope_p
)
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
,
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)",
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
);
5594 if (! toplevel_bindings_p ()
5595 && DECL_EXTERNAL (decl
))
5596 warning (0, "declaration of %q#D has %<extern%> and is initialized",
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
;
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
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
));
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
;
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
;
5701 tree field
= check_classfn (context
, decl
,
5703 ? current_template_parms
5705 if (field
&& field
!= error_mark_node
5706 && duplicate_decls (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
));
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. */
5738 permerror (declarator
->id_loc
,
5739 "declaration of %q#D outside of class is not definition",
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 ()
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
;
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
)
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");
5805 cp_function_chain
->invalid_constexpr
= true;
5808 if (!processing_template_decl
&& VAR_P (decl
))
5809 start_decl_1 (decl
, initialized
);
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. */
5822 start_decl_1 (tree decl
, bool initialized
)
5824 gcc_checking_assert (!processing_template_decl
);
5826 if (error_operand_p (decl
))
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
)
5843 && COMPLETE_TYPE_P (complete_type (type
)))
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
);
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. */
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
));
5879 error ("aggregate %q#D has incomplete type and cannot be defined",
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. */
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
))
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
,
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;
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. */
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
);
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
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. */
5974 init
= do_aggregate_paren_init (init
, ttype
);
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
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. */
6019 check_array_designated_initializer (constructor_elt
*ce
,
6020 unsigned HOST_WIDE_INT index
)
6022 /* Designated initializers for array elements are not supported. */
6025 /* The parser only allows identifiers as designated
6027 if (ce
->index
== error_mark_node
)
6029 error ("name used in a GNU-style designated "
6030 "initializer for an array");
6033 else if (identifier_p (ce
->index
))
6035 error ("name %qD used in a GNU-style designated "
6036 "initializer for an array", ce
->index
);
6040 tree ce_index
= build_expr_type_conversion (WANT_INT
| WANT_ENUM
,
6043 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index
))
6044 && (TREE_CODE (ce_index
= fold_non_dependent_expr (ce_index
))
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
;
6054 sorry ("non-trivial designated initializers not supported");
6057 error_at (cp_expr_loc_or_input_loc (ce
->index
),
6058 "C99 designator %qE is not an integral constant-expression",
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. */
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
);
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
6090 if (initializer
&& BRACE_ENCLOSED_INITIALIZER_P (initializer
))
6092 vec
<constructor_elt
, va_gc
> *v
= CONSTRUCTOR_ELTS (initializer
);
6093 constructor_elt
*ce
;
6095 FOR_EACH_VEC_SAFE_ELT (v
, i
, ce
)
6097 if (instantiation_dependent_expression_p (ce
->index
))
6099 if (!check_array_designated_initializer (ce
, i
))
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
))
6110 TREE_TYPE (decl
) = error_mark_node
;
6113 failure
= cp_complete_array_type (&TREE_TYPE (decl
), initializer
,
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)
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. */
6152 layout_var_decl (tree decl
)
6156 type
= TREE_TYPE (decl
);
6157 if (type
== error_mark_node
)
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
;
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
));
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
));
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 ();
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
))
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. */
6246 maybe_commonize_var (tree decl
)
6248 /* Don't mess with __FUNCTION__ and similar. */
6249 if (DECL_ARTIFICIAL (decl
))
6252 /* Static data in a function with comdat linkage also has comdat
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
)))
6261 /* With weak symbols, we simply make the variable COMDAT;
6262 that will cause copies in multiple translations units to
6264 comdat_linkage (decl
);
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;
6278 /* While for initialized variables, we must use internal
6279 linkage -- which means that multiple copies will not
6281 TREE_PUBLIC (decl
) = 0;
6282 DECL_COMMON (decl
) = 0;
6283 DECL_INTERFACE_KNOWN (decl
) = 1;
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)");
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,
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,
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
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
);
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
);
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%> "
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",
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
);
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
);
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. */
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
6396 next_initializable_field (tree 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
);
6412 /* Return true for [dcl.init.list] direct-list-initialization from
6413 single element of enumeration with a fixed underlying type. */
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
))
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. */
6441 reshape_init_array_1 (tree elt_type
, tree max_index
, reshape_iter
*d
,
6442 tree first_initializer_p
, tsubst_flags_t complain
)
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
));
6458 new_init
= first_initializer_p
;
6460 new_init
= build_constructor (init_list_type_node
, NULL
);
6464 /* Minus 1 is used for zero sized arrays. */
6465 if (integer_all_onesp (max_index
))
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. */
6472 max_index_cst
= tree_to_uhwi (fold_convert (size_type_node
, max_index
));
6475 /* Loop until there are no more initializers. */
6477 d
->cur
!= d
->end
&& (!sized_array_p
|| index
<= max_index_cst
);
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
,
6487 if (elt_init
== error_mark_node
)
6488 return error_mark_node
;
6489 tree idx
= size_int (index
);
6492 old_cur
->index
= idx
;
6493 old_cur
->value
= elt_init
;
6496 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_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
)
6509 /* Subroutine of reshape_init_r, processes the initializers for arrays.
6510 Parameters are the same of reshape_init_r. */
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. */
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
;
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. */
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
,
6574 /* Subroutine of reshape_init_r, processes the initializers for classes
6575 or union. Parameters are the same of reshape_init_r. */
6578 reshape_init_class (tree type
, reshape_iter
*d
, bool first_initializer_p
,
6579 tsubst_flags_t complain
)
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
);
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. */
6598 BINFO_BASE_ITERATE (binfo
, binfo_idx
, base_binfo
);
6603 field
= next_initializable_field (TYPE_FIELDS (type
));
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
;
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
)
6628 constructor_elt
*old_cur
= d
->cur
;
6629 bool direct_desig
= false;
6631 /* Handle C++20 designated initializers. */
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;
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. */
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
,
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
))
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
;
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
)
6702 gcc_assert (aafield
);
6704 direct_desig
= false;
6708 /* If we processed all the member of the class, we are done. */
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. */
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
);
6736 field_init
= reshape_init_r (TREE_TYPE (field
), d
,
6737 /*first_initializer_p=*/NULL_TREE
,
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
);
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
)
6765 if (BINFO_BASE_ITERATE (binfo
, ++binfo_idx
, base_binfo
))
6768 field
= next_initializable_field (TYPE_FIELDS (type
));
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
)
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. */
6792 has_designator_problem (reshape_iter
*d
, tsubst_flags_t complain
)
6796 if (complain
& tf_error
)
6797 error_at (cp_expr_loc_or_input_loc (d
->cur
->index
),
6798 "C99 designator %qE outside aggregate initializer",
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. */
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. */
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
);
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
;
6850 init
= build_constructor (init_list_type_node
, v
);
6855 /* A non-aggregate type is always initialized with a single
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",
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
;
6895 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS
);
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. */
6909 && d
->end
- d
->cur
== 1
6910 && reference_related_p (type
, TREE_TYPE (init
)))
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
,
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
;
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
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
))
7013 /* Something that hasn't been reshaped yet. */
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",
7024 braces_elided_p
= true;
7027 /* Dispatch to specialized routines. */
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
);
7039 && TREE_CODE (new_init
) == CONSTRUCTOR
)
7040 CONSTRUCTOR_BRACES_ELIDED_P (new_init
) = true;
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. */
7061 reshape_init (tree type
, tree init
, tsubst_flags_t complain
)
7063 vec
<constructor_elt
, va_gc
> *v
;
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
7073 if (vec_safe_is_empty (v
))
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
)
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
);
7105 return error_mark_node
;
7108 /* Recurse on this CONSTRUCTOR. */
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. */
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;
7135 /* Verify array initializer. Returns true if errors have been reported. */
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. */
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
;
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
)))
7161 error_at (DECL_SOURCE_LOCATION (decl
),
7162 "elements of array %q#D have incomplete type", decl
);
7164 error ("elements of array %q#T have incomplete type", type
);
7168 location_t loc
= (decl
? location_of (decl
) : input_location
);
7169 if (!verify_type_context (loc
, TCTX_ARRAY_ELEMENT
, element_type
))
7172 /* A compound literal can't have variable size. */
7174 && ((COMPLETE_TYPE_P (type
) && !TREE_CONSTANT (TYPE_SIZE (type
)))
7175 || !TREE_CONSTANT (TYPE_SIZE (element_type
))))
7177 error ("variable-sized compound literal");
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. */
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. */
7202 check_initializer (tree decl
, tree init
, int flags
, vec
<tree
, va_gc
> **cleanups
)
7205 tree init_code
= NULL
;
7208 /* Things that are going to be initialized need to have complete
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
);
7220 if (type
== error_mark_node
)
7221 /* We will have already complained. */
7224 if (TREE_CODE (type
) == ARRAY_TYPE
)
7226 if (check_array_initializer (decl
, type
, init
))
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
;
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
))
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
;
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
);
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
;
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
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 %<{...}%>",
7302 else if (VECTOR_TYPE_P (type
) && TYPE_VECTOR_OPAQUE (type
))
7304 error ("opaque vector types cannot be initialized");
7305 init
= error_mark_node
;
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
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
)
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. */
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
);
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
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
);
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
,
7405 if (TREE_CODE (init
) == TARGET_EXPR
)
7406 TARGET_EXPR_DIRECT_INIT_P (init
) = true;
7408 init_code
= 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
));
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,
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
;
7461 /* We might have set these in cp_finish_decl. */
7462 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl
) = false;
7463 TREE_CONSTANT (decl
) = false;
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
);
7478 error ("non-constant in-class initialization invalid for non-inline "
7479 "static member %qD", decl
);
7482 inform (input_location
,
7483 "(an out of class initialization is required)");
7492 /* If DECL is not a local variable, give it RTL. */
7495 make_rtl_for_nonlocal_decl (tree decl
, tree init
, const char* asmspec
)
7497 int toplev
= toplevel_bindings_p ();
7500 /* Set the DECL_ASSEMBLER_NAME for the object. */
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;
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. */
7531 rest_of_decl_compilation (decl
, toplev
, at_eof
);
7535 /* If we see a class member here, it should be a static data
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
))
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
))
7563 /* If we're not deferring, go ahead and assemble the variable. */
7565 rest_of_decl_compilation (decl
, toplev
, at_eof
);
7568 /* walk_tree helper for wrap_temporary_cleanups, below. */
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
)
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
7592 TRY_CATCH_IS_CLEANUP (tcleanup
) = 1;
7593 TARGET_EXPR_CLEANUP (*stmt_p
) = tcleanup
;
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
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. */
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
));
7632 cp_walk_tree_without_duplicates (&init
, wrap_cleanups_r
, (void *)guard
);
7635 /* Generate code to initialize DECL (a local variable). */
7638 initialize_local_var (tree decl
, tree init
)
7640 tree type
= TREE_TYPE (decl
);
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
);
7656 if (type
== error_mark_node
)
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. */
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
))
7683 warning_at (DECL_SOURCE_LOCATION (decl
),
7685 "reference %qD is initialized with itself", decl
);
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
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
)
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;
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
7731 initialize_artificial_var (tree decl
, vec
<constructor_elt
, va_gc
> *v
)
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
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. */
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
)))
7764 vec
<constructor_elt
, va_gc
> *elts
;
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
))
7775 /* It must be a simple expression, e.g., int i = 3; */
7776 return value_dependent_expression_p (init
);
7781 // Returns true if a DECL is VAR_DECL with the concept specifier.
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. */
7795 notice_forced_label_r (tree
*tp
, int *walk_subtrees
, void *)
7799 if (TREE_CODE (*tp
) == LABEL_DECL
)
7800 cfun
->has_forced_label_in_static
= 1;
7804 /* Return true if DECL has either a trivial destructor, or for C++20
7805 is constexpr and has a constexpr destructor. */
7808 decl_maybe_constant_destruction (tree decl
, tree type
)
7810 return (TYPE_HAS_TRIVIAL_DESTRUCTOR (type
)
7811 || (cxx_dialect
>= cxx20
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
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");
7839 = c_omp_declare_simd_clauses_to_numbers (DECL_ARGUMENTS (decl
),
7841 /* FIXME, adjusting simd args unimplemented. */
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
;
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
)));
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
7873 || (TREE_CODE (variant
) == TEMPLATE_ID_EXPR
7874 && identifier_p (TREE_OPERAND (variant
, 0))))
7876 if (!args
->is_empty ())
7879 if (!any_type_dependent_arguments_p (args
))
7880 variant
= perform_koenig_lookup (variant
, args
,
7881 tf_warning_or_error
);
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
)))
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
);
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
)
7911 variant
= cp_get_callee_fndecl_nofold (variant
);
7912 input_location
= save_loc
;
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
);
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
);
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
))
7937 TREE_PURPOSE (TREE_VALUE (attr
)) = variant
;
7940 else if (!processing_template_decl
)
7942 error_at (varid_loc
, "could not find variant declaration");
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"
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
);
7969 else if (DECL_DESTRUCTOR_P (decl
))
7971 error_at (match_loc
, "%<declare variant%> on destructor %qD", decl
);
7974 else if (DECL_DEFAULTED_FN (decl
))
7976 error_at (match_loc
, "%<declare variant%> on defaulted %qD", decl
);
7979 else if (DECL_DELETED_FN (decl
))
7981 error_at (match_loc
, "%<declare variant%> on deleted %qD", decl
);
7984 else if (DECL_VIRTUAL_P (decl
))
7986 error_at (match_loc
, "%<declare variant%> on virtual %qD", decl
);
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. */
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
);
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. */
8021 cp_finish_decl (tree decl
, tree init
, bool init_const_expr_p
,
8022 tree asmspec_tree
, int flags
)
8025 vec
<tree
, va_gc
> *cleanups
= NULL
;
8026 const char *asmspec
= NULL
;
8027 int was_readonly
= 0;
8028 bool var_definition_p
= false;
8031 if (decl
== error_mark_node
)
8036 error ("assignment (not initialization) in declaration");
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
)
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 "
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
);
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
));
8077 && (DECL_INITIAL (decl
) || init
))
8078 DECL_INITIALIZED_IN_CLASS_P (decl
) = 1;
8081 && (auto_node
= type_uses_auto (type
)))
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);
8096 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (auto_node
));
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
)
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
;
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
;
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
))
8151 DECL_EXTERNAL (decl
) = 1;
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
)
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
;
8187 else if (init
== ridpointers
[(int)RID_DEFAULT
])
8189 if (defaultable_fn_check (decl
))
8190 DECL_DEFAULTED_FN (decl
) = 1;
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;
8217 && TREE_CODE (decl
) == FUNCTION_DECL
8218 /* #pragma omp declare variant on methods handled in finish_struct
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
))
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
;
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. */
8266 cleanups
= make_tree_vector ();
8267 init_code
= check_initializer (decl
, init
, flags
, &cleanups
);
8268 if (init_code
== NULL_TREE
)
8270 release_tree_vector (cleanups
);
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
);
8285 DECL_INITIAL (decl
) = 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;
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
),
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
))
8334 TREE_READONLY (decl
) = 0;
8337 /* This needs to happen before extend_ref_init_temps. */
8338 if (VAR_OR_FUNCTION_DECL_P (decl
))
8341 maybe_commonize_var (decl
);
8342 determine_visibility (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
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");
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
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
))
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
);
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
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
8432 else if (TREE_CODE (type
) == ARRAY_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. */
8455 && !TREE_CONSTANT (DECL_SIZE (decl
))
8456 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list
))
8459 bind
= build3 (BIND_EXPR
, void_type_node
, NULL
, NULL
, NULL
);
8460 TREE_SIDE_EFFECTS (bind
) = 1;
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
))
8473 layout_var_decl (decl
);
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
)
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. */
8496 if (TREE_READONLY (decl
))
8497 TREE_READONLY (decl
) = 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
)
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
);
8531 error_at (cp_expr_loc_or_loc (init
,
8532 DECL_SOURCE_LOCATION (decl
)),
8533 "function %q#D is initialized like a variable",
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. */
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
);
8575 TREE_READONLY (decl
) = 1;
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"
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
);
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
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. */
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
))
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
);
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",
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
;
8663 tree base_binfo
, binfo
;
8664 tree orig_ret
= ret
;
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
)
8678 error_at (loc
, "cannot decompose class type %qT: both it and "
8679 "its base class %qT have non-static data members",
8681 return error_mark_node
;
8683 else if (orig_ret
!= NULL_TREE
)
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
;
8699 /* Return std::tuple_size<TYPE>::value. */
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
))
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
)
8720 return error_mark_node
;
8723 /* Return std::tuple_element<I,TYPE>::type. */
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). */
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
))
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
)
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;
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
);
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
;
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. */
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);
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
8833 cp_finish_decomp (tree decl
, tree first
, unsigned int count
)
8835 if (error_operand_p (decl
))
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>"));
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
);
8877 auto_vec
<tree
, 16> v
;
8878 v
.safe_grow (count
, true);
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
);
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
)
8895 if (!COMPLETE_TYPE_P (type
))
8897 error_at (loc
, "structured binding refers to incomplete type %qT",
8903 tree eltype
= NULL_TREE
;
8904 unsigned HOST_WIDE_INT eltscnt
= 0;
8905 if (TREE_CODE (type
) == ARRAY_TYPE
)
8908 nelts
= array_type_nelts_top (type
);
8909 if (nelts
== error_mark_node
)
8911 if (!tree_fits_uhwi_p (nelts
))
8913 error_at (loc
, "cannot decompose variable length array %qT", type
);
8916 eltscnt
= tree_to_uhwi (nelts
);
8917 if (count
!= eltscnt
)
8920 if (count
> eltscnt
)
8921 error_n (loc
, count
,
8922 "%u name provided for structured binding",
8923 "%u names provided for structured binding", count
);
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",
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
)
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
,
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
)
8953 if (count
!= eltscnt
)
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
)
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
);
8977 if (count
!= eltscnt
)
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
)
8986 tree t
= unshare_expr (dexp
);
8987 convert_vector_to_array_for_subscript (DECL_SOURCE_LOCATION (v
[i
]),
8989 t
= build4_loc (DECL_SOURCE_LOCATION (v
[i
]), ARRAY_REF
,
8990 eltype
, t
, size_int (i
), 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
);
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",
9013 eltscnt
= tree_to_uhwi (tsize
);
9014 if (count
!= eltscnt
)
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%>",
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
]);
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
);
9068 else if (!CLASS_TYPE_P (type
))
9070 error_at (loc
, "cannot decompose non-array non-class type %qT", type
);
9073 else if (LAMBDA_TYPE_P (type
))
9075 error_at (loc
, "cannot decompose lambda closure type %qT", type
);
9078 else if (processing_template_decl
&& complete_type (type
) == error_mark_node
)
9080 else if (processing_template_decl
&& !COMPLETE_TYPE_P (type
))
9081 pedwarn (loc
, 0, "structured binding refers to incomplete class type %qT",
9085 tree btype
= find_decomp_class_base (loc
, type
, NULL_TREE
);
9086 if (btype
== error_mark_node
)
9088 else if (btype
== NULL_TREE
)
9090 error_at (loc
, "cannot decompose class type %qT without non-static "
9091 "data members", type
);
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
))
9101 if (count
!= eltscnt
)
9106 t
= convert_to_base (t
, btype
, /*check_access*/true,
9107 /*nonnull*/false, tf_warning_or_error
);
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
))
9118 tree tt
= finish_non_static_data_member (field
, unshare_expr (t
),
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;
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
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
);
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. */
9177 get_atexit_fn_ptr_type (void)
9181 if (!atexit_fn_ptr_type_node
)
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
;
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. */
9205 get_atexit_node (void)
9211 bool use_aeabi_atexit
;
9212 tree ctx
= global_namespace
;
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
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
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
;
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
,
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
;
9257 pop_from_top_level ();
9261 name
= "__cxa_atexit";
9267 /* The declaration for `atexit' is:
9269 int atexit (void (*)());
9271 We build up the argument types and then the function type
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
);
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
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
);
9301 /* Like get_atexit_node, but for thread-local cleanups. */
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
,
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. */
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"),
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;
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
;
9349 start_cleanup_fn (void)
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
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. */
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. */
9405 register_dtor_fn (tree decl
)
9412 bool ob_parm
, dso_parm
, use_dtor
;
9413 tree arg0
, arg1
, arg2
;
9416 type
= TREE_TYPE (decl
);
9417 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type
))
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
);
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
);
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
);
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
);
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 ();
9475 atex_node
= get_atexit_node ();
9479 /* We must convert CLEANUP to the type that "__cxa_atexit"
9481 cleanup
= build_nop (get_atexit_fn_ptr_type (), cleanup
);
9482 /* "__cxa_atexit" will pass the address of DECL to the
9483 cleanup function. */
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
);
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
9498 addr
= null_pointer_node
;
9501 arg2
= cp_build_addr_expr (get_dso_handle_node (),
9502 tf_warning_or_error
);
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
;
9512 if (!CP_DECL_THREAD_LOCAL_P (decl
)
9513 && targetm
.cxx
.use_aeabi_atexit ())
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. */
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
);
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
);
9557 error_at (dloc
, "non-local variable %qD declared %<__thread%> "
9558 "needs dynamic initialization", decl
);
9560 error_at (dloc
, "non-local variable %qD declared %<__thread%> "
9561 "has a non-trivial destructor", decl
);
9562 static bool informed
;
9565 inform (dloc
, "C++11 %<thread_local%> allows dynamic "
9566 "initialization and destruction");
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
;
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
9586 static <type> guard;
9587 if (!__atomic_load (guard.first_byte)) {
9588 if (__cxa_guard_acquire (&guard)) {
9591 // Do initialization.
9592 flag = true; __cxa_guard_release (&guard);
9593 // Register variable for destruction at end of program.
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:
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
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
);
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
);
9638 acquire_fn
= push_library_fn
9639 (acquire_name
, build_function_type_list (integer_type_node
,
9640 TREE_TYPE (guard_addr
),
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
),
9648 release_fn
= push_library_fn (release_name
, vfntype
, NULL_TREE
,
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
),
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
,
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,
9683 init
= add_stmt_to_compound (init
, set_guard (guard
));
9685 /* Use atexit to register a function for destroying this static
9687 init
= add_stmt_to_compound (init
, register_dtor_fn (decl
));
9690 finish_expr_stmt (init
);
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
);
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
)
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
)
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
))
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
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
);
9764 /* As above, but either give an error or reject zero-size arrays, depending
9768 cp_complete_array_type_or_error (tree
*ptype
, tree initial_value
,
9769 bool do_default
, tsubst_flags_t complain
)
9772 bool sfinae
= !(complain
& tf_error
);
9773 /* In SFINAE context we can't be lenient about zero-size arrays. */
9776 failure
= cp_complete_array_type (ptype
, initial_value
, do_default
);
9782 /* Not an error. */;
9783 else if (failure
== 1)
9784 error ("initializer fails to determine size of %qT", *ptype
);
9785 else if (failure
== 2)
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
;
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. */
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
);
9809 error ("constructor for alien class %qT cannot be a member", ctype
);
9815 /* Subroutine of `grokdeclarator'. */
9817 /* Generate errors possibly applicable for a given set of specifiers.
9818 This is for ARM $7.1.2. */
9821 bad_specifiers (tree object
,
9822 enum bad_spec_place type
,
9828 const location_t
* locations
)
9834 error_at (locations
[ds_virtual
],
9835 "%qD declared as a %<virtual%> variable", object
);
9837 error ("%<const%> and %<volatile%> function specifiers on "
9838 "%qD invalid in variable declaration", object
);
9842 error_at (locations
[ds_virtual
],
9843 "%qD declared as a %<virtual%> parameter", object
);
9845 error_at (locations
[ds_inline
],
9846 "%qD declared as an %<inline%> parameter", object
);
9848 error ("%<const%> and %<volatile%> function specifiers on "
9849 "%qD invalid in parameter declaration", object
);
9853 error_at (locations
[ds_virtual
],
9854 "%qD declared as a %<virtual%> type", object
);
9856 error_at (locations
[ds_inline
],
9857 "%qD declared as an %<inline%> type", object
);
9859 error ("%<const%> and %<volatile%> function specifiers on "
9860 "%qD invalid in type declaration", object
);
9864 error_at (locations
[ds_virtual
],
9865 "%qD declared as a %<virtual%> field", object
);
9867 error_at (locations
[ds_inline
],
9868 "%qD declared as an %<inline%> field", object
);
9870 error ("%<const%> and %<volatile%> function specifiers on "
9871 "%qD invalid in field declaration", object
);
9877 error ("%q+D declared as a friend", object
);
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
9892 check_class_member_definition_namespace (tree decl
)
9894 /* These checks only apply to member functions and static data
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
9900 if (processing_specialization
)
9902 /* We check this in check_explicit_instantiation_namespace. */
9903 if (processing_explicit_instantiation
)
9907 A member function definition that appears outside of the
9908 class definition shall appear in a namespace scope enclosing
9909 the class definition.
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. */
9925 build_this_parm (tree fn
, tree type
, cp_cv_quals quals
)
9930 cp_cv_quals this_quals
;
9932 if (CLASS_TYPE_P (type
))
9935 = cp_build_qualified_type (type
, quals
& ~TYPE_QUAL_RESTRICT
);
9936 this_type
= build_pointer_type (this_type
);
9939 this_type
= type_of_this_parm (type
);
9940 /* The `this' parameter is implicitly `const'; it cannot be
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
);
9949 /* DECL is a static member function. Complain if it was declared
9950 with function-cv-quals. */
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",
9960 // Check that FN takes no arguments and returns bool.
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
));
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. */
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
)
9991 else if (TYPE_P (*tp
))
9996 /* CTYPE is class type, or null if non-class.
9997 TYPE is type this FUNCTION_DECL should have, either FUNCTION_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'
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. */
10015 grokfndecl (tree ctype
,
10019 tree orig_declarator
,
10020 const cp_decl_specifier_seq
*declspecs
,
10023 enum overload_flags flags
,
10025 cp_ref_qualifier rqual
,
10032 special_function_kind sfk
,
10034 bool late_return_type_p
,
10035 int template_count
,
10038 location_t location
)
10041 int staticp
= ctype
&& TREE_CODE (type
) == FUNCTION_TYPE
;
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
);
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. */
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
)));
10072 if (!current_template_parms
)
10073 /* If there are no template parameters, something must have
10075 gcc_assert (seen_error ());
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");
10085 /* C++20 CA378: Remove non-templated constrained functions. */
10088 || (!flag_concepts_ts
10089 && (!processing_template_decl
10090 || (friendp
&& !memtmpl
&& !funcdef_flag
)))))
10092 error_at (location
, "constraints on a non-templated function");
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
;
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. */
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
;
10125 case sfk_destructor
:
10126 DECL_CXX_DESTRUCTOR_P (decl
) = 1;
10127 DECL_NAME (decl
) = dtor_identifier
;
10133 if (friendp
&& TREE_CODE (orig_declarator
) == TEMPLATE_ID_EXPR
)
10136 error_at (location
,
10137 "defining explicit specialization %qD in friend declaration",
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",
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",
10175 error_at (declspecs
->locations
[ds_inline
],
10176 "%<inline%> is not allowed in declaration of friend "
10177 "template specialization %qD",
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
);
10199 /* If this decl has namespace scope, set that up. */
10201 set_decl_namespace (decl
, in_namespace
, friendp
);
10203 DECL_CONTEXT (decl
) = ctype
;
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,
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). */
10225 DECL_STATIC_FUNCTION_P (decl
) = 1;
10226 DECL_CONTEXT (decl
) = ctype
;
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");
10240 error_at (declspecs
->locations
[ds_inline
],
10241 "cannot declare %<::main%> to be inline");
10243 error_at (declspecs
->locations
[ds_constexpr
],
10244 "cannot declare %<::main%> to be %qs", "constexpr");
10246 error_at (declspecs
->locations
[ds_consteval
],
10247 "cannot declare %<::main%> to be %qs", "consteval");
10249 error_at (location
, "cannot declare %<::main%> to be static");
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
))))
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
;
10273 DECL_INTERFACE_KNOWN (decl
) = 1;
10274 DECL_NOT_REALLY_EXTERN (decl
) = 1;
10277 /* If the declaration was declared inline, mark it as such. */
10280 DECL_DECLARED_INLINE_P (decl
) = 1;
10282 DECL_COMDAT (decl
) = 1;
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.
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
),
10311 ? G_("static member function %qD cannot have cv-qualifier")
10312 : G_("non-member function %qD cannot have cv-qualifier"),
10314 quals
= TYPE_UNQUALIFIED
;
10320 ? G_("static member function %qD cannot have ref-qualifier")
10321 : G_("non-member function %qD cannot have ref-qualifier"),
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");
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");
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))
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 ();
10365 if (DECL_NAMESPACE_SCOPE_P (decl
))
10367 if (!check_literal_operator_args (decl
, &long_long_unsigned_p
,
10370 error_at (location
, "%qD has invalid argument list", decl
);
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
);
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");
10396 error_at (location
, "%qD must be a non-member function", decl
);
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
);
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
);
10428 TREE_VALUE (TREE_VALUE (attr
)) = cl
;
10430 TREE_VALUE (attr
) = NULL_TREE
;
10436 /* Caller will do the rest of this. */
10440 if (ctype
!= NULL_TREE
)
10441 grokclassfn (ctype
, decl
, flags
);
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
,
10455 4 * (friendp
!= 0) +
10458 if (decl
== error_mark_node
)
10461 if (DECL_STATIC_FUNCTION_P (decl
))
10462 check_static_quals (decl
, quals
);
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
));
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
;
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
10495 if (old_decl
== error_mark_node
)
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
);
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
);
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
);
10540 pop_scope (pushed_scope
);
10543 error ("no %q#D member function declared in class %qT",
10547 if (ok
== error_mark_node
)
10553 if (DECL_CONSTRUCTOR_P (decl
) && !grok_ctor_properties (ctype
, decl
))
10556 if (ctype
== NULL_TREE
|| check
)
10560 DECL_VIRTUAL_P (decl
) = 1;
10565 /* decl is a FUNCTION_DECL.
10566 specifiers are the parsed virt-specifiers.
10568 Set flags to reflect the virt-specifiers.
10573 set_virt_specifiers (tree decl
, cp_virt_specifiers specifiers
)
10575 if (decl
== NULL_TREE
)
10577 if (specifiers
& VIRT_SPEC_OVERRIDE
)
10578 DECL_OVERRIDE_P (decl
) = 1;
10579 if (specifiers
& VIRT_SPEC_FINAL
)
10580 DECL_FINAL_P (decl
) = 1;
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. */
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. */
10610 grokvardecl (tree type
,
10612 tree orig_declarator
,
10613 const cp_decl_specifier_seq
*declspecs
,
10618 int template_count
,
10620 location_t location
)
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
;
10635 /* An explicit "extern" specifier indicates a namespace-scope
10637 if (declspecs
->storage_class
== sc_extern
)
10638 scope
= current_decl_namespace ();
10639 else if (!at_function_scope_p ())
10640 scope
= current_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
10649 || (TREE_CODE (scope
) == NAMESPACE_DECL
10650 && current_lang_name
!= lang_name_cplusplus
)
10651 /* Similarly for static data members. */
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
);
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);
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
)
10687 TREE_STATIC (decl
) = ! DECL_EXTERNAL (decl
);
10689 /* Not at top level, only `static' makes a static definition. */
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
);
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. */
10742 if (!processing_template_decl
)
10744 error_at (declspecs
->locations
[ds_concept
],
10745 "a non-template variable cannot be %<concept%>");
10748 else if (!at_namespace_scope_p ())
10750 error_at (declspecs
->locations
[ds_concept
],
10751 "concept must be defined at namespace scope");
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. */
10786 build_ptrmemfunc_type (tree type
)
10788 tree field
, fields
;
10791 if (type
== error_mark_node
)
10794 /* Make sure that we always have the unqualified pointer-to-member
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
);
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;
10819 field
= build_decl (input_location
, FIELD_DECL
, delta_identifier
,
10821 DECL_NONADDRESSABLE_P (field
) = 1;
10822 DECL_CHAIN (field
) = fields
;
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
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
));
10843 /* Create and return a pointer to data member type. */
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
));
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
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
);
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
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",
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",
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). */
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;
10941 /* Entry point for the above. */
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. */
10954 fold_sizeof_expr (tree t
)
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
,
10966 r
= cxx_sizeof_or_alignof_expr (EXPR_LOCATION (t
),
10967 TREE_OPERAND (t
, 0), SIZEOF_EXPR
,
10969 if (r
== error_mark_node
)
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. */
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. */
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. */;
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
))
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
;
11025 error_at (loc
, "size of array %qD has non-integral type %qT",
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
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. */
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
);
11053 if (TREE_CODE (size
) != INTEGER_CST
)
11055 tree folded
= cp_fully_fold (size
);
11056 if (TREE_CODE (folded
) == INTEGER_CST
)
11059 pedwarn (loc
, OPT_Wpedantic
, "size of array %qD is not an "
11060 "integral constant-expression", name
);
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. */;
11070 /* Use the folded result for VLAs, too; it will have resolved
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
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
;
11113 pedwarn (loc
, OPT_Wpedantic
,
11114 "ISO C++ forbids zero-size array %qD", name
);
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. */
11131 "size of array %qD is not an integral constant-expression",
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)
11140 pedwarn (name_loc
, OPT_Wvla
,
11141 "ISO C++ forbids variable length array %qD", name
);
11143 pedwarn (input_location
, OPT_Wvla
,
11144 "ISO C++ forbids variable length array");
11146 else if (warn_vla
> 0)
11149 warning_at (name_loc
, OPT_Wvla
,
11150 "variable length array %qD is used", name
);
11153 "variable length array is used");
11156 if (processing_template_decl
&& !TREE_CONSTANT (size
))
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
,
11177 cp_convert (ssizetype
, size
, complain
),
11178 cp_convert (ssizetype
, integer_one_node
,
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;
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. */
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. */
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. */
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
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
))
11265 error_at (loc
, "%qD declared as array of template placeholder "
11266 "type %qT", name
, type
);
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
))
11278 error_at (loc
, "declaration of %qD as array of void", name
);
11280 error ("creating array of void");
11281 return error_mark_node
;
11283 case FUNCTION_TYPE
:
11285 error_at (loc
, "declaration of %qD as array of functions", name
);
11287 error ("creating array of functions");
11288 return error_mark_node
;
11290 case REFERENCE_TYPE
:
11292 error_at (loc
, "declaration of %qD as array of references", name
);
11294 error ("creating array of references");
11295 return error_mark_node
;
11299 error_at (loc
, "declaration of %qD as array of function members",
11302 error ("creating array of function members");
11303 return error_mark_node
;
11309 if (!verify_type_context (name
? loc
: input_location
,
11310 TCTX_ARRAY_ELEMENT
, type
))
11311 return error_mark_node
;
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
))
11320 error_at (loc
, "declaration of %qD as multidimensional array must "
11321 "have bounds for all dimensions except the first",
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. */
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. */
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
)))
11358 /* Returns the smallest location != UNKNOWN_LOCATION among the
11359 three stored in LOCATIONS[ds_const], LOCATIONS[ds_volatile],
11360 and LOCATIONS[ds_restrict]. */
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
]);
11379 /* Returns the smallest among the latter and locations[ds_type_spec]. */
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
]);
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. */
11403 check_special_function_return_type (special_function_kind sfk
,
11407 const location_t
* locations
)
11411 case sfk_constructor
:
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
);
11422 type
= void_type_node
;
11425 case sfk_destructor
:
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
);
11438 type
= void_type_node
;
11441 case sfk_conversion
:
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
);
11453 case sfk_deduction_guide
:
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
;
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");
11476 gcc_unreachable ();
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. */
11488 check_var_type (tree identifier
, tree type
, location_t loc
)
11490 if (VOID_TYPE_P (type
))
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",
11501 error_at (loc
, "variable or field declared void");
11502 type
= error_mark_node
;
11508 /* Handle declaring DECL as an inline variable. */
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
);
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%>");
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. */
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. */
11569 check_decltype_auto (location_t loc
, tree type
)
11571 if (tree a
= type_uses_auto (type
))
11573 if (AUTO_IS_DECLTYPE (a
))
11577 error_at (loc
, "%qT as type rather than plain "
11578 "%<decltype(auto)%>", type
);
11581 else if (TYPE_QUALS (type
) != TYPE_UNQUALIFIED
)
11583 error_at (loc
, "%<decltype(auto)%> cannot be cv-qualified");
11591 /* Given declspecs and a declarator (abstract or otherwise), determine
11592 the name and type of the object declared and construct a DECL node
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
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
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
11637 grokdeclarator (const cp_declarator
*declarator
,
11638 cp_decl_specifier_seq
*declspecs
,
11639 enum decl_context decl_context
,
11643 tree type
= NULL_TREE
;
11645 int explicit_intN
= 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
;
11660 /* See the code below that used this. */
11661 tree decl_attr
= NULL_TREE
;
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
);
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
11746 declspecs
->locations
));
11748 location_t init_loc
;
11751 id_loc
= loc_or_input_loc (declarator
->id_loc
);
11752 init_loc
= loc_or_input_loc (declarator
->init_loc
);
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
;
11761 id_declarator
= id_declarator
->declarator
)
11763 if (id_declarator
->kind
!= cdk_id
)
11764 innermost_code
= id_declarator
->kind
;
11766 switch (id_declarator
->kind
)
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
)
11780 tree qualifying_scope
= id_declarator
->u
.id
.qualifying_scope
;
11781 tree decl
= id_declarator
->u
.id
.unqualified_name
;
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 ())
11793 A declarator-id shall not be qualified except
11796 None of the cases are permitted in block
11798 if (qualifying_scope
== global_namespace
)
11799 error ("invalid use of qualified-name %<::%D%>",
11801 else if (TYPE_P (qualifying_scope
))
11802 error ("invalid use of qualified-name %<%T::%D%>",
11803 qualifying_scope
, decl
);
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
);
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
))
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);
11852 type
= constructor_name (type
);
11853 name
= identifier_to_locale (IDENTIFIER_POINTER (type
));
11858 case TEMPLATE_ID_EXPR
:
11860 tree fns
= TREE_OPERAND (decl
, 0);
11863 if (!identifier_p (dname
))
11864 dname
= OVL_NAME (dname
);
11866 /* Fall through. */
11868 case IDENTIFIER_NODE
:
11869 if (identifier_p (decl
))
11872 if (IDENTIFIER_KEYWORD_P (dname
))
11874 error ("declarator-id missing; using reserved word %qD",
11876 name
= identifier_to_locale (IDENTIFIER_POINTER (dname
));
11878 else if (!IDENTIFIER_CONV_OP_P (dname
))
11879 name
= identifier_to_locale (IDENTIFIER_POINTER (dname
));
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
));
11889 name
= "<invalid operator>";
11894 gcc_unreachable ();
11901 case cdk_reference
:
11906 name
= "structured binding";
11910 return error_mark_node
;
11913 gcc_unreachable ();
11915 if (id_declarator
->kind
== cdk_id
)
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
))
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
;
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%> "
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
)
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
;
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
;
12107 /* See the code below that used this. */
12109 decl_attr
= DECL_ATTRIBUTES (typedef_decl
);
12111 typedef_type
= type
;
12113 if (sfk
== sfk_conversion
|| sfk
== sfk_deduction_guide
)
12114 ctor_return_type
= TREE_TYPE (dname
);
12116 ctor_return_type
= ctype
;
12118 if (sfk
!= sfk_none
)
12120 type
= check_special_function_return_type (sfk
, type
,
12123 declspecs
->locations
);
12124 type_quals
= TYPE_UNQUALIFIED
;
12126 else if (type
== NULL_TREE
)
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",
12150 pedwarn (id_loc
, OPT_Wpedantic
,
12151 "ISO C++ forbids declaration of %qs with no type", name
);
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
;
12161 type
= integer_type_node
;
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
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
)
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
)
12203 loc
= declspecs
->locations
[ds_unsigned
];
12208 loc
= declspecs
->locations
[ds_signed
];
12213 loc
= declspecs
->locations
[ds_long_long
];
12218 loc
= declspecs
->locations
[ds_long
];
12220 else /* if (short_p) */
12223 loc
= declspecs
->locations
[ds_short
];
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
)
12253 pedwarn (loc
, OPT_Wpedantic
, "%qs specified with %qT",
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
);
12262 error_at (loc
, "%qs specified with %<typeof%>", key
);
12267 /* Discard the type modifiers if they are invalid. */
12270 unsigned_p
= false;
12278 /* Decide whether an integer type is signed or not.
12279 Optionally treat bitfields as signed by default. */
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
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. */
12295 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl
))
12296 && TREE_CODE (type
) == INTEGER_TYPE
12297 && !same_type_p (TYPE_MAIN_VARIANT (type
), wchar_type_node
)))
12300 type
= int_n_trees
[declspecs
->int_n_idx
].unsigned_type
;
12302 type
= long_long_unsigned_type_node
;
12304 type
= long_unsigned_type_node
;
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
);
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
;
12319 type
= long_long_integer_type_node
;
12321 type
= long_integer_type_node
;
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
;
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
;
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. */
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
;
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
)
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",
12424 return error_mark_node
;
12426 else if (storage_class
== sc_static
12427 || storage_class
== sc_extern
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. */
12439 error_at (declspecs
->locations
[ds_concept
],
12440 "a parameter cannot be declared %qs", "concept");
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");
12454 error_at (declspecs
->locations
[ds_constinit
],
12455 "a parameter cannot be declared %qs", "constinit");
12460 error_at (declspecs
->locations
[ds_consteval
],
12461 "a parameter cannot be declared %qs", "consteval");
12466 /* Give error if `virtual' is used outside of class declaration. */
12468 && (current_class_name
== NULL_TREE
|| decl_context
!= FIELD
))
12470 error_at (declspecs
->locations
[ds_virtual
],
12471 "%<virtual%> outside class declaration");
12475 if (innermost_code
== cdk_decomp
)
12477 location_t loc
= (declarator
->kind
== cdk_reference
12478 ? declarator
->declarator
->id_loc
: declarator
->id_loc
);
12480 error_at (declspecs
->locations
[ds_inline
],
12481 "structured binding declaration cannot be %qs", "inline");
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");
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");
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
)
12509 error_at (loc
, "structured binding declaration cannot be %qs",
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");
12519 error_at (loc
, "structured binding declaration cannot be %qs",
12523 error_at (loc
, "structured binding declaration cannot be %qs",
12527 error_at (loc
, "structured binding declaration cannot be "
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 "
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
;
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
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.). */
12569 && storage_class
!= sc_extern
12570 && storage_class
!= sc_static
)
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
);
12579 if (decl_context
!= NORMAL
12580 && ((storage_class
!= sc_none
12581 && storage_class
!= sc_mutable
)
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. */
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
);
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
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
);
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
12635 storage_class
= declspecs
->storage_class
= sc_static
;
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 "
12645 storage_class
= sc_none
;
12649 if (!id_declarator
)
12650 unqualified_id
= NULL_TREE
;
12653 unqualified_id
= id_declarator
->u
.id
.unqualified_name
;
12654 switch (TREE_CODE (unqualified_id
))
12657 unqualified_id
= TREE_OPERAND (unqualified_id
, 0);
12658 if (TYPE_P (unqualified_id
))
12659 unqualified_id
= constructor_name (unqualified_id
);
12662 case IDENTIFIER_NODE
:
12663 case TEMPLATE_ID_EXPR
:
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 "
12679 /* Determine the type of the entity declared by recurring on the
12681 for (; declarator
; declarator
= declarator
->declarator
)
12683 const cp_declarator
*inner_declarator
;
12686 if (type
== error_mark_node
)
12687 return error_mark_node
;
12689 attrs
= declarator
->attributes
;
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
12706 late_attrs
= splice_template_attributes (&attrs
, type
);
12707 returned_attrs
= decl_attributes (&type
,
12708 chainon (returned_attrs
, attrs
),
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
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",
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
)
12745 switch (declarator
->kind
)
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
,
12754 type
= error_mark_node
;
12756 if (declarator
->std_attributes
)
12759 The optional attribute-specifier-seq appertains to the
12761 returned_attrs
= chainon (returned_attrs
,
12762 declarator
->std_attributes
);
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
;
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
)
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%>");
12817 error_at (typespec_loc
, "virtual function "
12818 "cannot have deduced return type");
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
))
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
);
12837 error_at (typespec_loc
,
12838 "invalid use of %<decltype(auto)%>");
12839 return error_mark_node
;
12841 tree tmpl
= CLASS_PLACEHOLDER_TEMPLATE (auto_node
);
12843 if (tree late_auto
= type_uses_auto (late_return_type
))
12844 tmpl
= CLASS_PLACEHOLDER_TEMPLATE (late_auto
);
12847 if (!funcdecl_p
|| !dguide_name_p (unqualified_id
))
12849 error_at (typespec_loc
, "deduced class "
12850 "type %qD in function return type",
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
)
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%>");
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
12915 if (type_quals
& TYPE_QUAL_VOLATILE
)
12916 warning_at (typespec_loc
, OPT_Wvolatile
,
12917 "%<volatile%>-qualified return type is "
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 "
12937 return error_mark_node
;
12941 error_at (declspecs
->locations
[ds_constinit
],
12942 "%<constinit%> on function return type is not "
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
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. */
12973 error_at (declspecs
->locations
[ds_storage_class
],
12974 (flags
== DTOR_FLAG
)
12975 ? G_("destructor cannot be static member "
12977 : G_("constructor cannot be static member "
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
;
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
,
13000 return error_mark_node
;
13002 if (flags
!= DTOR_FLAG
)
13004 /* It's a constructor. */
13005 if (explicitp
== 1)
13009 permerror (declspecs
->locations
[ds_virtual
],
13010 "constructors cannot be declared %<virtual%>");
13013 if (decl_context
== FIELD
13014 && sfk
!= sfk_constructor
)
13015 return error_mark_node
;
13017 if (decl_context
== FIELD
)
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");
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
);
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
);
13049 error_at (declarator
->id_loc
,
13050 "friend function definition %qs cannot have "
13051 "a name qualified with %<%D::%>", name
,
13055 else if (ctype
&& sfk
== sfk_conversion
)
13057 if (explicitp
== 1)
13059 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION
);
13063 else if (sfk
== sfk_deduction_guide
)
13065 if (explicitp
== 1)
13069 tree pushed_scope
= NULL_TREE
;
13071 && decl_context
!= FIELD
13072 && inner_declarator
->u
.id
.qualifying_scope
13073 && CLASS_TYPE_P (inner_declarator
->u
.id
.qualifying_scope
))
13075 = push_scope (inner_declarator
->u
.id
.qualifying_scope
);
13077 arg_types
= grokparms (declarator
->u
.function
.parameters
, &parms
);
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
;
13093 type
= build_function_type (type
, arg_types
);
13095 tree attrs
= declarator
->std_attributes
;
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
);
13104 returned_attrs
= chainon (returned_attrs
, att
);
13109 The optional attribute-specifier-seq appertains to
13110 the function type. */
13111 cplus_decl_attributes (&type
, attrs
, 0);
13114 type
= build_exception_variant (type
, raises
);
13119 case cdk_reference
:
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
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
,
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"),
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
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
,
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
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. */;
13235 type
= cp_build_reference_type (TREE_TYPE (type
), false);
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
;
13266 type
= build_ptrmem_type (declarator
->u
.pointer
.class_type
,
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
)
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
,
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",
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. */
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
)
13358 permerror (declspecs
->locations
[ds_friend
],
13359 "member functions are implicitly "
13360 "friends of their class");
13364 permerror (id_loc
, "extra qualification %<%T::%> on member %qs",
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. */
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
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%> "
13396 : G_("cannot declare member function %<%T::%s%> "
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
)
13418 *attrlist
= chainon (returned_attrs
, *attrlist
);
13420 attrlist
= &returned_attrs
;
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
);
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
);
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
)
13453 "data member may not have variably modified type %qT", type
);
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");
13469 error_at (declspecs
->locations
[ds_explicit
],
13470 "%<explicit%> in friend declaration");
13472 error_at (declspecs
->locations
[ds_explicit
],
13473 "only declarations of constructors and conversion operators "
13474 "can be %<explicit%>");
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%>",
13485 storage_class
= sc_none
;
13487 else if (decl_context
== TYPENAME
|| typedef_p
)
13490 "non-object member %qs cannot be declared %<mutable%>",
13492 storage_class
= sc_none
;
13494 else if (FUNC_OR_METHOD_TYPE_P (type
))
13496 error_at (sloc
, "function %qs cannot be declared %<mutable%>",
13498 storage_class
= sc_none
;
13502 error_at (sloc
, "%<static%> %qs cannot be declared %<mutable%>",
13504 storage_class
= sc_none
;
13506 else if (type_quals
& TYPE_QUAL_CONST
)
13508 error_at (sloc
, "%<const%> %qs cannot be declared %<mutable%>",
13510 storage_class
= sc_none
;
13512 else if (TYPE_REF_P (type
))
13514 permerror (sloc
, "reference %qs cannot be declared %<mutable%>",
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
);
13528 if (decl_context
== NORMAL
)
13530 "typedef may not be a function definition");
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
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
))
13558 error_at (declspecs
->locations
[ds_type_spec
],
13559 "%<auto%> not allowed in alias declaration");
13561 error_at (declspecs
->locations
[ds_type_spec
],
13562 "typedef declared %<auto%>");
13563 type
= error_mark_node
;
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
);
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",
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
13605 if (type
!= error_mark_node
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
);
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
);
13625 /* Acknowledge that this was written:
13626 `using analias = atype;'. */
13627 TYPE_DECL_ALIAS_P (decl
) = 1;
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
;
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
;
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. */
13686 error ("%<inline%> specified for friend class declaration");
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
));
13700 permerror (input_location
, "friend declaration requires class-key, "
13701 "i.e. %<friend %#T%>",
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);
13713 error ("trying to make class %qT a friend of global scope",
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
);
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
);
13733 error ("invalid qualifiers on non-member function type");
13737 error_at (location_of (reqs
), "requires-clause on type-id");
13741 else if (unqualified_id
== NULL_TREE
&& decl_context
!= PARM
13742 && decl_context
!= CATCHPARM
13743 && TREE_CODE (type
) != UNION_TYPE
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
;
13761 error_at (location_of (reqs
),
13762 "requires-clause on declaration of non-function type %qT",
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");
13802 error_at (typespec_loc
,
13803 "%<auto%> parameter not permitted in this context");
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 "
13859 CLASS_PLACEHOLDER_TEMPLATE (auto_node
));
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
)
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
;
13879 /* Array is a flexible member. */
13881 pedwarn (id_loc
, OPT_Wpedantic
,
13882 "ISO C++ forbids flexible array member %qs", name
);
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. */
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
)
13907 tree function_context
;
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
13922 error ("declaration of function %qD in invalid context",
13924 return error_mark_node
;
13927 /* ``A union may [ ... ] not [ have ] virtual functions.''
13929 if (virtualp
&& TREE_CODE (ctype
) == UNION_TYPE
)
13931 error_at (declspecs
->locations
[ds_virtual
],
13932 "function %qD declared %<virtual%> inside a union",
13934 return error_mark_node
;
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
);
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
;
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",
13965 return error_mark_node
;
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
;
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
)
13997 error_at (declspecs
->locations
[ds_concept
],
13998 "a constructor cannot be %<concept%>");
13999 return error_mark_node
;
14003 error_at (declspecs
->locations
[ds_concept
],
14004 "a concept cannot be a member function");
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. */
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
,
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
,
14051 decl
= set_virt_specifiers (decl
, virt_specifiers
);
14052 if (decl
== NULL_TREE
)
14053 return error_mark_node
;
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
);
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
);
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
));
14091 error ("name %qT has incomplete type", type
);
14093 type
= error_mark_node
;
14097 else if (!verify_type_context (input_location
,
14099 ? TCTX_STATIC_STORAGE
14100 : TCTX_FIELD
, type
))
14102 type
= error_mark_node
;
14109 if (unqualified_id
)
14111 "%qE is neither function nor member function; "
14112 "cannot be declared friend", unqualified_id
);
14114 error ("unnamed field is neither function nor member "
14115 "function; cannot be declared friend");
14116 return error_mark_node
;
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);
14140 /* Kludge: We need funcdef_flag to be true in do_friend for
14141 in-class defaulted functions, but that breaks grokfndecl.
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
);
14159 return error_mark_node
;
14162 /* Structure field. It may not be a function, except for C++. */
14164 if (decl
== NULL_TREE
)
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
);
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;
14185 error_at (declspecs
->locations
[ds_consteval
],
14186 "static data member %qE declared %qs",
14187 unqualified_id
, "consteval");
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
14198 DECL_EXTERNAL (decl
) = 1;
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
));
14215 = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms
);
14216 tree ci
= build_constraints (tmpl_reqs
, NULL_TREE
);
14217 set_constraints (decl
, ci
);
14224 error_at (declspecs
->locations
[ds_concept
],
14225 "non-static data member %qE declared %qs",
14226 unqualified_id
, "concept");
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;
14239 error_at (declspecs
->locations
[ds_constinit
],
14240 "non-static data member %qE declared %qs",
14241 unqualified_id
, "constinit");
14242 constinit_p
= false;
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
;
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
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
;
14288 if (!unqualified_id
)
14289 return error_mark_node
;
14291 if (TREE_CODE (unqualified_id
) == TEMPLATE_ID_EXPR
)
14292 original_name
= dname
;
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",
14306 if (declspecs
->gnu_thread_keyword_p
)
14307 error_at (declspecs
->locations
[ds_thread
],
14308 "storage class %<__thread%> invalid for function %qs",
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
))
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
);
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
)
14341 error ("virtual non-class function %qs", name
);
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
);
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
,
14368 reqs
, virtualp
, flags
, memfn_quals
, rqual
, raises
,
14371 inlinep
| (2 * constexpr_p
) | (4 * concept_p
)
14372 | (8 * consteval_p
),
14373 initialized
== SD_DELETED
,
14376 late_return_type_p
,
14377 template_count
, in_namespace
, attrlist
,
14379 if (decl
== NULL_TREE
)
14380 return error_mark_node
;
14382 if (explicitp
== 2)
14383 DECL_NONCONVERTING_P (decl
) = 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
14400 error_at (declspecs
->locations
[ds_storage_class
],
14401 "cannot declare static function inside another function");
14402 invalid_static
= 1;
14405 if (invalid_static
)
14408 storage_class
= sc_none
;
14411 if (declspecs
->explicit_specifier
)
14412 store_explicit_specifier (decl
, declspecs
->explicit_specifier
);
14416 /* It's a variable. */
14418 /* An uninitialized decl with `extern' is a reference. */
14419 decl
= grokvardecl (type
, dname
, unqualified_id
,
14426 ctype
? ctype
: in_namespace
,
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
);
14438 DECL_CONTEXT (decl
) = ctype
;
14441 permerror (declspecs
->locations
[ds_storage_class
],
14442 "%<static%> may not be used when defining "
14443 "(as opposed to declaring) a static data member");
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;
14469 error_at (DECL_SOURCE_LOCATION (decl
),
14470 "a variable cannot be declared %<consteval%>");
14471 consteval_p
= false;
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
);
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");
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;
14537 /* Set constexpr flag on vars (functions got it in grokfndecl). */
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
);
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. */
14560 require_complete_types_for_parms (tree parms
)
14562 for (; parms
; parms
= DECL_CHAIN (parms
))
14564 if (dependent_type_p (TREE_TYPE (parms
)))
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
));
14577 /* grokparms or complete_type_or_else will have already issued
14579 TREE_TYPE (parms
) = error_mark_node
;
14583 /* Returns nonzero if T is a local variable. */
14586 local_variable_p (const_tree 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
))
14598 /* Like local_variable_p, but suitable for use as a tree-walking
14602 local_variable_p_walkfn (tree
*tp
, int *walk_subtrees
,
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;
14613 if (local_variable_p (*tp
)
14614 && (!DECL_ARTIFICIAL (*tp
) || DECL_NAME (*tp
) == this_identifier
))
14616 else if (TYPE_P (*tp
))
14617 *walk_subtrees
= 0;
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. */
14628 check_default_argument (tree decl
, tree arg
, tsubst_flags_t complain
)
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. */
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
14653 return error_mark_node
;
14655 /* [dcl.fct.default]
14657 A default argument expression is implicitly converted to the
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
,
14664 --cp_unevaluated_operand
;
14666 /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
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
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
);
14684 if (complain
& tf_warning_or_error
)
14686 if (DECL_NAME (var
) == this_identifier
)
14687 permerror (input_location
, "default argument %qE uses %qD",
14690 error ("default argument %qE uses local variable %qD", arg
, var
);
14692 return error_mark_node
;
14699 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
14702 type_is_deprecated (tree type
)
14704 enum tree_code code
;
14705 if (TREE_DEPRECATED (type
))
14707 if (TYPE_NAME (type
))
14709 if (TREE_DEPRECATED (TYPE_NAME (type
)))
14713 cp_warn_deprecated_use_scopes (CP_DECL_CONTEXT (TYPE_NAME (type
)));
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
))));
14736 /* Returns an unavailable type used within TYPE, or NULL_TREE if none. */
14739 type_is_unavailable (tree type
)
14741 enum tree_code code
;
14742 if (TREE_UNAVAILABLE (type
))
14744 if (TYPE_NAME (type
))
14746 if (TREE_UNAVAILABLE (TYPE_NAME (type
)))
14750 cp_warn_deprecated_use_scopes (CP_DECL_CONTEXT (TYPE_NAME (type
)));
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
))));
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
14780 *PARMS is set to the chain of PARM_DECLs created. */
14783 grokparms (tree parmlist
, tree
*parms
)
14785 tree result
= NULL_TREE
;
14786 tree decls
= NULL_TREE
;
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
)
14799 if (! decl
|| TREE_TYPE (decl
) == error_mark_node
)
14805 type
= TREE_TYPE (decl
);
14806 if (VOID_TYPE_P (type
))
14808 if (same_type_p (type
, void_type_node
)
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'. */
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
);
14820 error_at (DECL_SOURCE_LOCATION (decl
),
14821 "invalid use of type %<void%> in parameter "
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
);
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
);
14843 cp_handle_deprecated_or_unavailable (deptype
);
14846 /* [dcl.fct] "A parameter with volatile-qualified type is
14848 if (CP_TYPE_VOLATILE_P (type
))
14849 warning_at (DECL_SOURCE_LOCATION (decl
), OPT_Wvolatile
,
14850 "%<volatile%>-qualified parameter is "
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
);
14872 if (TYPE_PTR_P (t
))
14874 else if (TREE_CODE (t
) != ARRAY_TYPE
)
14876 else if (!TYPE_DOMAIN (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"),
14890 if (init
&& !processing_template_decl
)
14891 init
= check_default_argument (decl
, init
, tf_warning_or_error
);
14894 DECL_CHAIN (decl
) = decls
;
14896 result
= tree_cons (init
, type
, result
);
14898 decls
= nreverse (decls
);
14899 result
= nreverse (result
);
14901 result
= chainon (result
, void_list_node
);
14904 result
= NULL_TREE
;
14907 /* We had parm errors, recover by giving the function (...) type. */
14908 result
= NULL_TREE
;
14914 /* D is a constructor or overloaded `operator='.
14916 Let T be the class in which D is declared. Then, this function
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
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
14933 copy_fn_p (const_tree d
)
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. */
14950 if (!DECL_CONSTRUCTOR_P (d
)
14951 && DECL_NAME (d
) != assign_op_identifier
)
14954 args
= FUNCTION_FIRST_USER_PARMTYPE (d
);
14958 arg_type
= TREE_VALUE (args
);
14959 if (arg_type
== error_mark_node
)
14962 if (TYPE_MAIN_VARIANT (arg_type
) == DECL_CONTEXT (d
))
14964 /* Pass by value copy assignment operator. */
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
)))
14977 args
= TREE_CHAIN (args
);
14979 if (args
&& args
!= void_list_node
&& !TREE_PURPOSE (args
))
14980 /* There are more non-optional args. */
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. */
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. */
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. */
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. */
15021 move_signature_fn_p (const_tree d
)
15025 bool result
= false;
15027 if (!DECL_CONSTRUCTOR_P (d
)
15028 && DECL_NAME (d
) != assign_op_identifier
)
15031 args
= FUNCTION_FIRST_USER_PARMTYPE (d
);
15035 arg_type
= TREE_VALUE (args
);
15036 if (arg_type
== error_mark_node
)
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
)),
15045 args
= TREE_CHAIN (args
);
15047 if (args
&& args
!= void_list_node
&& !TREE_PURPOSE (args
))
15048 /* There are more non-optional args. */
15054 /* Remember any special properties of member function DECL. */
15057 grok_special_member_properties (tree decl
)
15061 if (TREE_CODE (decl
) == USING_DECL
15062 || !DECL_NONSTATIC_MEMBER_FUNCTION_P (decl
))
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;
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;
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
)
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
);
15109 TYPE_HAS_COPY_ASSIGN (class_type
) = 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). */
15124 grok_ctor_properties (const_tree ctype
, const_tree decl
)
15126 int ctor_parm
= copy_fn_p (decl
);
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&)%>",
15154 /* DECL is a declaration for an overloaded or conversion operator. If
15155 COMPLAIN is true, errors are issued for invalid declarations. */
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
;
15171 if (IDENTIFIER_CONV_OP_P (name
))
15173 /* Conversion operators are TYPE_EXPR for the purposes of this
15175 operator_code
= TYPE_EXPR
;
15176 op_flags
= OVL_OP_FLAG_UNARY
;
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. */
15194 case OVL_OP_FLAG_ALLOC
:
15195 TYPE_HAS_NEW_OPERATOR (class_type
) = 1;
15198 case OVL_OP_FLAG_ALLOC
| OVL_OP_FLAG_DELETE
:
15199 TYPE_GETS_DELETE (class_type
) |= 1;
15202 case OVL_OP_FLAG_ALLOC
| OVL_OP_FLAG_VEC
:
15203 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type
) = 1;
15206 case OVL_OP_FLAG_ALLOC
| OVL_OP_FLAG_DELETE
| OVL_OP_FLAG_VEC
:
15207 TYPE_GETS_DELETE (class_type
) |= 2;
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",
15230 if (!TREE_PUBLIC (decl
))
15232 error_at (loc
, "%qD may not be declared as static", decl
);
15237 if (op_flags
& OVL_OP_FLAG_DELETE
)
15239 DECL_SET_IS_OPERATOR_DELETE (decl
, true);
15240 coerce_delete_type (decl
, loc
);
15244 DECL_SET_IS_OPERATOR_NEW (decl
, true);
15245 TREE_TYPE (decl
) = coerce_new_type (TREE_TYPE (decl
), loc
);
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
);
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
);
15273 for (tree arg
= argtypes
; ; arg
= TREE_CHAIN (arg
))
15275 if (!arg
|| arg
== void_list_node
)
15278 error_at(loc
, "%qD must have an argument of class or "
15279 "enumerated type", decl
);
15283 tree type
= non_reference (TREE_VALUE (arg
));
15284 if (type
== error_mark_node
)
15287 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
15288 because these checks are performed even on template
15290 if (MAYBE_CLASS_TYPE_P (type
)
15291 || TREE_CODE (type
) == ENUMERAL_TYPE
)
15296 if (operator_code
== CALL_EXPR
)
15297 /* There are no further restrictions on the arguments to an overloaded
15301 if (operator_code
== COND_EXPR
)
15304 error_at (loc
, "ISO C++ prohibits overloading %<operator ?:%>");
15308 /* Count the number of arguments and check for ellipsis. */
15310 for (tree arg
= argtypes
; arg
!= void_list_node
; arg
= TREE_CHAIN (arg
))
15315 if (operator_code
== ARRAY_REF
&& cxx_dialect
>= cxx23
)
15318 error_at (loc
, "%qD must not have variable number of arguments",
15325 /* Verify correct number of arguments. */
15328 case OVL_OP_FLAG_AMBIARY
:
15331 /* We have a unary instance of an ambi-ary op. Remap to the
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. */
15344 ? G_("%qD must have either zero or one argument")
15345 : G_("%qD must have either one or two arguments"), decl
);
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
))
15357 ? G_("postfix %qD must have %<int%> as its argument")
15358 : G_("postfix %qD must have %<int%> as its second argument"),
15364 case OVL_OP_FLAG_UNARY
:
15369 ? G_("%qD must have no arguments")
15370 : G_("%qD must have exactly one argument"), decl
);
15375 case OVL_OP_FLAG_BINARY
:
15378 if (operator_code
== ARRAY_REF
&& cxx_dialect
>= cxx23
)
15382 ? G_("%qD must have exactly one argument")
15383 : G_("%qD must have exactly two arguments"), decl
);
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
);
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
)
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
);
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"),
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"),
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
));
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
);
15501 /* Return a string giving the keyword associate with CODE. */
15503 static const char *
15504 tag_name (enum tag_types code
)
15516 case typename_type
:
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. */
15530 check_elaborated_type_specifier (enum tag_types tag_code
,
15532 bool allow_template_p
)
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
))
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
));
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
;
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
15624 lookup_and_check_tag (enum tag_types tag_code
, tree name
,
15625 TAG_how how
, bool template_header_p
)
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. */
15641 decl
= lookup_elaborated_type (name
, TAG_how::INNERMOST_NON_CLASS
);
15644 decl
= lookup_elaborated_type (name
, how
);
15647 /* We found nothing. */
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. */
15677 /* Look for invalid nested type:
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 "
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.
15695 template <class T> class C {
15696 class C *c1; // DECL_SELF_REFERENCE_P is true
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
15704 tree t
= check_elaborated_type_specifier (tag_code
, decl
,
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::%>",
15718 return error_mark_node
;
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. */
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
));
15754 code
= RECORD_TYPE
;
15760 code
= ENUMERAL_TYPE
;
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
)
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
);
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
);
15835 if (template_header_p
&& MAYBE_CLASS_TYPE_P (t
))
15837 /* Check that we aren't trying to overload a class with different
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
;
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
);
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. */
15902 xref_basetypes (tree ref
, tree base_list
)
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. */
15910 tree default_access
;
15911 tree igo_prev
; /* Track Inheritance Graph Order. */
15913 if (ref
== error_mark_node
)
15916 /* The base of a derived class is private by default, all others are
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
15926 basep
= &base_list
;
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
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
);
15945 if (TREE_TYPE (*basep
))
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)
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
);
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
);
15985 warning (OPT_Wmultiple_inheritance
,
15986 "%qT defined with multiple direct bases", ref
);
15990 /* An aggregate can't have virtual base classes. */
15991 CLASSTYPE_NON_AGGREGATE (ref
) = true;
15993 vec_alloc (CLASSTYPE_VBASECLASSES (ref
), max_vbases
);
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
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",
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
16049 if (TYPE_MARKED_P (basetype
))
16051 if (basetype
== ref
)
16052 error ("recursive type %qT undefined", basetype
);
16054 error ("duplicate base type %qT invalid", basetype
);
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
);
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). */
16081 if (CLASS_TYPE_P (basetype
))
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;
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;
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. */
16126 copy_type_enum (tree dst
, tree src
)
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
));
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.
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
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. */
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
));
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. */
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
;
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
)),
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
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. */
16258 prevtype
= enumtype
;
16260 /* Do not push the decl more than once. */
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;
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
;
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
)
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. */
16321 finish_enum_value_list (tree enumtype
)
16324 tree underlying_type
;
16327 tree minnode
, maxnode
;
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
16340 if (processing_template_decl
)
16342 for (values
= TYPE_VALUES (enumtype
);
16344 values
= TREE_CHAIN (values
))
16345 TREE_TYPE (TREE_VALUE (values
)) = enumtype
;
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
);
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. */
16373 minnode
= maxnode
= value
;
16374 else if (tree_int_cst_lt (maxnode
, value
))
16376 else if (tree_int_cst_lt (value
, minnode
))
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
);
16398 bool use_short_enum
;
16400 /* Determine the underlying type of the enumeration.
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");
16428 use_short_enum
= true;
16429 precision
= TYPE_PRECISION (enumtype
);
16433 for (itk
= (use_short_enum
? itk_char
: itk_int
);
16437 underlying_type
= integer_types
[itk
];
16438 if (underlying_type
!= NULL_TREE
16439 && TYPE_PRECISION (underlying_type
) >= precision
16440 && TYPE_SIGN (underlying_type
) == sgn
)
16443 if (itk
== itk_none
)
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
];
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.
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
);
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
);
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
;
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. */
16553 finish_enum (tree enumtype
)
16555 if (processing_template_decl
)
16557 if (at_function_scope_p ())
16558 add_stmt (build_min (TAG_DEFN
, enumtype
));
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. */
16576 build_enumerator (tree name
, tree value
, tree enumtype
, tree attributes
,
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
)
16593 /* Remove no-op casts from the 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
,
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
)
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
);
16630 value
= cxx_constant_value (value
);
16632 if (TREE_CODE (value
) != INTEGER_CST
)
16634 error ("enumerator value for %qD is not an integer "
16642 /* Default based on previous value. */
16643 if (value
== NULL_TREE
)
16645 if (TYPE_VALUES (enumtype
))
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
;
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
,
16668 bool pos
= !wi::neg_p (wi
, sgn
);
16669 if (!wi::fits_to_tree_p (wi
, type
))
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
))
16680 if (type
&& cxx_dialect
< cxx11
16681 && itk
> itk_unsigned_long
)
16682 pedwarn (input_location
, OPT_Wlong_long
,
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
;
16690 value
= wide_int_to_tree (type
, wi
);
16695 error ("overflow in enumeration values at %qD", name
);
16696 value
= error_mark_node
;
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
)
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):
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
;
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
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
);
16775 /* Add this enumeration constant to the list for this type. */
16776 TYPE_VALUES (enumtype
) = tree_cons (name
, decl
, TYPE_VALUES (enumtype
));
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. */
16792 lookup_enumerator (tree enumtype
, tree name
)
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. */
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");
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
;
16834 /* Implement LANG_HOOKS_SIMULATE_RECORD_DECL. */
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
);
16870 /* We're defining DECL. Make sure that its type is OK. */
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
))
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
)),
16894 TREE_CHAIN (args
));
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
;
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. */
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. */
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
))
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
;
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
);
16951 exprstmt
= build_if_in_charge (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. */
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
);
16995 ctype
= DECL_FRIEND_CONTEXT (decl1
);
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
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. */
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 ();
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
)
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. */
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
))
17125 /* Check whether DECL1 is in an anonymous
17127 for (context
= DECL_CONTEXT (decl1
);
17129 context
= DECL_CONTEXT (context
))
17131 if (TREE_CODE (context
) == NAMESPACE_DECL
17132 && DECL_NAME (context
) == NULL_TREE
)
17136 if (context
== NULL
)
17137 warning_at (DECL_SOURCE_LOCATION (decl1
),
17138 OPT_Wmissing_declarations
,
17139 "no previous declaration for %qD", decl1
);
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
)
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
);
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
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;
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;
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
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
);
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
);
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. */
17383 start_function (cp_decl_specifier_seq
*declspecs
,
17384 const cp_declarator
*declarator
,
17389 decl1
= grokdeclarator (declarator
, declspecs
, FUNCDEF
, 1, &attrs
);
17390 invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION
, decl1
);
17391 if (decl1
== error_mark_node
)
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
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
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
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
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
);
17440 for (tree parm
= args
; parm
; parm
= next
)
17442 next
= DECL_CHAIN (parm
);
17443 if (TREE_CODE (parm
) == PARM_DECL
)
17447 /* If we find an enum constant or a type tag, put it aside for
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. */
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
17487 current_binding_level
->names
= NULL
;
17489 do_push_parm_decls (fndecl
, specparms
, &nonparms
);
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). */
17508 finish_constructor_body (void)
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. */
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
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
);
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
,
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
);
17581 c
= BINFO_TYPE (CLASSTYPE_PRIMARY_BINFO (c
));
17584 finish_decl_cleanup (NULL_TREE
, stmt
);
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. */
17600 finish_destructor_body (void)
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 ())
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()). */
17629 begin_function_body (void)
17631 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl
))
17634 if (processing_template_decl
)
17635 /* Do nothing now. */;
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 ();
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. */
17662 finish_function_body (tree compstmt
)
17664 if (compstmt
== NULL_TREE
)
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
17683 outer_curly_brace_block (tree fndecl
)
17685 tree block
= DECL_INITIAL (fndecl
);
17686 if (BLOCK_OUTER_CURLY_BRACE_P (block
))
17688 block
= BLOCK_SUBBLOCKS (block
);
17689 if (BLOCK_OUTER_CURLY_BRACE_P (block
))
17691 block
= BLOCK_SUBBLOCKS (block
);
17692 gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block
));
17696 /* If FNDECL is a class's key method, add the class to the list of
17697 keyed classes that should be emitted. */
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. */
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
));
17722 indent
= EXPR_LOCATION (stmts
);
17723 richloc
->add_fixit_insert_formatted ("return *this;",
17724 richloc
->get_loc (),
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. */
17733 emit_coro_helper (tree helper
)
17735 /* This is a partial set of the operations done by finish_function()
17736 plus emitting the result. */
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
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.) */
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
);
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
);
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
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 ();
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
,
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
;
17916 // If this is a concept, check that the definition is reasonable.
17917 if (DECL_DECLARED_CONCEPT_P (fndecl
))
17918 check_function_concept (fndecl
);
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 "
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
;
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
))
18033 for (decl
= DECL_ARGUMENTS (fndecl
);
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
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
);
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. */
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
18088 maybe_end_member_template_processing ();
18090 /* Leave the scope of the class. */
18092 pop_nested_class ();
18097 current_function_decl
= NULL_TREE
;
18099 invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION
, 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'. */
18125 grokmethod (cp_decl_specifier_seq
*declspecs
,
18126 const cp_declarator
*declarator
, tree attrlist
)
18128 tree fndecl
= grokdeclarator (declarator
, declspecs
, MEMFUNCDEF
, 0,
18131 if (fndecl
== error_mark_node
)
18132 return error_mark_node
;
18135 cplus_decl_attributes (&fndecl
, attrlist
, 0);
18137 /* Pass friends other than inline friend functions back. */
18138 if (fndecl
== void_type_node
)
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
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
)
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;
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. */
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. */
18241 complete_vars (tree type
)
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
);
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. */
18278 cxx_maybe_build_cleanup (tree decl
, tsubst_flags_t complain
)
18284 /* Assume no cleanup is required. */
18285 cleanup
= NULL_TREE
;
18287 if (error_operand_p (decl
))
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. */
18294 attr
= lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl
));
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
;
18329 if (TREE_CODE (type
) == ARRAY_TYPE
)
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
);
18344 cleanup
= cp_build_compound_expr (cleanup
, call
, complain
);
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
);
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;
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. */
18380 static_fn_type (tree memfntype
)
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
)
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
);
18402 /* DECL was originally constructed as a non-static member function,
18403 but turned out to be static. Update it accordingly. */
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). */
18452 build_void_list_node (void)
18454 tree t
= build_tree_list (NULL_TREE
, void_type_node
);
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
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
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. */
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
))
18498 /* Returns the return type for FN as written by the user, which may include
18499 a placeholder for a deduced return type. */
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. */
18515 undeduced_auto_decl (tree decl
)
18517 if (cxx_dialect
< cxx11
)
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. */
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
);
18542 /* Create a representation of the explicit-specifier with
18543 constant-expression of EXPR. COMPLAIN is as for tsubst. */
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. */
18555 expr
= build_converted_constant_bool_expr (expr
, complain
);
18556 expr
= instantiate_non_dependent_expr_sfinae (expr
, complain
);
18557 expr
= cxx_constant_value (expr
);
18561 #include "gt-cp-decl.h"