1 /* Process declarations and variables for C++ compiler.
2 Copyright (C) 1988-2018 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com)
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"
55 /* Possible cases of bad specifiers type used by bad_specifiers. */
57 BSP_VAR
, /* variable */
58 BSP_PARM
, /* parameter */
63 static const char *redeclaration_error_message (tree
, tree
);
65 static int decl_jump_unsafe (tree
);
66 static void require_complete_types_for_parms (tree
);
67 static void push_local_name (tree
);
68 static tree
grok_reference_init (tree
, tree
, tree
, int);
69 static tree
grokvardecl (tree
, tree
, tree
, const cp_decl_specifier_seq
*,
70 int, int, int, bool, int, tree
);
71 static int check_static_variable_definition (tree
, tree
);
72 static void record_unknown_type (tree
, const char *);
73 static tree
builtin_function_1 (tree
, tree
, bool);
74 static int member_function_or_else (tree
, tree
, enum overload_flags
);
75 static void check_for_uninitialized_const_var (tree
);
76 static tree
local_variable_p_walkfn (tree
*, int *, void *);
77 static const char *tag_name (enum tag_types
);
78 static tree
lookup_and_check_tag (enum tag_types
, tree
, tag_scope
, bool);
79 static void maybe_deduce_size_from_array_init (tree
, tree
);
80 static void layout_var_decl (tree
);
81 static tree
check_initializer (tree
, tree
, int, vec
<tree
, va_gc
> **);
82 static void make_rtl_for_nonlocal_decl (tree
, tree
, const char *);
83 static void save_function_data (tree
);
84 static void copy_type_enum (tree
, tree
);
85 static void check_function_type (tree
, tree
);
86 static void finish_constructor_body (void);
87 static void begin_destructor_body (void);
88 static void finish_destructor_body (void);
89 static void record_key_method_defined (tree
);
90 static tree
create_array_type_for_decl (tree
, tree
, tree
);
91 static tree
get_atexit_node (void);
92 static tree
get_dso_handle_node (void);
93 static tree
start_cleanup_fn (void);
94 static void end_cleanup_fn (void);
95 static tree
cp_make_fname_decl (location_t
, tree
, int);
96 static void initialize_predefined_identifiers (void);
97 static tree check_special_function_return_type
98 (special_function_kind
, tree
, tree
, int, const location_t
*);
99 static tree
push_cp_library_fn (enum tree_code
, tree
, int);
100 static tree
build_cp_library_fn (tree
, enum tree_code
, tree
, int);
101 static void store_parm_decls (tree
);
102 static void initialize_local_var (tree
, tree
);
103 static void expand_static_init (tree
, tree
);
105 /* The following symbols are subsumed in the cp_global_trees array, and
106 listed here individually for documentation purposes.
109 tree wchar_decl_node;
111 tree vtable_entry_type;
112 tree delta_type_node;
113 tree __t_desc_type_node;
115 tree class_type_node;
116 tree unknown_type_node;
118 Array type `vtable_entry_type[]'
121 tree vtbl_ptr_type_node;
128 A FUNCTION_DECL which can call `abort'. Not necessarily the
129 one that the user will declare, but sufficient to be called
130 by routines that want to abort the program.
135 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
136 tree tinfo_var_id; */
138 tree cp_global_trees
[CPTI_MAX
];
140 #define local_names cp_function_chain->x_local_names
142 /* A list of objects which have constructors or destructors
143 which reside in the global scope. The decl is stored in
144 the TREE_VALUE slot and the initializer is stored
145 in the TREE_PURPOSE slot. */
146 tree static_aggregates
;
148 /* Like static_aggregates, but for thread_local variables. */
153 /* A node for the integer constant 2. */
155 tree integer_two_node
;
157 /* vector of static decls. */
158 vec
<tree
, va_gc
> *static_decls
;
160 /* vector of keyed classes. */
161 vec
<tree
, va_gc
> *keyed_classes
;
163 /* Used only for jumps to as-yet undefined labels, since jumps to
164 defined labels can have their validity checked immediately. */
166 struct GTY((chain_next ("%h.next"))) named_label_use_entry
{
167 struct named_label_use_entry
*next
;
168 /* The binding level to which this entry is *currently* attached.
169 This is initially the binding level in which the goto appeared,
170 but is modified as scopes are closed. */
171 cp_binding_level
*binding_level
;
172 /* The head of the names list that was current when the goto appeared,
173 or the inner scope popped. These are the decls that will *not* be
174 skipped when jumping to the label. */
176 /* The location of the goto, for error reporting. */
177 location_t o_goto_locus
;
178 /* True if an OpenMP structured block scope has been closed since
179 the goto appeared. This means that the branch from the label will
180 illegally exit an OpenMP scope. */
184 /* A list of all LABEL_DECLs in the function that have names. Here so
185 we can clear out their names' definitions at the end of the
186 function, and so we can check the validity of jumps to these labels. */
188 struct GTY((for_user
)) named_label_entry
{
190 tree name
; /* Name of decl. */
192 tree label_decl
; /* LABEL_DECL, unless deleted local label. */
194 named_label_entry
*outer
; /* Outer shadowed chain. */
196 /* The binding level to which the label is *currently* attached.
197 This is initially set to the binding level in which the label
198 is defined, but is modified as scopes are closed. */
199 cp_binding_level
*binding_level
;
201 /* The head of the names list that was current when the label was
202 defined, or the inner scope popped. These are the decls that will
203 be skipped when jumping to the label. */
206 /* A vector of all decls from all binding levels that would be
207 crossed by a backward branch to the label. */
208 vec
<tree
, va_gc
> *bad_decls
;
210 /* A list of uses of the label, before the label is defined. */
211 named_label_use_entry
*uses
;
213 /* The following bits are set after the label is defined, and are
214 updated as scopes are popped. They indicate that a jump to the
215 label will illegally enter a scope of the given flavor. */
219 bool in_transaction_scope
;
220 bool in_constexpr_if
;
223 #define named_labels cp_function_chain->x_named_labels
225 /* The number of function bodies which we are currently processing.
226 (Zero if we are at namespace scope, one inside the body of a
227 function, two inside the body of a function in a local class, etc.) */
230 /* Whether the exception-specifier is part of a function type (i.e. C++17). */
231 bool flag_noexcept_type
;
233 /* States indicating how grokdeclarator() should handle declspecs marked
234 with __attribute__((deprecated)). An object declared as
235 __attribute__((deprecated)) suppresses warnings of uses of other
237 enum deprecated_states deprecated_state
= DEPRECATED_NORMAL
;
240 /* A list of VAR_DECLs whose type was incomplete at the time the
241 variable was declared. */
243 struct GTY(()) incomplete_var
{
245 tree incomplete_type
;
249 static GTY(()) vec
<incomplete_var
, va_gc
> *incomplete_vars
;
251 /* Returns the kind of template specialization we are currently
252 processing, given that it's declaration contained N_CLASS_SCOPES
253 explicit scope qualifications. */
256 current_tmpl_spec_kind (int n_class_scopes
)
258 int n_template_parm_scopes
= 0;
259 int seen_specialization_p
= 0;
260 int innermost_specialization_p
= 0;
263 /* Scan through the template parameter scopes. */
264 for (b
= current_binding_level
;
265 b
->kind
== sk_template_parms
;
268 /* If we see a specialization scope inside a parameter scope,
269 then something is wrong. That corresponds to a declaration
272 template <class T> template <> ...
274 which is always invalid since [temp.expl.spec] forbids the
275 specialization of a class member template if the enclosing
276 class templates are not explicitly specialized as well. */
277 if (b
->explicit_spec_p
)
279 if (n_template_parm_scopes
== 0)
280 innermost_specialization_p
= 1;
282 seen_specialization_p
= 1;
284 else if (seen_specialization_p
== 1)
285 return tsk_invalid_member_spec
;
287 ++n_template_parm_scopes
;
290 /* Handle explicit instantiations. */
291 if (processing_explicit_instantiation
)
293 if (n_template_parm_scopes
!= 0)
294 /* We've seen a template parameter list during an explicit
295 instantiation. For example:
297 template <class T> template void f(int);
299 This is erroneous. */
300 return tsk_invalid_expl_inst
;
302 return tsk_expl_inst
;
305 if (n_template_parm_scopes
< n_class_scopes
)
306 /* We've not seen enough template headers to match all the
307 specialized classes present. For example:
309 template <class T> void R<T>::S<T>::f(int);
311 This is invalid; there needs to be one set of template
312 parameters for each class. */
313 return tsk_insufficient_parms
;
314 else if (n_template_parm_scopes
== n_class_scopes
)
315 /* We're processing a non-template declaration (even though it may
316 be a member of a template class.) For example:
318 template <class T> void S<T>::f(int);
320 The `class T' matches the `S<T>', leaving no template headers
321 corresponding to the `f'. */
323 else if (n_template_parm_scopes
> n_class_scopes
+ 1)
324 /* We've got too many template headers. For example:
326 template <> template <class T> void f (T);
328 There need to be more enclosing classes. */
329 return tsk_excessive_parms
;
331 /* This must be a template. It's of the form:
333 template <class T> template <class U> void S<T>::f(U);
335 This is a specialization if the innermost level was a
336 specialization; otherwise it's just a definition of the
338 return innermost_specialization_p
? tsk_expl_spec
: tsk_template
;
341 /* Exit the current scope. */
349 /* When a label goes out of scope, check to see if that label was used
350 in a valid manner, and issue any appropriate warnings or errors. */
353 check_label_used (tree label
)
355 if (!processing_template_decl
)
357 if (DECL_INITIAL (label
) == NULL_TREE
)
361 error ("label %q+D used but not defined", label
);
362 location
= input_location
;
363 /* FIXME want (LOCATION_FILE (input_location), (line)0) */
364 /* Avoid crashing later. */
365 define_label (location
, DECL_NAME (label
));
368 warn_for_unused_label (label
);
372 /* Helper function to sort named label entries in a vector by DECL_UID. */
375 sort_labels (const void *a
, const void *b
)
377 tree label1
= *(tree
const *) a
;
378 tree label2
= *(tree
const *) b
;
380 /* DECL_UIDs can never be equal. */
381 return DECL_UID (label1
) > DECL_UID (label2
) ? -1 : +1;
384 /* At the end of a function, all labels declared within the function
385 go out of scope. BLOCK is the top-level block for the
389 pop_labels (tree block
)
394 /* We need to add the labels to the block chain, so debug
395 information is emitted. But, we want the order to be stable so
396 need to sort them first. Otherwise the debug output could be
397 randomly ordered. I guess it's mostly stable, unless the hash
398 table implementation changes. */
399 auto_vec
<tree
, 32> labels (named_labels
->elements ());
400 hash_table
<named_label_hash
>::iterator
end (named_labels
->end ());
401 for (hash_table
<named_label_hash
>::iterator iter
402 (named_labels
->begin ()); iter
!= end
; ++iter
)
404 named_label_entry
*ent
= *iter
;
406 gcc_checking_assert (!ent
->outer
);
408 labels
.quick_push (ent
->label_decl
);
412 labels
.qsort (sort_labels
);
414 while (labels
.length ())
416 tree label
= labels
.pop ();
418 DECL_CHAIN (label
) = BLOCK_VARS (block
);
419 BLOCK_VARS (block
) = label
;
421 check_label_used (label
);
425 /* At the end of a block with local labels, restore the outer definition. */
428 pop_local_label (tree id
, tree label
)
430 check_label_used (label
);
431 named_label_entry
**slot
= named_labels
->find_slot_with_hash
432 (id
, IDENTIFIER_HASH_VALUE (id
), NO_INSERT
);
433 named_label_entry
*ent
= *slot
;
439 ent
= ggc_cleared_alloc
<named_label_entry
> ();
445 /* The following two routines are used to interface to Objective-C++.
446 The binding level is purposely treated as an opaque type. */
449 objc_get_current_scope (void)
451 return current_binding_level
;
454 /* The following routine is used by the NeXT-style SJLJ exceptions;
455 variables get marked 'volatile' so as to not be clobbered by
456 _setjmp()/_longjmp() calls. All variables in the current scope,
457 as well as parent scopes up to (but not including) ENCLOSING_BLK
458 shall be thusly marked. */
461 objc_mark_locals_volatile (void *enclosing_blk
)
463 cp_binding_level
*scope
;
465 for (scope
= current_binding_level
;
466 scope
&& scope
!= enclosing_blk
;
467 scope
= scope
->level_chain
)
471 for (decl
= scope
->names
; decl
; decl
= TREE_CHAIN (decl
))
472 objc_volatilize_decl (decl
);
474 /* Do not climb up past the current function. */
475 if (scope
->kind
== sk_function_parms
)
480 /* True if B is the level for the condition of a constexpr if. */
483 level_for_constexpr_if (cp_binding_level
*b
)
485 return (b
->kind
== sk_cond
&& b
->this_entity
486 && TREE_CODE (b
->this_entity
) == IF_STMT
487 && IF_STMT_CONSTEXPR_P (b
->this_entity
));
490 /* Update data for defined and undefined labels when leaving a scope. */
493 poplevel_named_label_1 (named_label_entry
**slot
, cp_binding_level
*bl
)
495 named_label_entry
*ent
= *slot
;
496 cp_binding_level
*obl
= bl
->level_chain
;
498 if (ent
->binding_level
== bl
)
502 /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
503 TREE_LISTs representing OVERLOADs, so be careful. */
504 for (decl
= ent
->names_in_scope
; decl
; decl
= (DECL_P (decl
)
506 : TREE_CHAIN (decl
)))
507 if (decl_jump_unsafe (decl
))
508 vec_safe_push (ent
->bad_decls
, decl
);
510 ent
->binding_level
= obl
;
511 ent
->names_in_scope
= obl
->names
;
515 ent
->in_try_scope
= true;
518 ent
->in_catch_scope
= true;
521 ent
->in_omp_scope
= true;
524 ent
->in_transaction_scope
= true;
527 if (level_for_constexpr_if (bl
->level_chain
))
528 ent
->in_constexpr_if
= true;
536 struct named_label_use_entry
*use
;
538 for (use
= ent
->uses
; use
; use
= use
->next
)
539 if (use
->binding_level
== bl
)
541 use
->binding_level
= obl
;
542 use
->names_in_scope
= obl
->names
;
543 if (bl
->kind
== sk_omp
)
544 use
->in_omp_scope
= true;
551 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
552 when errors were reported, except for -Werror-unused-but-set-*. */
553 static int unused_but_set_errorcount
;
555 /* Exit a binding level.
556 Pop the level off, and restore the state of the identifier-decl mappings
557 that were in effect when this level was entered.
559 If KEEP == 1, this level had explicit declarations, so
560 and create a "block" (a BLOCK node) for the level
561 to record its declarations and subblocks for symbol table output.
563 If FUNCTIONBODY is nonzero, this level is the body of a function,
564 so create a block as if KEEP were set and also clear out all
567 If REVERSE is nonzero, reverse the order of decls before putting
568 them into the BLOCK. */
571 poplevel (int keep
, int reverse
, int functionbody
)
574 /* The chain of decls was accumulated in reverse order.
575 Put it into forward order, just for cleanliness. */
580 int leaving_for_scope
;
584 bool subtime
= timevar_cond_start (TV_NAME_LOOKUP
);
589 gcc_assert (current_binding_level
->kind
!= sk_class
590 && current_binding_level
->kind
!= sk_namespace
);
592 if (current_binding_level
->kind
== sk_cleanup
)
594 subblocks
= functionbody
>= 0 ? current_binding_level
->blocks
: 0;
596 gcc_assert (!vec_safe_length (current_binding_level
->class_shadowed
));
598 /* We used to use KEEP == 2 to indicate that the new block should go
599 at the beginning of the list of blocks at this binding level,
600 rather than the end. This hack is no longer used. */
601 gcc_assert (keep
== 0 || keep
== 1);
603 if (current_binding_level
->keep
)
606 /* Any uses of undefined labels, and any defined labels, now operate
607 under constraints of next binding contour. */
608 if (cfun
&& !functionbody
&& named_labels
)
609 named_labels
->traverse
<cp_binding_level
*, poplevel_named_label_1
>
610 (current_binding_level
);
612 /* Get the decls in the order they were written.
613 Usually current_binding_level->names is in reverse order.
614 But parameter decls were previously put in forward order. */
616 decls
= current_binding_level
->names
;
619 decls
= nreverse (decls
);
620 current_binding_level
->names
= decls
;
623 /* If there were any declarations or structure tags in that level,
624 or if this level is a function body,
625 create a BLOCK to record them for the life of this function. */
627 /* Avoid function body block if possible. */
628 if (functionbody
&& subblocks
&& BLOCK_CHAIN (subblocks
) == NULL_TREE
)
630 else if (keep
== 1 || functionbody
)
631 block
= make_node (BLOCK
);
632 if (block
!= NULL_TREE
)
634 BLOCK_VARS (block
) = decls
;
635 BLOCK_SUBBLOCKS (block
) = subblocks
;
638 /* In each subblock, record that this is its superior. */
640 for (link
= subblocks
; link
; link
= BLOCK_CHAIN (link
))
641 BLOCK_SUPERCONTEXT (link
) = block
;
643 /* We still support the old for-scope rules, whereby the variables
644 in a init statement were in scope after the for-statement ended.
645 We only use the new rules if flag_new_for_scope is nonzero. */
647 = current_binding_level
->kind
== sk_for
&& flag_new_for_scope
== 1;
649 /* Before we remove the declarations first check for unused variables. */
650 if ((warn_unused_variable
|| warn_unused_but_set_variable
)
651 && current_binding_level
->kind
!= sk_template_parms
652 && !processing_template_decl
)
653 for (tree d
= get_local_decls (); d
; d
= TREE_CHAIN (d
))
655 /* There are cases where D itself is a TREE_LIST. See in
656 push_local_binding where the list of decls returned by
657 getdecls is built. */
658 decl
= TREE_CODE (d
) == TREE_LIST
? TREE_VALUE (d
) : d
;
660 tree type
= TREE_TYPE (decl
);
662 && (! TREE_USED (decl
) || !DECL_READ_P (decl
))
663 && ! DECL_IN_SYSTEM_HEADER (decl
)
664 /* For structured bindings, consider only real variables, not
666 && (DECL_DECOMPOSITION_P (decl
) ? !DECL_DECOMP_BASE (decl
)
667 : (DECL_NAME (decl
) && !DECL_ARTIFICIAL (decl
)))
668 && type
!= error_mark_node
669 && (!CLASS_TYPE_P (type
)
670 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
)
671 || lookup_attribute ("warn_unused",
672 TYPE_ATTRIBUTES (TREE_TYPE (decl
)))))
674 if (! TREE_USED (decl
))
676 if (!DECL_NAME (decl
) && DECL_DECOMPOSITION_P (decl
))
677 warning_at (DECL_SOURCE_LOCATION (decl
),
678 OPT_Wunused_variable
,
679 "unused structured binding declaration");
681 warning_at (DECL_SOURCE_LOCATION (decl
),
682 OPT_Wunused_variable
, "unused variable %qD", decl
);
684 else if (DECL_CONTEXT (decl
) == current_function_decl
685 // For -Wunused-but-set-variable leave references alone.
686 && TREE_CODE (TREE_TYPE (decl
)) != REFERENCE_TYPE
687 && errorcount
== unused_but_set_errorcount
)
689 if (!DECL_NAME (decl
) && DECL_DECOMPOSITION_P (decl
))
690 warning_at (DECL_SOURCE_LOCATION (decl
),
691 OPT_Wunused_but_set_variable
, "structured "
692 "binding declaration set but not used");
694 warning_at (DECL_SOURCE_LOCATION (decl
),
695 OPT_Wunused_but_set_variable
,
696 "variable %qD set but not used", decl
);
697 unused_but_set_errorcount
= errorcount
;
702 /* Remove declarations for all the DECLs in this level. */
703 for (link
= decls
; link
; link
= TREE_CHAIN (link
))
705 decl
= TREE_CODE (link
) == TREE_LIST
? TREE_VALUE (link
) : link
;
706 tree name
= OVL_NAME (decl
);
708 if (leaving_for_scope
&& VAR_P (decl
)
709 /* It's hard to make this ARM compatibility hack play nicely with
710 lambdas, and it really isn't necessary in C++11 mode. */
711 && cxx_dialect
< cxx11
714 cxx_binding
*ob
= outer_binding (name
,
715 IDENTIFIER_BINDING (name
),
717 tree ns_binding
= NULL_TREE
;
719 ns_binding
= get_namespace_binding (current_namespace
, name
);
721 if (ob
&& ob
->scope
== current_binding_level
->level_chain
)
722 /* We have something like:
727 and we are leaving the `for' scope. There's no reason to
728 keep the binding of the inner `i' in this case. */
730 else if ((ob
&& (TREE_CODE (ob
->value
) == TYPE_DECL
))
731 || (ns_binding
&& TREE_CODE (ns_binding
) == TYPE_DECL
))
732 /* Here, we have something like:
740 We must pop the for-scope binding so we know what's a
741 type and what isn't. */
745 /* Mark this VAR_DECL as dead so that we can tell we left it
746 there only for backward compatibility. */
747 DECL_DEAD_FOR_LOCAL (link
) = 1;
749 /* Keep track of what should have happened when we
750 popped the binding. */
753 SET_DECL_SHADOWED_FOR_VAR (link
, ob
->value
);
754 DECL_HAS_SHADOWED_FOR_VAR_P (link
) = 1;
757 /* Add it to the list of dead variables in the next
758 outermost binding to that we can remove these when we
759 leave that binding. */
761 current_binding_level
->level_chain
->dead_vars_from_for
,
764 /* Although we don't pop the cxx_binding, we do clear
765 its SCOPE since the scope is going away now. */
766 IDENTIFIER_BINDING (name
)->scope
767 = current_binding_level
->level_chain
;
769 /* Don't remove the binding. */
773 /* Remove the binding. */
774 if (TREE_CODE (decl
) == LABEL_DECL
)
775 pop_local_label (name
, decl
);
777 pop_local_binding (name
, decl
);
780 /* Remove declarations for any `for' variables from inner scopes
781 that we kept around. */
782 FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level
->dead_vars_from_for
,
784 pop_local_binding (DECL_NAME (decl
), decl
);
786 /* Restore the IDENTIFIER_TYPE_VALUEs. */
787 for (link
= current_binding_level
->type_shadowed
;
788 link
; link
= TREE_CHAIN (link
))
789 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link
), TREE_VALUE (link
));
791 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
792 list if a `using' declaration put them there. The debugging
793 back ends won't understand OVERLOAD, so we remove them here.
794 Because the BLOCK_VARS are (temporarily) shared with
795 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
796 popped all the bindings. Also remove undeduced 'auto' decls,
797 which LTO doesn't understand, and can't have been used by anything. */
802 for (d
= &BLOCK_VARS (block
); *d
; )
804 if (TREE_CODE (*d
) == TREE_LIST
805 || (!processing_template_decl
806 && undeduced_auto_decl (*d
)))
807 *d
= TREE_CHAIN (*d
);
809 d
= &DECL_CHAIN (*d
);
813 /* If the level being exited is the top level of a function,
814 check over all the labels. */
819 /* Since this is the top level block of a function, the vars are
820 the function's parameters. Don't leave them in the BLOCK
821 because they are found in the FUNCTION_DECL instead. */
822 BLOCK_VARS (block
) = 0;
826 pop_labels (subblocks
);
829 kind
= current_binding_level
->kind
;
830 if (kind
== sk_cleanup
)
834 /* If this is a temporary binding created for a cleanup, then we'll
835 have pushed a statement list level. Pop that, create a new
836 BIND_EXPR for the block, and insert it into the stream. */
837 stmt
= pop_stmt_list (current_binding_level
->statement_list
);
838 stmt
= c_build_bind_expr (input_location
, block
, stmt
);
845 /* The current function is being defined, so its DECL_INITIAL
846 should be error_mark_node. */
847 gcc_assert (DECL_INITIAL (current_function_decl
) == error_mark_node
);
848 DECL_INITIAL (current_function_decl
) = block
? block
: subblocks
;
851 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl
))
853 if (BLOCK_SUBBLOCKS (subblocks
))
854 BLOCK_OUTER_CURLY_BRACE_P (BLOCK_SUBBLOCKS (subblocks
)) = 1;
857 BLOCK_OUTER_CURLY_BRACE_P (subblocks
) = 1;
861 current_binding_level
->blocks
862 = block_chainon (current_binding_level
->blocks
, block
);
864 /* If we did not make a block for the level just exited,
865 any blocks made for inner levels
866 (since they cannot be recorded as subblocks in that level)
867 must be carried forward so they will later become subblocks
868 of something else. */
870 current_binding_level
->blocks
871 = block_chainon (current_binding_level
->blocks
, subblocks
);
873 /* Each and every BLOCK node created here in `poplevel' is important
874 (e.g. for proper debugging information) so if we created one
875 earlier, mark it as "used". */
877 TREE_USED (block
) = 1;
879 /* All temporary bindings created for cleanups are popped silently. */
880 if (kind
== sk_cleanup
)
883 timevar_cond_stop (TV_NAME_LOOKUP
, subtime
);
887 /* Call wrapup_globals_declarations for the globals in NAMESPACE. */
888 /* Diagnose odr-used extern inline variables without definitions
889 in the current TU. */
892 wrapup_namespace_globals ()
894 if (vec
<tree
, va_gc
> *statics
= static_decls
)
898 FOR_EACH_VEC_ELT (*statics
, i
, decl
)
900 if (warn_unused_function
901 && TREE_CODE (decl
) == FUNCTION_DECL
902 && DECL_INITIAL (decl
) == 0
903 && DECL_EXTERNAL (decl
)
904 && !TREE_PUBLIC (decl
)
905 && !DECL_ARTIFICIAL (decl
)
906 && !DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl
)
907 && !TREE_NO_WARNING (decl
))
908 warning_at (DECL_SOURCE_LOCATION (decl
),
909 OPT_Wunused_function
,
910 "%qF declared %<static%> but never defined", decl
);
913 && DECL_EXTERNAL (decl
)
914 && DECL_INLINE_VAR_P (decl
)
915 && DECL_ODR_USED (decl
))
916 error_at (DECL_SOURCE_LOCATION (decl
),
917 "odr-used inline variable %qD is not defined", decl
);
920 /* Clear out the list, so we don't rescan next time. */
923 /* Write out any globals that need to be output. */
924 return wrapup_global_declarations (statics
->address (),
930 /* In C++, you don't have to write `struct S' to refer to `S'; you
931 can just use `S'. We accomplish this by creating a TYPE_DECL as
932 if the user had written `typedef struct S S'. Create and return
933 the TYPE_DECL for TYPE. */
936 create_implicit_typedef (tree name
, tree type
)
940 decl
= build_decl (input_location
, TYPE_DECL
, name
, type
);
941 DECL_ARTIFICIAL (decl
) = 1;
942 /* There are other implicit type declarations, like the one *within*
943 a class that allows you to write `S::S'. We must distinguish
945 SET_DECL_IMPLICIT_TYPEDEF_P (decl
);
946 TYPE_NAME (type
) = decl
;
947 TYPE_STUB_DECL (type
) = decl
;
952 /* Remember a local name for name-mangling purposes. */
955 push_local_name (tree decl
)
960 timevar_start (TV_NAME_LOOKUP
);
962 name
= DECL_NAME (decl
);
964 nelts
= vec_safe_length (local_names
);
965 for (i
= 0; i
< nelts
; i
++)
967 t
= (*local_names
)[i
];
968 if (DECL_NAME (t
) == name
)
970 retrofit_lang_decl (decl
);
971 DECL_LANG_SPECIFIC (decl
)->u
.base
.u2sel
= 1;
972 if (DECL_DISCRIMINATOR_SET_P (t
))
973 DECL_DISCRIMINATOR (decl
) = DECL_DISCRIMINATOR (t
) + 1;
975 DECL_DISCRIMINATOR (decl
) = 1;
977 (*local_names
)[i
] = decl
;
978 timevar_stop (TV_NAME_LOOKUP
);
983 vec_safe_push (local_names
, decl
);
984 timevar_stop (TV_NAME_LOOKUP
);
987 /* Subroutine of duplicate_decls: return truthvalue of whether
988 or not types of these decls match.
990 For C++, we must compare the parameter list so that `int' can match
991 `int&' in a parameter position, but `int&' is not confused with
995 decls_match (tree newdecl
, tree olddecl
, bool record_versions
/* = true */)
999 if (newdecl
== olddecl
)
1002 if (TREE_CODE (newdecl
) != TREE_CODE (olddecl
))
1003 /* If the two DECLs are not even the same kind of thing, we're not
1004 interested in their types. */
1007 gcc_assert (DECL_P (newdecl
));
1009 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
1011 tree f1
= TREE_TYPE (newdecl
);
1012 tree f2
= TREE_TYPE (olddecl
);
1013 tree p1
= TYPE_ARG_TYPES (f1
);
1014 tree p2
= TYPE_ARG_TYPES (f2
);
1017 /* Specializations of different templates are different functions
1018 even if they have the same type. */
1019 tree t1
= (DECL_USE_TEMPLATE (newdecl
)
1020 ? DECL_TI_TEMPLATE (newdecl
)
1022 tree t2
= (DECL_USE_TEMPLATE (olddecl
)
1023 ? DECL_TI_TEMPLATE (olddecl
)
1028 if (CP_DECL_CONTEXT (newdecl
) != CP_DECL_CONTEXT (olddecl
)
1029 && ! (DECL_EXTERN_C_P (newdecl
)
1030 && DECL_EXTERN_C_P (olddecl
)))
1033 /* A new declaration doesn't match a built-in one unless it
1034 is also extern "C". */
1035 if (DECL_IS_BUILTIN (olddecl
)
1036 && DECL_EXTERN_C_P (olddecl
) && !DECL_EXTERN_C_P (newdecl
))
1039 if (TREE_CODE (f1
) != TREE_CODE (f2
))
1042 /* A declaration with deduced return type should use its pre-deduction
1043 type for declaration matching. */
1044 r2
= fndecl_declared_return_type (olddecl
);
1046 if (same_type_p (TREE_TYPE (f1
), r2
))
1048 if (!prototype_p (f2
) && DECL_EXTERN_C_P (olddecl
)
1049 && (DECL_BUILT_IN (olddecl
)
1050 #ifndef NO_IMPLICIT_EXTERN_C
1051 || (DECL_IN_SYSTEM_HEADER (newdecl
) && !DECL_CLASS_SCOPE_P (newdecl
))
1052 || (DECL_IN_SYSTEM_HEADER (olddecl
) && !DECL_CLASS_SCOPE_P (olddecl
))
1056 types_match
= self_promoting_args_p (p1
);
1057 if (p1
== void_list_node
)
1058 TREE_TYPE (newdecl
) = TREE_TYPE (olddecl
);
1060 #ifndef NO_IMPLICIT_EXTERN_C
1061 else if (!prototype_p (f1
)
1062 && (DECL_EXTERN_C_P (olddecl
)
1063 && DECL_IN_SYSTEM_HEADER (olddecl
)
1064 && !DECL_CLASS_SCOPE_P (olddecl
))
1065 && (DECL_EXTERN_C_P (newdecl
)
1066 && DECL_IN_SYSTEM_HEADER (newdecl
)
1067 && !DECL_CLASS_SCOPE_P (newdecl
)))
1069 types_match
= self_promoting_args_p (p2
);
1070 TREE_TYPE (newdecl
) = TREE_TYPE (olddecl
);
1076 && type_memfn_rqual (f1
) == type_memfn_rqual (f2
)
1077 && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl
)) == NULL_TREE
1078 || comp_type_attributes (TREE_TYPE (newdecl
),
1079 TREE_TYPE (olddecl
)) != 0);
1084 /* The decls dont match if they correspond to two different versions
1085 of the same function. Disallow extern "C" functions to be
1086 versions for now. */
1088 && !DECL_EXTERN_C_P (newdecl
)
1089 && !DECL_EXTERN_C_P (olddecl
)
1091 && maybe_version_functions (newdecl
, olddecl
))
1094 else if (TREE_CODE (newdecl
) == TEMPLATE_DECL
)
1096 tree oldres
= DECL_TEMPLATE_RESULT (olddecl
);
1097 tree newres
= DECL_TEMPLATE_RESULT (newdecl
);
1099 if (TREE_CODE (newres
) != TREE_CODE (oldres
))
1102 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl
),
1103 DECL_TEMPLATE_PARMS (olddecl
)))
1106 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl
)) == TYPE_DECL
)
1107 types_match
= (same_type_p (TREE_TYPE (oldres
), TREE_TYPE (newres
))
1108 && equivalently_constrained (olddecl
, newdecl
));
1110 // We don't need to check equivalently_constrained for variable and
1111 // function templates because we check it on the results.
1112 types_match
= decls_match (oldres
, newres
);
1116 /* Need to check scope for variable declaration (VAR_DECL).
1117 For typedef (TYPE_DECL), scope is ignored. */
1119 && CP_DECL_CONTEXT (newdecl
) != CP_DECL_CONTEXT (olddecl
)
1121 Two declarations for an object with C language linkage
1122 with the same name (ignoring the namespace that qualify
1123 it) that appear in different namespace scopes refer to
1125 && !(DECL_EXTERN_C_P (olddecl
) && DECL_EXTERN_C_P (newdecl
)))
1128 if (TREE_TYPE (newdecl
) == error_mark_node
)
1129 types_match
= TREE_TYPE (olddecl
) == error_mark_node
;
1130 else if (TREE_TYPE (olddecl
) == NULL_TREE
)
1131 types_match
= TREE_TYPE (newdecl
) == NULL_TREE
;
1132 else if (TREE_TYPE (newdecl
) == NULL_TREE
)
1135 types_match
= comptypes (TREE_TYPE (newdecl
),
1136 TREE_TYPE (olddecl
),
1137 COMPARE_REDECLARATION
);
1140 // Normal functions can be constrained, as can variable partial
1142 if (types_match
&& VAR_OR_FUNCTION_DECL_P (newdecl
))
1143 types_match
= equivalently_constrained (newdecl
, olddecl
);
1148 /* NEWDECL and OLDDECL have identical signatures. If they are
1149 different versions adjust them and return true. */
1152 maybe_version_functions (tree newdecl
, tree olddecl
)
1154 if (!targetm
.target_option
.function_versions (newdecl
, olddecl
))
1157 bool record
= false;
1159 if (!DECL_FUNCTION_VERSIONED (olddecl
))
1162 DECL_FUNCTION_VERSIONED (olddecl
) = 1;
1163 if (DECL_ASSEMBLER_NAME_SET_P (olddecl
))
1164 mangle_decl (olddecl
);
1167 if (!DECL_FUNCTION_VERSIONED (newdecl
))
1170 DECL_FUNCTION_VERSIONED (newdecl
) = 1;
1171 if (DECL_ASSEMBLER_NAME_SET_P (newdecl
))
1172 mangle_decl (newdecl
);
1175 /* Only record if at least one was not already versions. */
1177 cgraph_node::record_function_versions (olddecl
, newdecl
);
1182 /* If NEWDECL is `static' and an `extern' was seen previously,
1183 warn about it. OLDDECL is the previous declaration.
1185 Note that this does not apply to the C++ case of declaring
1186 a variable `extern const' and then later `const'.
1188 Don't complain about built-in functions, since they are beyond
1189 the user's control. */
1192 warn_extern_redeclared_static (tree newdecl
, tree olddecl
)
1194 if (TREE_CODE (newdecl
) == TYPE_DECL
1195 || TREE_CODE (newdecl
) == TEMPLATE_DECL
1196 || TREE_CODE (newdecl
) == CONST_DECL
1197 || TREE_CODE (newdecl
) == NAMESPACE_DECL
)
1200 /* Don't get confused by static member functions; that's a different
1202 if (TREE_CODE (newdecl
) == FUNCTION_DECL
1203 && DECL_STATIC_FUNCTION_P (newdecl
))
1206 /* If the old declaration was `static', or the new one isn't, then
1207 everything is OK. */
1208 if (DECL_THIS_STATIC (olddecl
) || !DECL_THIS_STATIC (newdecl
))
1211 /* It's OK to declare a builtin function as `static'. */
1212 if (TREE_CODE (olddecl
) == FUNCTION_DECL
1213 && DECL_ARTIFICIAL (olddecl
))
1216 if (permerror (DECL_SOURCE_LOCATION (newdecl
),
1217 "%qD was declared %<extern%> and later %<static%>", newdecl
))
1218 inform (DECL_SOURCE_LOCATION (olddecl
),
1219 "previous declaration of %qD", olddecl
);
1222 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1223 function templates. If their exception specifications do not
1224 match, issue a diagnostic. */
1227 check_redeclaration_exception_specification (tree new_decl
,
1230 tree new_exceptions
= TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl
));
1231 tree old_exceptions
= TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl
));
1233 /* Two default specs are equivalent, don't force evaluation. */
1234 if (UNEVALUATED_NOEXCEPT_SPEC_P (new_exceptions
)
1235 && UNEVALUATED_NOEXCEPT_SPEC_P (old_exceptions
))
1238 maybe_instantiate_noexcept (new_decl
);
1239 maybe_instantiate_noexcept (old_decl
);
1240 new_exceptions
= TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl
));
1241 old_exceptions
= TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl
));
1245 If any declaration of a function has an exception-specification,
1246 all declarations, including the definition and an explicit
1247 specialization, of that function shall have an
1248 exception-specification with the same set of type-ids. */
1249 if (! DECL_IS_BUILTIN (old_decl
)
1250 && !comp_except_specs (new_exceptions
, old_exceptions
, ce_normal
))
1252 const char *const msg
1253 = G_("declaration of %qF has a different exception specifier");
1254 bool complained
= true;
1255 location_t new_loc
= DECL_SOURCE_LOCATION (new_decl
);
1256 if (DECL_IN_SYSTEM_HEADER (old_decl
))
1257 complained
= pedwarn (new_loc
, OPT_Wsystem_headers
, msg
, new_decl
);
1258 else if (!flag_exceptions
)
1259 /* We used to silently permit mismatched eh specs with
1260 -fno-exceptions, so make them a pedwarn now. */
1261 complained
= pedwarn (new_loc
, OPT_Wpedantic
, msg
, new_decl
);
1263 error_at (new_loc
, msg
, new_decl
);
1265 inform (DECL_SOURCE_LOCATION (old_decl
),
1266 "from previous declaration %qF", old_decl
);
1270 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1271 Otherwise issue diagnostics. */
1274 validate_constexpr_redeclaration (tree old_decl
, tree new_decl
)
1276 old_decl
= STRIP_TEMPLATE (old_decl
);
1277 new_decl
= STRIP_TEMPLATE (new_decl
);
1278 if (!VAR_OR_FUNCTION_DECL_P (old_decl
)
1279 || !VAR_OR_FUNCTION_DECL_P (new_decl
))
1281 if (DECL_DECLARED_CONSTEXPR_P (old_decl
)
1282 == DECL_DECLARED_CONSTEXPR_P (new_decl
))
1284 if (TREE_CODE (old_decl
) == FUNCTION_DECL
)
1286 if (DECL_BUILT_IN (old_decl
))
1288 /* Hide a built-in declaration. */
1289 DECL_DECLARED_CONSTEXPR_P (old_decl
)
1290 = DECL_DECLARED_CONSTEXPR_P (new_decl
);
1293 /* 7.1.5 [dcl.constexpr]
1294 Note: An explicit specialization can differ from the template
1295 declaration with respect to the constexpr specifier. */
1296 if (! DECL_TEMPLATE_SPECIALIZATION (old_decl
)
1297 && DECL_TEMPLATE_SPECIALIZATION (new_decl
))
1300 error_at (DECL_SOURCE_LOCATION (new_decl
),
1301 "redeclaration %qD differs in %<constexpr%> "
1302 "from previous declaration", new_decl
);
1303 inform (DECL_SOURCE_LOCATION (old_decl
),
1304 "previous declaration %qD", old_decl
);
1310 // If OLDDECL and NEWDECL are concept declarations with the same type
1311 // (i.e., and template parameters), but different requirements,
1312 // emit diagnostics and return true. Otherwise, return false.
1314 check_concept_refinement (tree olddecl
, tree newdecl
)
1316 if (!DECL_DECLARED_CONCEPT_P (olddecl
) || !DECL_DECLARED_CONCEPT_P (newdecl
))
1319 tree d1
= DECL_TEMPLATE_RESULT (olddecl
);
1320 tree d2
= DECL_TEMPLATE_RESULT (newdecl
);
1321 if (TREE_CODE (d1
) != TREE_CODE (d2
))
1324 tree t1
= TREE_TYPE (d1
);
1325 tree t2
= TREE_TYPE (d2
);
1326 if (TREE_CODE (d1
) == FUNCTION_DECL
)
1328 if (compparms (TYPE_ARG_TYPES (t1
), TYPE_ARG_TYPES (t2
))
1329 && comp_template_parms (DECL_TEMPLATE_PARMS (olddecl
),
1330 DECL_TEMPLATE_PARMS (newdecl
))
1331 && !equivalently_constrained (olddecl
, newdecl
))
1333 error ("cannot specialize concept %q#D", olddecl
);
1340 /* DECL is a redeclaration of a function or function template. If
1341 it does have default arguments issue a diagnostic. Note: this
1342 function is used to enforce the requirements in C++11 8.3.6 about
1343 no default arguments in redeclarations. */
1346 check_redeclaration_no_default_args (tree decl
)
1348 gcc_assert (DECL_DECLARES_FUNCTION_P (decl
));
1350 for (tree t
= FUNCTION_FIRST_USER_PARMTYPE (decl
);
1351 t
&& t
!= void_list_node
; t
= TREE_CHAIN (t
))
1352 if (TREE_PURPOSE (t
))
1354 permerror (DECL_SOURCE_LOCATION (decl
),
1355 "redeclaration of %q#D may not have default "
1361 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1362 && lookup_attribute ("gnu_inline", \
1363 DECL_ATTRIBUTES (fn)))
1365 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1366 If the redeclaration is invalid, a diagnostic is issued, and the
1367 error_mark_node is returned. Otherwise, OLDDECL is returned.
1369 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1372 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1375 duplicate_decls (tree newdecl
, tree olddecl
, bool newdecl_is_friend
)
1377 unsigned olddecl_uid
= DECL_UID (olddecl
);
1378 int olddecl_friend
= 0, types_match
= 0, hidden_friend
= 0;
1379 int new_defines_function
= 0;
1380 tree new_template_info
;
1382 if (newdecl
== olddecl
)
1385 types_match
= decls_match (newdecl
, olddecl
);
1387 /* If either the type of the new decl or the type of the old decl is an
1388 error_mark_node, then that implies that we have already issued an
1389 error (earlier) for some bogus type specification, and in that case,
1390 it is rather pointless to harass the user with yet more error message
1391 about the same declaration, so just pretend the types match here. */
1392 if (TREE_TYPE (newdecl
) == error_mark_node
1393 || TREE_TYPE (olddecl
) == error_mark_node
)
1394 return error_mark_node
;
1396 if (UDLIT_OPER_P (DECL_NAME (newdecl
))
1397 && UDLIT_OPER_P (DECL_NAME (olddecl
)))
1399 if (TREE_CODE (newdecl
) == TEMPLATE_DECL
1400 && TREE_CODE (olddecl
) != TEMPLATE_DECL
1401 && check_raw_literal_operator (olddecl
))
1402 error ("literal operator template %q+D conflicts with"
1403 " raw literal operator %qD", newdecl
, olddecl
);
1404 else if (TREE_CODE (newdecl
) != TEMPLATE_DECL
1405 && TREE_CODE (olddecl
) == TEMPLATE_DECL
1406 && check_raw_literal_operator (newdecl
))
1407 error ("raw literal operator %q+D conflicts with"
1408 " literal operator template %qD", newdecl
, olddecl
);
1411 if (DECL_P (olddecl
)
1412 && TREE_CODE (newdecl
) == FUNCTION_DECL
1413 && TREE_CODE (olddecl
) == FUNCTION_DECL
1414 && diagnose_mismatched_attributes (olddecl
, newdecl
))
1416 if (DECL_INITIAL (olddecl
))
1417 inform (DECL_SOURCE_LOCATION (olddecl
),
1418 "previous definition of %qD was here", olddecl
);
1420 inform (DECL_SOURCE_LOCATION (olddecl
),
1421 "previous declaration of %qD was here", olddecl
);
1424 /* Check for redeclaration and other discrepancies. */
1425 if (TREE_CODE (olddecl
) == FUNCTION_DECL
1426 && DECL_ARTIFICIAL (olddecl
))
1428 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl
));
1429 if (TREE_CODE (newdecl
) != FUNCTION_DECL
)
1431 /* Avoid warnings redeclaring built-ins which have not been
1432 explicitly declared. */
1433 if (DECL_ANTICIPATED (olddecl
))
1435 if (TREE_PUBLIC (newdecl
)
1436 && CP_DECL_CONTEXT (newdecl
) == global_namespace
)
1437 warning_at (DECL_SOURCE_LOCATION (newdecl
),
1438 OPT_Wbuiltin_declaration_mismatch
,
1439 "built-in function %qD declared as non-function",
1444 /* If you declare a built-in or predefined function name as static,
1445 the old definition is overridden, but optionally warn this was a
1446 bad choice of name. */
1447 if (! TREE_PUBLIC (newdecl
))
1449 warning (OPT_Wshadow
,
1450 DECL_BUILT_IN (olddecl
)
1451 ? G_("shadowing built-in function %q#D")
1452 : G_("shadowing library function %q#D"), olddecl
);
1453 /* Discard the old built-in function. */
1456 /* If the built-in is not ansi, then programs can override
1457 it even globally without an error. */
1458 else if (! DECL_BUILT_IN (olddecl
))
1459 warning_at (DECL_SOURCE_LOCATION (newdecl
), 0,
1460 "library function %q#D redeclared as non-function %q#D",
1463 error ("declaration of %q+#D conflicts with built-in "
1464 "declaration %q#D", newdecl
, olddecl
);
1467 else if (DECL_OMP_DECLARE_REDUCTION_P (olddecl
))
1469 gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (newdecl
));
1470 error_at (DECL_SOURCE_LOCATION (newdecl
),
1471 "redeclaration of %<pragma omp declare reduction%>");
1472 inform (DECL_SOURCE_LOCATION (olddecl
),
1473 "previous %<pragma omp declare reduction%> declaration");
1474 return error_mark_node
;
1476 else if (!types_match
)
1478 /* Avoid warnings redeclaring built-ins which have not been
1479 explicitly declared. */
1480 if (DECL_ANTICIPATED (olddecl
))
1484 /* A new declaration doesn't match a built-in one unless it
1485 is also extern "C". */
1486 gcc_assert (DECL_IS_BUILTIN (olddecl
));
1487 gcc_assert (DECL_EXTERN_C_P (olddecl
));
1488 if (!DECL_EXTERN_C_P (newdecl
))
1491 for (t1
= TYPE_ARG_TYPES (TREE_TYPE (newdecl
)),
1492 t2
= TYPE_ARG_TYPES (TREE_TYPE (olddecl
));
1494 t1
= TREE_CHAIN (t1
), t2
= TREE_CHAIN (t2
))
1498 /* FILE, tm types are not known at the time
1499 we create the builtins. */
1500 for (unsigned i
= 0;
1501 i
< sizeof (builtin_structptr_types
)
1502 / sizeof (builtin_structptr_type
);
1504 if (TREE_VALUE (t2
) == builtin_structptr_types
[i
].node
)
1506 tree t
= TREE_VALUE (t1
);
1509 && TYPE_IDENTIFIER (TREE_TYPE (t
))
1510 == get_identifier (builtin_structptr_types
[i
].str
)
1511 && compparms (TREE_CHAIN (t1
), TREE_CHAIN (t2
)))
1513 tree oldargs
= TYPE_ARG_TYPES (TREE_TYPE (olddecl
));
1515 TYPE_ARG_TYPES (TREE_TYPE (olddecl
))
1516 = TYPE_ARG_TYPES (TREE_TYPE (newdecl
));
1517 types_match
= decls_match (newdecl
, olddecl
);
1519 return duplicate_decls (newdecl
, olddecl
,
1521 TYPE_ARG_TYPES (TREE_TYPE (olddecl
)) = oldargs
;
1526 if (! same_type_p (TREE_VALUE (t1
), TREE_VALUE (t2
)))
1531 warning_at (DECL_SOURCE_LOCATION (newdecl
),
1532 OPT_Wbuiltin_declaration_mismatch
,
1533 "declaration of %q#D conflicts with built-in "
1534 "declaration %q#D", newdecl
, olddecl
);
1536 else if ((DECL_EXTERN_C_P (newdecl
)
1537 && DECL_EXTERN_C_P (olddecl
))
1538 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl
)),
1539 TYPE_ARG_TYPES (TREE_TYPE (olddecl
))))
1541 /* A near match; override the builtin. */
1543 if (TREE_PUBLIC (newdecl
))
1544 warning_at (DECL_SOURCE_LOCATION (newdecl
),
1545 OPT_Wbuiltin_declaration_mismatch
,
1546 "new declaration %q#D ambiguates built-in "
1547 "declaration %q#D", newdecl
, olddecl
);
1549 warning (OPT_Wshadow
,
1550 DECL_BUILT_IN (olddecl
)
1551 ? G_("shadowing built-in function %q#D")
1552 : G_("shadowing library function %q#D"), olddecl
);
1555 /* Discard the old built-in function. */
1558 /* Replace the old RTL to avoid problems with inlining. */
1559 COPY_DECL_RTL (newdecl
, olddecl
);
1561 /* Even if the types match, prefer the new declarations type for
1562 built-ins which have not been explicitly declared, for
1563 exception lists, etc... */
1564 else if (DECL_IS_BUILTIN (olddecl
))
1566 tree type
= TREE_TYPE (newdecl
);
1567 tree attribs
= (*targetm
.merge_type_attributes
)
1568 (TREE_TYPE (olddecl
), type
);
1570 type
= cp_build_type_attribute_variant (type
, attribs
);
1571 TREE_TYPE (newdecl
) = TREE_TYPE (olddecl
) = type
;
1574 /* If a function is explicitly declared "throw ()", propagate that to
1575 the corresponding builtin. */
1576 if (DECL_BUILT_IN_CLASS (olddecl
) == BUILT_IN_NORMAL
1577 && DECL_ANTICIPATED (olddecl
)
1578 && TREE_NOTHROW (newdecl
)
1579 && !TREE_NOTHROW (olddecl
))
1581 enum built_in_function fncode
= DECL_FUNCTION_CODE (olddecl
);
1582 tree tmpdecl
= builtin_decl_explicit (fncode
);
1583 if (tmpdecl
&& tmpdecl
!= olddecl
&& types_match
)
1584 TREE_NOTHROW (tmpdecl
) = 1;
1587 /* Whether or not the builtin can throw exceptions has no
1588 bearing on this declarator. */
1589 TREE_NOTHROW (olddecl
) = 0;
1591 if (DECL_THIS_STATIC (newdecl
) && !DECL_THIS_STATIC (olddecl
))
1593 /* If a builtin function is redeclared as `static', merge
1594 the declarations, but make the original one static. */
1595 DECL_THIS_STATIC (olddecl
) = 1;
1596 TREE_PUBLIC (olddecl
) = 0;
1598 /* Make the old declaration consistent with the new one so
1599 that all remnants of the builtin-ness of this function
1600 will be banished. */
1601 SET_DECL_LANGUAGE (olddecl
, DECL_LANGUAGE (newdecl
));
1602 COPY_DECL_RTL (newdecl
, olddecl
);
1605 else if (TREE_CODE (olddecl
) != TREE_CODE (newdecl
))
1607 /* C++ Standard, 3.3, clause 4:
1608 "[Note: a namespace name or a class template name must be unique
1609 in its declarative region (7.3.2, clause 14). ]" */
1610 if (TREE_CODE (olddecl
) != NAMESPACE_DECL
1611 && TREE_CODE (newdecl
) != NAMESPACE_DECL
1612 && (TREE_CODE (olddecl
) != TEMPLATE_DECL
1613 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl
)) != TYPE_DECL
)
1614 && (TREE_CODE (newdecl
) != TEMPLATE_DECL
1615 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl
)) != TYPE_DECL
))
1617 if ((TREE_CODE (olddecl
) == TYPE_DECL
&& DECL_ARTIFICIAL (olddecl
)
1618 && TREE_CODE (newdecl
) != TYPE_DECL
)
1619 || (TREE_CODE (newdecl
) == TYPE_DECL
&& DECL_ARTIFICIAL (newdecl
)
1620 && TREE_CODE (olddecl
) != TYPE_DECL
))
1622 /* We do nothing special here, because C++ does such nasty
1623 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1624 get shadowed, and know that if we need to find a TYPE_DECL
1625 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1626 slot of the identifier. */
1630 if ((TREE_CODE (newdecl
) == FUNCTION_DECL
1631 && DECL_FUNCTION_TEMPLATE_P (olddecl
))
1632 || (TREE_CODE (olddecl
) == FUNCTION_DECL
1633 && DECL_FUNCTION_TEMPLATE_P (newdecl
)))
1637 error ("%q#D redeclared as different kind of symbol", newdecl
);
1638 if (TREE_CODE (olddecl
) == TREE_LIST
)
1639 olddecl
= TREE_VALUE (olddecl
);
1640 inform (DECL_SOURCE_LOCATION (olddecl
),
1641 "previous declaration %q#D", olddecl
);
1643 return error_mark_node
;
1645 else if (!types_match
)
1647 if (CP_DECL_CONTEXT (newdecl
) != CP_DECL_CONTEXT (olddecl
))
1648 /* These are certainly not duplicate declarations; they're
1649 from different scopes. */
1652 if (TREE_CODE (newdecl
) == TEMPLATE_DECL
)
1654 /* The name of a class template may not be declared to refer to
1655 any other template, class, function, object, namespace, value,
1656 or type in the same scope. */
1657 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl
)) == TYPE_DECL
1658 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl
)) == TYPE_DECL
)
1660 error ("conflicting declaration of template %q+#D", newdecl
);
1661 inform (DECL_SOURCE_LOCATION (olddecl
),
1662 "previous declaration %q#D", olddecl
);
1663 return error_mark_node
;
1665 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl
)) == FUNCTION_DECL
1666 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl
)) == FUNCTION_DECL
1667 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl
))),
1668 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl
))))
1669 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl
),
1670 DECL_TEMPLATE_PARMS (olddecl
))
1671 /* Template functions can be disambiguated by
1673 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl
)),
1674 TREE_TYPE (TREE_TYPE (olddecl
)))
1675 // Template functions can also be disambiguated by
1677 && equivalently_constrained (olddecl
, newdecl
))
1679 error ("ambiguating new declaration %q+#D", newdecl
);
1680 inform (DECL_SOURCE_LOCATION (olddecl
),
1681 "old declaration %q#D", olddecl
);
1683 else if (check_concept_refinement (olddecl
, newdecl
))
1684 return error_mark_node
;
1687 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
1689 if (DECL_EXTERN_C_P (newdecl
) && DECL_EXTERN_C_P (olddecl
))
1691 error ("conflicting declaration of C function %q+#D",
1693 inform (DECL_SOURCE_LOCATION (olddecl
),
1694 "previous declaration %q#D", olddecl
);
1697 /* For function versions, params and types match, but they
1698 are not ambiguous. */
1699 else if ((!DECL_FUNCTION_VERSIONED (newdecl
)
1700 && !DECL_FUNCTION_VERSIONED (olddecl
))
1701 // The functions have the same parameter types.
1702 && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl
)),
1703 TYPE_ARG_TYPES (TREE_TYPE (olddecl
)))
1704 // And the same constraints.
1705 && equivalently_constrained (newdecl
, olddecl
))
1707 error ("ambiguating new declaration of %q+#D", newdecl
);
1708 inform (DECL_SOURCE_LOCATION (olddecl
),
1709 "old declaration %q#D", olddecl
);
1710 return error_mark_node
;
1717 error ("conflicting declaration %q+#D", newdecl
);
1718 inform (DECL_SOURCE_LOCATION (olddecl
),
1719 "previous declaration as %q#D", olddecl
);
1720 return error_mark_node
;
1723 else if (TREE_CODE (newdecl
) == FUNCTION_DECL
1724 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl
)
1725 && (!DECL_TEMPLATE_INFO (newdecl
)
1726 || (DECL_TI_TEMPLATE (newdecl
)
1727 != DECL_TI_TEMPLATE (olddecl
))))
1728 || (DECL_TEMPLATE_SPECIALIZATION (newdecl
)
1729 && (!DECL_TEMPLATE_INFO (olddecl
)
1730 || (DECL_TI_TEMPLATE (olddecl
)
1731 != DECL_TI_TEMPLATE (newdecl
))))))
1732 /* It's OK to have a template specialization and a non-template
1733 with the same type, or to have specializations of two
1734 different templates with the same type. Note that if one is a
1735 specialization, and the other is an instantiation of the same
1736 template, that we do not exit at this point. That situation
1737 can occur if we instantiate a template class, and then
1738 specialize one of its methods. This situation is valid, but
1739 the declarations must be merged in the usual way. */
1741 else if (TREE_CODE (newdecl
) == FUNCTION_DECL
1742 && ((DECL_TEMPLATE_INSTANTIATION (olddecl
)
1743 && !DECL_USE_TEMPLATE (newdecl
))
1744 || (DECL_TEMPLATE_INSTANTIATION (newdecl
)
1745 && !DECL_USE_TEMPLATE (olddecl
))))
1746 /* One of the declarations is a template instantiation, and the
1747 other is not a template at all. That's OK. */
1749 else if (TREE_CODE (newdecl
) == NAMESPACE_DECL
)
1751 /* In [namespace.alias] we have:
1753 In a declarative region, a namespace-alias-definition can be
1754 used to redefine a namespace-alias declared in that declarative
1755 region to refer only to the namespace to which it already
1758 Therefore, if we encounter a second alias directive for the same
1759 alias, we can just ignore the second directive. */
1760 if (DECL_NAMESPACE_ALIAS (newdecl
)
1761 && (DECL_NAMESPACE_ALIAS (newdecl
)
1762 == DECL_NAMESPACE_ALIAS (olddecl
)))
1765 /* Leave it to update_binding to merge or report error. */
1770 const char *errmsg
= redeclaration_error_message (newdecl
, olddecl
);
1773 error_at (DECL_SOURCE_LOCATION (newdecl
), errmsg
, newdecl
);
1774 if (DECL_NAME (olddecl
) != NULL_TREE
)
1775 inform (DECL_SOURCE_LOCATION (olddecl
),
1776 (DECL_INITIAL (olddecl
) && namespace_bindings_p ())
1777 ? G_("%q#D previously defined here")
1778 : G_("%q#D previously declared here"), olddecl
);
1779 return error_mark_node
;
1781 else if (TREE_CODE (olddecl
) == FUNCTION_DECL
1782 && DECL_INITIAL (olddecl
) != NULL_TREE
1783 && !prototype_p (TREE_TYPE (olddecl
))
1784 && prototype_p (TREE_TYPE (newdecl
)))
1786 /* Prototype decl follows defn w/o prototype. */
1787 if (warning_at (DECL_SOURCE_LOCATION (newdecl
), 0,
1788 "prototype specified for %q#D", newdecl
))
1789 inform (DECL_SOURCE_LOCATION (olddecl
),
1790 "previous non-prototype definition here");
1792 else if (VAR_OR_FUNCTION_DECL_P (olddecl
)
1793 && DECL_LANGUAGE (newdecl
) != DECL_LANGUAGE (olddecl
))
1796 If two declarations of the same function or object
1797 specify different linkage-specifications ..., the program
1798 is ill-formed.... Except for functions with C++ linkage,
1799 a function declaration without a linkage specification
1800 shall not precede the first linkage specification for
1801 that function. A function can be declared without a
1802 linkage specification after an explicit linkage
1803 specification has been seen; the linkage explicitly
1804 specified in the earlier declaration is not affected by
1805 such a function declaration.
1807 DR 563 raises the question why the restrictions on
1808 functions should not also apply to objects. Older
1809 versions of G++ silently ignore the linkage-specification
1817 which is clearly wrong. Therefore, we now treat objects
1819 if (current_lang_depth () == 0)
1821 /* There is no explicit linkage-specification, so we use
1822 the linkage from the previous declaration. */
1823 retrofit_lang_decl (newdecl
);
1824 SET_DECL_LANGUAGE (newdecl
, DECL_LANGUAGE (olddecl
));
1828 error ("conflicting declaration of %q+#D with %qL linkage",
1829 newdecl
, DECL_LANGUAGE (newdecl
));
1830 inform (DECL_SOURCE_LOCATION (olddecl
),
1831 "previous declaration with %qL linkage",
1832 DECL_LANGUAGE (olddecl
));
1836 if (DECL_LANG_SPECIFIC (olddecl
) && DECL_USE_TEMPLATE (olddecl
))
1838 else if (TREE_CODE (olddecl
) == FUNCTION_DECL
)
1840 /* Note: free functions, as TEMPLATE_DECLs, are handled below. */
1841 if (DECL_FUNCTION_MEMBER_P (olddecl
)
1842 && (/* grokfndecl passes member function templates too
1843 as FUNCTION_DECLs. */
1844 DECL_TEMPLATE_INFO (olddecl
)
1846 Default arguments for a member function of a class
1847 template shall be specified on the initial declaration
1848 of the member function within the class template. */
1849 || CLASSTYPE_TEMPLATE_INFO (CP_DECL_CONTEXT (olddecl
))))
1850 check_redeclaration_no_default_args (newdecl
);
1853 tree t1
= FUNCTION_FIRST_USER_PARMTYPE (olddecl
);
1854 tree t2
= FUNCTION_FIRST_USER_PARMTYPE (newdecl
);
1857 for (; t1
&& t1
!= void_list_node
;
1858 t1
= TREE_CHAIN (t1
), t2
= TREE_CHAIN (t2
), i
++)
1859 if (TREE_PURPOSE (t1
) && TREE_PURPOSE (t2
))
1861 if (simple_cst_equal (TREE_PURPOSE (t1
),
1862 TREE_PURPOSE (t2
)) == 1)
1864 if (permerror (input_location
,
1865 "default argument given for parameter "
1866 "%d of %q#D", i
, newdecl
))
1867 inform (DECL_SOURCE_LOCATION (olddecl
),
1868 "previous specification in %q#D here",
1873 error ("default argument given for parameter %d "
1874 "of %q#D", i
, newdecl
);
1875 inform (DECL_SOURCE_LOCATION (olddecl
),
1876 "previous specification in %q#D here",
1884 /* Do not merge an implicit typedef with an explicit one. In:
1888 typedef class A A __attribute__ ((foo));
1890 the attribute should apply only to the typedef. */
1891 if (TREE_CODE (olddecl
) == TYPE_DECL
1892 && (DECL_IMPLICIT_TYPEDEF_P (olddecl
)
1893 || DECL_IMPLICIT_TYPEDEF_P (newdecl
)))
1896 /* If new decl is `static' and an `extern' was seen previously,
1898 warn_extern_redeclared_static (newdecl
, olddecl
);
1900 if (!validate_constexpr_redeclaration (olddecl
, newdecl
))
1901 return error_mark_node
;
1903 /* We have committed to returning 1 at this point. */
1904 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
1906 /* Now that functions must hold information normally held
1907 by field decls, there is extra work to do so that
1908 declaration information does not get destroyed during
1910 if (DECL_VINDEX (olddecl
))
1911 DECL_VINDEX (newdecl
) = DECL_VINDEX (olddecl
);
1912 if (DECL_CONTEXT (olddecl
))
1913 DECL_CONTEXT (newdecl
) = DECL_CONTEXT (olddecl
);
1914 DECL_STATIC_CONSTRUCTOR (newdecl
) |= DECL_STATIC_CONSTRUCTOR (olddecl
);
1915 DECL_STATIC_DESTRUCTOR (newdecl
) |= DECL_STATIC_DESTRUCTOR (olddecl
);
1916 DECL_PURE_VIRTUAL_P (newdecl
) |= DECL_PURE_VIRTUAL_P (olddecl
);
1917 DECL_VIRTUAL_P (newdecl
) |= DECL_VIRTUAL_P (olddecl
);
1918 DECL_INVALID_OVERRIDER_P (newdecl
) |= DECL_INVALID_OVERRIDER_P (olddecl
);
1919 DECL_FINAL_P (newdecl
) |= DECL_FINAL_P (olddecl
);
1920 DECL_OVERRIDE_P (newdecl
) |= DECL_OVERRIDE_P (olddecl
);
1921 DECL_THIS_STATIC (newdecl
) |= DECL_THIS_STATIC (olddecl
);
1922 if (DECL_OVERLOADED_OPERATOR_P (olddecl
))
1923 DECL_OVERLOADED_OPERATOR_CODE_RAW (newdecl
)
1924 = DECL_OVERLOADED_OPERATOR_CODE_RAW (olddecl
);
1925 new_defines_function
= DECL_INITIAL (newdecl
) != NULL_TREE
;
1927 /* Optionally warn about more than one declaration for the same
1928 name, but don't warn about a function declaration followed by a
1930 if (warn_redundant_decls
&& ! DECL_ARTIFICIAL (olddecl
)
1931 && !(new_defines_function
&& DECL_INITIAL (olddecl
) == NULL_TREE
)
1932 /* Don't warn about extern decl followed by definition. */
1933 && !(DECL_EXTERNAL (olddecl
) && ! DECL_EXTERNAL (newdecl
))
1934 /* Don't warn about friends, let add_friend take care of it. */
1935 && ! (newdecl_is_friend
|| DECL_FRIEND_P (olddecl
))
1936 /* Don't warn about declaration followed by specialization. */
1937 && (! DECL_TEMPLATE_SPECIALIZATION (newdecl
)
1938 || DECL_TEMPLATE_SPECIALIZATION (olddecl
)))
1940 if (warning_at (DECL_SOURCE_LOCATION (newdecl
),
1941 OPT_Wredundant_decls
,
1942 "redundant redeclaration of %qD in same scope",
1944 inform (DECL_SOURCE_LOCATION (olddecl
),
1945 "previous declaration of %qD", olddecl
);
1948 if (!(DECL_TEMPLATE_INSTANTIATION (olddecl
)
1949 && DECL_TEMPLATE_SPECIALIZATION (newdecl
)))
1951 if (DECL_DELETED_FN (newdecl
))
1953 error ("deleted definition of %q+D", newdecl
);
1954 inform (DECL_SOURCE_LOCATION (olddecl
),
1955 "previous declaration of %qD", olddecl
);
1957 DECL_DELETED_FN (newdecl
) |= DECL_DELETED_FN (olddecl
);
1961 /* Deal with C++: must preserve virtual function table size. */
1962 if (TREE_CODE (olddecl
) == TYPE_DECL
)
1964 tree newtype
= TREE_TYPE (newdecl
);
1965 tree oldtype
= TREE_TYPE (olddecl
);
1967 if (newtype
!= error_mark_node
&& oldtype
!= error_mark_node
1968 && TYPE_LANG_SPECIFIC (newtype
) && TYPE_LANG_SPECIFIC (oldtype
))
1969 CLASSTYPE_FRIEND_CLASSES (newtype
)
1970 = CLASSTYPE_FRIEND_CLASSES (oldtype
);
1972 DECL_ORIGINAL_TYPE (newdecl
) = DECL_ORIGINAL_TYPE (olddecl
);
1975 /* Copy all the DECL_... slots specified in the new decl
1976 except for any that we copy here from the old type. */
1977 DECL_ATTRIBUTES (newdecl
)
1978 = (*targetm
.merge_decl_attributes
) (olddecl
, newdecl
);
1980 if (DECL_DECLARES_FUNCTION_P (olddecl
) && DECL_DECLARES_FUNCTION_P (newdecl
))
1982 olddecl_friend
= DECL_FRIEND_P (olddecl
);
1983 hidden_friend
= (DECL_ANTICIPATED (olddecl
)
1984 && DECL_HIDDEN_FRIEND_P (olddecl
)
1985 && newdecl_is_friend
);
1988 DECL_ANTICIPATED (olddecl
) = 0;
1989 DECL_HIDDEN_FRIEND_P (olddecl
) = 0;
1993 if (TREE_CODE (newdecl
) == TEMPLATE_DECL
)
1997 old_result
= DECL_TEMPLATE_RESULT (olddecl
);
1998 new_result
= DECL_TEMPLATE_RESULT (newdecl
);
1999 TREE_TYPE (olddecl
) = TREE_TYPE (old_result
);
2000 DECL_TEMPLATE_SPECIALIZATIONS (olddecl
)
2001 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl
),
2002 DECL_TEMPLATE_SPECIALIZATIONS (newdecl
));
2004 DECL_ATTRIBUTES (old_result
)
2005 = (*targetm
.merge_decl_attributes
) (old_result
, new_result
);
2007 if (DECL_FUNCTION_TEMPLATE_P (newdecl
))
2009 /* Per C++11 8.3.6/4, default arguments cannot be added in later
2010 declarations of a function template. */
2011 if (DECL_SOURCE_LOCATION (newdecl
)
2012 != DECL_SOURCE_LOCATION (olddecl
))
2013 check_redeclaration_no_default_args (newdecl
);
2015 check_default_args (newdecl
);
2017 if (GNU_INLINE_P (old_result
) != GNU_INLINE_P (new_result
)
2018 && DECL_INITIAL (new_result
))
2020 if (DECL_INITIAL (old_result
))
2021 DECL_UNINLINABLE (old_result
) = 1;
2023 DECL_UNINLINABLE (old_result
) = DECL_UNINLINABLE (new_result
);
2024 DECL_EXTERNAL (old_result
) = DECL_EXTERNAL (new_result
);
2025 DECL_NOT_REALLY_EXTERN (old_result
)
2026 = DECL_NOT_REALLY_EXTERN (new_result
);
2027 DECL_INTERFACE_KNOWN (old_result
)
2028 = DECL_INTERFACE_KNOWN (new_result
);
2029 DECL_DECLARED_INLINE_P (old_result
)
2030 = DECL_DECLARED_INLINE_P (new_result
);
2031 DECL_DISREGARD_INLINE_LIMITS (old_result
)
2032 |= DECL_DISREGARD_INLINE_LIMITS (new_result
);
2037 DECL_DECLARED_INLINE_P (old_result
)
2038 |= DECL_DECLARED_INLINE_P (new_result
);
2039 DECL_DISREGARD_INLINE_LIMITS (old_result
)
2040 |= DECL_DISREGARD_INLINE_LIMITS (new_result
);
2041 check_redeclaration_exception_specification (newdecl
, olddecl
);
2045 /* If the new declaration is a definition, update the file and
2046 line information on the declaration, and also make
2047 the old declaration the same definition. */
2048 if (DECL_INITIAL (new_result
) != NULL_TREE
)
2050 DECL_SOURCE_LOCATION (olddecl
)
2051 = DECL_SOURCE_LOCATION (old_result
)
2052 = DECL_SOURCE_LOCATION (newdecl
);
2053 DECL_INITIAL (old_result
) = DECL_INITIAL (new_result
);
2054 if (DECL_FUNCTION_TEMPLATE_P (newdecl
))
2057 DECL_ARGUMENTS (old_result
)
2058 = DECL_ARGUMENTS (new_result
);
2059 for (parm
= DECL_ARGUMENTS (old_result
); parm
;
2060 parm
= DECL_CHAIN (parm
))
2061 DECL_CONTEXT (parm
) = old_result
;
2070 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
2071 check_redeclaration_exception_specification (newdecl
, olddecl
);
2073 /* Automatically handles default parameters. */
2074 tree oldtype
= TREE_TYPE (olddecl
);
2077 /* For typedefs use the old type, as the new type's DECL_NAME points
2078 at newdecl, which will be ggc_freed. */
2079 if (TREE_CODE (newdecl
) == TYPE_DECL
)
2081 /* But NEWTYPE might have an attribute, honor that. */
2082 tree tem
= TREE_TYPE (newdecl
);
2085 if (TYPE_USER_ALIGN (tem
))
2087 if (TYPE_ALIGN (tem
) > TYPE_ALIGN (newtype
))
2088 SET_TYPE_ALIGN (newtype
, TYPE_ALIGN (tem
));
2089 TYPE_USER_ALIGN (newtype
) = true;
2092 /* And remove the new type from the variants list. */
2093 if (TYPE_NAME (TREE_TYPE (newdecl
)) == newdecl
)
2095 tree remove
= TREE_TYPE (newdecl
);
2096 for (tree t
= TYPE_MAIN_VARIANT (remove
); ;
2097 t
= TYPE_NEXT_VARIANT (t
))
2098 if (TYPE_NEXT_VARIANT (t
) == remove
)
2100 TYPE_NEXT_VARIANT (t
) = TYPE_NEXT_VARIANT (remove
);
2106 /* Merge the data types specified in the two decls. */
2107 newtype
= merge_types (TREE_TYPE (newdecl
), TREE_TYPE (olddecl
));
2109 if (VAR_P (newdecl
))
2111 DECL_THIS_EXTERN (newdecl
) |= DECL_THIS_EXTERN (olddecl
);
2112 /* For already initialized vars, TREE_READONLY could have been
2113 cleared in cp_finish_decl, because the var needs runtime
2114 initialization or destruction. Make sure not to set
2115 TREE_READONLY on it again. */
2116 if (DECL_INITIALIZED_P (olddecl
)
2117 && !DECL_EXTERNAL (olddecl
)
2118 && !TREE_READONLY (olddecl
))
2119 TREE_READONLY (newdecl
) = 0;
2120 DECL_INITIALIZED_P (newdecl
) |= DECL_INITIALIZED_P (olddecl
);
2121 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl
)
2122 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl
);
2123 if (DECL_DEPENDENT_INIT_P (olddecl
))
2124 SET_DECL_DEPENDENT_INIT_P (newdecl
, true);
2125 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl
)
2126 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl
);
2127 if (DECL_CLASS_SCOPE_P (olddecl
))
2128 DECL_DECLARED_CONSTEXPR_P (newdecl
)
2129 |= DECL_DECLARED_CONSTEXPR_P (olddecl
);
2131 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
2132 if (DECL_LANG_SPECIFIC (olddecl
)
2133 && CP_DECL_THREADPRIVATE_P (olddecl
))
2135 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
2136 retrofit_lang_decl (newdecl
);
2137 CP_DECL_THREADPRIVATE_P (newdecl
) = 1;
2141 /* An explicit specialization of a function template or of a member
2142 function of a class template can be declared transaction_safe
2143 independently of whether the corresponding template entity is declared
2144 transaction_safe. */
2145 if (flag_tm
&& TREE_CODE (newdecl
) == FUNCTION_DECL
2146 && DECL_TEMPLATE_INSTANTIATION (olddecl
)
2147 && DECL_TEMPLATE_SPECIALIZATION (newdecl
)
2148 && tx_safe_fn_type_p (newtype
)
2149 && !tx_safe_fn_type_p (TREE_TYPE (newdecl
)))
2150 newtype
= tx_unsafe_fn_variant (newtype
);
2152 TREE_TYPE (newdecl
) = TREE_TYPE (olddecl
) = newtype
;
2154 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
2155 check_default_args (newdecl
);
2157 /* Lay the type out, unless already done. */
2158 if (! same_type_p (newtype
, oldtype
)
2159 && TREE_TYPE (newdecl
) != error_mark_node
2160 && !(processing_template_decl
&& uses_template_parms (newdecl
)))
2161 layout_type (TREE_TYPE (newdecl
));
2163 if ((VAR_P (newdecl
)
2164 || TREE_CODE (newdecl
) == PARM_DECL
2165 || TREE_CODE (newdecl
) == RESULT_DECL
2166 || TREE_CODE (newdecl
) == FIELD_DECL
2167 || TREE_CODE (newdecl
) == TYPE_DECL
)
2168 && !(processing_template_decl
&& uses_template_parms (newdecl
)))
2169 layout_decl (newdecl
, 0);
2171 /* Merge the type qualifiers. */
2172 if (TREE_READONLY (newdecl
))
2173 TREE_READONLY (olddecl
) = 1;
2174 if (TREE_THIS_VOLATILE (newdecl
))
2175 TREE_THIS_VOLATILE (olddecl
) = 1;
2176 if (TREE_NOTHROW (newdecl
))
2177 TREE_NOTHROW (olddecl
) = 1;
2179 /* Merge deprecatedness. */
2180 if (TREE_DEPRECATED (newdecl
))
2181 TREE_DEPRECATED (olddecl
) = 1;
2183 /* Preserve function specific target and optimization options */
2184 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
2186 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl
)
2187 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl
))
2188 DECL_FUNCTION_SPECIFIC_TARGET (newdecl
)
2189 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl
);
2191 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl
)
2192 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl
))
2193 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl
)
2194 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl
);
2197 /* Merge the initialization information. */
2198 if (DECL_INITIAL (newdecl
) == NULL_TREE
2199 && DECL_INITIAL (olddecl
) != NULL_TREE
)
2201 DECL_INITIAL (newdecl
) = DECL_INITIAL (olddecl
);
2202 DECL_SOURCE_LOCATION (newdecl
) = DECL_SOURCE_LOCATION (olddecl
);
2203 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
2205 DECL_SAVED_TREE (newdecl
) = DECL_SAVED_TREE (olddecl
);
2206 DECL_STRUCT_FUNCTION (newdecl
) = DECL_STRUCT_FUNCTION (olddecl
);
2210 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
2212 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl
)
2213 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl
);
2214 DECL_NO_LIMIT_STACK (newdecl
) |= DECL_NO_LIMIT_STACK (olddecl
);
2215 TREE_THIS_VOLATILE (newdecl
) |= TREE_THIS_VOLATILE (olddecl
);
2216 TREE_NOTHROW (newdecl
) |= TREE_NOTHROW (olddecl
);
2217 DECL_IS_MALLOC (newdecl
) |= DECL_IS_MALLOC (olddecl
);
2218 DECL_IS_OPERATOR_NEW (newdecl
) |= DECL_IS_OPERATOR_NEW (olddecl
);
2219 DECL_PURE_P (newdecl
) |= DECL_PURE_P (olddecl
);
2220 TREE_READONLY (newdecl
) |= TREE_READONLY (olddecl
);
2221 DECL_LOOPING_CONST_OR_PURE_P (newdecl
)
2222 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl
);
2223 /* Keep the old RTL. */
2224 COPY_DECL_RTL (olddecl
, newdecl
);
2226 else if (VAR_P (newdecl
)
2227 && (DECL_SIZE (olddecl
) || !DECL_SIZE (newdecl
)))
2229 /* Keep the old RTL. We cannot keep the old RTL if the old
2230 declaration was for an incomplete object and the new
2231 declaration is not since many attributes of the RTL will
2233 COPY_DECL_RTL (olddecl
, newdecl
);
2236 /* If cannot merge, then use the new type and qualifiers,
2237 and don't preserve the old rtl. */
2240 /* Clean out any memory we had of the old declaration. */
2241 tree oldstatic
= value_member (olddecl
, static_aggregates
);
2243 TREE_VALUE (oldstatic
) = error_mark_node
;
2245 TREE_TYPE (olddecl
) = TREE_TYPE (newdecl
);
2246 TREE_READONLY (olddecl
) = TREE_READONLY (newdecl
);
2247 TREE_THIS_VOLATILE (olddecl
) = TREE_THIS_VOLATILE (newdecl
);
2248 TREE_NOTHROW (olddecl
) = TREE_NOTHROW (newdecl
);
2249 TREE_SIDE_EFFECTS (olddecl
) = TREE_SIDE_EFFECTS (newdecl
);
2252 /* Merge the storage class information. */
2253 merge_weak (newdecl
, olddecl
);
2255 DECL_DEFER_OUTPUT (newdecl
) |= DECL_DEFER_OUTPUT (olddecl
);
2256 TREE_PUBLIC (newdecl
) = TREE_PUBLIC (olddecl
);
2257 TREE_STATIC (olddecl
) = TREE_STATIC (newdecl
) |= TREE_STATIC (olddecl
);
2258 if (! DECL_EXTERNAL (olddecl
))
2259 DECL_EXTERNAL (newdecl
) = 0;
2260 if (! DECL_COMDAT (olddecl
))
2261 DECL_COMDAT (newdecl
) = 0;
2263 new_template_info
= NULL_TREE
;
2264 if (DECL_LANG_SPECIFIC (newdecl
) && DECL_LANG_SPECIFIC (olddecl
))
2266 bool new_redefines_gnu_inline
= false;
2268 if (new_defines_function
2269 && ((DECL_INTERFACE_KNOWN (olddecl
)
2270 && TREE_CODE (olddecl
) == FUNCTION_DECL
)
2271 || (TREE_CODE (olddecl
) == TEMPLATE_DECL
2272 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl
))
2273 == FUNCTION_DECL
))))
2277 if (TREE_CODE (fn
) == TEMPLATE_DECL
)
2278 fn
= DECL_TEMPLATE_RESULT (olddecl
);
2280 new_redefines_gnu_inline
= GNU_INLINE_P (fn
) && DECL_INITIAL (fn
);
2283 if (!new_redefines_gnu_inline
)
2285 DECL_INTERFACE_KNOWN (newdecl
) |= DECL_INTERFACE_KNOWN (olddecl
);
2286 DECL_NOT_REALLY_EXTERN (newdecl
) |= DECL_NOT_REALLY_EXTERN (olddecl
);
2287 DECL_COMDAT (newdecl
) |= DECL_COMDAT (olddecl
);
2289 DECL_TEMPLATE_INSTANTIATED (newdecl
)
2290 |= DECL_TEMPLATE_INSTANTIATED (olddecl
);
2291 DECL_ODR_USED (newdecl
) |= DECL_ODR_USED (olddecl
);
2293 /* If the OLDDECL is an instantiation and/or specialization,
2294 then the NEWDECL must be too. But, it may not yet be marked
2295 as such if the caller has created NEWDECL, but has not yet
2296 figured out that it is a redeclaration. */
2297 if (!DECL_USE_TEMPLATE (newdecl
))
2298 DECL_USE_TEMPLATE (newdecl
) = DECL_USE_TEMPLATE (olddecl
);
2300 /* Don't really know how much of the language-specific
2301 values we should copy from old to new. */
2302 DECL_IN_AGGR_P (newdecl
) = DECL_IN_AGGR_P (olddecl
);
2303 DECL_REPO_AVAILABLE_P (newdecl
) = DECL_REPO_AVAILABLE_P (olddecl
);
2304 DECL_INITIALIZED_IN_CLASS_P (newdecl
)
2305 |= DECL_INITIALIZED_IN_CLASS_P (olddecl
);
2307 if (LANG_DECL_HAS_MIN (newdecl
))
2309 DECL_LANG_SPECIFIC (newdecl
)->u
.min
.u2
=
2310 DECL_LANG_SPECIFIC (olddecl
)->u
.min
.u2
;
2311 if (DECL_TEMPLATE_INFO (newdecl
))
2313 new_template_info
= DECL_TEMPLATE_INFO (newdecl
);
2314 if (DECL_TEMPLATE_INSTANTIATION (olddecl
)
2315 && DECL_TEMPLATE_SPECIALIZATION (newdecl
))
2316 /* Remember the presence of explicit specialization args. */
2317 TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (olddecl
))
2318 = TINFO_USED_TEMPLATE_ID (new_template_info
);
2320 DECL_TEMPLATE_INFO (newdecl
) = DECL_TEMPLATE_INFO (olddecl
);
2322 /* Only functions have these fields. */
2323 if (DECL_DECLARES_FUNCTION_P (newdecl
))
2325 DECL_NONCONVERTING_P (newdecl
) = DECL_NONCONVERTING_P (olddecl
);
2326 DECL_BEFRIENDING_CLASSES (newdecl
)
2327 = chainon (DECL_BEFRIENDING_CLASSES (newdecl
),
2328 DECL_BEFRIENDING_CLASSES (olddecl
));
2329 /* DECL_THUNKS is only valid for virtual functions,
2330 otherwise it is a DECL_FRIEND_CONTEXT. */
2331 if (DECL_VIRTUAL_P (newdecl
))
2332 SET_DECL_THUNKS (newdecl
, DECL_THUNKS (olddecl
));
2334 /* Only variables have this field. */
2335 else if (VAR_P (newdecl
)
2336 && VAR_HAD_UNKNOWN_BOUND (olddecl
))
2337 SET_VAR_HAD_UNKNOWN_BOUND (newdecl
);
2340 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
2344 /* Merge parameter attributes. */
2345 tree oldarg
, newarg
;
2346 for (oldarg
= DECL_ARGUMENTS(olddecl
),
2347 newarg
= DECL_ARGUMENTS(newdecl
);
2349 oldarg
= DECL_CHAIN(oldarg
), newarg
= DECL_CHAIN(newarg
)) {
2350 DECL_ATTRIBUTES (newarg
)
2351 = (*targetm
.merge_decl_attributes
) (oldarg
, newarg
);
2352 DECL_ATTRIBUTES (oldarg
) = DECL_ATTRIBUTES (newarg
);
2355 if (DECL_TEMPLATE_INSTANTIATION (olddecl
)
2356 && !DECL_TEMPLATE_INSTANTIATION (newdecl
))
2358 /* If newdecl is not a specialization, then it is not a
2359 template-related function at all. And that means that we
2360 should have exited above, returning 0. */
2361 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl
));
2363 if (DECL_ODR_USED (olddecl
))
2364 /* From [temp.expl.spec]:
2366 If a template, a member template or the member of a class
2367 template is explicitly specialized then that
2368 specialization shall be declared before the first use of
2369 that specialization that would cause an implicit
2370 instantiation to take place, in every translation unit in
2371 which such a use occurs. */
2372 error ("explicit specialization of %qD after first use",
2375 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl
);
2376 DECL_COMDAT (newdecl
) = (TREE_PUBLIC (newdecl
)
2377 && DECL_DECLARED_INLINE_P (newdecl
));
2379 /* Don't propagate visibility from the template to the
2380 specialization here. We'll do that in determine_visibility if
2382 DECL_VISIBILITY_SPECIFIED (olddecl
) = 0;
2384 /* [temp.expl.spec/14] We don't inline explicit specialization
2385 just because the primary template says so. */
2387 /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2388 the always_inline attribute. */
2389 if (DECL_DISREGARD_INLINE_LIMITS (olddecl
)
2390 && !DECL_DISREGARD_INLINE_LIMITS (newdecl
))
2392 if (DECL_DECLARED_INLINE_P (newdecl
))
2393 DECL_DISREGARD_INLINE_LIMITS (newdecl
) = true;
2395 DECL_ATTRIBUTES (newdecl
)
2396 = remove_attribute ("always_inline",
2397 DECL_ATTRIBUTES (newdecl
));
2400 else if (new_defines_function
&& DECL_INITIAL (olddecl
))
2402 /* Never inline re-defined extern inline functions.
2403 FIXME: this could be better handled by keeping both
2404 function as separate declarations. */
2405 DECL_UNINLINABLE (newdecl
) = 1;
2409 if (DECL_PENDING_INLINE_P (olddecl
))
2411 DECL_PENDING_INLINE_P (newdecl
) = 1;
2412 DECL_PENDING_INLINE_INFO (newdecl
)
2413 = DECL_PENDING_INLINE_INFO (olddecl
);
2415 else if (DECL_PENDING_INLINE_P (newdecl
))
2417 else if (DECL_SAVED_FUNCTION_DATA (newdecl
) == NULL
)
2418 DECL_SAVED_FUNCTION_DATA (newdecl
)
2419 = DECL_SAVED_FUNCTION_DATA (olddecl
);
2421 DECL_DECLARED_INLINE_P (newdecl
) |= DECL_DECLARED_INLINE_P (olddecl
);
2423 DECL_UNINLINABLE (newdecl
) = DECL_UNINLINABLE (olddecl
)
2424 = (DECL_UNINLINABLE (newdecl
) || DECL_UNINLINABLE (olddecl
));
2426 DECL_DISREGARD_INLINE_LIMITS (newdecl
)
2427 = DECL_DISREGARD_INLINE_LIMITS (olddecl
)
2428 = (DECL_DISREGARD_INLINE_LIMITS (newdecl
)
2429 || DECL_DISREGARD_INLINE_LIMITS (olddecl
));
2432 /* Preserve abstractness on cloned [cd]tors. */
2433 DECL_ABSTRACT_P (newdecl
) = DECL_ABSTRACT_P (olddecl
);
2435 /* Update newdecl's parms to point at olddecl. */
2436 for (parm
= DECL_ARGUMENTS (newdecl
); parm
;
2437 parm
= DECL_CHAIN (parm
))
2438 DECL_CONTEXT (parm
) = olddecl
;
2442 SET_DECL_LANGUAGE (olddecl
, DECL_LANGUAGE (newdecl
));
2443 COPY_DECL_ASSEMBLER_NAME (newdecl
, olddecl
);
2444 COPY_DECL_RTL (newdecl
, olddecl
);
2446 if (! types_match
|| new_defines_function
)
2448 /* These need to be copied so that the names are available.
2449 Note that if the types do match, we'll preserve inline
2450 info and other bits, but if not, we won't. */
2451 DECL_ARGUMENTS (olddecl
) = DECL_ARGUMENTS (newdecl
);
2452 DECL_RESULT (olddecl
) = DECL_RESULT (newdecl
);
2454 /* If redeclaring a builtin function, it stays built in
2455 if newdecl is a gnu_inline definition, or if newdecl is just
2457 if (DECL_BUILT_IN (olddecl
)
2458 && (new_defines_function
? GNU_INLINE_P (newdecl
) : types_match
))
2460 DECL_BUILT_IN_CLASS (newdecl
) = DECL_BUILT_IN_CLASS (olddecl
);
2461 DECL_FUNCTION_CODE (newdecl
) = DECL_FUNCTION_CODE (olddecl
);
2462 /* If we're keeping the built-in definition, keep the rtl,
2463 regardless of declaration matches. */
2464 COPY_DECL_RTL (olddecl
, newdecl
);
2465 if (DECL_BUILT_IN_CLASS (newdecl
) == BUILT_IN_NORMAL
)
2467 enum built_in_function fncode
= DECL_FUNCTION_CODE (newdecl
);
2470 /* If a compatible prototype of these builtin functions
2471 is seen, assume the runtime implements it with the
2472 expected semantics. */
2473 case BUILT_IN_STPCPY
:
2474 if (builtin_decl_explicit_p (fncode
))
2475 set_builtin_decl_implicit_p (fncode
, true);
2478 if (builtin_decl_explicit_p (fncode
))
2479 set_builtin_decl_declared_p (fncode
, true);
2484 copy_attributes_to_builtin (newdecl
);
2486 if (new_defines_function
)
2487 /* If defining a function declared with other language
2488 linkage, use the previously declared language linkage. */
2489 SET_DECL_LANGUAGE (newdecl
, DECL_LANGUAGE (olddecl
));
2490 else if (types_match
)
2492 DECL_RESULT (newdecl
) = DECL_RESULT (olddecl
);
2493 /* Don't clear out the arguments if we're just redeclaring a
2495 if (DECL_ARGUMENTS (olddecl
))
2496 DECL_ARGUMENTS (newdecl
) = DECL_ARGUMENTS (olddecl
);
2499 else if (TREE_CODE (newdecl
) == NAMESPACE_DECL
)
2500 NAMESPACE_LEVEL (newdecl
) = NAMESPACE_LEVEL (olddecl
);
2502 /* Now preserve various other info from the definition. */
2503 TREE_ADDRESSABLE (newdecl
) = TREE_ADDRESSABLE (olddecl
);
2504 TREE_ASM_WRITTEN (newdecl
) = TREE_ASM_WRITTEN (olddecl
);
2505 DECL_COMMON (newdecl
) = DECL_COMMON (olddecl
);
2506 COPY_DECL_ASSEMBLER_NAME (olddecl
, newdecl
);
2508 /* Warn about conflicting visibility specifications. */
2509 if (DECL_VISIBILITY_SPECIFIED (olddecl
)
2510 && DECL_VISIBILITY_SPECIFIED (newdecl
)
2511 && DECL_VISIBILITY (newdecl
) != DECL_VISIBILITY (olddecl
))
2513 if (warning_at (DECL_SOURCE_LOCATION (newdecl
), OPT_Wattributes
,
2514 "%qD: visibility attribute ignored because it "
2515 "conflicts with previous declaration", newdecl
))
2516 inform (DECL_SOURCE_LOCATION (olddecl
),
2517 "previous declaration of %qD", olddecl
);
2519 /* Choose the declaration which specified visibility. */
2520 if (DECL_VISIBILITY_SPECIFIED (olddecl
))
2522 DECL_VISIBILITY (newdecl
) = DECL_VISIBILITY (olddecl
);
2523 DECL_VISIBILITY_SPECIFIED (newdecl
) = 1;
2525 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2526 so keep this behavior. */
2527 if (VAR_P (newdecl
) && DECL_HAS_INIT_PRIORITY_P (newdecl
))
2529 SET_DECL_INIT_PRIORITY (olddecl
, DECL_INIT_PRIORITY (newdecl
));
2530 DECL_HAS_INIT_PRIORITY_P (olddecl
) = 1;
2532 /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED. */
2533 if (DECL_ALIGN (olddecl
) > DECL_ALIGN (newdecl
))
2535 SET_DECL_ALIGN (newdecl
, DECL_ALIGN (olddecl
));
2536 DECL_USER_ALIGN (newdecl
) |= DECL_USER_ALIGN (olddecl
);
2538 DECL_USER_ALIGN (olddecl
) = DECL_USER_ALIGN (newdecl
);
2539 if (DECL_WARN_IF_NOT_ALIGN (olddecl
)
2540 > DECL_WARN_IF_NOT_ALIGN (newdecl
))
2541 SET_DECL_WARN_IF_NOT_ALIGN (newdecl
,
2542 DECL_WARN_IF_NOT_ALIGN (olddecl
));
2543 if (TREE_CODE (newdecl
) == FIELD_DECL
)
2544 DECL_PACKED (olddecl
) = DECL_PACKED (newdecl
);
2546 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2547 with that from NEWDECL below. */
2548 if (DECL_LANG_SPECIFIC (olddecl
))
2550 gcc_assert (DECL_LANG_SPECIFIC (olddecl
)
2551 != DECL_LANG_SPECIFIC (newdecl
));
2552 ggc_free (DECL_LANG_SPECIFIC (olddecl
));
2555 /* Merge the USED information. */
2556 if (TREE_USED (olddecl
))
2557 TREE_USED (newdecl
) = 1;
2558 else if (TREE_USED (newdecl
))
2559 TREE_USED (olddecl
) = 1;
2560 if (VAR_P (newdecl
))
2562 if (DECL_READ_P (olddecl
))
2563 DECL_READ_P (newdecl
) = 1;
2564 else if (DECL_READ_P (newdecl
))
2565 DECL_READ_P (olddecl
) = 1;
2567 if (DECL_PRESERVE_P (olddecl
))
2568 DECL_PRESERVE_P (newdecl
) = 1;
2569 else if (DECL_PRESERVE_P (newdecl
))
2570 DECL_PRESERVE_P (olddecl
) = 1;
2572 /* Merge the DECL_FUNCTION_VERSIONED information. newdecl will be copied
2573 to olddecl and deleted. */
2574 if (TREE_CODE (newdecl
) == FUNCTION_DECL
2575 && DECL_FUNCTION_VERSIONED (olddecl
))
2577 /* Set the flag for newdecl so that it gets copied to olddecl. */
2578 DECL_FUNCTION_VERSIONED (newdecl
) = 1;
2579 /* newdecl will be purged after copying to olddecl and is no longer
2581 cgraph_node::delete_function_version_by_decl (newdecl
);
2584 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
2587 struct symtab_node
*snode
= symtab_node::get (olddecl
);
2589 function_size
= sizeof (struct tree_decl_common
);
2591 memcpy ((char *) olddecl
+ sizeof (struct tree_common
),
2592 (char *) newdecl
+ sizeof (struct tree_common
),
2593 function_size
- sizeof (struct tree_common
));
2595 memcpy ((char *) olddecl
+ sizeof (struct tree_decl_common
),
2596 (char *) newdecl
+ sizeof (struct tree_decl_common
),
2597 sizeof (struct tree_function_decl
) - sizeof (struct tree_decl_common
));
2599 /* Preserve symtab node mapping. */
2600 olddecl
->decl_with_vis
.symtab_node
= snode
;
2602 if (new_template_info
)
2603 /* If newdecl is a template instantiation, it is possible that
2604 the following sequence of events has occurred:
2606 o A friend function was declared in a class template. The
2607 class template was instantiated.
2609 o The instantiation of the friend declaration was
2610 recorded on the instantiation list, and is newdecl.
2612 o Later, however, instantiate_class_template called pushdecl
2613 on the newdecl to perform name injection. But, pushdecl in
2614 turn called duplicate_decls when it discovered that another
2615 declaration of a global function with the same name already
2618 o Here, in duplicate_decls, we decided to clobber newdecl.
2620 If we're going to do that, we'd better make sure that
2621 olddecl, and not newdecl, is on the list of
2622 instantiations so that if we try to do the instantiation
2623 again we won't get the clobbered declaration. */
2624 reregister_specialization (newdecl
,
2630 size_t size
= tree_code_size (TREE_CODE (newdecl
));
2632 memcpy ((char *) olddecl
+ sizeof (struct tree_common
),
2633 (char *) newdecl
+ sizeof (struct tree_common
),
2634 sizeof (struct tree_decl_common
) - sizeof (struct tree_common
));
2635 switch (TREE_CODE (newdecl
))
2645 struct symtab_node
*snode
= NULL
;
2648 && (TREE_STATIC (olddecl
) || TREE_PUBLIC (olddecl
)
2649 || DECL_EXTERNAL (olddecl
)))
2650 snode
= symtab_node::get (olddecl
);
2651 memcpy ((char *) olddecl
+ sizeof (struct tree_decl_common
),
2652 (char *) newdecl
+ sizeof (struct tree_decl_common
),
2653 size
- sizeof (struct tree_decl_common
)
2654 + TREE_CODE_LENGTH (TREE_CODE (newdecl
)) * sizeof (char *));
2655 if (VAR_P (newdecl
))
2656 olddecl
->decl_with_vis
.symtab_node
= snode
;
2660 memcpy ((char *) olddecl
+ sizeof (struct tree_decl_common
),
2661 (char *) newdecl
+ sizeof (struct tree_decl_common
),
2662 sizeof (struct tree_decl_non_common
) - sizeof (struct tree_decl_common
)
2663 + TREE_CODE_LENGTH (TREE_CODE (newdecl
)) * sizeof (char *));
2668 if (VAR_OR_FUNCTION_DECL_P (newdecl
))
2670 if (DECL_EXTERNAL (olddecl
)
2671 || TREE_PUBLIC (olddecl
)
2672 || TREE_STATIC (olddecl
))
2674 /* Merge the section attribute.
2675 We want to issue an error if the sections conflict but that must be
2676 done later in decl_attributes since we are called before attributes
2678 if (DECL_SECTION_NAME (newdecl
) != NULL
)
2679 set_decl_section_name (olddecl
, DECL_SECTION_NAME (newdecl
));
2681 if (DECL_ONE_ONLY (newdecl
))
2683 struct symtab_node
*oldsym
, *newsym
;
2684 if (TREE_CODE (olddecl
) == FUNCTION_DECL
)
2685 oldsym
= cgraph_node::get_create (olddecl
);
2687 oldsym
= varpool_node::get_create (olddecl
);
2688 newsym
= symtab_node::get (newdecl
);
2689 oldsym
->set_comdat_group (newsym
->get_comdat_group ());
2694 && CP_DECL_THREAD_LOCAL_P (newdecl
))
2696 CP_DECL_THREAD_LOCAL_P (olddecl
) = true;
2697 if (!processing_template_decl
)
2698 set_decl_tls_model (olddecl
, DECL_TLS_MODEL (newdecl
));
2702 DECL_UID (olddecl
) = olddecl_uid
;
2704 DECL_FRIEND_P (olddecl
) = 1;
2707 DECL_ANTICIPATED (olddecl
) = 1;
2708 DECL_HIDDEN_FRIEND_P (olddecl
) = 1;
2711 /* NEWDECL contains the merged attribute lists.
2712 Update OLDDECL to be the same. */
2713 DECL_ATTRIBUTES (olddecl
) = DECL_ATTRIBUTES (newdecl
);
2715 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2716 so that encode_section_info has a chance to look at the new decl
2717 flags and attributes. */
2718 if (DECL_RTL_SET_P (olddecl
)
2719 && (TREE_CODE (olddecl
) == FUNCTION_DECL
2721 && TREE_STATIC (olddecl
))))
2722 make_decl_rtl (olddecl
);
2724 /* The NEWDECL will no longer be needed. Because every out-of-class
2725 declaration of a member results in a call to duplicate_decls,
2726 freeing these nodes represents in a significant savings.
2728 Before releasing the node, be sore to remove function from symbol
2729 table that might have been inserted there to record comdat group.
2730 Be sure to however do not free DECL_STRUCT_FUNCTION because this
2731 structure is shared in between newdecl and oldecl. */
2732 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
2733 DECL_STRUCT_FUNCTION (newdecl
) = NULL
;
2734 if (VAR_OR_FUNCTION_DECL_P (newdecl
))
2736 struct symtab_node
*snode
= symtab_node::get (newdecl
);
2741 /* Remove the associated constraints for newdecl, if any, before
2742 reclaiming memory. */
2744 remove_constraints (newdecl
);
2751 /* Return zero if the declaration NEWDECL is valid
2752 when the declaration OLDDECL (assumed to be for the same name)
2753 has already been seen.
2754 Otherwise return an error message format string with a %s
2755 where the identifier should go. */
2758 redeclaration_error_message (tree newdecl
, tree olddecl
)
2760 if (TREE_CODE (newdecl
) == TYPE_DECL
)
2762 /* Because C++ can put things into name space for free,
2763 constructs like "typedef struct foo { ... } foo"
2764 would look like an erroneous redeclaration. */
2765 if (same_type_p (TREE_TYPE (newdecl
), TREE_TYPE (olddecl
)))
2768 return G_("redefinition of %q#D");
2770 else if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
2772 /* If this is a pure function, its olddecl will actually be
2773 the original initialization to `0' (which we force to call
2774 abort()). Don't complain about redefinition in this case. */
2775 if (DECL_LANG_SPECIFIC (olddecl
) && DECL_PURE_VIRTUAL_P (olddecl
)
2776 && DECL_INITIAL (olddecl
) == NULL_TREE
)
2779 /* If both functions come from different namespaces, this is not
2780 a redeclaration - this is a conflict with a used function. */
2781 if (DECL_NAMESPACE_SCOPE_P (olddecl
)
2782 && DECL_CONTEXT (olddecl
) != DECL_CONTEXT (newdecl
)
2783 && ! decls_match (olddecl
, newdecl
))
2784 return G_("%qD conflicts with used function");
2786 /* We'll complain about linkage mismatches in
2787 warn_extern_redeclared_static. */
2789 /* Defining the same name twice is no good. */
2790 if (decl_defined_p (olddecl
)
2791 && decl_defined_p (newdecl
))
2793 if (DECL_NAME (olddecl
) == NULL_TREE
)
2794 return G_("%q#D not declared in class");
2795 else if (!GNU_INLINE_P (olddecl
)
2796 || GNU_INLINE_P (newdecl
))
2797 return G_("redefinition of %q#D");
2800 if (DECL_DECLARED_INLINE_P (olddecl
) && DECL_DECLARED_INLINE_P (newdecl
))
2802 bool olda
= GNU_INLINE_P (olddecl
);
2803 bool newa
= GNU_INLINE_P (newdecl
);
2808 return G_("%q+D redeclared inline with "
2809 "%<gnu_inline%> attribute");
2811 return G_("%q+D redeclared inline without "
2812 "%<gnu_inline%> attribute");
2816 check_abi_tag_redeclaration
2817 (olddecl
, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl
)),
2818 lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl
)));
2822 else if (TREE_CODE (newdecl
) == TEMPLATE_DECL
)
2826 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl
)) == TYPE_DECL
)
2828 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl
))
2829 && COMPLETE_TYPE_P (TREE_TYPE (olddecl
)))
2830 return G_("redefinition of %q#D");
2834 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl
)) != FUNCTION_DECL
2835 || (DECL_TEMPLATE_RESULT (newdecl
)
2836 == DECL_TEMPLATE_RESULT (olddecl
)))
2839 nt
= DECL_TEMPLATE_RESULT (newdecl
);
2840 if (DECL_TEMPLATE_INFO (nt
))
2841 nt
= DECL_TEMPLATE_RESULT (template_for_substitution (nt
));
2842 ot
= DECL_TEMPLATE_RESULT (olddecl
);
2843 if (DECL_TEMPLATE_INFO (ot
))
2844 ot
= DECL_TEMPLATE_RESULT (template_for_substitution (ot
));
2845 if (DECL_INITIAL (nt
) && DECL_INITIAL (ot
)
2846 && (!GNU_INLINE_P (ot
) || GNU_INLINE_P (nt
)))
2847 return G_("redefinition of %q#D");
2849 if (DECL_DECLARED_INLINE_P (ot
) && DECL_DECLARED_INLINE_P (nt
))
2851 bool olda
= GNU_INLINE_P (ot
);
2852 bool newa
= GNU_INLINE_P (nt
);
2857 return G_("%q+D redeclared inline with "
2858 "%<gnu_inline%> attribute");
2860 return G_("%q+D redeclared inline without "
2861 "%<gnu_inline%> attribute");
2865 /* Core issue #226 (C++0x):
2867 If a friend function template declaration specifies a
2868 default template-argument, that declaration shall be a
2869 definition and shall be the only declaration of the
2870 function template in the translation unit. */
2871 if ((cxx_dialect
!= cxx98
)
2872 && TREE_CODE (ot
) == FUNCTION_DECL
&& DECL_FRIEND_P (ot
)
2873 && !check_default_tmpl_args (nt
, DECL_TEMPLATE_PARMS (newdecl
),
2874 /*is_primary=*/true,
2875 /*is_partial=*/false,
2876 /*is_friend_decl=*/2))
2877 return G_("redeclaration of friend %q#D "
2878 "may not have default template arguments");
2882 else if (VAR_P (newdecl
)
2883 && CP_DECL_THREAD_LOCAL_P (newdecl
) != CP_DECL_THREAD_LOCAL_P (olddecl
)
2884 && (! DECL_LANG_SPECIFIC (olddecl
)
2885 || ! CP_DECL_THREADPRIVATE_P (olddecl
)
2886 || CP_DECL_THREAD_LOCAL_P (newdecl
)))
2888 /* Only variables can be thread-local, and all declarations must
2889 agree on this property. */
2890 if (CP_DECL_THREAD_LOCAL_P (newdecl
))
2891 return G_("thread-local declaration of %q#D follows "
2892 "non-thread-local declaration");
2894 return G_("non-thread-local declaration of %q#D follows "
2895 "thread-local declaration");
2897 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl
))
2899 /* The objects have been declared at namespace scope. If either
2900 is a member of an anonymous union, then this is an invalid
2901 redeclaration. For example:
2907 if ((VAR_P (newdecl
) && DECL_ANON_UNION_VAR_P (newdecl
))
2908 || (VAR_P (olddecl
) && DECL_ANON_UNION_VAR_P (olddecl
)))
2909 return G_("redeclaration of %q#D");
2910 /* If at least one declaration is a reference, there is no
2911 conflict. For example:
2917 if (DECL_EXTERNAL (newdecl
) || DECL_EXTERNAL (olddecl
))
2920 /* Static data member declared outside a class definition
2921 if the variable is defined within the class with constexpr
2922 specifier is declaration rather than definition (and
2924 if (cxx_dialect
>= cxx17
2925 && DECL_CLASS_SCOPE_P (olddecl
)
2926 && DECL_DECLARED_CONSTEXPR_P (olddecl
)
2927 && !DECL_INITIAL (newdecl
))
2929 DECL_EXTERNAL (newdecl
) = 1;
2930 /* For now, only warn with explicit -Wdeprecated. */
2931 if (global_options_set
.x_warn_deprecated
2932 && warning_at (DECL_SOURCE_LOCATION (newdecl
), OPT_Wdeprecated
,
2933 "redundant redeclaration of %<constexpr%> static "
2934 "data member %qD", newdecl
))
2935 inform (DECL_SOURCE_LOCATION (olddecl
),
2936 "previous declaration of %qD", olddecl
);
2940 /* Reject two definitions. */
2941 return G_("redefinition of %q#D");
2945 /* Objects declared with block scope: */
2946 /* Reject two definitions, and reject a definition
2947 together with an external reference. */
2948 if (!(DECL_EXTERNAL (newdecl
) && DECL_EXTERNAL (olddecl
)))
2949 return G_("redeclaration of %q#D");
2955 /* Hash and equality functions for the named_label table. */
2958 named_label_hash::hash (const value_type entry
)
2960 return IDENTIFIER_HASH_VALUE (entry
->name
);
2964 named_label_hash::equal (const value_type entry
, compare_type name
)
2966 return name
== entry
->name
;
2969 /* Look for a label named ID in the current function. If one cannot
2970 be found, create one. Return the named_label_entry, or NULL on
2973 static named_label_entry
*
2974 lookup_label_1 (tree id
, bool making_local_p
)
2976 /* You can't use labels at global scope. */
2977 if (current_function_decl
== NULL_TREE
)
2979 error ("label %qE referenced outside of any function", id
);
2984 named_labels
= hash_table
<named_label_hash
>::create_ggc (13);
2986 hashval_t hash
= IDENTIFIER_HASH_VALUE (id
);
2987 named_label_entry
**slot
2988 = named_labels
->find_slot_with_hash (id
, hash
, INSERT
);
2989 named_label_entry
*old
= *slot
;
2991 if (old
&& old
->label_decl
)
2993 if (!making_local_p
)
2996 if (old
->binding_level
== current_binding_level
)
2998 error ("local label %qE conflicts with existing label", id
);
2999 inform (DECL_SOURCE_LOCATION (old
->label_decl
), "previous label");
3004 /* We are making a new decl, create or reuse the named_label_entry */
3005 named_label_entry
*ent
= NULL
;
3006 if (old
&& !old
->label_decl
)
3010 ent
= ggc_cleared_alloc
<named_label_entry
> ();
3016 /* Now create the LABEL_DECL. */
3017 tree decl
= build_decl (input_location
, LABEL_DECL
, id
, void_type_node
);
3019 DECL_CONTEXT (decl
) = current_function_decl
;
3020 SET_DECL_MODE (decl
, VOIDmode
);
3023 C_DECLARED_LABEL_FLAG (decl
) = true;
3024 DECL_CHAIN (decl
) = current_binding_level
->names
;
3025 current_binding_level
->names
= decl
;
3028 ent
->label_decl
= decl
;
3033 /* Wrapper for lookup_label_1. */
3036 lookup_label (tree id
)
3038 bool subtime
= timevar_cond_start (TV_NAME_LOOKUP
);
3039 named_label_entry
*ent
= lookup_label_1 (id
, false);
3040 timevar_cond_stop (TV_NAME_LOOKUP
, subtime
);
3041 return ent
? ent
->label_decl
: NULL_TREE
;
3045 declare_local_label (tree id
)
3047 bool subtime
= timevar_cond_start (TV_NAME_LOOKUP
);
3048 named_label_entry
*ent
= lookup_label_1 (id
, true);
3049 timevar_cond_stop (TV_NAME_LOOKUP
, subtime
);
3050 return ent
? ent
->label_decl
: NULL_TREE
;
3053 /* Returns nonzero if it is ill-formed to jump past the declaration of
3054 DECL. Returns 2 if it's also a real problem. */
3057 decl_jump_unsafe (tree decl
)
3059 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
3060 with automatic storage duration is not in scope to a point where it is
3061 in scope is ill-formed unless the variable has scalar type, class type
3062 with a trivial default constructor and a trivial destructor, a
3063 cv-qualified version of one of these types, or an array of one of the
3064 preceding types and is declared without an initializer (8.5). */
3065 tree type
= TREE_TYPE (decl
);
3067 if (!VAR_P (decl
) || TREE_STATIC (decl
)
3068 || type
== error_mark_node
)
3071 if (DECL_NONTRIVIALLY_INITIALIZED_P (decl
)
3072 || variably_modified_type_p (type
, NULL_TREE
))
3075 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
))
3081 /* A subroutine of check_previous_goto_1 and check_goto to identify a branch
3085 identify_goto (tree decl
, location_t loc
, const location_t
*locus
,
3086 diagnostic_t diag_kind
)
3089 = emit_diagnostic (diag_kind
, loc
, 0,
3090 decl
? N_("jump to label %qD")
3091 : N_("jump to case label"), decl
);
3092 if (complained
&& locus
)
3093 inform (*locus
, " from here");
3097 /* Check that a single previously seen jump to a newly defined label
3098 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
3099 the jump context; NAMES are the names in scope in LEVEL at the jump
3100 context; LOCUS is the source position of the jump or 0. Returns
3101 true if all is well. */
3104 check_previous_goto_1 (tree decl
, cp_binding_level
* level
, tree names
,
3105 bool exited_omp
, const location_t
*locus
)
3107 cp_binding_level
*b
;
3108 bool complained
= false;
3110 bool saw_eh
= false, saw_omp
= false, saw_tm
= false, saw_cxif
= false;
3114 complained
= identify_goto (decl
, input_location
, locus
, DK_ERROR
);
3116 inform (input_location
, " exits OpenMP structured block");
3121 for (b
= current_binding_level
; b
; b
= b
->level_chain
)
3123 tree new_decls
, old_decls
= (b
== level
? names
: NULL_TREE
);
3125 for (new_decls
= b
->names
; new_decls
!= old_decls
;
3126 new_decls
= (DECL_P (new_decls
) ? DECL_CHAIN (new_decls
)
3127 : TREE_CHAIN (new_decls
)))
3129 int problem
= decl_jump_unsafe (new_decls
);
3135 complained
= identify_goto (decl
, input_location
, locus
,
3142 inform (DECL_SOURCE_LOCATION (new_decls
),
3143 " crosses initialization of %q#D", new_decls
);
3145 inform (DECL_SOURCE_LOCATION (new_decls
),
3146 " enters scope of %q#D, which has "
3147 "non-trivial destructor", new_decls
);
3154 const char *inf
= NULL
;
3155 location_t loc
= input_location
;
3160 inf
= N_("enters try block");
3166 inf
= N_("enters catch block");
3172 inf
= N_("enters OpenMP structured block");
3176 case sk_transaction
:
3178 inf
= N_("enters synchronized or atomic statement");
3183 if (!saw_cxif
&& level_for_constexpr_if (b
->level_chain
))
3185 inf
= N_("enters constexpr if statement");
3186 loc
= EXPR_LOCATION (b
->level_chain
->this_entity
);
3198 complained
= identify_goto (decl
, input_location
, locus
, DK_ERROR
);
3201 inform (loc
, " %s", inf
);
3209 check_previous_goto (tree decl
, struct named_label_use_entry
*use
)
3211 check_previous_goto_1 (decl
, use
->binding_level
,
3212 use
->names_in_scope
, use
->in_omp_scope
,
3213 &use
->o_goto_locus
);
3217 check_switch_goto (cp_binding_level
* level
)
3219 return check_previous_goto_1 (NULL_TREE
, level
, level
->names
, false, NULL
);
3222 /* Check that a new jump to a label DECL is OK. Called by
3223 finish_goto_stmt. */
3226 check_goto (tree decl
)
3228 /* We can't know where a computed goto is jumping.
3229 So we assume that it's OK. */
3230 if (TREE_CODE (decl
) != LABEL_DECL
)
3233 /* We didn't record any information about this label when we created it,
3234 and there's not much point since it's trivial to analyze as a return. */
3235 if (decl
== cdtor_label
)
3238 hashval_t hash
= IDENTIFIER_HASH_VALUE (DECL_NAME (decl
));
3239 named_label_entry
**slot
3240 = named_labels
->find_slot_with_hash (DECL_NAME (decl
), hash
, NO_INSERT
);
3241 named_label_entry
*ent
= *slot
;
3243 /* If the label hasn't been defined yet, defer checking. */
3244 if (! DECL_INITIAL (decl
))
3246 /* Don't bother creating another use if the last goto had the
3247 same data, and will therefore create the same set of errors. */
3249 && ent
->uses
->names_in_scope
== current_binding_level
->names
)
3252 named_label_use_entry
*new_use
3253 = ggc_alloc
<named_label_use_entry
> ();
3254 new_use
->binding_level
= current_binding_level
;
3255 new_use
->names_in_scope
= current_binding_level
->names
;
3256 new_use
->o_goto_locus
= input_location
;
3257 new_use
->in_omp_scope
= false;
3259 new_use
->next
= ent
->uses
;
3260 ent
->uses
= new_use
;
3264 bool saw_catch
= false, complained
= false;
3269 if (ent
->in_try_scope
|| ent
->in_catch_scope
|| ent
->in_transaction_scope
3270 || ent
->in_constexpr_if
3271 || ent
->in_omp_scope
|| !vec_safe_is_empty (ent
->bad_decls
))
3273 diagnostic_t diag_kind
= DK_PERMERROR
;
3274 if (ent
->in_try_scope
|| ent
->in_catch_scope
|| ent
->in_constexpr_if
3275 || ent
->in_transaction_scope
|| ent
->in_omp_scope
)
3276 diag_kind
= DK_ERROR
;
3277 complained
= identify_goto (decl
, DECL_SOURCE_LOCATION (decl
),
3278 &input_location
, diag_kind
);
3279 identified
= 1 + (diag_kind
== DK_ERROR
);
3282 FOR_EACH_VEC_SAFE_ELT (ent
->bad_decls
, ix
, bad
)
3284 int u
= decl_jump_unsafe (bad
);
3286 if (u
> 1 && DECL_ARTIFICIAL (bad
))
3288 /* Can't skip init of __exception_info. */
3289 if (identified
== 1)
3291 complained
= identify_goto (decl
, DECL_SOURCE_LOCATION (decl
),
3292 &input_location
, DK_ERROR
);
3296 inform (DECL_SOURCE_LOCATION (bad
), " enters catch block");
3299 else if (complained
)
3302 inform (DECL_SOURCE_LOCATION (bad
),
3303 " skips initialization of %q#D", bad
);
3305 inform (DECL_SOURCE_LOCATION (bad
),
3306 " enters scope of %q#D which has "
3307 "non-trivial destructor", bad
);
3313 if (ent
->in_try_scope
)
3314 inform (input_location
, " enters try block");
3315 else if (ent
->in_catch_scope
&& !saw_catch
)
3316 inform (input_location
, " enters catch block");
3317 else if (ent
->in_transaction_scope
)
3318 inform (input_location
, " enters synchronized or atomic statement");
3319 else if (ent
->in_constexpr_if
)
3320 inform (input_location
, " enters %<constexpr%> if statement");
3323 if (ent
->in_omp_scope
)
3326 inform (input_location
, " enters OpenMP structured block");
3328 else if (flag_openmp
)
3329 for (cp_binding_level
*b
= current_binding_level
; b
; b
= b
->level_chain
)
3331 if (b
== ent
->binding_level
)
3333 if (b
->kind
== sk_omp
)
3337 complained
= identify_goto (decl
,
3338 DECL_SOURCE_LOCATION (decl
),
3339 &input_location
, DK_ERROR
);
3343 inform (input_location
, " exits OpenMP structured block");
3349 /* Check that a return is ok wrt OpenMP structured blocks.
3350 Called by finish_return_stmt. Returns true if all is well. */
3353 check_omp_return (void)
3355 for (cp_binding_level
*b
= current_binding_level
; b
; b
= b
->level_chain
)
3356 if (b
->kind
== sk_omp
)
3358 error ("invalid exit from OpenMP structured block");
3361 else if (b
->kind
== sk_function_parms
)
3366 /* Define a label, specifying the location in the source file.
3367 Return the LABEL_DECL node for the label. */
3370 define_label_1 (location_t location
, tree name
)
3372 /* After labels, make any new cleanups in the function go into their
3373 own new (temporary) binding contour. */
3374 for (cp_binding_level
*p
= current_binding_level
;
3375 p
->kind
!= sk_function_parms
;
3377 p
->more_cleanups_ok
= 0;
3379 named_label_entry
*ent
= lookup_label_1 (name
, false);
3380 tree decl
= ent
->label_decl
;
3382 if (DECL_INITIAL (decl
) != NULL_TREE
)
3384 error ("duplicate label %qD", decl
);
3385 return error_mark_node
;
3389 /* Mark label as having been defined. */
3390 DECL_INITIAL (decl
) = error_mark_node
;
3391 /* Say where in the source. */
3392 DECL_SOURCE_LOCATION (decl
) = location
;
3394 ent
->binding_level
= current_binding_level
;
3395 ent
->names_in_scope
= current_binding_level
->names
;
3397 for (named_label_use_entry
*use
= ent
->uses
; use
; use
= use
->next
)
3398 check_previous_goto (decl
, use
);
3405 /* Wrapper for define_label_1. */
3408 define_label (location_t location
, tree name
)
3410 bool running
= timevar_cond_start (TV_NAME_LOOKUP
);
3411 tree ret
= define_label_1 (location
, name
);
3412 timevar_cond_stop (TV_NAME_LOOKUP
, running
);
3419 cp_binding_level
*level
;
3420 struct cp_switch
*next
;
3421 /* The SWITCH_STMT being built. */
3423 /* A splay-tree mapping the low element of a case range to the high
3424 element, or NULL_TREE if there is no high element. Used to
3425 determine whether or not a new case label duplicates an old case
3426 label. We need a tree, rather than simply a hash table, because
3427 of the GNU case range extension. */
3429 /* Remember whether there was a case value that is outside the
3430 range of the original type of the controlling expression. */
3431 bool outside_range_p
;
3432 /* Remember whether a default: case label has been seen. */
3434 /* Remember whether a BREAK_STMT has been seen in this SWITCH_STMT. */
3435 bool break_stmt_seen_p
;
3436 /* Set if inside of {FOR,DO,WHILE}_BODY nested inside of a switch,
3437 where BREAK_STMT doesn't belong to the SWITCH_STMT. */
3438 bool in_loop_body_p
;
3441 /* A stack of the currently active switch statements. The innermost
3442 switch statement is on the top of the stack. There is no need to
3443 mark the stack for garbage collection because it is only active
3444 during the processing of the body of a function, and we never
3445 collect at that point. */
3447 static struct cp_switch
*switch_stack
;
3449 /* Called right after a switch-statement condition is parsed.
3450 SWITCH_STMT is the switch statement being parsed. */
3453 push_switch (tree switch_stmt
)
3455 struct cp_switch
*p
= XNEW (struct cp_switch
);
3456 p
->level
= current_binding_level
;
3457 p
->next
= switch_stack
;
3458 p
->switch_stmt
= switch_stmt
;
3459 p
->cases
= splay_tree_new (case_compare
, NULL
, NULL
);
3460 p
->outside_range_p
= false;
3461 p
->has_default_p
= false;
3462 p
->break_stmt_seen_p
= false;
3463 p
->in_loop_body_p
= false;
3470 struct cp_switch
*cs
= switch_stack
;
3471 location_t switch_location
;
3473 /* Emit warnings as needed. */
3474 switch_location
= EXPR_LOC_OR_LOC (cs
->switch_stmt
, input_location
);
3475 const bool bool_cond_p
3476 = (SWITCH_STMT_TYPE (cs
->switch_stmt
)
3477 && TREE_CODE (SWITCH_STMT_TYPE (cs
->switch_stmt
)) == BOOLEAN_TYPE
);
3478 if (!processing_template_decl
)
3479 c_do_switch_warnings (cs
->cases
, switch_location
,
3480 SWITCH_STMT_TYPE (cs
->switch_stmt
),
3481 SWITCH_STMT_COND (cs
->switch_stmt
),
3482 bool_cond_p
, cs
->outside_range_p
);
3484 /* For the benefit of block_may_fallthru remember if the switch body
3485 case labels cover all possible values and if there are break; stmts. */
3486 if (cs
->has_default_p
3487 || (!processing_template_decl
3488 && c_switch_covers_all_cases_p (cs
->cases
,
3489 SWITCH_STMT_TYPE (cs
->switch_stmt
))))
3490 SWITCH_STMT_ALL_CASES_P (cs
->switch_stmt
) = 1;
3491 if (!cs
->break_stmt_seen_p
)
3492 SWITCH_STMT_NO_BREAK_P (cs
->switch_stmt
) = 1;
3493 gcc_assert (!cs
->in_loop_body_p
);
3494 splay_tree_delete (cs
->cases
);
3495 switch_stack
= switch_stack
->next
;
3499 /* Note that a BREAK_STMT is about to be added. If it is inside of
3500 a SWITCH_STMT and not inside of a loop body inside of it, note
3501 in switch_stack we've seen a BREAK_STMT. */
3504 note_break_stmt (void)
3506 if (switch_stack
&& !switch_stack
->in_loop_body_p
)
3507 switch_stack
->break_stmt_seen_p
= true;
3510 /* Note the start of processing of an iteration statement's body.
3511 The note_break_stmt function will do nothing while processing it.
3512 Return a flag that should be passed to note_iteration_stmt_body_end. */
3515 note_iteration_stmt_body_start (void)
3519 bool ret
= switch_stack
->in_loop_body_p
;
3520 switch_stack
->in_loop_body_p
= true;
3524 /* Note the end of processing of an iteration statement's body. */
3527 note_iteration_stmt_body_end (bool prev
)
3530 switch_stack
->in_loop_body_p
= prev
;
3533 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3534 condition. Note that if TYPE and VALUE are already integral we don't
3535 really do the conversion because the language-independent
3536 warning/optimization code will work better that way. */
3539 case_conversion (tree type
, tree value
)
3541 if (value
== NULL_TREE
)
3544 value
= mark_rvalue_use (value
);
3546 if (cxx_dialect
>= cxx11
3547 && (SCOPED_ENUM_P (type
)
3548 || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value
))))
3550 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type
))
3551 type
= type_promotes_to (type
);
3552 value
= (perform_implicit_conversion_flags
3553 (type
, value
, tf_warning_or_error
,
3554 LOOKUP_IMPLICIT
| LOOKUP_NO_NON_INTEGRAL
));
3556 return cxx_constant_value (value
);
3559 /* Note that we've seen a definition of a case label, and complain if this
3560 is a bad place for one. */
3563 finish_case_label (location_t loc
, tree low_value
, tree high_value
)
3566 cp_binding_level
*p
;
3569 if (low_value
== NULL_TREE
&& high_value
== NULL_TREE
)
3570 switch_stack
->has_default_p
= true;
3572 if (processing_template_decl
)
3576 /* For templates, just add the case label; we'll do semantic
3577 analysis at instantiation-time. */
3578 label
= build_decl (loc
, LABEL_DECL
, NULL_TREE
, NULL_TREE
);
3579 return add_stmt (build_case_label (low_value
, high_value
, label
));
3582 /* Find the condition on which this switch statement depends. */
3583 cond
= SWITCH_STMT_COND (switch_stack
->switch_stmt
);
3584 if (cond
&& TREE_CODE (cond
) == TREE_LIST
)
3585 cond
= TREE_VALUE (cond
);
3587 if (!check_switch_goto (switch_stack
->level
))
3588 return error_mark_node
;
3590 type
= SWITCH_STMT_TYPE (switch_stack
->switch_stmt
);
3592 low_value
= case_conversion (type
, low_value
);
3593 high_value
= case_conversion (type
, high_value
);
3595 r
= c_add_case_label (loc
, switch_stack
->cases
, cond
, type
,
3596 low_value
, high_value
,
3597 &switch_stack
->outside_range_p
);
3599 /* After labels, make any new cleanups in the function go into their
3600 own new (temporary) binding contour. */
3601 for (p
= current_binding_level
;
3602 p
->kind
!= sk_function_parms
;
3604 p
->more_cleanups_ok
= 0;
3609 struct typename_info
{
3617 struct typename_hasher
: ggc_ptr_hash
<tree_node
>
3619 typedef typename_info
*compare_type
;
3621 /* Hash a TYPENAME_TYPE. */
3628 hash
= (htab_hash_pointer (TYPE_CONTEXT (t
))
3629 ^ htab_hash_pointer (TYPE_IDENTIFIER (t
)));
3634 /* Compare two TYPENAME_TYPEs. */
3637 equal (tree t1
, const typename_info
*t2
)
3639 return (TYPE_IDENTIFIER (t1
) == t2
->name
3640 && TYPE_CONTEXT (t1
) == t2
->scope
3641 && TYPENAME_TYPE_FULLNAME (t1
) == t2
->template_id
3642 && TYPENAME_IS_ENUM_P (t1
) == t2
->enum_p
3643 && TYPENAME_IS_CLASS_P (t1
) == t2
->class_p
);
3647 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
3648 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3650 Returns the new TYPENAME_TYPE. */
3652 static GTY (()) hash_table
<typename_hasher
> *typename_htab
;
3655 build_typename_type (tree context
, tree name
, tree fullname
,
3656 enum tag_types tag_type
)
3664 if (typename_htab
== NULL
)
3665 typename_htab
= hash_table
<typename_hasher
>::create_ggc (61);
3667 ti
.scope
= FROB_CONTEXT (context
);
3669 ti
.template_id
= fullname
;
3670 ti
.enum_p
= tag_type
== enum_type
;
3671 ti
.class_p
= (tag_type
== class_type
3672 || tag_type
== record_type
3673 || tag_type
== union_type
);
3674 hash
= (htab_hash_pointer (ti
.scope
)
3675 ^ htab_hash_pointer (ti
.name
));
3677 /* See if we already have this type. */
3678 e
= typename_htab
->find_slot_with_hash (&ti
, hash
, INSERT
);
3683 /* Build the TYPENAME_TYPE. */
3684 t
= cxx_make_type (TYPENAME_TYPE
);
3685 TYPE_CONTEXT (t
) = ti
.scope
;
3686 TYPENAME_TYPE_FULLNAME (t
) = ti
.template_id
;
3687 TYPENAME_IS_ENUM_P (t
) = ti
.enum_p
;
3688 TYPENAME_IS_CLASS_P (t
) = ti
.class_p
;
3690 /* Build the corresponding TYPE_DECL. */
3691 d
= build_decl (input_location
, TYPE_DECL
, name
, t
);
3692 TYPE_NAME (TREE_TYPE (d
)) = d
;
3693 TYPE_STUB_DECL (TREE_TYPE (d
)) = d
;
3694 DECL_CONTEXT (d
) = FROB_CONTEXT (context
);
3695 DECL_ARTIFICIAL (d
) = 1;
3697 /* Store it in the hash table. */
3700 /* TYPENAME_TYPEs must always be compared structurally, because
3701 they may or may not resolve down to another type depending on
3702 the currently open classes. */
3703 SET_TYPE_STRUCTURAL_EQUALITY (t
);
3709 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
3710 provided to name the type. Returns an appropriate type, unless an
3711 error occurs, in which case error_mark_node is returned. If we
3712 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3713 return that, rather than the _TYPE it corresponds to, in other
3714 cases we look through the type decl. If TF_ERROR is set, complain
3715 about errors, otherwise be quiet. */
3718 make_typename_type (tree context
, tree name
, enum tag_types tag_type
,
3719 tsubst_flags_t complain
)
3725 if (name
== error_mark_node
3726 || context
== NULL_TREE
3727 || context
== error_mark_node
)
3728 return error_mark_node
;
3732 if (!(TYPE_LANG_SPECIFIC (name
)
3733 && (CLASSTYPE_IS_TEMPLATE (name
)
3734 || CLASSTYPE_USE_TEMPLATE (name
))))
3735 name
= TYPE_IDENTIFIER (name
);
3737 /* Create a TEMPLATE_ID_EXPR for the type. */
3738 name
= build_nt (TEMPLATE_ID_EXPR
,
3739 CLASSTYPE_TI_TEMPLATE (name
),
3740 CLASSTYPE_TI_ARGS (name
));
3742 else if (TREE_CODE (name
) == TYPE_DECL
)
3743 name
= DECL_NAME (name
);
3747 if (TREE_CODE (name
) == TEMPLATE_ID_EXPR
)
3749 name
= TREE_OPERAND (name
, 0);
3750 if (DECL_TYPE_TEMPLATE_P (name
))
3751 name
= TREE_OPERAND (fullname
, 0) = DECL_NAME (name
);
3752 if (TREE_CODE (name
) != IDENTIFIER_NODE
)
3754 if (complain
& tf_error
)
3755 error ("%qD is not a type", name
);
3756 return error_mark_node
;
3759 if (TREE_CODE (name
) == TEMPLATE_DECL
)
3761 if (complain
& tf_error
)
3762 error ("%qD used without template parameters", name
);
3763 return error_mark_node
;
3765 gcc_assert (identifier_p (name
));
3766 gcc_assert (TYPE_P (context
));
3768 if (!MAYBE_CLASS_TYPE_P (context
))
3770 if (complain
& tf_error
)
3771 error ("%q#T is not a class", context
);
3772 return error_mark_node
;
3775 /* When the CONTEXT is a dependent type, NAME could refer to a
3776 dependent base class of CONTEXT. But look inside it anyway
3777 if CONTEXT is a currently open scope, in case it refers to a
3778 member of the current instantiation or a non-dependent base;
3779 lookup will stop when we hit a dependent base. */
3780 if (!dependent_scope_p (context
))
3781 /* We should only set WANT_TYPE when we're a nested typename type.
3782 Then we can give better diagnostics if we find a non-type. */
3783 t
= lookup_field (context
, name
, 2, /*want_type=*/true);
3787 if ((!t
|| TREE_CODE (t
) == TREE_LIST
) && dependent_type_p (context
))
3788 return build_typename_type (context
, name
, fullname
, tag_type
);
3790 want_template
= TREE_CODE (fullname
) == TEMPLATE_ID_EXPR
;
3794 if (complain
& tf_error
)
3796 if (!COMPLETE_TYPE_P (context
))
3797 cxx_incomplete_type_error (NULL_TREE
, context
);
3799 error (want_template
? G_("no class template named %q#T in %q#T")
3800 : G_("no type named %q#T in %q#T"), name
, context
);
3802 return error_mark_node
;
3805 /* Pull out the template from an injected-class-name (or multiple). */
3807 t
= maybe_get_template_decl_from_type_decl (t
);
3809 if (TREE_CODE (t
) == TREE_LIST
)
3811 if (complain
& tf_error
)
3813 error ("lookup of %qT in %qT is ambiguous", name
, context
);
3814 print_candidates (t
);
3816 return error_mark_node
;
3819 if (want_template
&& !DECL_TYPE_TEMPLATE_P (t
))
3821 if (complain
& tf_error
)
3822 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3824 return error_mark_node
;
3826 if (!want_template
&& TREE_CODE (t
) != TYPE_DECL
)
3828 if (complain
& tf_error
)
3829 error ("%<typename %T::%D%> names %q#T, which is not a type",
3831 return error_mark_node
;
3834 if (!perform_or_defer_access_check (TYPE_BINFO (context
), t
, t
, complain
))
3835 return error_mark_node
;
3837 /* If we are currently parsing a template and if T is a typedef accessed
3838 through CONTEXT then we need to remember and check access of T at
3839 template instantiation time. */
3840 add_typedef_to_current_template_for_access_check (t
, context
, input_location
);
3843 return lookup_template_class (t
, TREE_OPERAND (fullname
, 1),
3845 /*entering_scope=*/0,
3846 complain
| tf_user
);
3848 if (DECL_ARTIFICIAL (t
) || !(complain
& tf_keep_type_decl
))
3851 maybe_record_typedef_use (t
);
3856 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3857 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3858 in which case error_mark_node is returned.
3860 If PARM_LIST is non-NULL, also make sure that the template parameter
3861 list of TEMPLATE_DECL matches.
3863 If COMPLAIN zero, don't complain about any errors that occur. */
3866 make_unbound_class_template (tree context
, tree name
, tree parm_list
,
3867 tsubst_flags_t complain
)
3873 name
= TYPE_IDENTIFIER (name
);
3874 else if (DECL_P (name
))
3875 name
= DECL_NAME (name
);
3876 gcc_assert (identifier_p (name
));
3878 if (!dependent_type_p (context
)
3879 || currently_open_class (context
))
3881 tree tmpl
= NULL_TREE
;
3883 if (MAYBE_CLASS_TYPE_P (context
))
3884 tmpl
= lookup_field (context
, name
, 0, false);
3886 if (tmpl
&& TREE_CODE (tmpl
) == TYPE_DECL
)
3887 tmpl
= maybe_get_template_decl_from_type_decl (tmpl
);
3889 if (!tmpl
|| !DECL_TYPE_TEMPLATE_P (tmpl
))
3891 if (complain
& tf_error
)
3892 error ("no class template named %q#T in %q#T", name
, context
);
3893 return error_mark_node
;
3897 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl
), parm_list
))
3899 if (complain
& tf_error
)
3901 error ("template parameters do not match template %qD", tmpl
);
3902 inform (DECL_SOURCE_LOCATION (tmpl
),
3903 "%qD declared here", tmpl
);
3905 return error_mark_node
;
3908 if (!perform_or_defer_access_check (TYPE_BINFO (context
), tmpl
, tmpl
,
3910 return error_mark_node
;
3915 /* Build the UNBOUND_CLASS_TEMPLATE. */
3916 t
= cxx_make_type (UNBOUND_CLASS_TEMPLATE
);
3917 TYPE_CONTEXT (t
) = FROB_CONTEXT (context
);
3918 TREE_TYPE (t
) = NULL_TREE
;
3919 SET_TYPE_STRUCTURAL_EQUALITY (t
);
3921 /* Build the corresponding TEMPLATE_DECL. */
3922 d
= build_decl (input_location
, TEMPLATE_DECL
, name
, t
);
3923 TYPE_NAME (TREE_TYPE (d
)) = d
;
3924 TYPE_STUB_DECL (TREE_TYPE (d
)) = d
;
3925 DECL_CONTEXT (d
) = FROB_CONTEXT (context
);
3926 DECL_ARTIFICIAL (d
) = 1;
3927 DECL_TEMPLATE_PARMS (d
) = parm_list
;
3934 /* Push the declarations of builtin types into the global namespace.
3935 RID_INDEX is the index of the builtin type in the array
3936 RID_POINTERS. NAME is the name used when looking up the builtin
3937 type. TYPE is the _TYPE node for the builtin type.
3939 The calls to set_global_binding below should be
3940 eliminated. Built-in types should not be looked up name; their
3941 names are keywords that the parser can recognize. However, there
3942 is code in c-common.c that uses identifier_global_value to look up
3943 built-in types by name. */
3946 record_builtin_type (enum rid rid_index
,
3950 tree decl
= NULL_TREE
;
3954 tree tname
= get_identifier (name
);
3955 tree tdecl
= build_decl (BUILTINS_LOCATION
, TYPE_DECL
, tname
, type
);
3956 DECL_ARTIFICIAL (tdecl
) = 1;
3957 set_global_binding (tdecl
);
3961 if ((int) rid_index
< (int) RID_MAX
)
3962 if (tree rname
= ridpointers
[(int) rid_index
])
3963 if (!decl
|| DECL_NAME (decl
) != rname
)
3965 tree rdecl
= build_decl (BUILTINS_LOCATION
, TYPE_DECL
, rname
, type
);
3966 DECL_ARTIFICIAL (rdecl
) = 1;
3967 set_global_binding (rdecl
);
3974 if (!TYPE_NAME (type
))
3975 TYPE_NAME (type
) = decl
;
3976 debug_hooks
->type_decl (decl
, 0);
3980 /* Push a type into the namespace so that the back ends ignore it. */
3983 record_unknown_type (tree type
, const char* name
)
3985 tree decl
= pushdecl (build_decl (UNKNOWN_LOCATION
,
3986 TYPE_DECL
, get_identifier (name
), type
));
3987 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3988 DECL_IGNORED_P (decl
) = 1;
3989 TYPE_DECL_SUPPRESS_DEBUG (decl
) = 1;
3990 TYPE_SIZE (type
) = TYPE_SIZE (void_type_node
);
3991 SET_TYPE_ALIGN (type
, 1);
3992 TYPE_USER_ALIGN (type
) = 0;
3993 SET_TYPE_MODE (type
, TYPE_MODE (void_type_node
));
3996 /* Create all the predefined identifiers. */
3999 initialize_predefined_identifiers (void)
4001 struct predefined_identifier
4003 const char *name
; /* Name. */
4004 tree
*node
; /* Node to store it in. */
4005 cp_identifier_kind kind
; /* Kind of identifier. */
4008 /* A table of identifiers to create at startup. */
4009 static const predefined_identifier predefined_identifiers
[] = {
4010 {"C++", &lang_name_cplusplus
, cik_normal
},
4011 {"C", &lang_name_c
, cik_normal
},
4012 /* Some of these names have a trailing space so that it is
4013 impossible for them to conflict with names written by users. */
4014 {"__ct ", &ctor_identifier
, cik_ctor
},
4015 {"__ct_base ", &base_ctor_identifier
, cik_ctor
},
4016 {"__ct_comp ", &complete_ctor_identifier
, cik_ctor
},
4017 {"__dt ", &dtor_identifier
, cik_dtor
},
4018 {"__dt_base ", &base_dtor_identifier
, cik_dtor
},
4019 {"__dt_comp ", &complete_dtor_identifier
, cik_dtor
},
4020 {"__dt_del ", &deleting_dtor_identifier
, cik_dtor
},
4021 {"__conv_op ", &conv_op_identifier
, cik_conv_op
},
4022 {"__in_chrg", &in_charge_identifier
, cik_normal
},
4023 {"this", &this_identifier
, cik_normal
},
4024 {"__delta", &delta_identifier
, cik_normal
},
4025 {"__pfn", &pfn_identifier
, cik_normal
},
4026 {"_vptr", &vptr_identifier
, cik_normal
},
4027 {"__vtt_parm", &vtt_parm_identifier
, cik_normal
},
4028 {"::", &global_identifier
, cik_normal
},
4029 {"std", &std_identifier
, cik_normal
},
4030 /* The demangler expects anonymous namespaces to be called
4031 something starting with '_GLOBAL__N_'. It no longer needs
4032 to be unique to the TU. */
4033 {"_GLOBAL__N_1", &anon_identifier
, cik_normal
},
4034 {"auto", &auto_identifier
, cik_normal
},
4035 {"decltype(auto)", &decltype_auto_identifier
, cik_normal
},
4036 {"initializer_list", &init_list_identifier
, cik_normal
},
4037 {NULL
, NULL
, cik_normal
}
4040 for (const predefined_identifier
*pid
= predefined_identifiers
;
4043 *pid
->node
= get_identifier (pid
->name
);
4044 /* Some of these identifiers already have a special kind. */
4045 if (pid
->kind
!= cik_normal
)
4046 set_identifier_kind (*pid
->node
, pid
->kind
);
4050 /* Create the predefined scalar types of C,
4051 and some nodes representing standard constants (0, 1, (void *)0).
4052 Initialize the global binding level.
4053 Make definitions for built-in primitive functions. */
4056 cxx_init_decl_processing (void)
4059 tree void_ftype_ptr
;
4061 /* Create all the identifiers we need. */
4062 initialize_predefined_identifiers ();
4064 /* Create the global variables. */
4065 push_to_top_level ();
4067 current_function_decl
= NULL_TREE
;
4068 current_binding_level
= NULL
;
4069 /* Enter the global namespace. */
4070 gcc_assert (global_namespace
== NULL_TREE
);
4071 global_namespace
= build_lang_decl (NAMESPACE_DECL
, global_identifier
,
4073 TREE_PUBLIC (global_namespace
) = 1;
4074 DECL_CONTEXT (global_namespace
)
4075 = build_translation_unit_decl (get_identifier (main_input_filename
));
4076 /* Remember whether we want the empty class passing ABI change warning
4078 TRANSLATION_UNIT_WARN_EMPTY_P (DECL_CONTEXT (global_namespace
))
4079 = warn_abi
&& abi_version_crosses (12);
4080 debug_hooks
->register_main_translation_unit
4081 (DECL_CONTEXT (global_namespace
));
4082 begin_scope (sk_namespace
, global_namespace
);
4083 current_namespace
= global_namespace
;
4085 if (flag_visibility_ms_compat
)
4086 default_visibility
= VISIBILITY_HIDDEN
;
4089 current_lang_name
= lang_name_c
;
4091 /* Create the `std' namespace. */
4092 push_namespace (std_identifier
);
4093 std_node
= current_namespace
;
4096 flag_noexcept_type
= (cxx_dialect
>= cxx17
);
4098 c_common_nodes_and_builtins ();
4100 integer_two_node
= build_int_cst (NULL_TREE
, 2);
4102 /* Guess at the initial static decls size. */
4103 vec_alloc (static_decls
, 500);
4105 /* ... and keyed classes. */
4106 vec_alloc (keyed_classes
, 100);
4108 record_builtin_type (RID_BOOL
, "bool", boolean_type_node
);
4109 truthvalue_type_node
= boolean_type_node
;
4110 truthvalue_false_node
= boolean_false_node
;
4111 truthvalue_true_node
= boolean_true_node
;
4113 empty_except_spec
= build_tree_list (NULL_TREE
, NULL_TREE
);
4114 noexcept_true_spec
= build_tree_list (boolean_true_node
, NULL_TREE
);
4115 noexcept_false_spec
= build_tree_list (boolean_false_node
, NULL_TREE
);
4116 noexcept_deferred_spec
= build_tree_list (make_node (DEFERRED_NOEXCEPT
),
4120 record_builtin_type (RID_MAX
, NULL
, string_type_node
);
4123 delta_type_node
= ptrdiff_type_node
;
4124 vtable_index_type
= ptrdiff_type_node
;
4126 vtt_parm_type
= build_pointer_type (const_ptr_type_node
);
4127 void_ftype
= build_function_type_list (void_type_node
, NULL_TREE
);
4128 void_ftype_ptr
= build_function_type_list (void_type_node
,
4129 ptr_type_node
, NULL_TREE
);
4131 = build_exception_variant (void_ftype_ptr
, empty_except_spec
);
4133 /* Create the conversion operator marker. This operator's DECL_NAME
4134 is in the identifier table, so we can use identifier equality to
4136 conv_op_marker
= build_lang_decl (FUNCTION_DECL
, conv_op_identifier
,
4139 /* C++ extensions */
4141 unknown_type_node
= make_node (LANG_TYPE
);
4142 record_unknown_type (unknown_type_node
, "unknown type");
4144 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
4145 TREE_TYPE (unknown_type_node
) = unknown_type_node
;
4147 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
4149 TYPE_POINTER_TO (unknown_type_node
) = unknown_type_node
;
4150 TYPE_REFERENCE_TO (unknown_type_node
) = unknown_type_node
;
4152 init_list_type_node
= make_node (LANG_TYPE
);
4153 record_unknown_type (init_list_type_node
, "init list");
4156 /* Make sure we get a unique function type, so we can give
4157 its pointer type a name. (This wins for gdb.) */
4158 tree vfunc_type
= make_node (FUNCTION_TYPE
);
4159 TREE_TYPE (vfunc_type
) = integer_type_node
;
4160 TYPE_ARG_TYPES (vfunc_type
) = NULL_TREE
;
4161 layout_type (vfunc_type
);
4163 vtable_entry_type
= build_pointer_type (vfunc_type
);
4165 record_builtin_type (RID_MAX
, "__vtbl_ptr_type", vtable_entry_type
);
4168 = build_cplus_array_type (vtable_entry_type
, NULL_TREE
);
4169 layout_type (vtbl_type_node
);
4170 vtbl_type_node
= cp_build_qualified_type (vtbl_type_node
, TYPE_QUAL_CONST
);
4171 record_builtin_type (RID_MAX
, NULL
, vtbl_type_node
);
4172 vtbl_ptr_type_node
= build_pointer_type (vtable_entry_type
);
4173 layout_type (vtbl_ptr_type_node
);
4174 record_builtin_type (RID_MAX
, NULL
, vtbl_ptr_type_node
);
4176 push_namespace (get_identifier ("__cxxabiv1"));
4177 abi_node
= current_namespace
;
4180 global_type_node
= make_node (LANG_TYPE
);
4181 record_unknown_type (global_type_node
, "global type");
4183 any_targ_node
= make_node (LANG_TYPE
);
4184 record_unknown_type (any_targ_node
, "any type");
4187 current_lang_name
= lang_name_cplusplus
;
4189 if (aligned_new_threshold
> 1
4190 && !pow2p_hwi (aligned_new_threshold
))
4192 error ("-faligned-new=%d is not a power of two", aligned_new_threshold
);
4193 aligned_new_threshold
= 1;
4195 if (aligned_new_threshold
== -1)
4196 aligned_new_threshold
= (cxx_dialect
>= cxx17
) ? 1 : 0;
4197 if (aligned_new_threshold
== 1)
4198 aligned_new_threshold
= malloc_alignment () / BITS_PER_UNIT
;
4201 tree newattrs
, extvisattr
;
4202 tree newtype
, deltype
;
4203 tree ptr_ftype_sizetype
;
4207 = build_function_type_list (ptr_type_node
, size_type_node
, NULL_TREE
);
4208 if (cxx_dialect
== cxx98
)
4211 tree bad_alloc_type_node
;
4212 tree bad_alloc_decl
;
4214 push_namespace (std_identifier
);
4215 bad_alloc_id
= get_identifier ("bad_alloc");
4216 bad_alloc_type_node
= make_class_type (RECORD_TYPE
);
4217 TYPE_CONTEXT (bad_alloc_type_node
) = current_namespace
;
4219 = create_implicit_typedef (bad_alloc_id
, bad_alloc_type_node
);
4220 DECL_CONTEXT (bad_alloc_decl
) = current_namespace
;
4224 = add_exception_specifier (NULL_TREE
, bad_alloc_type_node
, -1);
4227 new_eh_spec
= noexcept_false_spec
;
4229 /* Ensure attribs.c is initialized. */
4232 /* Ensure constraint.cc is initialized. */
4233 init_constraint_processing ();
4235 extvisattr
= build_tree_list (get_identifier ("externally_visible"),
4237 newattrs
= tree_cons (get_identifier ("alloc_size"),
4238 build_tree_list (NULL_TREE
, integer_one_node
),
4240 newtype
= cp_build_type_attribute_variant (ptr_ftype_sizetype
, newattrs
);
4241 newtype
= build_exception_variant (newtype
, new_eh_spec
);
4242 deltype
= cp_build_type_attribute_variant (void_ftype_ptr
, extvisattr
);
4243 deltype
= build_exception_variant (deltype
, empty_except_spec
);
4244 tree opnew
= push_cp_library_fn (NEW_EXPR
, newtype
, 0);
4245 DECL_IS_MALLOC (opnew
) = 1;
4246 DECL_IS_OPERATOR_NEW (opnew
) = 1;
4247 opnew
= push_cp_library_fn (VEC_NEW_EXPR
, newtype
, 0);
4248 DECL_IS_MALLOC (opnew
) = 1;
4249 DECL_IS_OPERATOR_NEW (opnew
) = 1;
4250 push_cp_library_fn (DELETE_EXPR
, deltype
, ECF_NOTHROW
);
4251 push_cp_library_fn (VEC_DELETE_EXPR
, deltype
, ECF_NOTHROW
);
4252 if (flag_sized_deallocation
)
4254 /* Also push the sized deallocation variants:
4255 void operator delete(void*, std::size_t) throw();
4256 void operator delete[](void*, std::size_t) throw(); */
4257 tree void_ftype_ptr_size
4258 = build_function_type_list (void_type_node
, ptr_type_node
,
4259 size_type_node
, NULL_TREE
);
4260 deltype
= cp_build_type_attribute_variant (void_ftype_ptr_size
,
4262 deltype
= build_exception_variant (deltype
, empty_except_spec
);
4263 push_cp_library_fn (DELETE_EXPR
, deltype
, ECF_NOTHROW
);
4264 push_cp_library_fn (VEC_DELETE_EXPR
, deltype
, ECF_NOTHROW
);
4267 if (aligned_new_threshold
)
4269 push_namespace (std_identifier
);
4270 tree align_id
= get_identifier ("align_val_t");
4271 align_type_node
= start_enum (align_id
, NULL_TREE
, size_type_node
,
4272 NULL_TREE
, /*scoped*/true, NULL
);
4275 /* operator new (size_t, align_val_t); */
4276 newtype
= build_function_type_list (ptr_type_node
, size_type_node
,
4277 align_type_node
, NULL_TREE
);
4278 newtype
= cp_build_type_attribute_variant (newtype
, newattrs
);
4279 newtype
= build_exception_variant (newtype
, new_eh_spec
);
4280 opnew
= push_cp_library_fn (NEW_EXPR
, newtype
, 0);
4281 DECL_IS_MALLOC (opnew
) = 1;
4282 DECL_IS_OPERATOR_NEW (opnew
) = 1;
4283 opnew
= push_cp_library_fn (VEC_NEW_EXPR
, newtype
, 0);
4284 DECL_IS_MALLOC (opnew
) = 1;
4285 DECL_IS_OPERATOR_NEW (opnew
) = 1;
4287 /* operator delete (void *, align_val_t); */
4288 deltype
= build_function_type_list (void_type_node
, ptr_type_node
,
4289 align_type_node
, NULL_TREE
);
4290 deltype
= cp_build_type_attribute_variant (deltype
, extvisattr
);
4291 deltype
= build_exception_variant (deltype
, empty_except_spec
);
4292 push_cp_library_fn (DELETE_EXPR
, deltype
, ECF_NOTHROW
);
4293 push_cp_library_fn (VEC_DELETE_EXPR
, deltype
, ECF_NOTHROW
);
4295 if (flag_sized_deallocation
)
4297 /* operator delete (void *, size_t, align_val_t); */
4298 deltype
= build_function_type_list (void_type_node
, ptr_type_node
,
4299 size_type_node
, align_type_node
,
4301 deltype
= cp_build_type_attribute_variant (deltype
, extvisattr
);
4302 deltype
= build_exception_variant (deltype
, empty_except_spec
);
4303 push_cp_library_fn (DELETE_EXPR
, deltype
, ECF_NOTHROW
);
4304 push_cp_library_fn (VEC_DELETE_EXPR
, deltype
, ECF_NOTHROW
);
4308 nullptr_type_node
= make_node (NULLPTR_TYPE
);
4309 TYPE_SIZE (nullptr_type_node
) = bitsize_int (GET_MODE_BITSIZE (ptr_mode
));
4310 TYPE_SIZE_UNIT (nullptr_type_node
) = size_int (GET_MODE_SIZE (ptr_mode
));
4311 TYPE_UNSIGNED (nullptr_type_node
) = 1;
4312 TYPE_PRECISION (nullptr_type_node
) = GET_MODE_BITSIZE (ptr_mode
);
4313 if (abi_version_at_least (9))
4314 SET_TYPE_ALIGN (nullptr_type_node
, GET_MODE_ALIGNMENT (ptr_mode
));
4315 SET_TYPE_MODE (nullptr_type_node
, ptr_mode
);
4316 record_builtin_type (RID_MAX
, "decltype(nullptr)", nullptr_type_node
);
4317 nullptr_node
= build_int_cst (nullptr_type_node
, 0);
4321 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype
,
4322 ECF_NORETURN
| ECF_NOTHROW
| ECF_COLD
);
4324 /* Perform other language dependent initializations. */
4325 init_class_processing ();
4326 init_rtti_processing ();
4327 init_template_processing ();
4329 if (flag_exceptions
)
4330 init_exception_processing ();
4332 if (! supports_one_only ())
4335 make_fname_decl
= cp_make_fname_decl
;
4336 start_fname_decls ();
4338 /* Show we use EH for cleanups. */
4339 if (flag_exceptions
)
4340 using_eh_for_cleanups ();
4343 /* Generate an initializer for a function naming variable from
4344 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
4345 filled in with the type of the init. */
4348 cp_fname_init (const char* name
, tree
*type_p
)
4350 tree domain
= NULL_TREE
;
4352 tree init
= NULL_TREE
;
4357 length
= strlen (name
);
4358 domain
= build_index_type (size_int (length
));
4359 init
= build_string (length
+ 1, name
);
4362 type
= cp_build_qualified_type (char_type_node
, TYPE_QUAL_CONST
);
4363 type
= build_cplus_array_type (type
, domain
);
4368 TREE_TYPE (init
) = type
;
4370 init
= error_mark_node
;
4375 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
4376 the decl, LOC is the location to give the decl, NAME is the
4377 initialization string and TYPE_DEP indicates whether NAME depended
4378 on the type of the function. We make use of that to detect
4379 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
4380 at the point of first use, so we mustn't push the decl now. */
4383 cp_make_fname_decl (location_t loc
, tree id
, int type_dep
)
4385 const char *const name
= (type_dep
&& processing_template_decl
4386 ? NULL
: fname_as_string (type_dep
));
4388 tree init
= cp_fname_init (name
, &type
);
4389 tree decl
= build_decl (loc
, VAR_DECL
, id
, type
);
4392 free (CONST_CAST (char *, name
));
4394 TREE_STATIC (decl
) = 1;
4395 TREE_READONLY (decl
) = 1;
4396 DECL_ARTIFICIAL (decl
) = 1;
4398 TREE_USED (decl
) = 1;
4400 if (current_function_decl
)
4402 DECL_CONTEXT (decl
) = current_function_decl
;
4403 decl
= pushdecl_outermost_localscope (decl
);
4404 cp_finish_decl (decl
, init
, /*init_const_expr_p=*/false, NULL_TREE
,
4405 LOOKUP_ONLYCONVERTING
);
4409 DECL_THIS_STATIC (decl
) = true;
4410 pushdecl_top_level_and_finish (decl
, init
);
4417 builtin_function_1 (tree decl
, tree context
, bool is_global
)
4419 tree id
= DECL_NAME (decl
);
4420 const char *name
= IDENTIFIER_POINTER (id
);
4422 retrofit_lang_decl (decl
);
4424 DECL_ARTIFICIAL (decl
) = 1;
4425 SET_DECL_LANGUAGE (decl
, lang_c
);
4426 /* Runtime library routines are, by definition, available in an
4427 external shared object. */
4428 DECL_VISIBILITY (decl
) = VISIBILITY_DEFAULT
;
4429 DECL_VISIBILITY_SPECIFIED (decl
) = 1;
4431 DECL_CONTEXT (decl
) = context
;
4433 /* A function in the user's namespace should have an explicit
4434 declaration before it is used. Mark the built-in function as
4435 anticipated but not actually declared. */
4436 if (name
[0] != '_' || name
[1] != '_')
4437 DECL_ANTICIPATED (decl
) = 1;
4438 else if (strncmp (name
+ 2, "builtin_", strlen ("builtin_")) != 0)
4440 size_t len
= strlen (name
);
4442 /* Treat __*_chk fortification functions as anticipated as well,
4443 unless they are __builtin_*. */
4444 if (len
> strlen ("___chk")
4445 && memcmp (name
+ len
- strlen ("_chk"),
4446 "_chk", strlen ("_chk") + 1) == 0)
4447 DECL_ANTICIPATED (decl
) = 1;
4451 pushdecl_top_level (decl
);
4459 cxx_builtin_function (tree decl
)
4461 tree id
= DECL_NAME (decl
);
4462 const char *name
= IDENTIFIER_POINTER (id
);
4463 /* All builtins that don't begin with an '_' should additionally
4464 go in the 'std' namespace. */
4467 tree decl2
= copy_node(decl
);
4468 push_namespace (std_identifier
);
4469 builtin_function_1 (decl2
, std_node
, false);
4473 return builtin_function_1 (decl
, NULL_TREE
, false);
4476 /* Like cxx_builtin_function, but guarantee the function is added to the global
4477 scope. This is to allow function specific options to add new machine
4478 dependent builtins when the target ISA changes via attribute((target(...)))
4479 which saves space on program startup if the program does not use non-generic
4483 cxx_builtin_function_ext_scope (tree decl
)
4486 tree id
= DECL_NAME (decl
);
4487 const char *name
= IDENTIFIER_POINTER (id
);
4488 /* All builtins that don't begin with an '_' should additionally
4489 go in the 'std' namespace. */
4492 tree decl2
= copy_node(decl
);
4493 push_namespace (std_identifier
);
4494 builtin_function_1 (decl2
, std_node
, true);
4498 return builtin_function_1 (decl
, NULL_TREE
, true);
4501 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4502 function. Not called directly. */
4505 build_library_fn (tree name
, enum tree_code operator_code
, tree type
,
4508 tree fn
= build_lang_decl (FUNCTION_DECL
, name
, type
);
4509 DECL_EXTERNAL (fn
) = 1;
4510 TREE_PUBLIC (fn
) = 1;
4511 DECL_ARTIFICIAL (fn
) = 1;
4512 DECL_OVERLOADED_OPERATOR_CODE_RAW (fn
)
4513 = OVL_OP_INFO (false, operator_code
)->ovl_op_code
;
4514 SET_DECL_LANGUAGE (fn
, lang_c
);
4515 /* Runtime library routines are, by definition, available in an
4516 external shared object. */
4517 DECL_VISIBILITY (fn
) = VISIBILITY_DEFAULT
;
4518 DECL_VISIBILITY_SPECIFIED (fn
) = 1;
4519 set_call_expr_flags (fn
, ecf_flags
);
4523 /* Returns the _DECL for a library function with C++ linkage. */
4526 build_cp_library_fn (tree name
, enum tree_code operator_code
, tree type
,
4529 tree fn
= build_library_fn (name
, operator_code
, type
, ecf_flags
);
4530 DECL_CONTEXT (fn
) = FROB_CONTEXT (current_namespace
);
4531 SET_DECL_LANGUAGE (fn
, lang_cplusplus
);
4535 /* Like build_library_fn, but takes a C string instead of an
4539 build_library_fn_ptr (const char* name
, tree type
, int ecf_flags
)
4541 return build_library_fn (get_identifier (name
), ERROR_MARK
, type
, ecf_flags
);
4544 /* Like build_cp_library_fn, but takes a C string instead of an
4548 build_cp_library_fn_ptr (const char* name
, tree type
, int ecf_flags
)
4550 return build_cp_library_fn (get_identifier (name
), ERROR_MARK
, type
,
4554 /* Like build_library_fn, but also pushes the function so that we will
4555 be able to find it via get_global_binding. Also, the function
4556 may throw exceptions listed in RAISES. */
4559 push_library_fn (tree name
, tree type
, tree raises
, int ecf_flags
)
4564 type
= build_exception_variant (type
, raises
);
4566 fn
= build_library_fn (name
, ERROR_MARK
, type
, ecf_flags
);
4567 pushdecl_top_level (fn
);
4571 /* Like build_cp_library_fn, but also pushes the function so that it
4572 will be found by normal lookup. */
4575 push_cp_library_fn (enum tree_code operator_code
, tree type
,
4578 tree fn
= build_cp_library_fn (ovl_op_identifier (false, operator_code
),
4579 operator_code
, type
, ecf_flags
);
4582 apply_tm_attr (fn
, get_identifier ("transaction_safe"));
4586 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4590 push_void_library_fn (tree name
, tree parmtypes
, int ecf_flags
)
4592 tree type
= build_function_type (void_type_node
, parmtypes
);
4593 return push_library_fn (name
, type
, NULL_TREE
, ecf_flags
);
4596 /* Like push_library_fn, but also note that this function throws
4597 and does not return. Used for __throw_foo and the like. */
4600 push_throw_library_fn (tree name
, tree type
)
4602 tree fn
= push_library_fn (name
, type
, NULL_TREE
, ECF_NORETURN
| ECF_COLD
);
4606 /* When we call finish_struct for an anonymous union, we create
4607 default copy constructors and such. But, an anonymous union
4608 shouldn't have such things; this function undoes the damage to the
4609 anonymous union type T.
4611 (The reason that we create the synthesized methods is that we don't
4612 distinguish `union { int i; }' from `typedef union { int i; } U'.
4613 The first is an anonymous union; the second is just an ordinary
4617 fixup_anonymous_aggr (tree t
)
4619 /* Wipe out memory of synthesized methods. */
4620 TYPE_HAS_USER_CONSTRUCTOR (t
) = 0;
4621 TYPE_HAS_DEFAULT_CONSTRUCTOR (t
) = 0;
4622 TYPE_HAS_COPY_CTOR (t
) = 0;
4623 TYPE_HAS_CONST_COPY_CTOR (t
) = 0;
4624 TYPE_HAS_COPY_ASSIGN (t
) = 0;
4625 TYPE_HAS_CONST_COPY_ASSIGN (t
) = 0;
4627 /* Splice the implicitly generated functions out of TYPE_FIELDS. */
4628 for (tree probe
, *prev_p
= &TYPE_FIELDS (t
); (probe
= *prev_p
);)
4629 if (TREE_CODE (probe
) == FUNCTION_DECL
&& DECL_ARTIFICIAL (probe
))
4630 *prev_p
= DECL_CHAIN (probe
);
4632 prev_p
= &DECL_CHAIN (probe
);
4634 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4635 assignment operators (because they cannot have these methods themselves).
4636 For anonymous unions this is already checked because they are not allowed
4637 in any union, otherwise we have to check it. */
4638 if (TREE_CODE (t
) != UNION_TYPE
)
4642 for (field
= TYPE_FIELDS (t
); field
; field
= DECL_CHAIN (field
))
4643 if (TREE_CODE (field
) == FIELD_DECL
)
4645 type
= TREE_TYPE (field
);
4646 if (CLASS_TYPE_P (type
))
4648 if (TYPE_NEEDS_CONSTRUCTING (type
))
4649 error ("member %q+#D with constructor not allowed "
4650 "in anonymous aggregate", field
);
4651 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
))
4652 error ("member %q+#D with destructor not allowed "
4653 "in anonymous aggregate", field
);
4654 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type
))
4655 error ("member %q+#D with copy assignment operator "
4656 "not allowed in anonymous aggregate", field
);
4662 /* Warn for an attribute located at LOCATION that appertains to the
4663 class type CLASS_TYPE that has not been properly placed after its
4664 class-key, in it class-specifier. */
4667 warn_misplaced_attr_for_class_type (source_location location
,
4670 gcc_assert (OVERLOAD_TYPE_P (class_type
));
4672 if (warning_at (location
, OPT_Wattributes
,
4673 "attribute ignored in declaration "
4674 "of %q#T", class_type
))
4676 "attribute for %q#T must follow the %qs keyword",
4677 class_type
, class_key_or_enum_as_string (class_type
));
4680 /* Make sure that a declaration with no declarator is well-formed, i.e.
4681 just declares a tagged type or anonymous union.
4683 Returns the type declared; or NULL_TREE if none. */
4686 check_tag_decl (cp_decl_specifier_seq
*declspecs
,
4687 bool explicit_type_instantiation_p
)
4689 int saw_friend
= decl_spec_seq_has_spec_p (declspecs
, ds_friend
);
4690 int saw_typedef
= decl_spec_seq_has_spec_p (declspecs
, ds_typedef
);
4691 /* If a class, struct, or enum type is declared by the DECLSPECS
4692 (i.e, if a class-specifier, enum-specifier, or non-typename
4693 elaborated-type-specifier appears in the DECLSPECS),
4694 DECLARED_TYPE is set to the corresponding type. */
4695 tree declared_type
= NULL_TREE
;
4696 bool error_p
= false;
4698 if (declspecs
->multiple_types_p
)
4699 error ("multiple types in one declaration");
4700 else if (declspecs
->redefined_builtin_type
)
4702 if (!in_system_header_at (input_location
))
4703 permerror (declspecs
->locations
[ds_redefined_builtin_type_spec
],
4704 "redeclaration of C++ built-in type %qT",
4705 declspecs
->redefined_builtin_type
);
4710 && TYPE_P (declspecs
->type
)
4711 && ((TREE_CODE (declspecs
->type
) != TYPENAME_TYPE
4712 && MAYBE_CLASS_TYPE_P (declspecs
->type
))
4713 || TREE_CODE (declspecs
->type
) == ENUMERAL_TYPE
))
4714 declared_type
= declspecs
->type
;
4715 else if (declspecs
->type
== error_mark_node
)
4717 if (declared_type
== NULL_TREE
&& ! saw_friend
&& !error_p
)
4718 permerror (input_location
, "declaration does not declare anything");
4719 else if (declared_type
!= NULL_TREE
&& type_uses_auto (declared_type
))
4721 error_at (declspecs
->locations
[ds_type_spec
],
4722 "%<auto%> can only be specified for variables "
4723 "or function declarations");
4724 return error_mark_node
;
4726 /* Check for an anonymous union. */
4727 else if (declared_type
&& RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type
))
4728 && TYPE_UNNAMED_P (declared_type
))
4730 /* 7/3 In a simple-declaration, the optional init-declarator-list
4731 can be omitted only when declaring a class (clause 9) or
4732 enumeration (7.2), that is, when the decl-specifier-seq contains
4733 either a class-specifier, an elaborated-type-specifier with
4734 a class-key (9.1), or an enum-specifier. In these cases and
4735 whenever a class-specifier or enum-specifier is present in the
4736 decl-specifier-seq, the identifiers in these specifiers are among
4737 the names being declared by the declaration (as class-name,
4738 enum-names, or enumerators, depending on the syntax). In such
4739 cases, and except for the declaration of an unnamed bit-field (9.6),
4740 the decl-specifier-seq shall introduce one or more names into the
4741 program, or shall redeclare a name introduced by a previous
4742 declaration. [Example:
4743 enum { }; // ill-formed
4744 typedef class { }; // ill-formed
4748 error ("missing type-name in typedef-declaration");
4751 /* Anonymous unions are objects, so they can have specifiers. */;
4752 SET_ANON_AGGR_TYPE_P (declared_type
);
4754 if (TREE_CODE (declared_type
) != UNION_TYPE
4755 && !in_system_header_at (input_location
))
4756 pedwarn (input_location
, OPT_Wpedantic
, "ISO C++ prohibits anonymous structs");
4761 if (decl_spec_seq_has_spec_p (declspecs
, ds_inline
))
4762 error_at (declspecs
->locations
[ds_inline
],
4763 "%<inline%> can only be specified for functions");
4764 else if (decl_spec_seq_has_spec_p (declspecs
, ds_virtual
))
4765 error_at (declspecs
->locations
[ds_virtual
],
4766 "%<virtual%> can only be specified for functions");
4768 && (!current_class_type
4769 || current_scope () != current_class_type
))
4770 error_at (declspecs
->locations
[ds_friend
],
4771 "%<friend%> can only be specified inside a class");
4772 else if (decl_spec_seq_has_spec_p (declspecs
, ds_explicit
))
4773 error_at (declspecs
->locations
[ds_explicit
],
4774 "%<explicit%> can only be specified for constructors");
4775 else if (declspecs
->storage_class
)
4776 error_at (declspecs
->locations
[ds_storage_class
],
4777 "a storage class can only be specified for objects "
4779 else if (decl_spec_seq_has_spec_p (declspecs
, ds_const
))
4780 error_at (declspecs
->locations
[ds_const
],
4781 "%<const%> can only be specified for objects and "
4783 else if (decl_spec_seq_has_spec_p (declspecs
, ds_volatile
))
4784 error_at (declspecs
->locations
[ds_volatile
],
4785 "%<volatile%> can only be specified for objects and "
4787 else if (decl_spec_seq_has_spec_p (declspecs
, ds_restrict
))
4788 error_at (declspecs
->locations
[ds_restrict
],
4789 "%<__restrict%> can only be specified for objects and "
4791 else if (decl_spec_seq_has_spec_p (declspecs
, ds_thread
))
4792 error_at (declspecs
->locations
[ds_thread
],
4793 "%<__thread%> can only be specified for objects "
4795 else if (saw_typedef
)
4796 warning_at (declspecs
->locations
[ds_typedef
], 0,
4797 "%<typedef%> was ignored in this declaration");
4798 else if (decl_spec_seq_has_spec_p (declspecs
, ds_constexpr
))
4799 error_at (declspecs
->locations
[ds_constexpr
],
4800 "%<constexpr%> cannot be used for type declarations");
4803 if (declspecs
->attributes
&& warn_attributes
&& declared_type
)
4806 if (!CLASS_TYPE_P (declared_type
)
4807 || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type
))
4808 /* For a non-template class, use the name location. */
4809 loc
= location_of (declared_type
);
4811 /* For a template class (an explicit instantiation), use the
4812 current location. */
4813 loc
= input_location
;
4815 if (explicit_type_instantiation_p
)
4816 /* [dcl.attr.grammar]/4:
4818 No attribute-specifier-seq shall appertain to an explicit
4821 if (warning_at (loc
, OPT_Wattributes
,
4822 "attribute ignored in explicit instantiation %q#T",
4825 "no attribute can be applied to "
4826 "an explicit instantiation");
4829 warn_misplaced_attr_for_class_type (loc
, declared_type
);
4832 return declared_type
;
4835 /* Called when a declaration is seen that contains no names to declare.
4836 If its type is a reference to a structure, union or enum inherited
4837 from a containing scope, shadow that tag name for the current scope
4838 with a forward reference.
4839 If its type defines a new named structure or union
4840 or defines an enum, it is valid but we need not do anything here.
4841 Otherwise, it is an error.
4843 C++: may have to grok the declspecs to learn about static,
4844 complain for anonymous unions.
4846 Returns the TYPE declared -- or NULL_TREE if none. */
4849 shadow_tag (cp_decl_specifier_seq
*declspecs
)
4851 tree t
= check_tag_decl (declspecs
,
4852 /*explicit_type_instantiation_p=*/false);
4857 if (maybe_process_partial_specialization (t
) == error_mark_node
)
4860 /* This is where the variables in an anonymous union are
4861 declared. An anonymous union declaration looks like:
4863 because there is no declarator after the union, the parser
4864 sends that declaration here. */
4865 if (ANON_AGGR_TYPE_P (t
))
4867 fixup_anonymous_aggr (t
);
4869 if (TYPE_FIELDS (t
))
4871 tree decl
= grokdeclarator (/*declarator=*/NULL
,
4872 declspecs
, NORMAL
, 0, NULL
);
4873 finish_anon_union (decl
);
4880 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4883 groktypename (cp_decl_specifier_seq
*type_specifiers
,
4884 const cp_declarator
*declarator
,
4885 bool is_template_arg
)
4889 enum decl_context context
4890 = is_template_arg
? TEMPLATE_TYPE_ARG
: TYPENAME
;
4891 attrs
= type_specifiers
->attributes
;
4892 type_specifiers
->attributes
= NULL_TREE
;
4893 type
= grokdeclarator (declarator
, type_specifiers
, context
, 0, &attrs
);
4894 if (attrs
&& type
!= error_mark_node
)
4896 if (CLASS_TYPE_P (type
))
4897 warning (OPT_Wattributes
, "ignoring attributes applied to class type %qT "
4898 "outside of definition", type
);
4899 else if (MAYBE_CLASS_TYPE_P (type
))
4900 /* A template type parameter or other dependent type. */
4901 warning (OPT_Wattributes
, "ignoring attributes applied to dependent "
4902 "type %qT without an associated declaration", type
);
4904 cplus_decl_attributes (&type
, attrs
, 0);
4909 /* Process a DECLARATOR for a function-scope variable declaration,
4910 namespace-scope variable declaration, or function declaration.
4911 (Function definitions go through start_function; class member
4912 declarations appearing in the body of the class go through
4913 grokfield.) The DECL corresponding to the DECLARATOR is returned.
4914 If an error occurs, the error_mark_node is returned instead.
4916 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
4917 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4918 for an explicitly defaulted function, or SD_DELETED for an explicitly
4919 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4920 implicitly initialized via a default constructor. ATTRIBUTES and
4921 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4923 The scope represented by the context of the returned DECL is pushed
4924 (if it is not the global namespace) and is assigned to
4925 *PUSHED_SCOPE_P. The caller is then responsible for calling
4926 pop_scope on *PUSHED_SCOPE_P if it is set. */
4929 start_decl (const cp_declarator
*declarator
,
4930 cp_decl_specifier_seq
*declspecs
,
4933 tree prefix_attributes
,
4934 tree
*pushed_scope_p
)
4942 *pushed_scope_p
= NULL_TREE
;
4944 /* An object declared as __attribute__((deprecated)) suppresses
4945 warnings of uses of other deprecated items. */
4946 if (lookup_attribute ("deprecated", attributes
))
4947 deprecated_state
= DEPRECATED_SUPPRESS
;
4949 attributes
= chainon (attributes
, prefix_attributes
);
4951 decl
= grokdeclarator (declarator
, declspecs
, NORMAL
, initialized
,
4954 deprecated_state
= DEPRECATED_NORMAL
;
4956 if (decl
== NULL_TREE
|| VOID_TYPE_P (decl
)
4957 || decl
== error_mark_node
)
4958 return error_mark_node
;
4960 context
= CP_DECL_CONTEXT (decl
);
4961 if (context
!= global_namespace
)
4962 *pushed_scope_p
= push_scope (context
);
4964 /* Is it valid for this decl to have an initializer at all?
4965 If not, set INITIALIZED to zero, which will indirectly
4966 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
4968 && TREE_CODE (decl
) == TYPE_DECL
)
4970 error ("typedef %qD is initialized (use decltype instead)", decl
);
4971 return error_mark_node
;
4976 if (! toplevel_bindings_p ()
4977 && DECL_EXTERNAL (decl
))
4978 warning (0, "declaration of %q#D has %<extern%> and is initialized",
4980 DECL_EXTERNAL (decl
) = 0;
4981 if (toplevel_bindings_p ())
4982 TREE_STATIC (decl
) = 1;
4984 alias
= lookup_attribute ("alias", DECL_ATTRIBUTES (decl
)) != 0;
4986 if (alias
&& TREE_CODE (decl
) == FUNCTION_DECL
)
4987 record_key_method_defined (decl
);
4989 /* If this is a typedef that names the class for linkage purposes
4990 (7.1.3p8), apply any attributes directly to the type. */
4991 if (TREE_CODE (decl
) == TYPE_DECL
4992 && OVERLOAD_TYPE_P (TREE_TYPE (decl
))
4993 && decl
== TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl
))))
4994 flags
= ATTR_FLAG_TYPE_IN_PLACE
;
4998 /* Set attributes here so if duplicate decl, will have proper attributes. */
4999 cplus_decl_attributes (&decl
, attributes
, flags
);
5001 /* Dllimported symbols cannot be defined. Static data members (which
5002 can be initialized in-class and dllimported) go through grokfield,
5003 not here, so we don't need to exclude those decls when checking for
5005 if (initialized
&& DECL_DLLIMPORT_P (decl
))
5007 error ("definition of %q#D is marked %<dllimport%>", decl
);
5008 DECL_DLLIMPORT_P (decl
) = 0;
5011 /* If #pragma weak was used, mark the decl weak now. */
5012 if (!processing_template_decl
)
5013 maybe_apply_pragma_weak (decl
);
5015 if (TREE_CODE (decl
) == FUNCTION_DECL
5016 && DECL_DECLARED_INLINE_P (decl
)
5017 && DECL_UNINLINABLE (decl
)
5018 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl
)))
5019 warning_at (DECL_SOURCE_LOCATION (decl
), 0,
5020 "inline function %qD given attribute noinline", decl
);
5022 if (TYPE_P (context
) && COMPLETE_TYPE_P (complete_type (context
)))
5024 bool this_tmpl
= (processing_template_decl
5025 > template_class_depth (context
));
5028 tree field
= lookup_field (context
, DECL_NAME (decl
), 0, false);
5029 if (field
== NULL_TREE
5030 || !(VAR_P (field
) || variable_template_p (field
)))
5031 error ("%q+#D is not a static data member of %q#T", decl
, context
);
5032 else if (variable_template_p (field
) && !this_tmpl
)
5034 if (DECL_LANG_SPECIFIC (decl
)
5035 && DECL_TEMPLATE_SPECIALIZATION (decl
))
5036 /* OK, specialization was already checked. */;
5039 error_at (DECL_SOURCE_LOCATION (decl
),
5040 "non-member-template declaration of %qD", decl
);
5041 inform (DECL_SOURCE_LOCATION (field
), "does not match "
5042 "member template declaration here");
5043 return error_mark_node
;
5048 if (variable_template_p (field
))
5049 field
= DECL_TEMPLATE_RESULT (field
);
5051 if (DECL_CONTEXT (field
) != context
)
5053 if (!same_type_p (DECL_CONTEXT (field
), context
))
5054 permerror (input_location
, "ISO C++ does not permit %<%T::%D%> "
5055 "to be defined as %<%T::%D%>",
5056 DECL_CONTEXT (field
), DECL_NAME (decl
),
5057 context
, DECL_NAME (decl
));
5058 DECL_CONTEXT (decl
) = DECL_CONTEXT (field
);
5060 /* Static data member are tricky; an in-class initialization
5061 still doesn't provide a definition, so the in-class
5062 declaration will have DECL_EXTERNAL set, but will have an
5063 initialization. Thus, duplicate_decls won't warn
5064 about this situation, and so we check here. */
5065 if (initialized
&& DECL_INITIALIZED_IN_CLASS_P (field
))
5066 error ("duplicate initialization of %qD", decl
);
5067 field
= duplicate_decls (decl
, field
,
5068 /*newdecl_is_friend=*/false);
5069 if (field
== error_mark_node
)
5070 return error_mark_node
;
5077 tree field
= check_classfn (context
, decl
,
5079 ? current_template_parms
5081 if (field
&& field
!= error_mark_node
5082 && duplicate_decls (decl
, field
,
5083 /*newdecl_is_friend=*/false))
5087 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
5088 DECL_IN_AGGR_P (decl
) = 0;
5089 /* Do not mark DECL as an explicit specialization if it was not
5090 already marked as an instantiation; a declaration should
5091 never be marked as a specialization unless we know what
5092 template is being specialized. */
5093 if (DECL_LANG_SPECIFIC (decl
) && DECL_USE_TEMPLATE (decl
))
5095 SET_DECL_TEMPLATE_SPECIALIZATION (decl
);
5096 if (TREE_CODE (decl
) == FUNCTION_DECL
)
5097 DECL_COMDAT (decl
) = (TREE_PUBLIC (decl
)
5098 && DECL_DECLARED_INLINE_P (decl
));
5100 DECL_COMDAT (decl
) = false;
5102 /* [temp.expl.spec] An explicit specialization of a static data
5103 member of a template is a definition if the declaration
5104 includes an initializer; otherwise, it is a declaration.
5106 We check for processing_specialization so this only applies
5107 to the new specialization syntax. */
5108 if (!initialized
&& processing_specialization
)
5109 DECL_EXTERNAL (decl
) = 1;
5112 if (DECL_EXTERNAL (decl
) && ! DECL_TEMPLATE_SPECIALIZATION (decl
)
5113 /* Aliases are definitions. */
5115 permerror (input_location
, "declaration of %q#D outside of class is not definition",
5119 was_public
= TREE_PUBLIC (decl
);
5121 /* Enter this declaration into the symbol table. Don't push the plain
5122 VAR_DECL for a variable template. */
5123 if (!template_parm_scope_p ()
5125 decl
= maybe_push_decl (decl
);
5127 if (processing_template_decl
)
5128 decl
= push_template_decl (decl
);
5129 if (decl
== error_mark_node
)
5130 return error_mark_node
;
5133 && DECL_NAMESPACE_SCOPE_P (decl
) && !TREE_PUBLIC (decl
) && !was_public
5134 && !DECL_THIS_STATIC (decl
) && !DECL_ARTIFICIAL (decl
))
5136 /* This is a const variable with implicit 'static'. Set
5137 DECL_THIS_STATIC so we can tell it from variables that are
5138 !TREE_PUBLIC because of the anonymous namespace. */
5139 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl
)) || errorcount
);
5140 DECL_THIS_STATIC (decl
) = 1;
5143 if (current_function_decl
&& VAR_P (decl
)
5144 && DECL_DECLARED_CONSTEXPR_P (current_function_decl
))
5147 if (CP_DECL_THREAD_LOCAL_P (decl
))
5148 error ("%qD declared %<thread_local%> in %<constexpr%> function",
5150 else if (TREE_STATIC (decl
))
5151 error ("%qD declared %<static%> in %<constexpr%> function", decl
);
5155 cp_function_chain
->invalid_constexpr
= true;
5158 if (!processing_template_decl
&& VAR_P (decl
))
5159 start_decl_1 (decl
, initialized
);
5164 /* Process the declaration of a variable DECL. INITIALIZED is true
5165 iff DECL is explicitly initialized. (INITIALIZED is false if the
5166 variable is initialized via an implicitly-called constructor.)
5167 This function must be called for ordinary variables (including, for
5168 example, implicit instantiations of templates), but must not be
5169 called for template declarations. */
5172 start_decl_1 (tree decl
, bool initialized
)
5176 bool aggregate_definition_p
;
5178 gcc_assert (!processing_template_decl
);
5180 if (error_operand_p (decl
))
5183 gcc_assert (VAR_P (decl
));
5185 type
= TREE_TYPE (decl
);
5186 complete_p
= COMPLETE_TYPE_P (type
);
5187 aggregate_definition_p
= MAYBE_CLASS_TYPE_P (type
) && !DECL_EXTERNAL (decl
);
5189 /* If an explicit initializer is present, or if this is a definition
5190 of an aggregate, then we need a complete type at this point.
5191 (Scalars are always complete types, so there is nothing to
5192 check.) This code just sets COMPLETE_P; errors (if necessary)
5193 are issued below. */
5194 if ((initialized
|| aggregate_definition_p
)
5196 && COMPLETE_TYPE_P (complete_type (type
)))
5199 /* We will not yet have set TREE_READONLY on DECL if the type
5200 was "const", but incomplete, before this point. But, now, we
5201 have a complete type, so we can try again. */
5202 cp_apply_type_quals_to_decl (cp_type_quals (type
), decl
);
5206 /* Is it valid for this decl to have an initializer at all? */
5208 /* Don't allow initializations for incomplete types except for
5209 arrays which might be completed by the initialization. */
5211 ; /* A complete type is ok. */
5212 else if (type_uses_auto (type
))
5213 ; /* An auto type is ok. */
5214 else if (TREE_CODE (type
) != ARRAY_TYPE
)
5216 error ("variable %q#D has initializer but incomplete type", decl
);
5217 type
= TREE_TYPE (decl
) = error_mark_node
;
5219 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type
))))
5221 if (DECL_LANG_SPECIFIC (decl
) && DECL_TEMPLATE_INFO (decl
))
5222 error ("elements of array %q#D have incomplete type", decl
);
5223 /* else we already gave an error in start_decl. */
5226 else if (aggregate_definition_p
&& !complete_p
)
5228 if (type_uses_auto (type
))
5229 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (type
));
5232 error ("aggregate %q#D has incomplete type and cannot be defined",
5234 /* Change the type so that assemble_variable will give
5235 DECL an rtl we can live with: (mem (const_int 0)). */
5236 type
= TREE_TYPE (decl
) = error_mark_node
;
5240 /* Create a new scope to hold this declaration if necessary.
5241 Whether or not a new scope is necessary cannot be determined
5242 until after the type has been completed; if the type is a
5243 specialization of a class template it is not until after
5244 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
5245 will be set correctly. */
5246 maybe_push_cleanup_level (type
);
5249 /* Handle initialization of references. DECL, TYPE, and INIT have the
5250 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
5251 but will be set to a new CLEANUP_STMT if a temporary is created
5252 that must be destroyed subsequently.
5254 Returns an initializer expression to use to initialize DECL, or
5255 NULL if the initialization can be performed statically.
5257 Quotes on semantics can be found in ARM 8.4.3. */
5260 grok_reference_init (tree decl
, tree type
, tree init
, int flags
)
5262 if (init
== NULL_TREE
)
5264 if ((DECL_LANG_SPECIFIC (decl
) == 0
5265 || DECL_IN_AGGR_P (decl
) == 0)
5266 && ! DECL_THIS_EXTERN (decl
))
5267 error ("%qD declared as reference but not initialized", decl
);
5271 if (TREE_CODE (init
) == TREE_LIST
)
5272 init
= build_x_compound_expr_from_list (init
, ELK_INIT
,
5273 tf_warning_or_error
);
5275 tree ttype
= TREE_TYPE (type
);
5276 if (TREE_CODE (ttype
) != ARRAY_TYPE
5277 && TREE_CODE (TREE_TYPE (init
)) == ARRAY_TYPE
)
5278 /* Note: default conversion is only called in very special cases. */
5279 init
= decay_conversion (init
, tf_warning_or_error
);
5281 /* check_initializer handles this for non-reference variables, but for
5282 references we need to do it here or the initializer will get the
5283 incomplete array type and confuse later calls to
5284 cp_complete_array_type. */
5285 if (TREE_CODE (ttype
) == ARRAY_TYPE
5286 && TYPE_DOMAIN (ttype
) == NULL_TREE
5287 && (BRACE_ENCLOSED_INITIALIZER_P (init
)
5288 || TREE_CODE (init
) == STRING_CST
))
5290 cp_complete_array_type (&ttype
, init
, false);
5291 if (ttype
!= TREE_TYPE (type
))
5292 type
= cp_build_reference_type (ttype
, TYPE_REF_IS_RVALUE (type
));
5295 /* Convert INIT to the reference type TYPE. This may involve the
5296 creation of a temporary, whose lifetime must be the same as that
5297 of the reference. If so, a DECL_EXPR for the temporary will be
5298 added just after the DECL_EXPR for DECL. That's why we don't set
5299 DECL_INITIAL for local references (instead assigning to them
5300 explicitly); we need to allow the temporary to be initialized
5302 return initialize_reference (type
, init
, flags
,
5303 tf_warning_or_error
);
5306 /* Designated initializers in arrays are not supported in GNU C++.
5307 The parser cannot detect this error since it does not know whether
5308 a given brace-enclosed initializer is for a class type or for an
5309 array. This function checks that CE does not use a designated
5310 initializer. If it does, an error is issued. Returns true if CE
5311 is valid, i.e., does not have a designated initializer. */
5314 check_array_designated_initializer (constructor_elt
*ce
,
5315 unsigned HOST_WIDE_INT index
)
5317 /* Designated initializers for array elements are not supported. */
5320 /* The parser only allows identifiers as designated
5322 if (ce
->index
== error_mark_node
)
5324 error ("name used in a GNU-style designated "
5325 "initializer for an array");
5328 else if (identifier_p (ce
->index
))
5330 error ("name %qD used in a GNU-style designated "
5331 "initializer for an array", ce
->index
);
5335 tree ce_index
= build_expr_type_conversion (WANT_INT
| WANT_ENUM
,
5338 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index
))
5339 && (TREE_CODE (ce_index
= maybe_constant_value (ce_index
))
5342 /* A C99 designator is OK if it matches the current index. */
5343 if (wi::to_wide (ce_index
) == index
)
5346 sorry ("non-trivial designated initializers not supported");
5349 error ("C99 designator %qE is not an integral constant-expression",
5358 /* When parsing `int a[] = {1, 2};' we don't know the size of the
5359 array until we finish parsing the initializer. If that's the
5360 situation we're in, update DECL accordingly. */
5363 maybe_deduce_size_from_array_init (tree decl
, tree init
)
5365 tree type
= TREE_TYPE (decl
);
5367 if (TREE_CODE (type
) == ARRAY_TYPE
5368 && TYPE_DOMAIN (type
) == NULL_TREE
5369 && TREE_CODE (decl
) != TYPE_DECL
)
5371 /* do_default is really a C-ism to deal with tentative definitions.
5372 But let's leave it here to ease the eventual merge. */
5373 int do_default
= !DECL_EXTERNAL (decl
);
5374 tree initializer
= init
? init
: DECL_INITIAL (decl
);
5377 /* Check that there are no designated initializers in INIT, as
5378 those are not supported in GNU C++, and as the middle-end
5379 will crash if presented with a non-numeric designated
5381 if (initializer
&& BRACE_ENCLOSED_INITIALIZER_P (initializer
))
5383 vec
<constructor_elt
, va_gc
> *v
= CONSTRUCTOR_ELTS (initializer
);
5384 constructor_elt
*ce
;
5386 FOR_EACH_VEC_SAFE_ELT (v
, i
, ce
)
5387 if (!check_array_designated_initializer (ce
, i
))
5393 failure
= cp_complete_array_type (&TREE_TYPE (decl
), initializer
,
5397 error_at (EXPR_LOC_OR_LOC (initializer
,
5398 DECL_SOURCE_LOCATION (decl
)),
5399 "initializer fails to determine size of %qD", decl
);
5401 else if (failure
== 2)
5405 error_at (DECL_SOURCE_LOCATION (decl
),
5406 "array size missing in %qD", decl
);
5408 /* If a `static' var's size isn't known, make it extern as
5409 well as static, so it does not get allocated. If it's not
5410 `static', then don't mark it extern; finish_incomplete_decl
5411 will give it a default size and it will get allocated. */
5412 else if (!pedantic
&& TREE_STATIC (decl
) && !TREE_PUBLIC (decl
))
5413 DECL_EXTERNAL (decl
) = 1;
5415 else if (failure
== 3)
5417 error_at (DECL_SOURCE_LOCATION (decl
),
5418 "zero-size array %qD", decl
);
5422 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl
)), decl
);
5424 relayout_decl (decl
);
5428 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
5429 any appropriate error messages regarding the layout. */
5432 layout_var_decl (tree decl
)
5436 type
= TREE_TYPE (decl
);
5437 if (type
== error_mark_node
)
5440 /* If we haven't already laid out this declaration, do so now.
5441 Note that we must not call complete type for an external object
5442 because it's type might involve templates that we are not
5443 supposed to instantiate yet. (And it's perfectly valid to say
5444 `extern X x' for some incomplete type `X'.) */
5445 if (!DECL_EXTERNAL (decl
))
5446 complete_type (type
);
5447 if (!DECL_SIZE (decl
)
5448 && TREE_TYPE (decl
) != error_mark_node
5449 && complete_or_array_type_p (type
))
5450 layout_decl (decl
, 0);
5452 if (!DECL_EXTERNAL (decl
) && DECL_SIZE (decl
) == NULL_TREE
)
5454 /* An automatic variable with an incomplete type: that is an error.
5455 Don't talk about array types here, since we took care of that
5456 message in grokdeclarator. */
5457 error_at (DECL_SOURCE_LOCATION (decl
),
5458 "storage size of %qD isn%'t known", decl
);
5459 TREE_TYPE (decl
) = error_mark_node
;
5462 /* Keep this code around in case we later want to control debug info
5463 based on whether a type is "used". (jason 1999-11-11) */
5465 else if (!DECL_EXTERNAL (decl
) && MAYBE_CLASS_TYPE_P (ttype
))
5466 /* Let debugger know it should output info for this type. */
5467 note_debug_info_needed (ttype
);
5469 if (TREE_STATIC (decl
) && DECL_CLASS_SCOPE_P (decl
))
5470 note_debug_info_needed (DECL_CONTEXT (decl
));
5473 if ((DECL_EXTERNAL (decl
) || TREE_STATIC (decl
))
5474 && DECL_SIZE (decl
) != NULL_TREE
5475 && ! TREE_CONSTANT (DECL_SIZE (decl
)))
5477 if (TREE_CODE (DECL_SIZE (decl
)) == INTEGER_CST
)
5478 constant_expression_warning (DECL_SIZE (decl
));
5481 error_at (DECL_SOURCE_LOCATION (decl
),
5482 "storage size of %qD isn%'t constant", decl
);
5483 TREE_TYPE (decl
) = error_mark_node
;
5488 /* If a local static variable is declared in an inline function, or if
5489 we have a weak definition, we must endeavor to create only one
5490 instance of the variable at link-time. */
5493 maybe_commonize_var (tree decl
)
5495 /* Static data in a function with comdat linkage also has comdat
5497 if ((TREE_STATIC (decl
)
5498 /* Don't mess with __FUNCTION__. */
5499 && ! DECL_ARTIFICIAL (decl
)
5500 && DECL_FUNCTION_SCOPE_P (decl
)
5501 && vague_linkage_p (DECL_CONTEXT (decl
)))
5502 || (TREE_PUBLIC (decl
) && DECL_INLINE_VAR_P (decl
)))
5506 /* With weak symbols, we simply make the variable COMDAT;
5507 that will cause copies in multiple translations units to
5509 comdat_linkage (decl
);
5513 if (DECL_INITIAL (decl
) == NULL_TREE
5514 || DECL_INITIAL (decl
) == error_mark_node
)
5516 /* Without weak symbols, we can use COMMON to merge
5517 uninitialized variables. */
5518 TREE_PUBLIC (decl
) = 1;
5519 DECL_COMMON (decl
) = 1;
5523 /* While for initialized variables, we must use internal
5524 linkage -- which means that multiple copies will not
5526 TREE_PUBLIC (decl
) = 0;
5527 DECL_COMMON (decl
) = 0;
5529 if (DECL_INLINE_VAR_P (decl
))
5530 msg
= G_("sorry: semantics of inline variable "
5531 "%q#D are wrong (you%'ll wind up with "
5532 "multiple copies)");
5534 msg
= G_("sorry: semantics of inline function "
5535 "static data %q#D are wrong (you%'ll wind "
5536 "up with multiple copies)");
5537 if (warning_at (DECL_SOURCE_LOCATION (decl
), 0,
5539 inform (DECL_SOURCE_LOCATION (decl
),
5540 "you can work around this by removing the initializer");
5546 /* Issue an error message if DECL is an uninitialized const variable. */
5549 check_for_uninitialized_const_var (tree decl
)
5551 tree type
= strip_array_types (TREE_TYPE (decl
));
5553 /* ``Unless explicitly declared extern, a const object does not have
5554 external linkage and must be initialized. ($8.4; $12.1)'' ARM
5557 && TREE_CODE (type
) != REFERENCE_TYPE
5558 && (CP_TYPE_CONST_P (type
) || var_in_constexpr_fn (decl
))
5559 && !DECL_INITIAL (decl
))
5561 tree field
= default_init_uninitialized_part (type
);
5565 if (CP_TYPE_CONST_P (type
))
5566 permerror (DECL_SOURCE_LOCATION (decl
),
5567 "uninitialized const %qD", decl
);
5570 if (!is_instantiation_of_constexpr (current_function_decl
))
5571 error_at (DECL_SOURCE_LOCATION (decl
),
5572 "uninitialized variable %qD in %<constexpr%> function",
5574 cp_function_chain
->invalid_constexpr
= true;
5577 if (CLASS_TYPE_P (type
))
5579 tree defaulted_ctor
;
5581 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type
)),
5582 "%q#T has no user-provided default constructor", type
);
5583 defaulted_ctor
= in_class_defaulted_default_constructor (type
);
5585 inform (DECL_SOURCE_LOCATION (defaulted_ctor
),
5586 "constructor is not user-provided because it is "
5587 "explicitly defaulted in the class body");
5588 inform (DECL_SOURCE_LOCATION (field
),
5589 "and the implicitly-defined constructor does not "
5590 "initialize %q#D", field
);
5595 /* Structure holding the current initializer being processed by reshape_init.
5596 CUR is a pointer to the current element being processed, END is a pointer
5597 after the last element present in the initializer. */
5600 constructor_elt
*cur
;
5601 constructor_elt
*end
;
5604 static tree
reshape_init_r (tree
, reshape_iter
*, bool, tsubst_flags_t
);
5606 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
5607 returned is the next FIELD_DECL (possibly FIELD itself) that can be
5608 initialized. If there are no more such fields, the return value
5612 next_initializable_field (tree field
)
5615 && (TREE_CODE (field
) != FIELD_DECL
5616 || (DECL_C_BIT_FIELD (field
) && !DECL_NAME (field
))
5617 || (DECL_ARTIFICIAL (field
)
5618 && !(cxx_dialect
>= cxx17
&& DECL_FIELD_IS_BASE (field
)))))
5619 field
= DECL_CHAIN (field
);
5624 /* Return true for [dcl.init.list] direct-list-initialization from
5625 single element of enumeration with a fixed underlying type. */
5628 is_direct_enum_init (tree type
, tree init
)
5630 if (cxx_dialect
>= cxx17
5631 && TREE_CODE (type
) == ENUMERAL_TYPE
5632 && ENUM_FIXED_UNDERLYING_TYPE_P (type
)
5633 && TREE_CODE (init
) == CONSTRUCTOR
5634 && CONSTRUCTOR_IS_DIRECT_INIT (init
)
5635 && CONSTRUCTOR_NELTS (init
) == 1)
5640 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5641 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5642 INTEGER_CST representing the size of the array minus one (the maximum index),
5643 or NULL_TREE if the array was declared without specifying the size. D is
5644 the iterator within the constructor. */
5647 reshape_init_array_1 (tree elt_type
, tree max_index
, reshape_iter
*d
,
5648 tsubst_flags_t complain
)
5651 bool sized_array_p
= (max_index
&& TREE_CONSTANT (max_index
));
5652 unsigned HOST_WIDE_INT max_index_cst
= 0;
5653 unsigned HOST_WIDE_INT index
;
5655 /* The initializer for an array is always a CONSTRUCTOR. */
5656 new_init
= build_constructor (init_list_type_node
, NULL
);
5660 /* Minus 1 is used for zero sized arrays. */
5661 if (integer_all_onesp (max_index
))
5664 if (tree_fits_uhwi_p (max_index
))
5665 max_index_cst
= tree_to_uhwi (max_index
);
5666 /* sizetype is sign extended, not zero extended. */
5668 max_index_cst
= tree_to_uhwi (fold_convert (size_type_node
, max_index
));
5671 /* Loop until there are no more initializers. */
5673 d
->cur
!= d
->end
&& (!sized_array_p
|| index
<= max_index_cst
);
5677 constructor_elt
*old_cur
= d
->cur
;
5679 check_array_designated_initializer (d
->cur
, index
);
5680 elt_init
= reshape_init_r (elt_type
, d
, /*first_initializer_p=*/false,
5682 if (elt_init
== error_mark_node
)
5683 return error_mark_node
;
5684 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init
),
5685 size_int (index
), elt_init
);
5686 if (!TREE_CONSTANT (elt_init
))
5687 TREE_CONSTANT (new_init
) = false;
5689 /* This can happen with an invalid initializer (c++/54501). */
5690 if (d
->cur
== old_cur
&& !sized_array_p
)
5697 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5698 Parameters are the same of reshape_init_r. */
5701 reshape_init_array (tree type
, reshape_iter
*d
, tsubst_flags_t complain
)
5703 tree max_index
= NULL_TREE
;
5705 gcc_assert (TREE_CODE (type
) == ARRAY_TYPE
);
5707 if (TYPE_DOMAIN (type
))
5708 max_index
= array_type_nelts (type
);
5710 return reshape_init_array_1 (TREE_TYPE (type
), max_index
, d
, complain
);
5713 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5714 Parameters are the same of reshape_init_r. */
5717 reshape_init_vector (tree type
, reshape_iter
*d
, tsubst_flags_t complain
)
5719 tree max_index
= NULL_TREE
;
5721 gcc_assert (VECTOR_TYPE_P (type
));
5723 if (COMPOUND_LITERAL_P (d
->cur
->value
))
5725 tree value
= d
->cur
->value
;
5726 if (!same_type_p (TREE_TYPE (value
), type
))
5728 if (complain
& tf_error
)
5729 error ("invalid type %qT as initializer for a vector of type %qT",
5730 TREE_TYPE (d
->cur
->value
), type
);
5731 value
= error_mark_node
;
5737 /* For a vector, we initialize it as an array of the appropriate size. */
5738 if (VECTOR_TYPE_P (type
))
5739 max_index
= size_int (TYPE_VECTOR_SUBPARTS (type
) - 1);
5741 return reshape_init_array_1 (TREE_TYPE (type
), max_index
, d
, complain
);
5744 /* Subroutine of reshape_init_r, processes the initializers for classes
5745 or union. Parameters are the same of reshape_init_r. */
5748 reshape_init_class (tree type
, reshape_iter
*d
, bool first_initializer_p
,
5749 tsubst_flags_t complain
)
5754 gcc_assert (CLASS_TYPE_P (type
));
5756 /* The initializer for a class is always a CONSTRUCTOR. */
5757 new_init
= build_constructor (init_list_type_node
, NULL
);
5758 field
= next_initializable_field (TYPE_FIELDS (type
));
5764 An initializer for an aggregate member that is an
5765 empty class shall have the form of an empty
5766 initializer-list {}. */
5767 if (!first_initializer_p
)
5769 if (complain
& tf_error
)
5770 error ("initializer for %qT must be brace-enclosed", type
);
5771 return error_mark_node
;
5776 /* Loop through the initializable fields, gathering initializers. */
5777 while (d
->cur
!= d
->end
)
5780 constructor_elt
*old_cur
= d
->cur
;
5782 /* Handle designated initializers, as an extension. */
5785 if (d
->cur
->index
== error_mark_node
)
5786 return error_mark_node
;
5788 if (TREE_CODE (d
->cur
->index
) == FIELD_DECL
)
5789 /* We already reshaped this. */
5790 gcc_assert (d
->cur
->index
== field
);
5791 else if (TREE_CODE (d
->cur
->index
) == IDENTIFIER_NODE
)
5792 field
= get_class_binding (type
, d
->cur
->index
, false);
5795 if (complain
& tf_error
)
5796 error ("%<[%E] =%> used in a GNU-style designated initializer"
5797 " for class %qT", d
->cur
->index
, type
);
5798 return error_mark_node
;
5801 if (!field
|| TREE_CODE (field
) != FIELD_DECL
)
5803 if (complain
& tf_error
)
5804 error ("%qT has no non-static data member named %qD", type
,
5806 return error_mark_node
;
5810 /* If we processed all the member of the class, we are done. */
5814 field_init
= reshape_init_r (TREE_TYPE (field
), d
,
5815 /*first_initializer_p=*/false, complain
);
5816 if (field_init
== error_mark_node
)
5817 return error_mark_node
;
5819 if (d
->cur
== old_cur
&& d
->cur
->index
)
5821 /* This can happen with an invalid initializer for a flexible
5822 array member (c++/54441). */
5823 if (complain
& tf_error
)
5824 error ("invalid initializer for %q#D", field
);
5825 return error_mark_node
;
5828 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init
), field
, field_init
);
5832 When a union is initialized with a brace-enclosed
5833 initializer, the braces shall only contain an
5834 initializer for the first member of the union. */
5835 if (TREE_CODE (type
) == UNION_TYPE
)
5838 field
= next_initializable_field (DECL_CHAIN (field
));
5844 /* Subroutine of reshape_init_r. We're in a context where C99 initializer
5845 designators are not valid; either complain or return true to indicate
5846 that reshape_init_r should return error_mark_node. */
5849 has_designator_problem (reshape_iter
*d
, tsubst_flags_t complain
)
5853 if (complain
& tf_error
)
5854 error ("C99 designator %qE outside aggregate initializer",
5862 /* Subroutine of reshape_init, which processes a single initializer (part of
5863 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5864 iterator within the CONSTRUCTOR which points to the initializer to process.
5865 FIRST_INITIALIZER_P is true if this is the first initializer of the
5866 outermost CONSTRUCTOR node. */
5869 reshape_init_r (tree type
, reshape_iter
*d
, bool first_initializer_p
,
5870 tsubst_flags_t complain
)
5872 tree init
= d
->cur
->value
;
5874 if (error_operand_p (init
))
5875 return error_mark_node
;
5877 if (first_initializer_p
&& !CP_AGGREGATE_TYPE_P (type
)
5878 && has_designator_problem (d
, complain
))
5879 return error_mark_node
;
5881 if (TREE_CODE (type
) == COMPLEX_TYPE
)
5883 /* A complex type can be initialized from one or two initializers,
5884 but braces are not elided. */
5886 if (BRACE_ENCLOSED_INITIALIZER_P (init
))
5888 if (CONSTRUCTOR_NELTS (init
) > 2)
5890 if (complain
& tf_error
)
5891 error ("too many initializers for %qT", type
);
5893 return error_mark_node
;
5896 else if (first_initializer_p
&& d
->cur
!= d
->end
)
5898 vec
<constructor_elt
, va_gc
> *v
= 0;
5899 CONSTRUCTOR_APPEND_ELT (v
, NULL_TREE
, init
);
5900 CONSTRUCTOR_APPEND_ELT (v
, NULL_TREE
, d
->cur
->value
);
5901 if (has_designator_problem (d
, complain
))
5902 return error_mark_node
;
5904 init
= build_constructor (init_list_type_node
, v
);
5909 /* A non-aggregate type is always initialized with a single
5911 if (!CP_AGGREGATE_TYPE_P (type
))
5913 /* It is invalid to initialize a non-aggregate type with a
5914 brace-enclosed initializer before C++0x.
5915 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5916 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5917 a CONSTRUCTOR (with a record type). */
5918 if (TREE_CODE (init
) == CONSTRUCTOR
5919 /* Don't complain about a capture-init. */
5920 && !CONSTRUCTOR_IS_DIRECT_INIT (init
)
5921 && BRACE_ENCLOSED_INITIALIZER_P (init
)) /* p7626.C */
5923 if (SCALAR_TYPE_P (type
))
5925 if (cxx_dialect
< cxx11
5926 /* Isn't value-initialization. */
5927 || CONSTRUCTOR_NELTS (init
) > 0)
5929 if (complain
& tf_error
)
5930 error ("braces around scalar initializer for type %qT",
5932 init
= error_mark_node
;
5936 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS
);
5943 /* "If T is a class type and the initializer list has a single element of
5944 type cv U, where U is T or a class derived from T, the object is
5945 initialized from that element." Even if T is an aggregate. */
5946 if (cxx_dialect
>= cxx11
&& (CLASS_TYPE_P (type
) || VECTOR_TYPE_P (type
))
5947 && first_initializer_p
5948 && d
->end
- d
->cur
== 1
5949 && reference_related_p (type
, TREE_TYPE (init
)))
5957 All implicit type conversions (clause _conv_) are considered when
5958 initializing the aggregate member with an initializer from an
5959 initializer-list. If the initializer can initialize a member,
5960 the member is initialized. Otherwise, if the member is itself a
5961 non-empty subaggregate, brace elision is assumed and the
5962 initializer is considered for the initialization of the first
5963 member of the subaggregate. */
5964 if (TREE_CODE (init
) != CONSTRUCTOR
5965 /* But don't try this for the first initializer, since that would be
5966 looking through the outermost braces; A a2 = { a1 }; is not a
5967 valid aggregate initialization. */
5968 && !first_initializer_p
5969 && (same_type_ignoring_top_level_qualifiers_p (type
, TREE_TYPE (init
))
5970 || can_convert_arg (type
, TREE_TYPE (init
), init
, LOOKUP_NORMAL
,
5977 /* [dcl.init.string]
5979 A char array (whether plain char, signed char, or unsigned char)
5980 can be initialized by a string-literal (optionally enclosed in
5981 braces); a wchar_t array can be initialized by a wide
5982 string-literal (optionally enclosed in braces). */
5983 if (TREE_CODE (type
) == ARRAY_TYPE
5984 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type
))))
5986 tree str_init
= init
;
5988 /* Strip one level of braces if and only if they enclose a single
5989 element (as allowed by [dcl.init.string]). */
5990 if (!first_initializer_p
5991 && TREE_CODE (str_init
) == CONSTRUCTOR
5992 && CONSTRUCTOR_NELTS (str_init
) == 1)
5994 str_init
= (*CONSTRUCTOR_ELTS (str_init
))[0].value
;
5997 /* If it's a string literal, then it's the initializer for the array
5998 as a whole. Otherwise, continue with normal initialization for
5999 array types (one value per array element). */
6000 if (TREE_CODE (str_init
) == STRING_CST
)
6002 if (has_designator_problem (d
, complain
))
6003 return error_mark_node
;
6009 /* The following cases are about aggregates. If we are not within a full
6010 initializer already, and there is not a CONSTRUCTOR, it means that there
6011 is a missing set of braces (that is, we are processing the case for
6012 which reshape_init exists). */
6013 if (!first_initializer_p
)
6015 if (TREE_CODE (init
) == CONSTRUCTOR
)
6017 if (TREE_TYPE (init
) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init
)))
6018 /* There is no need to reshape pointer-to-member function
6019 initializers, as they are always constructed correctly
6020 by the front end. */
6022 else if (COMPOUND_LITERAL_P (init
))
6023 /* For a nested compound literal, there is no need to reshape since
6024 brace elision is not allowed. Even if we decided to allow it,
6025 we should add a call to reshape_init in finish_compound_literal,
6026 before calling digest_init, so changing this code would still
6027 not be necessary. */
6028 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init
));
6032 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init
));
6033 return reshape_init (type
, init
, complain
);
6037 if (complain
& tf_warning
)
6038 warning (OPT_Wmissing_braces
,
6039 "missing braces around initializer for %qT",
6043 /* Dispatch to specialized routines. */
6044 if (CLASS_TYPE_P (type
))
6045 return reshape_init_class (type
, d
, first_initializer_p
, complain
);
6046 else if (TREE_CODE (type
) == ARRAY_TYPE
)
6047 return reshape_init_array (type
, d
, complain
);
6048 else if (VECTOR_TYPE_P (type
))
6049 return reshape_init_vector (type
, d
, complain
);
6054 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
6055 brace-enclosed aggregate initializer.
6057 INIT is the CONSTRUCTOR containing the list of initializers describing
6058 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
6059 It may not presently match the shape of the TYPE; for example:
6061 struct S { int a; int b; };
6062 struct S a[] = { 1, 2, 3, 4 };
6064 Here INIT will hold a vector of four elements, rather than a
6065 vector of two elements, each itself a vector of two elements. This
6066 routine transforms INIT from the former form into the latter. The
6067 revised CONSTRUCTOR node is returned. */
6070 reshape_init (tree type
, tree init
, tsubst_flags_t complain
)
6072 vec
<constructor_elt
, va_gc
> *v
;
6076 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init
));
6078 v
= CONSTRUCTOR_ELTS (init
);
6080 /* An empty constructor does not need reshaping, and it is always a valid
6082 if (vec_safe_is_empty (v
))
6085 /* Handle [dcl.init.list] direct-list-initialization from
6086 single element of enumeration with a fixed underlying type. */
6087 if (is_direct_enum_init (type
, init
))
6089 tree elt
= CONSTRUCTOR_ELT (init
, 0)->value
;
6090 type
= cv_unqualified (type
);
6091 if (check_narrowing (ENUM_UNDERLYING_TYPE (type
), elt
, complain
))
6093 warning_sentinel
w (warn_useless_cast
);
6094 return cp_build_c_cast (type
, elt
, tf_warning_or_error
);
6097 return error_mark_node
;
6100 /* Recurse on this CONSTRUCTOR. */
6102 d
.end
= d
.cur
+ v
->length ();
6104 new_init
= reshape_init_r (type
, &d
, true, complain
);
6105 if (new_init
== error_mark_node
)
6106 return error_mark_node
;
6108 /* Make sure all the element of the constructor were used. Otherwise,
6109 issue an error about exceeding initializers. */
6112 if (complain
& tf_error
)
6113 error ("too many initializers for %qT", type
);
6114 return error_mark_node
;
6117 if (CONSTRUCTOR_IS_DIRECT_INIT (init
)
6118 && BRACE_ENCLOSED_INITIALIZER_P (new_init
))
6119 CONSTRUCTOR_IS_DIRECT_INIT (new_init
) = true;
6124 /* Verify array initializer. Returns true if errors have been reported. */
6127 check_array_initializer (tree decl
, tree type
, tree init
)
6129 tree element_type
= TREE_TYPE (type
);
6131 /* The array type itself need not be complete, because the
6132 initializer may tell us how many elements are in the array.
6133 But, the elements of the array must be complete. */
6134 if (!COMPLETE_TYPE_P (complete_type (element_type
)))
6137 error_at (DECL_SOURCE_LOCATION (decl
),
6138 "elements of array %q#D have incomplete type", decl
);
6140 error ("elements of array %q#T have incomplete type", type
);
6143 /* A compound literal can't have variable size. */
6145 && ((COMPLETE_TYPE_P (type
) && !TREE_CONSTANT (TYPE_SIZE (type
)))
6146 || !TREE_CONSTANT (TYPE_SIZE (element_type
))))
6148 error ("variable-sized compound literal");
6154 /* Subroutine of check_initializer; args are passed down from that function.
6155 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
6158 build_aggr_init_full_exprs (tree decl
, tree init
, int flags
)
6161 gcc_assert (stmts_are_full_exprs_p ());
6162 return build_aggr_init (decl
, init
, flags
, tf_warning_or_error
);
6165 /* Verify INIT (the initializer for DECL), and record the
6166 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
6167 grok_reference_init.
6169 If the return value is non-NULL, it is an expression that must be
6170 evaluated dynamically to initialize DECL. */
6173 check_initializer (tree decl
, tree init
, int flags
, vec
<tree
, va_gc
> **cleanups
)
6175 tree type
= TREE_TYPE (decl
);
6176 tree init_code
= NULL
;
6179 /* Things that are going to be initialized need to have complete
6181 TREE_TYPE (decl
) = type
= complete_type (TREE_TYPE (decl
));
6183 if (DECL_HAS_VALUE_EXPR_P (decl
))
6185 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
6186 it doesn't have storage to be initialized. */
6187 gcc_assert (init
== NULL_TREE
);
6191 if (type
== error_mark_node
)
6192 /* We will have already complained. */
6195 if (TREE_CODE (type
) == ARRAY_TYPE
)
6197 if (check_array_initializer (decl
, type
, init
))
6200 else if (!COMPLETE_TYPE_P (type
))
6202 error_at (DECL_SOURCE_LOCATION (decl
),
6203 "%q#D has incomplete type", decl
);
6204 TREE_TYPE (decl
) = error_mark_node
;
6208 /* There is no way to make a variable-sized class type in GNU C++. */
6209 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type
)));
6211 if (init
&& BRACE_ENCLOSED_INITIALIZER_P (init
))
6213 int init_len
= CONSTRUCTOR_NELTS (init
);
6214 if (SCALAR_TYPE_P (type
))
6218 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS
);
6219 init
= build_zero_init (type
, NULL_TREE
, false);
6221 else if (init_len
!= 1 && TREE_CODE (type
) != COMPLEX_TYPE
)
6223 error_at (EXPR_LOC_OR_LOC (init
, DECL_SOURCE_LOCATION (decl
)),
6224 "scalar object %qD requires one element in "
6225 "initializer", decl
);
6226 TREE_TYPE (decl
) = error_mark_node
;
6232 if (TREE_CODE (decl
) == CONST_DECL
)
6234 gcc_assert (TREE_CODE (type
) != REFERENCE_TYPE
);
6236 DECL_INITIAL (decl
) = init
;
6238 gcc_assert (init
!= NULL_TREE
);
6241 else if (!init
&& DECL_REALLY_EXTERN (decl
))
6243 else if (init
|| type_build_ctor_call (type
)
6244 || TREE_CODE (type
) == REFERENCE_TYPE
)
6246 if (TREE_CODE (type
) == REFERENCE_TYPE
)
6248 init
= grok_reference_init (decl
, type
, init
, flags
);
6249 flags
|= LOOKUP_ALREADY_DIGESTED
;
6252 check_for_uninitialized_const_var (decl
);
6253 /* Do not reshape constructors of vectors (they don't need to be
6255 else if (BRACE_ENCLOSED_INITIALIZER_P (init
))
6257 if (is_std_init_list (type
))
6259 init
= perform_implicit_conversion (type
, init
,
6260 tf_warning_or_error
);
6261 flags
|= LOOKUP_ALREADY_DIGESTED
;
6263 else if (TYPE_NON_AGGREGATE_CLASS (type
))
6265 /* Don't reshape if the class has constructors. */
6266 if (cxx_dialect
== cxx98
)
6267 error_at (EXPR_LOC_OR_LOC (init
, DECL_SOURCE_LOCATION (decl
)),
6268 "in C++98 %qD must be initialized by "
6269 "constructor, not by %<{...}%>",
6272 else if (VECTOR_TYPE_P (type
) && TYPE_VECTOR_OPAQUE (type
))
6274 error ("opaque vector types cannot be initialized");
6275 init
= error_mark_node
;
6279 init
= reshape_init (type
, init
, tf_warning_or_error
);
6280 flags
|= LOOKUP_NO_NARROWING
;
6283 else if (TREE_CODE (init
) == TREE_LIST
6284 && TREE_TYPE (init
) != unknown_type_node
6285 && !MAYBE_CLASS_TYPE_P (type
))
6287 gcc_assert (TREE_CODE (decl
) != RESULT_DECL
);
6289 /* We get here with code like `int a (2);' */
6290 init
= build_x_compound_expr_from_list (init
, ELK_INIT
,
6291 tf_warning_or_error
);
6294 /* If DECL has an array type without a specific bound, deduce the
6295 array size from the initializer. */
6296 maybe_deduce_size_from_array_init (decl
, init
);
6297 type
= TREE_TYPE (decl
);
6298 if (type
== error_mark_node
)
6301 if (((type_build_ctor_call (type
) || CLASS_TYPE_P (type
))
6302 && !(flags
& LOOKUP_ALREADY_DIGESTED
)
6303 && !(init
&& BRACE_ENCLOSED_INITIALIZER_P (init
)
6304 && CP_AGGREGATE_TYPE_P (type
)
6305 && (CLASS_TYPE_P (type
)
6306 || !TYPE_NEEDS_CONSTRUCTING (type
)
6307 || type_has_extended_temps (type
))))
6308 || (DECL_DECOMPOSITION_P (decl
) && TREE_CODE (type
) == ARRAY_TYPE
))
6310 init_code
= build_aggr_init_full_exprs (decl
, init
, flags
);
6312 /* A constructor call is a non-trivial initializer even if
6313 it isn't explicitly written. */
6314 if (TREE_SIDE_EFFECTS (init_code
))
6315 DECL_NONTRIVIALLY_INITIALIZED_P (decl
) = true;
6317 /* If this is a constexpr initializer, expand_default_init will
6318 have returned an INIT_EXPR rather than a CALL_EXPR. In that
6319 case, pull the initializer back out and pass it down into
6320 store_init_value. */
6321 while (TREE_CODE (init_code
) == EXPR_STMT
6322 || TREE_CODE (init_code
) == CONVERT_EXPR
)
6323 init_code
= TREE_OPERAND (init_code
, 0);
6324 if (TREE_CODE (init_code
) == INIT_EXPR
)
6326 init
= TREE_OPERAND (init_code
, 1);
6327 init_code
= NULL_TREE
;
6328 /* Don't call digest_init; it's unnecessary and will complain
6329 about aggregate initialization of non-aggregate classes. */
6330 flags
|= LOOKUP_ALREADY_DIGESTED
;
6332 else if (DECL_DECLARED_CONSTEXPR_P (decl
))
6334 /* Declared constexpr, but no suitable initializer; massage
6335 init appropriately so we can pass it into store_init_value
6337 if (CLASS_TYPE_P (type
)
6338 && (!init
|| TREE_CODE (init
) == TREE_LIST
))
6340 init
= build_functional_cast (type
, init
, tf_none
);
6341 if (TREE_CODE (init
) == TARGET_EXPR
)
6342 TARGET_EXPR_DIRECT_INIT_P (init
) = true;
6344 init_code
= NULL_TREE
;
6350 if (init
&& TREE_CODE (init
) != TREE_VEC
)
6352 /* In aggregate initialization of a variable, each element
6353 initialization is a full-expression because there is no
6354 enclosing expression. */
6355 gcc_assert (stmts_are_full_exprs_p ());
6357 init_code
= store_init_value (decl
, init
, cleanups
, flags
);
6359 if (pedantic
&& TREE_CODE (type
) == ARRAY_TYPE
6360 && DECL_INITIAL (decl
)
6361 && TREE_CODE (DECL_INITIAL (decl
)) == STRING_CST
6362 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl
)))
6363 warning_at (EXPR_LOC_OR_LOC (DECL_INITIAL (decl
),
6364 DECL_SOURCE_LOCATION (decl
)),
6365 0, "array %qD initialized by parenthesized "
6366 "string literal %qE",
6367 decl
, DECL_INITIAL (decl
));
6373 if (CLASS_TYPE_P (core_type
= strip_array_types (type
))
6374 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type
)
6375 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type
)))
6376 diagnose_uninitialized_cst_or_ref_member (core_type
, /*using_new=*/false,
6379 check_for_uninitialized_const_var (decl
);
6382 if (init
&& init
!= error_mark_node
)
6383 init_code
= build2 (INIT_EXPR
, type
, decl
, init
);
6387 /* We might have set these in cp_finish_decl. */
6388 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl
) = false;
6389 TREE_CONSTANT (decl
) = false;
6393 && (DECL_IN_AGGR_P (decl
) && !DECL_VAR_DECLARED_INLINE_P (decl
)))
6395 static int explained
= 0;
6397 if (cxx_dialect
< cxx11
)
6398 error ("initializer invalid for static member with constructor");
6399 else if (cxx_dialect
< cxx17
)
6400 error ("non-constant in-class initialization invalid for static "
6401 "member %qD", decl
);
6403 error ("non-constant in-class initialization invalid for non-inline "
6404 "static member %qD", decl
);
6407 inform (input_location
,
6408 "(an out of class initialization is required)");
6417 /* If DECL is not a local variable, give it RTL. */
6420 make_rtl_for_nonlocal_decl (tree decl
, tree init
, const char* asmspec
)
6422 int toplev
= toplevel_bindings_p ();
6425 /* Set the DECL_ASSEMBLER_NAME for the object. */
6428 /* The `register' keyword, when used together with an
6429 asm-specification, indicates that the variable should be
6430 placed in a particular register. */
6431 if (VAR_P (decl
) && DECL_REGISTER (decl
))
6433 set_user_assembler_name (decl
, asmspec
);
6434 DECL_HARD_REGISTER (decl
) = 1;
6438 if (TREE_CODE (decl
) == FUNCTION_DECL
6439 && DECL_BUILT_IN_CLASS (decl
) == BUILT_IN_NORMAL
)
6440 set_builtin_user_assembler_name (decl
, asmspec
);
6441 set_user_assembler_name (decl
, asmspec
);
6445 /* Handle non-variables up front. */
6448 rest_of_decl_compilation (decl
, toplev
, at_eof
);
6452 /* If we see a class member here, it should be a static data
6454 if (DECL_LANG_SPECIFIC (decl
) && DECL_IN_AGGR_P (decl
))
6456 gcc_assert (TREE_STATIC (decl
));
6457 /* An in-class declaration of a static data member should be
6458 external; it is only a declaration, and not a definition. */
6459 if (init
== NULL_TREE
)
6460 gcc_assert (DECL_EXTERNAL (decl
)
6461 || !TREE_PUBLIC (decl
)
6462 || DECL_INLINE_VAR_P (decl
));
6465 /* We don't create any RTL for local variables. */
6466 if (DECL_FUNCTION_SCOPE_P (decl
) && !TREE_STATIC (decl
))
6469 /* We defer emission of local statics until the corresponding
6470 DECL_EXPR is expanded. But with constexpr its function might never
6471 be expanded, so go ahead and tell cgraph about the variable now. */
6472 defer_p
= ((DECL_FUNCTION_SCOPE_P (decl
)
6473 && !var_in_maybe_constexpr_fn (decl
))
6474 || DECL_VIRTUAL_P (decl
));
6476 /* Defer template instantiations. */
6477 if (DECL_LANG_SPECIFIC (decl
)
6478 && DECL_IMPLICIT_INSTANTIATION (decl
))
6481 /* If we're not deferring, go ahead and assemble the variable. */
6483 rest_of_decl_compilation (decl
, toplev
, at_eof
);
6486 /* walk_tree helper for wrap_temporary_cleanups, below. */
6489 wrap_cleanups_r (tree
*stmt_p
, int *walk_subtrees
, void *data
)
6491 /* Stop at types or full-expression boundaries. */
6492 if (TYPE_P (*stmt_p
)
6493 || TREE_CODE (*stmt_p
) == CLEANUP_POINT_EXPR
)
6499 if (TREE_CODE (*stmt_p
) == TARGET_EXPR
)
6501 tree guard
= (tree
)data
;
6502 tree tcleanup
= TARGET_EXPR_CLEANUP (*stmt_p
);
6504 tcleanup
= build2 (TRY_CATCH_EXPR
, void_type_node
, tcleanup
, guard
);
6505 /* Tell honor_protect_cleanup_actions to handle this as a separate
6507 TRY_CATCH_IS_CLEANUP (tcleanup
) = 1;
6509 TARGET_EXPR_CLEANUP (*stmt_p
) = tcleanup
;
6515 /* We're initializing a local variable which has a cleanup GUARD. If there
6516 are any temporaries used in the initializer INIT of this variable, we
6517 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6518 variable will be cleaned up properly if one of them throws.
6520 Unfortunately, there's no way to express this properly in terms of
6521 nesting, as the regions for the temporaries overlap the region for the
6522 variable itself; if there are two temporaries, the variable needs to be
6523 the first thing destroyed if either of them throws. However, we only
6524 want to run the variable's cleanup if it actually got constructed. So
6525 we need to guard the temporary cleanups with the variable's cleanup if
6526 they are run on the normal path, but not if they are run on the
6527 exceptional path. We implement this by telling
6528 honor_protect_cleanup_actions to strip the variable cleanup from the
6529 exceptional path. */
6532 wrap_temporary_cleanups (tree init
, tree guard
)
6534 cp_walk_tree_without_duplicates (&init
, wrap_cleanups_r
, (void *)guard
);
6537 /* Generate code to initialize DECL (a local variable). */
6540 initialize_local_var (tree decl
, tree init
)
6542 tree type
= TREE_TYPE (decl
);
6546 gcc_assert (VAR_P (decl
)
6547 || TREE_CODE (decl
) == RESULT_DECL
);
6548 gcc_assert (!TREE_STATIC (decl
));
6550 if (DECL_SIZE (decl
) == NULL_TREE
)
6552 /* If we used it already as memory, it must stay in memory. */
6553 DECL_INITIAL (decl
) = NULL_TREE
;
6554 TREE_ADDRESSABLE (decl
) = TREE_USED (decl
);
6558 if (type
== error_mark_node
)
6561 /* Compute and store the initial value. */
6562 already_used
= TREE_USED (decl
) || TREE_USED (type
);
6563 if (TREE_USED (type
))
6564 DECL_READ_P (decl
) = 1;
6566 /* Generate a cleanup, if necessary. */
6567 cleanup
= cxx_maybe_build_cleanup (decl
, tf_warning_or_error
);
6569 /* Perform the initialization. */
6572 tree rinit
= (TREE_CODE (init
) == INIT_EXPR
6573 ? TREE_OPERAND (init
, 1) : NULL_TREE
);
6574 if (rinit
&& !TREE_SIDE_EFFECTS (rinit
))
6576 /* Stick simple initializers in DECL_INITIAL so that
6577 -Wno-init-self works (c++/34772). */
6578 gcc_assert (TREE_OPERAND (init
, 0) == decl
);
6579 DECL_INITIAL (decl
) = rinit
;
6581 if (warn_init_self
&& TREE_CODE (type
) == REFERENCE_TYPE
)
6585 warning_at (DECL_SOURCE_LOCATION (decl
),
6587 "reference %qD is initialized with itself", decl
);
6592 int saved_stmts_are_full_exprs_p
;
6594 /* If we're only initializing a single object, guard the
6595 destructors of any temporaries used in its initializer with
6596 its destructor. This isn't right for arrays because each
6597 element initialization is a full-expression. */
6598 if (cleanup
&& TREE_CODE (type
) != ARRAY_TYPE
)
6599 wrap_temporary_cleanups (init
, cleanup
);
6601 gcc_assert (building_stmt_list_p ());
6602 saved_stmts_are_full_exprs_p
= stmts_are_full_exprs_p ();
6603 current_stmt_tree ()->stmts_are_full_exprs_p
= 1;
6604 finish_expr_stmt (init
);
6605 current_stmt_tree ()->stmts_are_full_exprs_p
=
6606 saved_stmts_are_full_exprs_p
;
6610 /* Set this to 0 so we can tell whether an aggregate which was
6611 initialized was ever used. Don't do this if it has a
6612 destructor, so we don't complain about the 'resource
6613 allocation is initialization' idiom. Now set
6614 attribute((unused)) on types so decls of that type will be
6615 marked used. (see TREE_USED, above.) */
6616 if (TYPE_NEEDS_CONSTRUCTING (type
)
6618 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type
)
6619 && DECL_NAME (decl
))
6620 TREE_USED (decl
) = 0;
6621 else if (already_used
)
6622 TREE_USED (decl
) = 1;
6625 finish_decl_cleanup (decl
, cleanup
);
6628 /* DECL is a VAR_DECL for a compiler-generated variable with static
6629 storage duration (like a virtual table) whose initializer is a
6630 compile-time constant. Initialize the variable and provide it to the
6634 initialize_artificial_var (tree decl
, vec
<constructor_elt
, va_gc
> *v
)
6637 gcc_assert (DECL_ARTIFICIAL (decl
));
6638 init
= build_constructor (TREE_TYPE (decl
), v
);
6639 gcc_assert (TREE_CODE (init
) == CONSTRUCTOR
);
6640 DECL_INITIAL (decl
) = init
;
6641 DECL_INITIALIZED_P (decl
) = 1;
6642 determine_visibility (decl
);
6643 layout_var_decl (decl
);
6644 maybe_commonize_var (decl
);
6645 make_rtl_for_nonlocal_decl (decl
, init
, /*asmspec=*/NULL
);
6648 /* INIT is the initializer for a variable, as represented by the
6649 parser. Returns true iff INIT is value-dependent. */
6652 value_dependent_init_p (tree init
)
6654 if (TREE_CODE (init
) == TREE_LIST
)
6655 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6656 return any_value_dependent_elements_p (init
);
6657 else if (TREE_CODE (init
) == CONSTRUCTOR
)
6658 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6660 if (dependent_type_p (TREE_TYPE (init
)))
6663 vec
<constructor_elt
, va_gc
> *elts
;
6667 elts
= CONSTRUCTOR_ELTS (init
);
6668 nelts
= vec_safe_length (elts
);
6669 for (i
= 0; i
< nelts
; ++i
)
6670 if (value_dependent_init_p ((*elts
)[i
].value
))
6674 /* It must be a simple expression, e.g., int i = 3; */
6675 return value_dependent_expression_p (init
);
6680 // Returns true if a DECL is VAR_DECL with the concept specifier.
6682 is_concept_var (tree decl
)
6684 return (VAR_P (decl
)
6685 // Not all variables have DECL_LANG_SPECIFIC.
6686 && DECL_LANG_SPECIFIC (decl
)
6687 && DECL_DECLARED_CONCEPT_P (decl
));
6690 /* A helper function to be called via walk_tree. If any label exists
6691 under *TP, it is (going to be) forced. Set has_forced_label_in_static. */
6694 notice_forced_label_r (tree
*tp
, int *walk_subtrees
, void *)
6698 if (TREE_CODE (*tp
) == LABEL_DECL
)
6699 cfun
->has_forced_label_in_static
= 1;
6703 /* Finish processing of a declaration;
6704 install its line number and initial value.
6705 If the length of an array type is not known before,
6706 it must be determined now, from the initial value, or it is an error.
6708 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
6709 true, then INIT is an integral constant expression.
6711 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6712 if the (init) syntax was used. */
6715 cp_finish_decl (tree decl
, tree init
, bool init_const_expr_p
,
6716 tree asmspec_tree
, int flags
)
6719 vec
<tree
, va_gc
> *cleanups
= NULL
;
6720 const char *asmspec
= NULL
;
6721 int was_readonly
= 0;
6722 bool var_definition_p
= false;
6725 if (decl
== error_mark_node
)
6730 error ("assignment (not initialization) in declaration");
6734 gcc_assert (TREE_CODE (decl
) != RESULT_DECL
);
6735 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
6736 gcc_assert (TREE_CODE (decl
) != PARM_DECL
);
6738 type
= TREE_TYPE (decl
);
6739 if (type
== error_mark_node
)
6742 /* Warn about register storage specifiers except when in GNU global
6743 or local register variable extension. */
6744 if (VAR_P (decl
) && DECL_REGISTER (decl
) && asmspec_tree
== NULL_TREE
)
6746 if (cxx_dialect
>= cxx17
)
6747 pedwarn (DECL_SOURCE_LOCATION (decl
), OPT_Wregister
,
6748 "ISO C++17 does not allow %<register%> storage "
6751 warning_at (DECL_SOURCE_LOCATION (decl
), OPT_Wregister
,
6752 "%<register%> storage class specifier used");
6755 /* If a name was specified, get the string. */
6756 if (at_namespace_scope_p ())
6757 asmspec_tree
= maybe_apply_renaming_pragma (decl
, asmspec_tree
);
6758 if (asmspec_tree
&& asmspec_tree
!= error_mark_node
)
6759 asmspec
= TREE_STRING_POINTER (asmspec_tree
);
6761 if (current_class_type
6762 && CP_DECL_CONTEXT (decl
) == current_class_type
6763 && TYPE_BEING_DEFINED (current_class_type
)
6764 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type
)
6765 && (DECL_INITIAL (decl
) || init
))
6766 DECL_INITIALIZED_IN_CLASS_P (decl
) = 1;
6768 if (TREE_CODE (decl
) != FUNCTION_DECL
6769 && (auto_node
= type_uses_auto (type
)))
6772 if (init
== NULL_TREE
)
6774 if (DECL_LANG_SPECIFIC (decl
)
6775 && DECL_TEMPLATE_INSTANTIATION (decl
)
6776 && !DECL_TEMPLATE_INSTANTIATED (decl
))
6778 /* init is null because we're deferring instantiating the
6779 initializer until we need it. Well, we need it now. */
6780 instantiate_decl (decl
, /*defer_ok*/true, /*expl*/false);
6784 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (auto_node
));
6789 if (TREE_CODE (d_init
) == TREE_LIST
6790 && !CLASS_PLACEHOLDER_TEMPLATE (auto_node
))
6791 d_init
= build_x_compound_expr_from_list (d_init
, ELK_INIT
,
6792 tf_warning_or_error
);
6793 d_init
= resolve_nondeduced_context (d_init
, tf_warning_or_error
);
6795 enum auto_deduction_context adc
= adc_variable_type
;
6796 if (VAR_P (decl
) && DECL_DECOMPOSITION_P (decl
))
6797 adc
= adc_decomp_type
;
6798 type
= TREE_TYPE (decl
) = do_auto_deduction (type
, d_init
, auto_node
,
6799 tf_warning_or_error
, adc
,
6801 if (type
== error_mark_node
)
6803 if (TREE_CODE (type
) == FUNCTION_TYPE
)
6805 error ("initializer for %<decltype(auto) %D%> has function type "
6806 "(did you forget the %<()%> ?)", decl
);
6807 TREE_TYPE (decl
) = error_mark_node
;
6810 cp_apply_type_quals_to_decl (cp_type_quals (type
), decl
);
6813 if (ensure_literal_type_for_constexpr_object (decl
)
6816 DECL_DECLARED_CONSTEXPR_P (decl
) = 0;
6821 && DECL_CLASS_SCOPE_P (decl
)
6822 && DECL_INITIALIZED_IN_CLASS_P (decl
))
6823 check_static_variable_definition (decl
, type
);
6825 if (init
&& TREE_CODE (decl
) == FUNCTION_DECL
)
6828 if (init
== ridpointers
[(int)RID_DELETE
])
6830 /* FIXME check this is 1st decl. */
6831 DECL_DELETED_FN (decl
) = 1;
6832 DECL_DECLARED_INLINE_P (decl
) = 1;
6833 DECL_INITIAL (decl
) = error_mark_node
;
6834 FOR_EACH_CLONE (clone
, decl
)
6836 DECL_DELETED_FN (clone
) = 1;
6837 DECL_DECLARED_INLINE_P (clone
) = 1;
6838 DECL_INITIAL (clone
) = error_mark_node
;
6842 else if (init
== ridpointers
[(int)RID_DEFAULT
])
6844 if (defaultable_fn_check (decl
))
6845 DECL_DEFAULTED_FN (decl
) = 1;
6847 DECL_INITIAL (decl
) = NULL_TREE
;
6851 if (init
&& VAR_P (decl
))
6853 DECL_NONTRIVIALLY_INITIALIZED_P (decl
) = 1;
6854 /* If DECL is a reference, then we want to know whether init is a
6855 reference constant; init_const_expr_p as passed tells us whether
6856 it's an rvalue constant. */
6857 if (TREE_CODE (type
) == REFERENCE_TYPE
)
6858 init_const_expr_p
= potential_constant_expression (init
);
6859 if (init_const_expr_p
)
6861 /* Set these flags now for templates. We'll update the flags in
6862 store_init_value for instantiations. */
6863 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl
) = 1;
6864 if (decl_maybe_constant_var_p (decl
)
6865 /* FIXME setting TREE_CONSTANT on refs breaks the back end. */
6866 && TREE_CODE (type
) != REFERENCE_TYPE
)
6867 TREE_CONSTANT (decl
) = 1;
6871 if (processing_template_decl
)
6873 bool type_dependent_p
;
6875 /* Add this declaration to the statement-tree. */
6876 if (at_function_scope_p ())
6877 add_decl_expr (decl
);
6879 type_dependent_p
= dependent_type_p (type
);
6881 if (check_for_bare_parameter_packs (init
))
6884 DECL_INITIAL (decl
) = NULL_TREE
;
6887 /* Generally, initializers in templates are expanded when the
6888 template is instantiated. But, if DECL is a variable constant
6889 then it can be used in future constant expressions, so its value
6890 must be available. */
6892 bool dep_init
= false;
6894 if (!VAR_P (decl
) || type_dependent_p
)
6895 /* We can't do anything if the decl has dependent type. */;
6896 else if (!init
&& is_concept_var (decl
))
6897 error ("variable concept has no initializer");
6899 && init_const_expr_p
6900 && TREE_CODE (type
) != REFERENCE_TYPE
6901 && decl_maybe_constant_var_p (decl
)
6902 && !(dep_init
= value_dependent_init_p (init
)))
6904 /* This variable seems to be a non-dependent constant, so process
6905 its initializer. If check_initializer returns non-null the
6906 initialization wasn't constant after all. */
6908 cleanups
= make_tree_vector ();
6909 init_code
= check_initializer (decl
, init
, flags
, &cleanups
);
6910 if (init_code
== NULL_TREE
)
6912 release_tree_vector (cleanups
);
6914 else if (!DECL_PRETTY_FUNCTION_P (decl
))
6916 /* Deduce array size even if the initializer is dependent. */
6917 maybe_deduce_size_from_array_init (decl
, init
);
6918 /* And complain about multiple initializers. */
6919 if (init
&& TREE_CODE (init
) == TREE_LIST
&& TREE_CHAIN (init
)
6920 && !MAYBE_CLASS_TYPE_P (type
))
6921 init
= build_x_compound_expr_from_list (init
, ELK_INIT
,
6922 tf_warning_or_error
);
6926 DECL_INITIAL (decl
) = init
;
6929 retrofit_lang_decl (decl
);
6930 SET_DECL_DEPENDENT_INIT_P (decl
, true);
6935 /* Just store non-static data member initializers for later. */
6936 if (init
&& TREE_CODE (decl
) == FIELD_DECL
)
6937 DECL_INITIAL (decl
) = init
;
6939 /* Take care of TYPE_DECLs up front. */
6940 if (TREE_CODE (decl
) == TYPE_DECL
)
6942 if (type
!= error_mark_node
6943 && MAYBE_CLASS_TYPE_P (type
) && DECL_NAME (decl
))
6945 if (TREE_TYPE (DECL_NAME (decl
)) && TREE_TYPE (decl
) != type
)
6946 warning (0, "shadowing previous type declaration of %q#D", decl
);
6947 set_identifier_type_value (DECL_NAME (decl
), decl
);
6950 /* If we have installed this as the canonical typedef for this
6951 type, and that type has not been defined yet, delay emitting
6952 the debug information for it, as we will emit it later. */
6953 if (TYPE_MAIN_DECL (TREE_TYPE (decl
)) == decl
6954 && !COMPLETE_TYPE_P (TREE_TYPE (decl
)))
6955 TYPE_DECL_SUPPRESS_DEBUG (decl
) = 1;
6957 rest_of_decl_compilation (decl
, DECL_FILE_SCOPE_P (decl
),
6962 /* A reference will be modified here, as it is initialized. */
6963 if (! DECL_EXTERNAL (decl
)
6964 && TREE_READONLY (decl
)
6965 && TREE_CODE (type
) == REFERENCE_TYPE
)
6968 TREE_READONLY (decl
) = 0;
6973 /* If this is a local variable that will need a mangled name,
6974 register it now. We must do this before processing the
6975 initializer for the variable, since the initialization might
6976 require a guard variable, and since the mangled name of the
6977 guard variable will depend on the mangled name of this
6979 if (DECL_FUNCTION_SCOPE_P (decl
)
6980 && TREE_STATIC (decl
)
6981 && !DECL_ARTIFICIAL (decl
))
6983 push_local_name (decl
);
6984 /* Normally has_forced_label_in_static is set during GIMPLE
6985 lowering, but [cd]tors are never actually compiled directly.
6986 We need to set this early so we can deal with the label
6987 address extension. */
6988 if ((DECL_CONSTRUCTOR_P (current_function_decl
)
6989 || DECL_DESTRUCTOR_P (current_function_decl
))
6992 walk_tree (&init
, notice_forced_label_r
, NULL
, NULL
);
6993 add_local_decl (cfun
, decl
);
6995 /* And make sure it's in the symbol table for
6996 c_parse_final_cleanups to find. */
6997 varpool_node::get_create (decl
);
7000 /* Convert the initializer to the type of DECL, if we have not
7001 already initialized DECL. */
7002 if (!DECL_INITIALIZED_P (decl
)
7003 /* If !DECL_EXTERNAL then DECL is being defined. In the
7004 case of a static data member initialized inside the
7005 class-specifier, there can be an initializer even if DECL
7006 is *not* defined. */
7007 && (!DECL_EXTERNAL (decl
) || init
))
7009 cleanups
= make_tree_vector ();
7010 init
= check_initializer (decl
, init
, flags
, &cleanups
);
7016 The memory occupied by any object of static storage
7017 duration is zero-initialized at program startup before
7018 any other initialization takes place.
7020 We cannot create an appropriate initializer until after
7021 the type of DECL is finalized. If DECL_INITIAL is set,
7022 then the DECL is statically initialized, and any
7023 necessary zero-initialization has already been performed. */
7024 if (TREE_STATIC (decl
) && !DECL_INITIAL (decl
))
7025 DECL_INITIAL (decl
) = build_zero_init (TREE_TYPE (decl
),
7026 /*nelts=*/NULL_TREE
,
7027 /*static_storage_p=*/true);
7028 /* Remember that the initialization for this variable has
7030 DECL_INITIALIZED_P (decl
) = 1;
7031 /* This declaration is the definition of this variable,
7032 unless we are initializing a static data member within
7033 the class specifier. */
7034 if (!DECL_EXTERNAL (decl
))
7035 var_definition_p
= true;
7037 /* If the variable has an array type, lay out the type, even if
7038 there is no initializer. It is valid to index through the
7039 array, and we must get TYPE_ALIGN set correctly on the array
7041 else if (TREE_CODE (type
) == ARRAY_TYPE
)
7044 if (TREE_STATIC (decl
)
7045 && !at_function_scope_p ()
7046 && current_function_decl
== NULL
)
7047 /* So decl is a global variable or a static member of a
7048 non local class. Record the types it uses
7049 so that we can decide later to emit debug info for them. */
7050 record_types_used_by_current_var_decl (decl
);
7053 /* Add this declaration to the statement-tree. This needs to happen
7054 after the call to check_initializer so that the DECL_EXPR for a
7055 reference temp is added before the DECL_EXPR for the reference itself. */
7056 if (DECL_FUNCTION_SCOPE_P (decl
))
7058 /* If we're building a variable sized type, and we might be
7059 reachable other than via the top of the current binding
7060 level, then create a new BIND_EXPR so that we deallocate
7061 the object at the right time. */
7064 && !TREE_CONSTANT (DECL_SIZE (decl
))
7065 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list
))
7068 bind
= build3 (BIND_EXPR
, void_type_node
, NULL
, NULL
, NULL
);
7069 TREE_SIDE_EFFECTS (bind
) = 1;
7071 BIND_EXPR_BODY (bind
) = push_stmt_list ();
7073 add_decl_expr (decl
);
7076 /* Let the middle end know about variables and functions -- but not
7077 static data members in uninstantiated class templates. */
7078 if (VAR_OR_FUNCTION_DECL_P (decl
))
7082 layout_var_decl (decl
);
7083 maybe_commonize_var (decl
);
7086 /* This needs to happen after the linkage is set. */
7087 determine_visibility (decl
);
7089 if (var_definition_p
&& TREE_STATIC (decl
))
7091 /* If a TREE_READONLY variable needs initialization
7092 at runtime, it is no longer readonly and we need to
7093 avoid MEM_READONLY_P being set on RTL created for it. */
7096 if (TREE_READONLY (decl
))
7097 TREE_READONLY (decl
) = 0;
7100 else if (was_readonly
)
7101 TREE_READONLY (decl
) = 1;
7103 /* Likewise if it needs destruction. */
7104 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
))
7105 TREE_READONLY (decl
) = 0;
7108 make_rtl_for_nonlocal_decl (decl
, init
, asmspec
);
7110 /* Check for abstractness of the type. Notice that there is no
7111 need to strip array types here since the check for those types
7112 is already done within create_array_type_for_decl. */
7113 abstract_virtuals_error (decl
, type
);
7115 if (TREE_TYPE (decl
) == error_mark_node
)
7116 /* No initialization required. */
7118 else if (TREE_CODE (decl
) == FUNCTION_DECL
)
7122 if (init
== ridpointers
[(int)RID_DEFAULT
])
7124 /* An out-of-class default definition is defined at
7125 the point where it is explicitly defaulted. */
7126 if (DECL_DELETED_FN (decl
))
7127 maybe_explain_implicit_delete (decl
);
7128 else if (DECL_INITIAL (decl
) == error_mark_node
)
7129 synthesize_method (decl
);
7132 error ("function %q#D is initialized like a variable", decl
);
7134 /* else no initialization required. */
7136 else if (DECL_EXTERNAL (decl
)
7137 && ! (DECL_LANG_SPECIFIC (decl
)
7138 && DECL_NOT_REALLY_EXTERN (decl
)))
7141 DECL_INITIAL (decl
) = init
;
7143 /* A variable definition. */
7144 else if (DECL_FUNCTION_SCOPE_P (decl
) && !TREE_STATIC (decl
))
7145 /* Initialize the local variable. */
7146 initialize_local_var (decl
, init
);
7148 /* If a variable is defined, and then a subsequent
7149 definition with external linkage is encountered, we will
7150 get here twice for the same variable. We want to avoid
7151 calling expand_static_init more than once. For variables
7152 that are not static data members, we can call
7153 expand_static_init only when we actually process the
7154 initializer. It is not legal to redeclare a static data
7155 member, so this issue does not arise in that case. */
7156 else if (var_definition_p
&& TREE_STATIC (decl
))
7157 expand_static_init (decl
, init
);
7160 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
7161 reference, insert it in the statement-tree now. */
7165 FOR_EACH_VEC_ELT (*cleanups
, i
, t
)
7166 push_cleanup (decl
, t
, false);
7167 release_tree_vector (cleanups
);
7171 TREE_READONLY (decl
) = 1;
7173 invoke_plugin_callbacks (PLUGIN_FINISH_DECL
, decl
);
7176 /* For class TYPE return itself or some its bases that contain
7177 any direct non-static data members. Return error_mark_node if an
7178 error has been diagnosed. */
7181 find_decomp_class_base (location_t loc
, tree type
, tree ret
)
7183 bool member_seen
= false;
7184 for (tree field
= TYPE_FIELDS (type
); field
; field
= DECL_CHAIN (field
))
7185 if (TREE_CODE (field
) != FIELD_DECL
|| DECL_ARTIFICIAL (field
))
7189 else if (ANON_AGGR_TYPE_P (TREE_TYPE (field
)))
7191 if (TREE_CODE (TREE_TYPE (field
)) == RECORD_TYPE
)
7192 error_at (loc
, "cannot decompose class type %qT because it has an "
7193 "anonymous struct member", type
);
7195 error_at (loc
, "cannot decompose class type %qT because it has an "
7196 "anonymous union member", type
);
7197 inform (DECL_SOURCE_LOCATION (field
), "declared here");
7198 return error_mark_node
;
7200 else if (TREE_PRIVATE (field
) || TREE_PROTECTED (field
))
7202 error_at (loc
, "cannot decompose non-public member %qD of %qT",
7204 inform (DECL_SOURCE_LOCATION (field
),
7205 TREE_PRIVATE (field
)
7206 ? G_("declared private here")
7207 : G_("declared protected here"));
7208 return error_mark_node
;
7213 tree base_binfo
, binfo
;
7214 tree orig_ret
= ret
;
7218 for (binfo
= TYPE_BINFO (type
), i
= 0;
7219 BINFO_BASE_ITERATE (binfo
, i
, base_binfo
); i
++)
7221 tree t
= find_decomp_class_base (loc
, TREE_TYPE (base_binfo
), ret
);
7222 if (t
== error_mark_node
)
7223 return error_mark_node
;
7228 error_at (loc
, "cannot decompose class type %qT: both it and "
7229 "its base class %qT have non-static data members",
7231 return error_mark_node
;
7233 else if (orig_ret
!= NULL_TREE
)
7236 /* OK, found the same base along another path. We'll complain
7237 in convert_to_base if it's ambiguous. */;
7238 else if (ret
!= NULL_TREE
)
7240 error_at (loc
, "cannot decompose class type %qT: its base "
7241 "classes %qT and %qT have non-static data "
7242 "members", type
, ret
, t
);
7243 return error_mark_node
;
7252 /* Return std::tuple_size<TYPE>::value. */
7255 get_tuple_size (tree type
)
7257 tree args
= make_tree_vec (1);
7258 TREE_VEC_ELT (args
, 0) = type
;
7259 tree inst
= lookup_template_class (get_identifier ("tuple_size"), args
,
7260 /*in_decl*/NULL_TREE
,
7261 /*context*/std_node
,
7262 /*entering_scope*/false, tf_none
);
7263 inst
= complete_type (inst
);
7264 if (inst
== error_mark_node
|| !COMPLETE_TYPE_P (inst
))
7266 tree val
= lookup_qualified_name (inst
, get_identifier ("value"),
7267 /*type*/false, /*complain*/false);
7268 if (TREE_CODE (val
) == VAR_DECL
|| TREE_CODE (val
) == CONST_DECL
)
7269 val
= maybe_constant_value (val
);
7270 if (TREE_CODE (val
) == INTEGER_CST
)
7273 return error_mark_node
;
7276 /* Return std::tuple_element<I,TYPE>::type. */
7279 get_tuple_element_type (tree type
, unsigned i
)
7281 tree args
= make_tree_vec (2);
7282 TREE_VEC_ELT (args
, 0) = build_int_cst (integer_type_node
, i
);
7283 TREE_VEC_ELT (args
, 1) = type
;
7284 tree inst
= lookup_template_class (get_identifier ("tuple_element"), args
,
7285 /*in_decl*/NULL_TREE
,
7286 /*context*/std_node
,
7287 /*entering_scope*/false,
7288 tf_warning_or_error
);
7289 return make_typename_type (inst
, get_identifier ("type"),
7290 none_type
, tf_warning_or_error
);
7293 /* Return e.get<i>() or get<i>(e). */
7296 get_tuple_decomp_init (tree decl
, unsigned i
)
7298 tree get_id
= get_identifier ("get");
7299 tree targs
= make_tree_vec (1);
7300 TREE_VEC_ELT (targs
, 0) = build_int_cst (integer_type_node
, i
);
7302 tree etype
= TREE_TYPE (decl
);
7303 tree e
= convert_from_reference (decl
);
7305 /* [The id-expression] e is an lvalue if the type of the entity e is an
7306 lvalue reference and an xvalue otherwise. */
7307 if (TREE_CODE (etype
) != REFERENCE_TYPE
7308 || TYPE_REF_IS_RVALUE (etype
))
7311 tree fns
= lookup_qualified_name (TREE_TYPE (e
), get_id
,
7312 /*type*/false, /*complain*/false);
7313 if (fns
!= error_mark_node
)
7315 fns
= lookup_template_function (fns
, targs
);
7316 return build_new_method_call (e
, fns
, /*args*/NULL
,
7317 /*path*/NULL_TREE
, LOOKUP_NORMAL
,
7318 /*fn_p*/NULL
, tf_warning_or_error
);
7322 vec
<tree
,va_gc
> *args
= make_tree_vector_single (e
);
7323 fns
= lookup_template_function (get_id
, targs
);
7324 fns
= perform_koenig_lookup (fns
, args
, tf_warning_or_error
);
7325 return finish_call_expr (fns
, &args
, /*novirt*/false,
7326 /*koenig*/true, tf_warning_or_error
);
7330 /* It's impossible to recover the decltype of a tuple decomposition variable
7331 based on the actual type of the variable, so store it in a hash table. */
7333 static GTY((cache
)) tree_cache_map
*decomp_type_table
;
7335 store_decomp_type (tree v
, tree t
)
7337 if (!decomp_type_table
)
7338 decomp_type_table
= tree_cache_map::create_ggc (13);
7339 decomp_type_table
->put (v
, t
);
7343 lookup_decomp_type (tree v
)
7345 return *decomp_type_table
->get (v
);
7348 /* Mangle a decomposition declaration if needed. Arguments like
7349 in cp_finish_decomp. */
7352 cp_maybe_mangle_decomp (tree decl
, tree first
, unsigned int count
)
7354 if (!processing_template_decl
7355 && !error_operand_p (decl
)
7356 && DECL_NAMESPACE_SCOPE_P (decl
))
7358 auto_vec
<tree
, 16> v
;
7359 v
.safe_grow (count
);
7361 for (unsigned int i
= 0; i
< count
; i
++, d
= DECL_CHAIN (d
))
7362 v
[count
- i
- 1] = d
;
7363 SET_DECL_ASSEMBLER_NAME (decl
, mangle_decomp (decl
, v
));
7367 /* Finish a decomposition declaration. DECL is the underlying declaration
7368 "e", FIRST is the head of a chain of decls for the individual identifiers
7369 chained through DECL_CHAIN in reverse order and COUNT is the number of
7373 cp_finish_decomp (tree decl
, tree first
, unsigned int count
)
7375 if (error_operand_p (decl
))
7380 TREE_TYPE (first
) = error_mark_node
;
7381 if (DECL_HAS_VALUE_EXPR_P (first
))
7383 SET_DECL_VALUE_EXPR (first
, NULL_TREE
);
7384 DECL_HAS_VALUE_EXPR_P (first
) = 0;
7386 first
= DECL_CHAIN (first
);
7388 if (DECL_P (decl
) && DECL_NAMESPACE_SCOPE_P (decl
))
7389 SET_DECL_ASSEMBLER_NAME (decl
, get_identifier ("<decomp>"));
7393 location_t loc
= DECL_SOURCE_LOCATION (decl
);
7394 if (type_dependent_expression_p (decl
)
7395 /* This happens for range for when not in templates.
7396 Still add the DECL_VALUE_EXPRs for later processing. */
7397 || (!processing_template_decl
7398 && type_uses_auto (TREE_TYPE (decl
))))
7400 for (unsigned int i
= 0; i
< count
; i
++)
7402 if (!DECL_HAS_VALUE_EXPR_P (first
))
7404 tree v
= build_nt (ARRAY_REF
, decl
,
7405 size_int (count
- i
- 1),
7406 NULL_TREE
, NULL_TREE
);
7407 SET_DECL_VALUE_EXPR (first
, v
);
7408 DECL_HAS_VALUE_EXPR_P (first
) = 1;
7410 if (processing_template_decl
)
7411 fit_decomposition_lang_decl (first
, decl
);
7412 first
= DECL_CHAIN (first
);
7417 auto_vec
<tree
, 16> v
;
7418 v
.safe_grow (count
);
7420 for (unsigned int i
= 0; i
< count
; i
++, d
= DECL_CHAIN (d
))
7422 v
[count
- i
- 1] = d
;
7423 fit_decomposition_lang_decl (d
, decl
);
7426 tree type
= TREE_TYPE (decl
);
7429 if (TREE_CODE (type
) == REFERENCE_TYPE
)
7431 dexp
= convert_from_reference (dexp
);
7432 type
= complete_type (TREE_TYPE (type
));
7433 if (type
== error_mark_node
)
7437 tree eltype
= NULL_TREE
;
7438 unsigned HOST_WIDE_INT eltscnt
= 0;
7439 if (TREE_CODE (type
) == ARRAY_TYPE
)
7442 nelts
= array_type_nelts_top (type
);
7443 if (nelts
== error_mark_node
)
7445 if (!tree_fits_uhwi_p (nelts
))
7447 error_at (loc
, "cannot decompose variable length array %qT", type
);
7450 eltscnt
= tree_to_uhwi (nelts
);
7451 if (count
!= eltscnt
)
7454 if (count
> eltscnt
)
7455 error_n (loc
, count
,
7456 "%u name provided for structured binding",
7457 "%u names provided for structured binding", count
);
7459 error_n (loc
, count
,
7460 "only %u name provided for structured binding",
7461 "only %u names provided for structured binding", count
);
7462 /* Some languages have special plural rules even for large values,
7463 but it is periodic with period of 10, 100, 1000 etc. */
7464 inform_n (loc
, eltscnt
> INT_MAX
7465 ? (eltscnt
% 1000000) + 1000000 : eltscnt
,
7466 "while %qT decomposes into %wu element",
7467 "while %qT decomposes into %wu elements",
7471 eltype
= TREE_TYPE (type
);
7472 for (unsigned int i
= 0; i
< count
; i
++)
7474 TREE_TYPE (v
[i
]) = eltype
;
7475 layout_decl (v
[i
], 0);
7476 if (processing_template_decl
)
7478 tree t
= unshare_expr (dexp
);
7479 t
= build4_loc (DECL_SOURCE_LOCATION (v
[i
]), ARRAY_REF
,
7480 eltype
, t
, size_int (i
), NULL_TREE
,
7482 SET_DECL_VALUE_EXPR (v
[i
], t
);
7483 DECL_HAS_VALUE_EXPR_P (v
[i
]) = 1;
7486 /* 2 GNU extensions. */
7487 else if (TREE_CODE (type
) == COMPLEX_TYPE
)
7490 if (count
!= eltscnt
)
7492 eltype
= cp_build_qualified_type (TREE_TYPE (type
), TYPE_QUALS (type
));
7493 for (unsigned int i
= 0; i
< count
; i
++)
7495 TREE_TYPE (v
[i
]) = eltype
;
7496 layout_decl (v
[i
], 0);
7497 if (processing_template_decl
)
7499 tree t
= unshare_expr (dexp
);
7500 t
= build1_loc (DECL_SOURCE_LOCATION (v
[i
]),
7501 i
? IMAGPART_EXPR
: REALPART_EXPR
, eltype
,
7503 SET_DECL_VALUE_EXPR (v
[i
], t
);
7504 DECL_HAS_VALUE_EXPR_P (v
[i
]) = 1;
7507 else if (TREE_CODE (type
) == VECTOR_TYPE
)
7509 if (!TYPE_VECTOR_SUBPARTS (type
).is_constant (&eltscnt
))
7511 error_at (loc
, "cannot decompose variable length vector %qT", type
);
7514 if (count
!= eltscnt
)
7516 eltype
= cp_build_qualified_type (TREE_TYPE (type
), TYPE_QUALS (type
));
7517 for (unsigned int i
= 0; i
< count
; i
++)
7519 TREE_TYPE (v
[i
]) = eltype
;
7520 layout_decl (v
[i
], 0);
7521 if (processing_template_decl
)
7523 tree t
= unshare_expr (dexp
);
7524 convert_vector_to_array_for_subscript (DECL_SOURCE_LOCATION (v
[i
]),
7526 t
= build4_loc (DECL_SOURCE_LOCATION (v
[i
]), ARRAY_REF
,
7527 eltype
, t
, size_int (i
), NULL_TREE
,
7529 SET_DECL_VALUE_EXPR (v
[i
], t
);
7530 DECL_HAS_VALUE_EXPR_P (v
[i
]) = 1;
7533 else if (tree tsize
= get_tuple_size (type
))
7535 if (tsize
== error_mark_node
)
7537 error_at (loc
, "%<std::tuple_size<%T>::value%> is not an integral "
7538 "constant expression", type
);
7541 if (!tree_fits_uhwi_p (tsize
))
7543 error_n (loc
, count
,
7544 "%u name provided for structured binding",
7545 "%u names provided for structured binding", count
);
7546 inform (loc
, "while %qT decomposes into %E elements",
7550 eltscnt
= tree_to_uhwi (tsize
);
7551 if (count
!= eltscnt
)
7553 int save_read
= DECL_READ_P (decl
);
7554 for (unsigned i
= 0; i
< count
; ++i
)
7556 location_t sloc
= input_location
;
7557 location_t dloc
= DECL_SOURCE_LOCATION (v
[i
]);
7559 input_location
= dloc
;
7560 tree init
= get_tuple_decomp_init (decl
, i
);
7561 tree eltype
= (init
== error_mark_node
? error_mark_node
7562 : get_tuple_element_type (type
, i
));
7563 input_location
= sloc
;
7565 if (init
== error_mark_node
|| eltype
== error_mark_node
)
7567 inform (dloc
, "in initialization of structured binding "
7568 "variable %qD", v
[i
]);
7571 /* Save the decltype away before reference collapse. */
7572 store_decomp_type (v
[i
], eltype
);
7573 eltype
= cp_build_reference_type (eltype
, !lvalue_p (init
));
7574 TREE_TYPE (v
[i
]) = eltype
;
7575 layout_decl (v
[i
], 0);
7576 if (DECL_HAS_VALUE_EXPR_P (v
[i
]))
7578 /* In this case the names are variables, not just proxies. */
7579 SET_DECL_VALUE_EXPR (v
[i
], NULL_TREE
);
7580 DECL_HAS_VALUE_EXPR_P (v
[i
]) = 0;
7582 if (!processing_template_decl
)
7583 cp_finish_decl (v
[i
], init
, /*constexpr*/false,
7584 /*asm*/NULL_TREE
, LOOKUP_NORMAL
);
7586 /* Ignore reads from the underlying decl performed during initialization
7587 of the individual variables. If those will be read, we'll mark
7588 the underlying decl as read at that point. */
7589 DECL_READ_P (decl
) = save_read
;
7591 else if (TREE_CODE (type
) == UNION_TYPE
)
7593 error_at (loc
, "cannot decompose union type %qT", type
);
7596 else if (!CLASS_TYPE_P (type
))
7598 error_at (loc
, "cannot decompose non-array non-class type %qT", type
);
7601 else if (LAMBDA_TYPE_P (type
))
7603 error_at (loc
, "cannot decompose lambda closure type %qT", type
);
7608 tree btype
= find_decomp_class_base (loc
, type
, NULL_TREE
);
7609 if (btype
== error_mark_node
)
7611 else if (btype
== NULL_TREE
)
7613 error_at (loc
, "cannot decompose class type %qT without non-static "
7614 "data members", type
);
7617 for (tree field
= TYPE_FIELDS (btype
); field
; field
= TREE_CHAIN (field
))
7618 if (TREE_CODE (field
) != FIELD_DECL
|| DECL_ARTIFICIAL (field
))
7622 if (count
!= eltscnt
)
7627 t
= convert_to_base (t
, btype
, /*check_access*/true,
7628 /*nonnull*/false, tf_warning_or_error
);
7632 for (tree field
= TYPE_FIELDS (btype
); field
; field
= TREE_CHAIN (field
))
7633 if (TREE_CODE (field
) != FIELD_DECL
|| DECL_ARTIFICIAL (field
))
7637 tree tt
= finish_non_static_data_member (field
, unshare_expr (t
),
7639 if (REFERENCE_REF_P (tt
))
7640 tt
= TREE_OPERAND (tt
, 0);
7641 TREE_TYPE (v
[i
]) = TREE_TYPE (tt
);
7642 layout_decl (v
[i
], 0);
7643 if (!processing_template_decl
)
7645 SET_DECL_VALUE_EXPR (v
[i
], tt
);
7646 DECL_HAS_VALUE_EXPR_P (v
[i
]) = 1;
7651 if (processing_template_decl
)
7653 for (unsigned int i
= 0; i
< count
; i
++)
7654 if (!DECL_HAS_VALUE_EXPR_P (v
[i
]))
7656 tree a
= build_nt (ARRAY_REF
, decl
, size_int (i
),
7657 NULL_TREE
, NULL_TREE
);
7658 SET_DECL_VALUE_EXPR (v
[i
], a
);
7659 DECL_HAS_VALUE_EXPR_P (v
[i
]) = 1;
7664 /* Returns a declaration for a VAR_DECL as if:
7666 extern "C" TYPE NAME;
7668 had been seen. Used to create compiler-generated global
7672 declare_global_var (tree name
, tree type
)
7676 push_to_top_level ();
7677 decl
= build_decl (input_location
, VAR_DECL
, name
, type
);
7678 TREE_PUBLIC (decl
) = 1;
7679 DECL_EXTERNAL (decl
) = 1;
7680 DECL_ARTIFICIAL (decl
) = 1;
7681 DECL_CONTEXT (decl
) = FROB_CONTEXT (global_namespace
);
7682 /* If the user has explicitly declared this variable (perhaps
7683 because the code we are compiling is part of a low-level runtime
7684 library), then it is possible that our declaration will be merged
7685 with theirs by pushdecl. */
7686 decl
= pushdecl (decl
);
7687 cp_finish_decl (decl
, NULL_TREE
, false, NULL_TREE
, 0);
7688 pop_from_top_level ();
7693 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
7694 if "__cxa_atexit" is not being used) corresponding to the function
7695 to be called when the program exits. */
7698 get_atexit_fn_ptr_type (void)
7702 if (!atexit_fn_ptr_type_node
)
7705 if (flag_use_cxa_atexit
7706 && !targetm
.cxx
.use_atexit_for_cxa_atexit ())
7707 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
7708 arg_type
= ptr_type_node
;
7710 /* The parameter to "atexit" is "void (*)(void)". */
7711 arg_type
= NULL_TREE
;
7713 fn_type
= build_function_type_list (void_type_node
,
7714 arg_type
, NULL_TREE
);
7715 atexit_fn_ptr_type_node
= build_pointer_type (fn_type
);
7718 return atexit_fn_ptr_type_node
;
7721 /* Returns a pointer to the `atexit' function. Note that if
7722 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
7723 `__cxa_atexit' function specified in the IA64 C++ ABI. */
7726 get_atexit_node (void)
7732 bool use_aeabi_atexit
;
7737 if (flag_use_cxa_atexit
&& !targetm
.cxx
.use_atexit_for_cxa_atexit ())
7739 /* The declaration for `__cxa_atexit' is:
7741 int __cxa_atexit (void (*)(void *), void *, void *)
7743 We build up the argument types and then the function type
7745 tree argtype0
, argtype1
, argtype2
;
7747 use_aeabi_atexit
= targetm
.cxx
.use_aeabi_atexit ();
7748 /* First, build the pointer-to-function type for the first
7750 fn_ptr_type
= get_atexit_fn_ptr_type ();
7751 /* Then, build the rest of the argument types. */
7752 argtype2
= ptr_type_node
;
7753 if (use_aeabi_atexit
)
7755 argtype1
= fn_ptr_type
;
7756 argtype0
= ptr_type_node
;
7760 argtype1
= ptr_type_node
;
7761 argtype0
= fn_ptr_type
;
7763 /* And the final __cxa_atexit type. */
7764 fn_type
= build_function_type_list (integer_type_node
,
7765 argtype0
, argtype1
, argtype2
,
7767 if (use_aeabi_atexit
)
7768 name
= "__aeabi_atexit";
7770 name
= "__cxa_atexit";
7774 /* The declaration for `atexit' is:
7776 int atexit (void (*)());
7778 We build up the argument types and then the function type
7780 fn_ptr_type
= get_atexit_fn_ptr_type ();
7781 /* Build the final atexit type. */
7782 fn_type
= build_function_type_list (integer_type_node
,
7783 fn_ptr_type
, NULL_TREE
);
7787 /* Now, build the function declaration. */
7788 push_lang_context (lang_name_c
);
7789 atexit_fndecl
= build_library_fn_ptr (name
, fn_type
, ECF_LEAF
| ECF_NOTHROW
);
7790 mark_used (atexit_fndecl
);
7791 pop_lang_context ();
7792 atexit_node
= decay_conversion (atexit_fndecl
, tf_warning_or_error
);
7797 /* Like get_atexit_node, but for thread-local cleanups. */
7800 get_thread_atexit_node (void)
7802 /* The declaration for `__cxa_thread_atexit' is:
7804 int __cxa_thread_atexit (void (*)(void *), void *, void *) */
7805 tree fn_type
= build_function_type_list (integer_type_node
,
7806 get_atexit_fn_ptr_type (),
7807 ptr_type_node
, ptr_type_node
,
7810 /* Now, build the function declaration. */
7811 tree atexit_fndecl
= build_library_fn_ptr ("__cxa_thread_atexit", fn_type
,
7812 ECF_LEAF
| ECF_NOTHROW
);
7813 return decay_conversion (atexit_fndecl
, tf_warning_or_error
);
7816 /* Returns the __dso_handle VAR_DECL. */
7819 get_dso_handle_node (void)
7821 if (dso_handle_node
)
7822 return dso_handle_node
;
7824 /* Declare the variable. */
7825 dso_handle_node
= declare_global_var (get_identifier ("__dso_handle"),
7828 #ifdef HAVE_GAS_HIDDEN
7829 if (dso_handle_node
!= error_mark_node
)
7831 DECL_VISIBILITY (dso_handle_node
) = VISIBILITY_HIDDEN
;
7832 DECL_VISIBILITY_SPECIFIED (dso_handle_node
) = 1;
7836 return dso_handle_node
;
7839 /* Begin a new function with internal linkage whose job will be simply
7840 to destroy some particular variable. */
7842 static GTY(()) int start_cleanup_cnt
;
7845 start_cleanup_fn (void)
7850 bool use_cxa_atexit
= flag_use_cxa_atexit
7851 && !targetm
.cxx
.use_atexit_for_cxa_atexit ();
7853 push_to_top_level ();
7855 /* No need to mangle this. */
7856 push_lang_context (lang_name_c
);
7858 /* Build the name of the function. */
7859 sprintf (name
, "__tcf_%d", start_cleanup_cnt
++);
7860 /* Build the function declaration. */
7861 fntype
= TREE_TYPE (get_atexit_fn_ptr_type ());
7862 fndecl
= build_lang_decl (FUNCTION_DECL
, get_identifier (name
), fntype
);
7863 /* It's a function with internal linkage, generated by the
7865 TREE_PUBLIC (fndecl
) = 0;
7866 DECL_ARTIFICIAL (fndecl
) = 1;
7867 /* Make the function `inline' so that it is only emitted if it is
7868 actually needed. It is unlikely that it will be inlined, since
7869 it is only called via a function pointer, but we avoid unnecessary
7870 emissions this way. */
7871 DECL_DECLARED_INLINE_P (fndecl
) = 1;
7872 DECL_INTERFACE_KNOWN (fndecl
) = 1;
7873 /* Build the parameter. */
7876 tree parmdecl
= cp_build_parm_decl (fndecl
, NULL_TREE
, ptr_type_node
);
7877 TREE_USED (parmdecl
) = 1;
7878 DECL_READ_P (parmdecl
) = 1;
7879 DECL_ARGUMENTS (fndecl
) = parmdecl
;
7883 start_preparsed_function (fndecl
, NULL_TREE
, SF_PRE_PARSED
);
7885 pop_lang_context ();
7887 return current_function_decl
;
7890 /* Finish the cleanup function begun by start_cleanup_fn. */
7893 end_cleanup_fn (void)
7895 expand_or_defer_fn (finish_function (/*inline_p=*/false));
7897 pop_from_top_level ();
7900 /* Generate code to handle the destruction of DECL, an object with
7901 static storage duration. */
7904 register_dtor_fn (tree decl
)
7911 bool ob_parm
, dso_parm
, use_dtor
;
7912 tree arg0
, arg1
, arg2
;
7915 type
= TREE_TYPE (decl
);
7916 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type
))
7919 /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
7920 "__aeabi_atexit"), and DECL is a class object, we can just pass the
7921 destructor to "__cxa_atexit"; we don't have to build a temporary
7922 function to do the cleanup. */
7923 dso_parm
= (flag_use_cxa_atexit
7924 && !targetm
.cxx
.use_atexit_for_cxa_atexit ());
7925 ob_parm
= (CP_DECL_THREAD_LOCAL_P (decl
) || dso_parm
);
7926 use_dtor
= ob_parm
&& CLASS_TYPE_P (type
);
7929 cleanup
= get_class_binding (type
, complete_dtor_identifier
);
7931 /* Make sure it is accessible. */
7932 perform_or_defer_access_check (TYPE_BINFO (type
), cleanup
, cleanup
,
7933 tf_warning_or_error
);
7937 /* Call build_cleanup before we enter the anonymous function so
7938 that any access checks will be done relative to the current
7939 scope, rather than the scope of the anonymous function. */
7940 build_cleanup (decl
);
7942 /* Now start the function. */
7943 cleanup
= start_cleanup_fn ();
7945 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
7946 to the original function, rather than the anonymous one. That
7947 will make the back end think that nested functions are in use,
7948 which causes confusion. */
7949 push_deferring_access_checks (dk_no_check
);
7950 fcall
= build_cleanup (decl
);
7951 pop_deferring_access_checks ();
7953 /* Create the body of the anonymous function. */
7954 compound_stmt
= begin_compound_stmt (BCS_FN_BODY
);
7955 finish_expr_stmt (fcall
);
7956 finish_compound_stmt (compound_stmt
);
7960 /* Call atexit with the cleanup function. */
7961 mark_used (cleanup
);
7962 cleanup
= build_address (cleanup
);
7964 if (CP_DECL_THREAD_LOCAL_P (decl
))
7965 atex_node
= get_thread_atexit_node ();
7967 atex_node
= get_atexit_node ();
7971 /* We must convert CLEANUP to the type that "__cxa_atexit"
7973 cleanup
= build_nop (get_atexit_fn_ptr_type (), cleanup
);
7974 /* "__cxa_atexit" will pass the address of DECL to the
7975 cleanup function. */
7977 addr
= build_address (decl
);
7978 /* The declared type of the parameter to "__cxa_atexit" is
7979 "void *". For plain "T*", we could just let the
7980 machinery in cp_build_function_call convert it -- but if the
7981 type is "cv-qualified T *", then we need to convert it
7982 before passing it in, to avoid spurious errors. */
7983 addr
= build_nop (ptr_type_node
, addr
);
7986 /* Since the cleanup functions we build ignore the address
7987 they're given, there's no reason to pass the actual address
7988 in, and, in general, it's cheaper to pass NULL than any
7990 addr
= null_pointer_node
;
7993 arg2
= cp_build_addr_expr (get_dso_handle_node (),
7994 tf_warning_or_error
);
7996 /* Just pass NULL to the dso handle parm if we don't actually
7997 have a DSO handle on this target. */
7998 arg2
= null_pointer_node
;
8004 if (!CP_DECL_THREAD_LOCAL_P (decl
)
8005 && targetm
.cxx
.use_aeabi_atexit ())
8021 return cp_build_function_call_nary (atex_node
, tf_warning_or_error
,
8022 arg0
, arg1
, arg2
, NULL_TREE
);
8025 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
8026 is its initializer. Generate code to handle the construction
8027 and destruction of DECL. */
8030 expand_static_init (tree decl
, tree init
)
8032 gcc_assert (VAR_P (decl
));
8033 gcc_assert (TREE_STATIC (decl
));
8035 /* Some variables require no dynamic initialization. */
8036 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl
)))
8038 /* Make sure the destructor is callable. */
8039 cxx_maybe_build_cleanup (decl
, tf_warning_or_error
);
8044 if (CP_DECL_THREAD_LOCAL_P (decl
) && DECL_GNU_TLS_P (decl
)
8045 && !DECL_FUNCTION_SCOPE_P (decl
))
8048 error ("non-local variable %qD declared %<__thread%> "
8049 "needs dynamic initialization", decl
);
8051 error ("non-local variable %qD declared %<__thread%> "
8052 "has a non-trivial destructor", decl
);
8053 static bool informed
;
8056 inform (DECL_SOURCE_LOCATION (decl
),
8057 "C++11 %<thread_local%> allows dynamic initialization "
8064 if (DECL_FUNCTION_SCOPE_P (decl
))
8066 /* Emit code to perform this initialization but once. */
8067 tree if_stmt
= NULL_TREE
, inner_if_stmt
= NULL_TREE
;
8068 tree then_clause
= NULL_TREE
, inner_then_clause
= NULL_TREE
;
8069 tree guard
, guard_addr
;
8071 /* We don't need thread-safety code for thread-local vars. */
8072 bool thread_guard
= (flag_threadsafe_statics
8073 && !CP_DECL_THREAD_LOCAL_P (decl
));
8075 /* Emit code to perform this initialization but once. This code
8078 static <type> guard;
8079 if (!__atomic_load (guard.first_byte)) {
8080 if (__cxa_guard_acquire (&guard)) {
8083 // Do initialization.
8084 flag = true; __cxa_guard_release (&guard);
8085 // Register variable for destruction at end of program.
8087 if (!flag) __cxa_guard_abort (&guard);
8092 Note that the `flag' variable is only set to 1 *after* the
8093 initialization is complete. This ensures that an exception,
8094 thrown during the construction, will cause the variable to
8095 reinitialized when we pass through this code again, as per:
8099 If the initialization exits by throwing an exception, the
8100 initialization is not complete, so it will be tried again
8101 the next time control enters the declaration.
8103 This process should be thread-safe, too; multiple threads
8104 should not be able to initialize the variable more than
8107 /* Create the guard variable. */
8108 guard
= get_guard (decl
);
8110 /* Begin the conditional initialization. */
8111 if_stmt
= begin_if_stmt ();
8113 finish_if_stmt_cond (get_guard_cond (guard
, thread_guard
), if_stmt
);
8114 then_clause
= begin_compound_stmt (BCS_NO_SCOPE
);
8118 tree vfntype
= NULL_TREE
;
8119 tree acquire_name
, release_name
, abort_name
;
8120 tree acquire_fn
, release_fn
, abort_fn
;
8121 guard_addr
= build_address (guard
);
8123 acquire_name
= get_identifier ("__cxa_guard_acquire");
8124 release_name
= get_identifier ("__cxa_guard_release");
8125 abort_name
= get_identifier ("__cxa_guard_abort");
8126 acquire_fn
= get_global_binding (acquire_name
);
8127 release_fn
= get_global_binding (release_name
);
8128 abort_fn
= get_global_binding (abort_name
);
8130 acquire_fn
= push_library_fn
8131 (acquire_name
, build_function_type_list (integer_type_node
,
8132 TREE_TYPE (guard_addr
),
8134 NULL_TREE
, ECF_NOTHROW
| ECF_LEAF
);
8135 if (!release_fn
|| !abort_fn
)
8136 vfntype
= build_function_type_list (void_type_node
,
8137 TREE_TYPE (guard_addr
),
8140 release_fn
= push_library_fn (release_name
, vfntype
, NULL_TREE
,
8141 ECF_NOTHROW
| ECF_LEAF
);
8143 abort_fn
= push_library_fn (abort_name
, vfntype
, NULL_TREE
,
8144 ECF_NOTHROW
| ECF_LEAF
);
8146 inner_if_stmt
= begin_if_stmt ();
8147 finish_if_stmt_cond (build_call_n (acquire_fn
, 1, guard_addr
),
8150 inner_then_clause
= begin_compound_stmt (BCS_NO_SCOPE
);
8151 begin
= get_target_expr (boolean_false_node
);
8152 flag
= TARGET_EXPR_SLOT (begin
);
8154 TARGET_EXPR_CLEANUP (begin
)
8155 = build3 (COND_EXPR
, void_type_node
, flag
,
8157 build_call_n (abort_fn
, 1, guard_addr
));
8158 CLEANUP_EH_ONLY (begin
) = 1;
8160 /* Do the initialization itself. */
8161 init
= add_stmt_to_compound (begin
, init
);
8162 init
= add_stmt_to_compound
8163 (init
, build2 (MODIFY_EXPR
, void_type_node
, flag
, boolean_true_node
));
8164 init
= add_stmt_to_compound
8165 (init
, build_call_n (release_fn
, 1, guard_addr
));
8168 init
= add_stmt_to_compound (init
, set_guard (guard
));
8170 /* Use atexit to register a function for destroying this static
8172 init
= add_stmt_to_compound (init
, register_dtor_fn (decl
));
8174 finish_expr_stmt (init
);
8178 finish_compound_stmt (inner_then_clause
);
8179 finish_then_clause (inner_if_stmt
);
8180 finish_if_stmt (inner_if_stmt
);
8183 finish_compound_stmt (then_clause
);
8184 finish_then_clause (if_stmt
);
8185 finish_if_stmt (if_stmt
);
8187 else if (CP_DECL_THREAD_LOCAL_P (decl
))
8188 tls_aggregates
= tree_cons (init
, decl
, tls_aggregates
);
8190 static_aggregates
= tree_cons (init
, decl
, static_aggregates
);
8194 /* Make TYPE a complete type based on INITIAL_VALUE.
8195 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8196 2 if there was no information (in which case assume 0 if DO_DEFAULT),
8197 3 if the initializer list is empty (in pedantic mode). */
8200 cp_complete_array_type (tree
*ptype
, tree initial_value
, bool do_default
)
8203 tree type
, elt_type
;
8205 /* Don't get confused by a CONSTRUCTOR for some other type. */
8206 if (initial_value
&& TREE_CODE (initial_value
) == CONSTRUCTOR
8207 && !BRACE_ENCLOSED_INITIALIZER_P (initial_value
)
8208 && TREE_CODE (TREE_TYPE (initial_value
)) != ARRAY_TYPE
)
8213 unsigned HOST_WIDE_INT i
;
8216 /* An array of character type can be initialized from a
8217 brace-enclosed string constant.
8219 FIXME: this code is duplicated from reshape_init. Probably
8220 we should just call reshape_init here? */
8221 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype
)))
8222 && TREE_CODE (initial_value
) == CONSTRUCTOR
8223 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value
)))
8225 vec
<constructor_elt
, va_gc
> *v
= CONSTRUCTOR_ELTS (initial_value
);
8226 tree value
= (*v
)[0].value
;
8228 if (TREE_CODE (value
) == STRING_CST
8229 && v
->length () == 1)
8230 initial_value
= value
;
8233 /* If any of the elements are parameter packs, we can't actually
8234 complete this type now because the array size is dependent. */
8235 if (TREE_CODE (initial_value
) == CONSTRUCTOR
)
8237 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value
),
8240 if (PACK_EXPANSION_P (value
))
8246 failure
= complete_array_type (ptype
, initial_value
, do_default
);
8248 /* We can create the array before the element type is complete, which
8249 means that we didn't have these two bits set in the original type
8250 either. In completing the type, we are expected to propagate these
8251 bits. See also complete_type which does the same thing for arrays
8254 if (TYPE_DOMAIN (type
))
8256 elt_type
= TREE_TYPE (type
);
8257 TYPE_NEEDS_CONSTRUCTING (type
) = TYPE_NEEDS_CONSTRUCTING (elt_type
);
8258 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type
)
8259 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type
);
8265 /* As above, but either give an error or reject zero-size arrays, depending
8269 cp_complete_array_type_or_error (tree
*ptype
, tree initial_value
,
8270 bool do_default
, tsubst_flags_t complain
)
8273 bool sfinae
= !(complain
& tf_error
);
8274 /* In SFINAE context we can't be lenient about zero-size arrays. */
8277 failure
= cp_complete_array_type (ptype
, initial_value
, do_default
);
8283 /* Not an error. */;
8284 else if (failure
== 1)
8285 error ("initializer fails to determine size of %qT", *ptype
);
8286 else if (failure
== 2)
8289 error ("array size missing in %qT", *ptype
);
8291 else if (failure
== 3)
8292 error ("zero-size array %qT", *ptype
);
8293 *ptype
= error_mark_node
;
8298 /* Return zero if something is declared to be a member of type
8299 CTYPE when in the context of CUR_TYPE. STRING is the error
8300 message to print in that case. Otherwise, quietly return 1. */
8303 member_function_or_else (tree ctype
, tree cur_type
, enum overload_flags flags
)
8305 if (ctype
&& ctype
!= cur_type
)
8307 if (flags
== DTOR_FLAG
)
8308 error ("destructor for alien class %qT cannot be a member", ctype
);
8310 error ("constructor for alien class %qT cannot be a member", ctype
);
8316 /* Subroutine of `grokdeclarator'. */
8318 /* Generate errors possibly applicable for a given set of specifiers.
8319 This is for ARM $7.1.2. */
8322 bad_specifiers (tree object
,
8323 enum bad_spec_place type
,
8334 error ("%qD declared as a %<virtual%> variable", object
);
8336 error ("%<const%> and %<volatile%> function specifiers on "
8337 "%qD invalid in variable declaration", object
);
8341 error ("%qD declared as a %<virtual%> parameter", object
);
8343 error ("%qD declared as an %<inline%> parameter", object
);
8345 error ("%<const%> and %<volatile%> function specifiers on "
8346 "%qD invalid in parameter declaration", object
);
8350 error ("%qD declared as a %<virtual%> type", object
);
8352 error ("%qD declared as an %<inline%> type", object
);
8354 error ("%<const%> and %<volatile%> function specifiers on "
8355 "%qD invalid in type declaration", object
);
8359 error ("%qD declared as a %<virtual%> field", object
);
8361 error ("%qD declared as an %<inline%> field", object
);
8363 error ("%<const%> and %<volatile%> function specifiers on "
8364 "%qD invalid in field declaration", object
);
8370 error ("%q+D declared as a friend", object
);
8372 && !flag_noexcept_type
8373 && (TREE_CODE (object
) == TYPE_DECL
8374 || (!TYPE_PTRFN_P (TREE_TYPE (object
))
8375 && !TYPE_REFFN_P (TREE_TYPE (object
))
8376 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object
)))))
8377 error ("%q+D declared with an exception specification", object
);
8380 /* DECL is a member function or static data member and is presently
8381 being defined. Check that the definition is taking place in a
8385 check_class_member_definition_namespace (tree decl
)
8387 /* These checks only apply to member functions and static data
8389 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl
));
8390 /* We check for problems with specializations in pt.c in
8391 check_specialization_namespace, where we can issue better
8393 if (processing_specialization
)
8395 /* We check this in check_explicit_instantiation_namespace. */
8396 if (processing_explicit_instantiation
)
8400 A member function definition that appears outside of the
8401 class definition shall appear in a namespace scope enclosing
8402 the class definition.
8406 The definition for a static data member shall appear in a
8407 namespace scope enclosing the member's class definition. */
8408 if (!is_ancestor (current_namespace
, DECL_CONTEXT (decl
)))
8409 permerror (input_location
, "definition of %qD is not in namespace enclosing %qT",
8410 decl
, DECL_CONTEXT (decl
));
8413 /* Build a PARM_DECL for the "this" parameter of FN. TYPE is the
8414 METHOD_TYPE for a non-static member function; QUALS are the
8415 cv-qualifiers that apply to the function. */
8418 build_this_parm (tree fn
, tree type
, cp_cv_quals quals
)
8423 cp_cv_quals this_quals
;
8425 if (CLASS_TYPE_P (type
))
8428 = cp_build_qualified_type (type
, quals
& ~TYPE_QUAL_RESTRICT
);
8429 this_type
= build_pointer_type (this_type
);
8432 this_type
= type_of_this_parm (type
);
8433 /* The `this' parameter is implicitly `const'; it cannot be
8435 this_quals
= (quals
& TYPE_QUAL_RESTRICT
) | TYPE_QUAL_CONST
;
8436 qual_type
= cp_build_qualified_type (this_type
, this_quals
);
8437 parm
= build_artificial_parm (fn
, this_identifier
, qual_type
);
8438 cp_apply_type_quals_to_decl (this_quals
, parm
);
8442 /* DECL is a static member function. Complain if it was declared
8443 with function-cv-quals. */
8446 check_static_quals (tree decl
, cp_cv_quals quals
)
8448 if (quals
!= TYPE_UNQUALIFIED
)
8449 error ("static member function %q#D declared with type qualifiers",
8453 // Check that FN takes no arguments and returns bool.
8455 check_concept_fn (tree fn
)
8457 // A constraint is nullary.
8458 if (DECL_ARGUMENTS (fn
))
8459 error ("concept %q#D declared with function parameters", fn
);
8461 // The declared return type of the concept shall be bool, and
8462 // it shall not be deduced from it definition.
8463 tree type
= TREE_TYPE (TREE_TYPE (fn
));
8465 error ("concept %q#D declared with a deduced return type", fn
);
8466 else if (type
!= boolean_type_node
)
8467 error ("concept %q#D with non-%<bool%> return type %qT", fn
, type
);
8470 /* Helper function. Replace the temporary this parameter injected
8471 during cp_finish_omp_declare_simd with the real this parameter. */
8474 declare_simd_adjust_this (tree
*tp
, int *walk_subtrees
, void *data
)
8476 tree this_parm
= (tree
) data
;
8477 if (TREE_CODE (*tp
) == PARM_DECL
8478 && DECL_NAME (*tp
) == this_identifier
8479 && *tp
!= this_parm
)
8481 else if (TYPE_P (*tp
))
8486 /* CTYPE is class type, or null if non-class.
8487 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8489 DECLARATOR is the function's name.
8490 PARMS is a chain of PARM_DECLs for the function.
8491 VIRTUALP is truthvalue of whether the function is virtual or not.
8492 FLAGS are to be passed through to `grokclassfn'.
8493 QUALS are qualifiers indicating whether the function is `const'
8495 RAISES is a list of exceptions that this function can raise.
8496 CHECK is 1 if we must find this method in CTYPE, 0 if we should
8497 not look, and -1 if we should not call `grokclassfn' at all.
8499 SFK is the kind of special function (if any) for the new function.
8501 Returns `NULL_TREE' if something goes wrong, after issuing
8502 applicable error messages. */
8505 grokfndecl (tree ctype
,
8509 tree orig_declarator
,
8512 enum overload_flags flags
,
8514 cp_ref_qualifier rqual
,
8521 special_function_kind sfk
,
8526 location_t location
)
8529 int staticp
= ctype
&& TREE_CODE (type
) == FUNCTION_TYPE
;
8532 // Was the concept specifier present?
8533 bool concept_p
= inlinep
& 4;
8535 // Concept declarations must have a corresponding definition.
8536 if (concept_p
&& !funcdef_flag
)
8538 error ("concept %qD has no definition", declarator
);
8543 type
= build_ref_qualified_type (type
, rqual
);
8545 type
= build_exception_variant (type
, raises
);
8547 decl
= build_lang_decl (FUNCTION_DECL
, declarator
, type
);
8549 /* Set the constraints on the declaration. */
8552 tree tmpl_reqs
= NULL_TREE
;
8553 if (processing_template_decl
> template_class_depth (ctype
))
8554 tmpl_reqs
= TEMPLATE_PARMS_CONSTRAINTS (current_template_parms
);
8556 /* Adjust the required expression into a constraint. */
8558 decl_reqs
= normalize_expression (decl_reqs
);
8560 tree ci
= build_constraints (tmpl_reqs
, decl_reqs
);
8561 set_constraints (decl
, ci
);
8564 /* If we have an explicit location, use it, otherwise use whatever
8565 build_lang_decl used (probably input_location). */
8566 if (location
!= UNKNOWN_LOCATION
)
8567 DECL_SOURCE_LOCATION (decl
) = location
;
8569 if (TREE_CODE (type
) == METHOD_TYPE
)
8571 tree parm
= build_this_parm (decl
, type
, quals
);
8572 DECL_CHAIN (parm
) = parms
;
8575 /* Allocate space to hold the vptr bit if needed. */
8576 SET_DECL_ALIGN (decl
, MINIMUM_METHOD_BOUNDARY
);
8579 DECL_ARGUMENTS (decl
) = parms
;
8580 for (t
= parms
; t
; t
= DECL_CHAIN (t
))
8581 DECL_CONTEXT (t
) = decl
;
8583 /* Propagate volatile out from type to decl. */
8584 if (TYPE_VOLATILE (type
))
8585 TREE_THIS_VOLATILE (decl
) = 1;
8587 /* Setup decl according to sfk. */
8590 case sfk_constructor
:
8591 case sfk_copy_constructor
:
8592 case sfk_move_constructor
:
8593 DECL_CXX_CONSTRUCTOR_P (decl
) = 1;
8594 DECL_NAME (decl
) = ctor_identifier
;
8596 case sfk_destructor
:
8597 DECL_CXX_DESTRUCTOR_P (decl
) = 1;
8598 DECL_NAME (decl
) = dtor_identifier
;
8604 if (friendp
&& TREE_CODE (orig_declarator
) == TEMPLATE_ID_EXPR
)
8607 error ("defining explicit specialization %qD in friend declaration",
8611 tree fns
= TREE_OPERAND (orig_declarator
, 0);
8612 tree args
= TREE_OPERAND (orig_declarator
, 1);
8614 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8616 /* Something like `template <class T> friend void f<T>()'. */
8617 error ("invalid use of template-id %qD in declaration "
8618 "of primary template",
8624 /* A friend declaration of the form friend void f<>(). Record
8625 the information in the TEMPLATE_ID_EXPR. */
8626 SET_DECL_IMPLICIT_INSTANTIATION (decl
);
8628 gcc_assert (identifier_p (fns
) || TREE_CODE (fns
) == OVERLOAD
);
8629 DECL_TEMPLATE_INFO (decl
) = build_template_info (fns
, args
);
8631 for (t
= TYPE_ARG_TYPES (TREE_TYPE (decl
)); t
; t
= TREE_CHAIN (t
))
8632 if (TREE_PURPOSE (t
)
8633 && TREE_CODE (TREE_PURPOSE (t
)) == DEFAULT_ARG
)
8635 error ("default arguments are not allowed in declaration "
8636 "of friend template specialization %qD",
8643 error ("%<inline%> is not allowed in declaration of friend "
8644 "template specialization %qD",
8651 /* If this decl has namespace scope, set that up. */
8653 set_decl_namespace (decl
, in_namespace
, friendp
);
8655 DECL_CONTEXT (decl
) = FROB_CONTEXT (current_decl_namespace ());
8657 /* `main' and builtins have implicit 'C' linkage. */
8658 if (ctype
== NULL_TREE
8659 && DECL_FILE_SCOPE_P (decl
)
8660 && current_lang_name
== lang_name_cplusplus
8661 && (MAIN_NAME_P (declarator
)
8662 || (IDENTIFIER_LENGTH (declarator
) > 10
8663 && IDENTIFIER_POINTER (declarator
)[0] == '_'
8664 && IDENTIFIER_POINTER (declarator
)[1] == '_'
8665 && strncmp (IDENTIFIER_POINTER (declarator
)+2,
8666 "builtin_", 8) == 0)
8667 || (targetcm
.cxx_implicit_extern_c
8668 && (targetcm
.cxx_implicit_extern_c
8669 (IDENTIFIER_POINTER (declarator
))))))
8670 SET_DECL_LANGUAGE (decl
, lang_c
);
8672 /* Should probably propagate const out from type to decl I bet (mrs). */
8675 DECL_STATIC_FUNCTION_P (decl
) = 1;
8676 DECL_CONTEXT (decl
) = ctype
;
8680 DECL_DELETED_FN (decl
) = 1;
8684 DECL_CONTEXT (decl
) = ctype
;
8686 check_class_member_definition_namespace (decl
);
8689 if (ctype
== NULL_TREE
&& DECL_MAIN_P (decl
))
8691 if (PROCESSING_REAL_TEMPLATE_DECL_P())
8692 error ("cannot declare %<::main%> to be a template");
8694 error ("cannot declare %<::main%> to be inline");
8696 error ("cannot declare %<::main%> to be %<constexpr%>");
8698 error ("cannot declare %<::main%> to be static");
8703 /* Members of anonymous types and local classes have no linkage; make
8704 them internal. If a typedef is made later, this will be changed. */
8705 if (ctype
&& (!TREE_PUBLIC (TYPE_MAIN_DECL (ctype
))
8706 || decl_function_context (TYPE_MAIN_DECL (ctype
))))
8709 if (publicp
&& cxx_dialect
== cxx98
)
8711 /* [basic.link]: A name with no linkage (notably, the name of a class
8712 or enumeration declared in a local scope) shall not be used to
8713 declare an entity with linkage.
8715 DR 757 relaxes this restriction for C++0x. */
8716 no_linkage_error (decl
);
8719 TREE_PUBLIC (decl
) = publicp
;
8722 DECL_INTERFACE_KNOWN (decl
) = 1;
8723 DECL_NOT_REALLY_EXTERN (decl
) = 1;
8726 /* If the declaration was declared inline, mark it as such. */
8729 DECL_DECLARED_INLINE_P (decl
) = 1;
8731 DECL_COMDAT (decl
) = 1;
8734 DECL_DECLARED_CONSTEXPR_P (decl
) = true;
8736 // If the concept declaration specifier was found, check
8737 // that the declaration satisfies the necessary requirements.
8740 DECL_DECLARED_CONCEPT_P (decl
) = true;
8741 check_concept_fn (decl
);
8744 DECL_EXTERNAL (decl
) = 1;
8745 if (TREE_CODE (type
) == FUNCTION_TYPE
)
8748 TREE_TYPE (decl
) = apply_memfn_quals (TREE_TYPE (decl
),
8755 ? G_("static member function %qD cannot have cv-qualifier")
8756 : G_("non-member function %qD cannot have cv-qualifier"),
8758 quals
= TYPE_UNQUALIFIED
;
8764 ? G_("static member function %qD cannot have ref-qualifier")
8765 : G_("non-member function %qD cannot have ref-qualifier"),
8767 rqual
= REF_QUAL_NONE
;
8771 if (deduction_guide_p (decl
))
8773 if (!DECL_NAMESPACE_SCOPE_P (decl
))
8775 error_at (location
, "deduction guide %qD must be declared at "
8776 "namespace scope", decl
);
8781 "deduction guide %qD must not have a function body", decl
);
8783 else if (IDENTIFIER_ANY_OP_P (DECL_NAME (decl
))
8784 && !grok_op_properties (decl
, /*complain=*/true))
8786 else if (UDLIT_OPER_P (DECL_NAME (decl
)))
8788 bool long_long_unsigned_p
;
8790 const char *suffix
= NULL
;
8791 /* [over.literal]/6: Literal operators shall not have C linkage. */
8792 if (DECL_LANGUAGE (decl
) == lang_c
)
8794 error ("literal operator with C linkage");
8795 maybe_show_extern_c_location ();
8799 if (DECL_NAMESPACE_SCOPE_P (decl
))
8801 if (!check_literal_operator_args (decl
, &long_long_unsigned_p
,
8804 error ("%qD has invalid argument list", decl
);
8808 suffix
= UDLIT_OP_SUFFIX (DECL_NAME (decl
));
8809 if (long_long_unsigned_p
)
8811 if (cpp_interpret_int_suffix (parse_in
, suffix
, strlen (suffix
)))
8812 warning (0, "integer suffix %qs"
8813 " shadowed by implementation", suffix
);
8815 else if (long_double_p
)
8817 if (cpp_interpret_float_suffix (parse_in
, suffix
, strlen (suffix
)))
8818 warning (0, "floating point suffix %qs"
8819 " shadowed by implementation", suffix
);
8824 error ("%qD must be a non-member function", decl
);
8830 /* Make the init_value nonzero so pushdecl knows this is not
8831 tentative. error_mark_node is replaced later with the BLOCK. */
8832 DECL_INITIAL (decl
) = error_mark_node
;
8834 if (TYPE_NOTHROW_P (type
) || nothrow_libfn_p (decl
))
8835 TREE_NOTHROW (decl
) = 1;
8837 if (flag_openmp
|| flag_openmp_simd
)
8839 /* Adjust "omp declare simd" attributes. */
8840 tree ods
= lookup_attribute ("omp declare simd", *attrlist
);
8844 for (attr
= ods
; attr
;
8845 attr
= lookup_attribute ("omp declare simd", TREE_CHAIN (attr
)))
8847 if (TREE_CODE (type
) == METHOD_TYPE
)
8848 walk_tree (&TREE_VALUE (attr
), declare_simd_adjust_this
,
8849 DECL_ARGUMENTS (decl
), NULL
);
8850 if (TREE_VALUE (attr
) != NULL_TREE
)
8852 tree cl
= TREE_VALUE (TREE_VALUE (attr
));
8853 cl
= c_omp_declare_simd_clauses_to_numbers
8854 (DECL_ARGUMENTS (decl
), cl
);
8856 TREE_VALUE (TREE_VALUE (attr
)) = cl
;
8858 TREE_VALUE (attr
) = NULL_TREE
;
8864 /* Caller will do the rest of this. */
8868 if (ctype
!= NULL_TREE
)
8869 grokclassfn (ctype
, decl
, flags
);
8872 if (cxx_dialect
>= cxx11
8873 && DECL_DESTRUCTOR_P (decl
)
8874 && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl
))
8875 && !processing_template_decl
)
8876 deduce_noexcept_on_destructor (decl
);
8878 decl
= check_explicit_specialization (orig_declarator
, decl
,
8881 4 * (friendp
!= 0) +
8883 if (decl
== error_mark_node
)
8886 if (DECL_STATIC_FUNCTION_P (decl
))
8887 check_static_quals (decl
, quals
);
8891 cplus_decl_attributes (&decl
, *attrlist
, 0);
8892 *attrlist
= NULL_TREE
;
8895 /* Check main's type after attributes have been applied. */
8896 if (ctype
== NULL_TREE
&& DECL_MAIN_P (decl
))
8898 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl
)),
8901 tree oldtypeargs
= TYPE_ARG_TYPES (TREE_TYPE (decl
));
8903 error ("%<::main%> must return %<int%>");
8904 newtype
= build_function_type (integer_type_node
, oldtypeargs
);
8905 TREE_TYPE (decl
) = newtype
;
8908 check_main_parameter_types (decl
);
8911 if (ctype
!= NULL_TREE
&& check
)
8913 tree old_decl
= check_classfn (ctype
, decl
,
8914 (processing_template_decl
8915 > template_class_depth (ctype
))
8916 ? current_template_parms
8919 if (old_decl
== error_mark_node
)
8927 if (TREE_CODE (old_decl
) == TEMPLATE_DECL
)
8928 /* Because grokfndecl is always supposed to return a
8929 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
8930 here. We depend on our callers to figure out that its
8931 really a template that's being returned. */
8932 old_decl
= DECL_TEMPLATE_RESULT (old_decl
);
8934 if (DECL_STATIC_FUNCTION_P (old_decl
)
8935 && TREE_CODE (TREE_TYPE (decl
)) == METHOD_TYPE
)
8937 /* Remove the `this' parm added by grokclassfn. */
8938 revert_static_member_fn (decl
);
8939 check_static_quals (decl
, quals
);
8941 if (DECL_ARTIFICIAL (old_decl
))
8943 error ("definition of implicitly-declared %qD", old_decl
);
8946 else if (DECL_DEFAULTED_FN (old_decl
))
8948 error ("definition of explicitly-defaulted %q+D", decl
);
8949 inform (DECL_SOURCE_LOCATION (old_decl
),
8950 "%q#D explicitly defaulted here", old_decl
);
8954 /* Since we've smashed OLD_DECL to its
8955 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
8956 if (TREE_CODE (decl
) == TEMPLATE_DECL
)
8957 decl
= DECL_TEMPLATE_RESULT (decl
);
8959 /* Attempt to merge the declarations. This can fail, in
8960 the case of some invalid specialization declarations. */
8961 pushed_scope
= push_scope (ctype
);
8962 ok
= duplicate_decls (decl
, old_decl
, friendp
);
8964 pop_scope (pushed_scope
);
8967 error ("no %q#D member function declared in class %qT",
8971 if (ok
== error_mark_node
)
8977 if (DECL_CONSTRUCTOR_P (decl
) && !grok_ctor_properties (ctype
, decl
))
8980 if (ctype
== NULL_TREE
|| check
)
8984 DECL_VIRTUAL_P (decl
) = 1;
8989 /* decl is a FUNCTION_DECL.
8990 specifiers are the parsed virt-specifiers.
8992 Set flags to reflect the virt-specifiers.
8997 set_virt_specifiers (tree decl
, cp_virt_specifiers specifiers
)
8999 if (decl
== NULL_TREE
)
9001 if (specifiers
& VIRT_SPEC_OVERRIDE
)
9002 DECL_OVERRIDE_P (decl
) = 1;
9003 if (specifiers
& VIRT_SPEC_FINAL
)
9004 DECL_FINAL_P (decl
) = 1;
9008 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
9009 the linkage that DECL will receive in the object file. */
9012 set_linkage_for_static_data_member (tree decl
)
9014 /* A static data member always has static storage duration and
9015 external linkage. Note that static data members are forbidden in
9016 local classes -- the only situation in which a class has
9017 non-external linkage. */
9018 TREE_PUBLIC (decl
) = 1;
9019 TREE_STATIC (decl
) = 1;
9020 /* For non-template classes, static data members are always put
9021 out in exactly those files where they are defined, just as
9022 with ordinary namespace-scope variables. */
9023 if (!processing_template_decl
)
9024 DECL_INTERFACE_KNOWN (decl
) = 1;
9027 /* Create a VAR_DECL named NAME with the indicated TYPE.
9029 If SCOPE is non-NULL, it is the class type or namespace containing
9030 the variable. If SCOPE is NULL, the variable should is created in
9031 the innermost enclosing scope. */
9034 grokvardecl (tree type
,
9036 tree orig_declarator
,
9037 const cp_decl_specifier_seq
*declspecs
,
9046 tree explicit_scope
;
9048 gcc_assert (!name
|| identifier_p (name
));
9050 bool constp
= (type_quals
& TYPE_QUAL_CONST
) != 0;
9051 bool volatilep
= (type_quals
& TYPE_QUAL_VOLATILE
) != 0;
9053 /* Compute the scope in which to place the variable, but remember
9054 whether or not that scope was explicitly specified by the user. */
9055 explicit_scope
= scope
;
9058 /* An explicit "extern" specifier indicates a namespace-scope
9060 if (declspecs
->storage_class
== sc_extern
)
9061 scope
= current_decl_namespace ();
9062 else if (!at_function_scope_p ())
9063 scope
= current_scope ();
9067 && (/* If the variable is a namespace-scope variable declared in a
9068 template, we need DECL_LANG_SPECIFIC. */
9069 (TREE_CODE (scope
) == NAMESPACE_DECL
&& processing_template_decl
)
9070 /* Similarly for namespace-scope variables with language linkage
9072 || (TREE_CODE (scope
) == NAMESPACE_DECL
9073 && current_lang_name
!= lang_name_cplusplus
)
9074 /* Similarly for static data members. */
9076 /* Similarly for explicit specializations. */
9078 && TREE_CODE (orig_declarator
) == TEMPLATE_ID_EXPR
)))
9079 decl
= build_lang_decl (VAR_DECL
, name
, type
);
9081 decl
= build_decl (input_location
, VAR_DECL
, name
, type
);
9083 if (explicit_scope
&& TREE_CODE (explicit_scope
) == NAMESPACE_DECL
)
9084 set_decl_namespace (decl
, explicit_scope
, 0);
9086 DECL_CONTEXT (decl
) = FROB_CONTEXT (scope
);
9088 if (declspecs
->storage_class
== sc_extern
)
9090 DECL_THIS_EXTERN (decl
) = 1;
9091 DECL_EXTERNAL (decl
) = !initialized
;
9094 if (DECL_CLASS_SCOPE_P (decl
))
9096 set_linkage_for_static_data_member (decl
);
9097 /* This function is only called with out-of-class definitions. */
9098 DECL_EXTERNAL (decl
) = 0;
9099 check_class_member_definition_namespace (decl
);
9101 /* At top level, either `static' or no s.c. makes a definition
9102 (perhaps tentative), and absence of `static' makes it public. */
9103 else if (toplevel_bindings_p ())
9105 TREE_PUBLIC (decl
) = (declspecs
->storage_class
!= sc_static
9106 && (DECL_THIS_EXTERN (decl
)
9110 TREE_STATIC (decl
) = ! DECL_EXTERNAL (decl
);
9112 /* Not at top level, only `static' makes a static definition. */
9115 TREE_STATIC (decl
) = declspecs
->storage_class
== sc_static
;
9116 TREE_PUBLIC (decl
) = DECL_EXTERNAL (decl
);
9119 if (decl_spec_seq_has_spec_p (declspecs
, ds_thread
))
9121 if (DECL_EXTERNAL (decl
) || TREE_STATIC (decl
))
9123 CP_DECL_THREAD_LOCAL_P (decl
) = true;
9124 if (!processing_template_decl
)
9125 set_decl_tls_model (decl
, decl_default_tls_model (decl
));
9127 if (declspecs
->gnu_thread_keyword_p
)
9128 SET_DECL_GNU_TLS_P (decl
);
9131 /* If the type of the decl has no linkage, make sure that we'll
9132 notice that in mark_used. */
9133 if (cxx_dialect
> cxx98
9134 && decl_linkage (decl
) != lk_none
9135 && DECL_LANG_SPECIFIC (decl
) == NULL
9136 && !DECL_EXTERN_C_P (decl
)
9137 && no_linkage_check (TREE_TYPE (decl
), /*relaxed_p=*/false))
9138 retrofit_lang_decl (decl
);
9140 if (TREE_PUBLIC (decl
))
9142 /* [basic.link]: A name with no linkage (notably, the name of a class
9143 or enumeration declared in a local scope) shall not be used to
9144 declare an entity with linkage.
9146 DR 757 relaxes this restriction for C++0x. */
9147 if (cxx_dialect
< cxx11
)
9148 no_linkage_error (decl
);
9151 DECL_INTERFACE_KNOWN (decl
) = 1;
9153 if (DECL_NAME (decl
)
9154 && MAIN_NAME_P (DECL_NAME (decl
))
9155 && scope
== global_namespace
)
9156 error ("cannot declare %<::main%> to be a global variable");
9158 /* Check that the variable can be safely declared as a concept.
9159 Note that this also forbids explicit specializations. */
9162 if (!processing_template_decl
)
9164 error ("a non-template variable cannot be %<concept%>");
9168 DECL_DECLARED_CONCEPT_P (decl
) = true;
9169 if (!same_type_ignoring_top_level_qualifiers_p (type
, boolean_type_node
))
9170 error_at (declspecs
->locations
[ds_type_spec
],
9171 "concept must have type %<bool%>");
9173 else if (flag_concepts
9174 && processing_template_decl
> template_class_depth (scope
))
9176 tree reqs
= TEMPLATE_PARMS_CONSTRAINTS (current_template_parms
);
9177 tree ci
= build_constraints (reqs
, NULL_TREE
);
9178 set_constraints (decl
, ci
);
9181 // Handle explicit specializations and instantiations of variable templates.
9182 if (orig_declarator
)
9183 decl
= check_explicit_specialization (orig_declarator
, decl
,
9184 template_count
, conceptp
* 8);
9186 return decl
!= error_mark_node
? decl
: NULL_TREE
;
9189 /* Create and return a canonical pointer to member function type, for
9190 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
9193 build_ptrmemfunc_type (tree type
)
9198 if (type
== error_mark_node
)
9201 /* Make sure that we always have the unqualified pointer-to-member
9203 if (cp_cv_quals quals
= cp_type_quals (type
))
9205 tree unqual
= build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type
));
9206 return cp_build_qualified_type (unqual
, quals
);
9209 /* If a canonical type already exists for this type, use it. We use
9210 this method instead of type_hash_canon, because it only does a
9211 simple equality check on the list of field members. */
9213 t
= TYPE_PTRMEMFUNC_TYPE (type
);
9217 t
= make_node (RECORD_TYPE
);
9219 /* Let the front end know this is a pointer to member function. */
9220 TYPE_PTRMEMFUNC_FLAG (t
) = 1;
9222 field
= build_decl (input_location
, FIELD_DECL
, pfn_identifier
, type
);
9225 field
= build_decl (input_location
, FIELD_DECL
, delta_identifier
,
9227 DECL_CHAIN (field
) = fields
;
9230 finish_builtin_struct (t
, "__ptrmemfunc_type", fields
, ptr_type_node
);
9232 /* Zap out the name so that the back end will give us the debugging
9233 information for this anonymous RECORD_TYPE. */
9234 TYPE_NAME (t
) = NULL_TREE
;
9236 /* Cache this pointer-to-member type so that we can find it again
9238 TYPE_PTRMEMFUNC_TYPE (type
) = t
;
9240 if (TYPE_STRUCTURAL_EQUALITY_P (type
))
9241 SET_TYPE_STRUCTURAL_EQUALITY (t
);
9242 else if (TYPE_CANONICAL (type
) != type
)
9243 TYPE_CANONICAL (t
) = build_ptrmemfunc_type (TYPE_CANONICAL (type
));
9248 /* Create and return a pointer to data member type. */
9251 build_ptrmem_type (tree class_type
, tree member_type
)
9253 if (TREE_CODE (member_type
) == METHOD_TYPE
)
9255 cp_cv_quals quals
= type_memfn_quals (member_type
);
9256 cp_ref_qualifier rqual
= type_memfn_rqual (member_type
);
9257 member_type
= build_memfn_type (member_type
, class_type
, quals
, rqual
);
9258 return build_ptrmemfunc_type (build_pointer_type (member_type
));
9262 gcc_assert (TREE_CODE (member_type
) != FUNCTION_TYPE
);
9263 return build_offset_type (class_type
, member_type
);
9267 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9268 Check to see that the definition is valid. Issue appropriate error
9269 messages. Return 1 if the definition is particularly bad, or 0
9273 check_static_variable_definition (tree decl
, tree type
)
9275 /* Avoid redundant diagnostics on out-of-class definitions. */
9276 if (!current_class_type
|| !TYPE_BEING_DEFINED (current_class_type
))
9278 /* Can't check yet if we don't know the type. */
9279 if (dependent_type_p (type
))
9281 /* If DECL is declared constexpr, we'll do the appropriate checks
9282 in check_initializer. Similarly for inline static data members. */
9284 && (DECL_DECLARED_CONSTEXPR_P (decl
)
9285 || DECL_VAR_DECLARED_INLINE_P (decl
)))
9287 else if (cxx_dialect
>= cxx11
&& !INTEGRAL_OR_ENUMERATION_TYPE_P (type
))
9289 if (!COMPLETE_TYPE_P (type
))
9290 error_at (DECL_SOURCE_LOCATION (decl
),
9291 "in-class initialization of static data member %q#D of "
9292 "incomplete type", decl
);
9293 else if (literal_type_p (type
))
9294 permerror (DECL_SOURCE_LOCATION (decl
),
9295 "%<constexpr%> needed for in-class initialization of "
9296 "static data member %q#D of non-integral type", decl
);
9298 error_at (DECL_SOURCE_LOCATION (decl
),
9299 "in-class initialization of static data member %q#D of "
9300 "non-literal type", decl
);
9304 /* Motion 10 at San Diego: If a static const integral data member is
9305 initialized with an integral constant expression, the initializer
9306 may appear either in the declaration (within the class), or in
9307 the definition, but not both. If it appears in the class, the
9308 member is a member constant. The file-scope definition is always
9310 if (!ARITHMETIC_TYPE_P (type
) && TREE_CODE (type
) != ENUMERAL_TYPE
)
9312 error_at (DECL_SOURCE_LOCATION (decl
),
9313 "invalid in-class initialization of static data member "
9314 "of non-integral type %qT",
9318 else if (!CP_TYPE_CONST_P (type
))
9319 error_at (DECL_SOURCE_LOCATION (decl
),
9320 "ISO C++ forbids in-class initialization of non-const "
9321 "static member %qD",
9323 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type
))
9324 pedwarn (DECL_SOURCE_LOCATION (decl
), OPT_Wpedantic
,
9325 "ISO C++ forbids initialization of member constant "
9326 "%qD of non-integral type %qT", decl
, type
);
9331 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
9332 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
9333 expressions out into temporary variables so that walk_tree doesn't
9334 step into them (c++/15764). */
9337 stabilize_save_expr_r (tree
*expr_p
, int *walk_subtrees
, void *data
)
9339 hash_set
<tree
> *pset
= (hash_set
<tree
> *)data
;
9340 tree expr
= *expr_p
;
9341 if (TREE_CODE (expr
) == SAVE_EXPR
)
9343 tree op
= TREE_OPERAND (expr
, 0);
9344 cp_walk_tree (&op
, stabilize_save_expr_r
, data
, pset
);
9345 if (TREE_SIDE_EFFECTS (op
))
9346 TREE_OPERAND (expr
, 0) = get_temp_regvar (TREE_TYPE (op
), op
);
9349 else if (!EXPR_P (expr
) || !TREE_SIDE_EFFECTS (expr
))
9354 /* Entry point for the above. */
9357 stabilize_vla_size (tree size
)
9359 hash_set
<tree
> pset
;
9360 /* Break out any function calls into temporary variables. */
9361 cp_walk_tree (&size
, stabilize_save_expr_r
, &pset
, &pset
);
9364 /* Reduce a SIZEOF_EXPR to its value. */
9367 fold_sizeof_expr (tree t
)
9370 if (SIZEOF_EXPR_TYPE_P (t
))
9371 r
= cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (t
, 0)),
9372 SIZEOF_EXPR
, false);
9373 else if (TYPE_P (TREE_OPERAND (t
, 0)))
9374 r
= cxx_sizeof_or_alignof_type (TREE_OPERAND (t
, 0), SIZEOF_EXPR
,
9377 r
= cxx_sizeof_or_alignof_expr (TREE_OPERAND (t
, 0), SIZEOF_EXPR
,
9379 if (r
== error_mark_node
)
9384 /* Given the SIZE (i.e., number of elements) in an array, compute
9385 an appropriate index type for the array. If non-NULL, NAME is
9386 the name of the entity being declared. */
9389 compute_array_index_type (tree name
, tree size
, tsubst_flags_t complain
)
9394 if (error_operand_p (size
))
9395 return error_mark_node
;
9397 if (!type_dependent_expression_p (size
))
9399 tree type
= TREE_TYPE (size
);
9401 size
= mark_rvalue_use (size
);
9403 if (cxx_dialect
< cxx11
&& TREE_CODE (size
) == NOP_EXPR
9404 && TREE_SIDE_EFFECTS (size
))
9405 /* In C++98, we mark a non-constant array bound with a magic
9406 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
9409 size
= instantiate_non_dependent_expr_sfinae (size
, complain
);
9411 if (CLASS_TYPE_P (type
)
9412 && CLASSTYPE_LITERAL_P (type
))
9414 size
= build_expr_type_conversion (WANT_INT
, size
, true);
9417 if (!(complain
& tf_error
))
9418 return error_mark_node
;
9420 error ("size of array %qD has non-integral type %qT",
9423 error ("size of array has non-integral type %qT", type
);
9424 size
= integer_one_node
;
9426 if (size
== error_mark_node
)
9427 return error_mark_node
;
9428 type
= TREE_TYPE (size
);
9431 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type
))
9432 size
= maybe_constant_value (size
);
9434 if (!TREE_CONSTANT (size
))
9438 if (error_operand_p (size
))
9439 return error_mark_node
;
9441 /* The array bound must be an integer type. */
9442 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type
))
9444 if (!(complain
& tf_error
))
9445 return error_mark_node
;
9447 error ("size of array %qD has non-integral type %qT", name
, type
);
9449 error ("size of array has non-integral type %qT", type
);
9450 size
= integer_one_node
;
9451 type
= TREE_TYPE (size
);
9455 /* A type is dependent if it is...an array type constructed from any
9456 dependent type or whose size is specified by a constant expression
9457 that is value-dependent. */
9458 /* We can only call value_dependent_expression_p on integral constant
9459 expressions; treat non-constant expressions as dependent, too. */
9460 if (processing_template_decl
9461 && (type_dependent_expression_p (size
)
9462 || !TREE_CONSTANT (size
) || value_dependent_expression_p (size
)))
9464 /* We cannot do any checking for a SIZE that isn't known to be
9465 constant. Just build the index type and mark that it requires
9466 structural equality checks. */
9467 itype
= build_index_type (build_min (MINUS_EXPR
, sizetype
,
9468 size
, size_one_node
));
9469 TYPE_DEPENDENT_P (itype
) = 1;
9470 TYPE_DEPENDENT_P_VALID (itype
) = 1;
9471 SET_TYPE_STRUCTURAL_EQUALITY (itype
);
9475 if (TREE_CODE (size
) != INTEGER_CST
)
9477 tree folded
= cp_fully_fold (size
);
9478 if (TREE_CODE (folded
) == INTEGER_CST
)
9479 pedwarn (location_of (size
), OPT_Wpedantic
,
9480 "size of array is not an integral constant-expression");
9481 /* Use the folded result for VLAs, too; it will have resolved
9486 /* Normally, the array-bound will be a constant. */
9487 if (TREE_CODE (size
) == INTEGER_CST
)
9489 /* Check to see if the array bound overflowed. Make that an
9490 error, no matter how generous we're being. */
9491 constant_expression_error (size
);
9493 /* An array must have a positive number of elements. */
9494 if (tree_int_cst_lt (size
, integer_zero_node
))
9496 if (!(complain
& tf_error
))
9497 return error_mark_node
;
9499 error ("size of array %qD is negative", name
);
9501 error ("size of array is negative");
9502 size
= integer_one_node
;
9504 /* As an extension we allow zero-sized arrays. */
9505 else if (integer_zerop (size
))
9507 if (!(complain
& tf_error
))
9508 /* We must fail if performing argument deduction (as
9509 indicated by the state of complain), so that
9510 another substitution can be found. */
9511 return error_mark_node
;
9512 else if (in_system_header_at (input_location
))
9513 /* Allow them in system headers because glibc uses them. */;
9515 pedwarn (input_location
, OPT_Wpedantic
, "ISO C++ forbids zero-size array %qD", name
);
9517 pedwarn (input_location
, OPT_Wpedantic
, "ISO C++ forbids zero-size array");
9520 else if (TREE_CONSTANT (size
)
9521 /* We don't allow VLAs at non-function scopes, or during
9522 tentative template substitution. */
9523 || !at_function_scope_p ()
9524 || !(complain
& tf_error
))
9526 if (!(complain
& tf_error
))
9527 return error_mark_node
;
9528 /* `(int) &fn' is not a valid array bound. */
9530 error ("size of array %qD is not an integral constant-expression",
9533 error ("size of array is not an integral constant-expression");
9534 size
= integer_one_node
;
9536 else if (pedantic
&& warn_vla
!= 0)
9539 pedwarn (input_location
, OPT_Wvla
, "ISO C++ forbids variable length array %qD", name
);
9541 pedwarn (input_location
, OPT_Wvla
, "ISO C++ forbids variable length array");
9543 else if (warn_vla
> 0)
9547 "variable length array %qD is used", name
);
9550 "variable length array is used");
9553 if (processing_template_decl
&& !TREE_CONSTANT (size
))
9554 /* A variable sized array. */
9555 itype
= build_min (MINUS_EXPR
, sizetype
, size
, integer_one_node
);
9558 /* Compute the index of the largest element in the array. It is
9559 one less than the number of elements in the array. We save
9560 and restore PROCESSING_TEMPLATE_DECL so that computations in
9561 cp_build_binary_op will be appropriately folded. */
9563 processing_template_decl_sentinel s
;
9564 itype
= cp_build_binary_op (input_location
,
9566 cp_convert (ssizetype
, size
, complain
),
9567 cp_convert (ssizetype
, integer_one_node
,
9570 itype
= maybe_constant_value (itype
);
9573 if (!TREE_CONSTANT (itype
))
9575 /* A variable sized array. */
9576 itype
= variable_size (itype
);
9578 stabilize_vla_size (itype
);
9580 if (sanitize_flags_p (SANITIZE_VLA
)
9581 && current_function_decl
!= NULL_TREE
)
9583 /* We have to add 1 -- in the ubsan routine we generate
9584 LE_EXPR rather than LT_EXPR. */
9585 tree t
= fold_build2 (PLUS_EXPR
, TREE_TYPE (itype
), itype
,
9586 build_one_cst (TREE_TYPE (itype
)));
9587 t
= ubsan_instrument_vla (input_location
, t
);
9588 finish_expr_stmt (t
);
9591 /* Make sure that there was no overflow when creating to a signed
9592 index type. (For example, on a 32-bit machine, an array with
9593 size 2^32 - 1 is too big.) */
9594 else if (TREE_CODE (itype
) == INTEGER_CST
9595 && TREE_OVERFLOW (itype
))
9597 if (!(complain
& tf_error
))
9598 return error_mark_node
;
9599 error ("overflow in array dimension");
9600 TREE_OVERFLOW (itype
) = 0;
9604 /* Create and return the appropriate index type. */
9605 itype
= build_index_type (itype
);
9607 /* If the index type were dependent, we would have returned early, so
9608 remember that it isn't. */
9609 TYPE_DEPENDENT_P (itype
) = 0;
9610 TYPE_DEPENDENT_P_VALID (itype
) = 1;
9614 /* Returns the scope (if any) in which the entity declared by
9615 DECLARATOR will be located. If the entity was declared with an
9616 unqualified name, NULL_TREE is returned. */
9619 get_scope_of_declarator (const cp_declarator
*declarator
)
9621 while (declarator
&& declarator
->kind
!= cdk_id
)
9622 declarator
= declarator
->declarator
;
9624 /* If the declarator-id is a SCOPE_REF, the scope in which the
9625 declaration occurs is the first operand. */
9627 && declarator
->u
.id
.qualifying_scope
)
9628 return declarator
->u
.id
.qualifying_scope
;
9630 /* Otherwise, the declarator is not a qualified name; the entity will
9631 be declared in the current scope. */
9635 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
9636 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9640 create_array_type_for_decl (tree name
, tree type
, tree size
)
9642 tree itype
= NULL_TREE
;
9644 /* If things have already gone awry, bail now. */
9645 if (type
== error_mark_node
|| size
== error_mark_node
)
9646 return error_mark_node
;
9648 /* 8.3.4/1: If the type of the identifier of D contains the auto
9649 type-specifier, the program is ill-formed. */
9650 if (type_uses_auto (type
))
9652 error ("%qD declared as array of %qT", name
, type
);
9653 return error_mark_node
;
9656 /* If there are some types which cannot be array elements,
9657 issue an error-message and return. */
9658 switch (TREE_CODE (type
))
9662 error ("declaration of %qD as array of void", name
);
9664 error ("creating array of void");
9665 return error_mark_node
;
9669 error ("declaration of %qD as array of functions", name
);
9671 error ("creating array of functions");
9672 return error_mark_node
;
9674 case REFERENCE_TYPE
:
9676 error ("declaration of %qD as array of references", name
);
9678 error ("creating array of references");
9679 return error_mark_node
;
9683 error ("declaration of %qD as array of function members", name
);
9685 error ("creating array of function members");
9686 return error_mark_node
;
9694 The constant expressions that specify the bounds of the arrays
9695 can be omitted only for the first member of the sequence. */
9696 if (TREE_CODE (type
) == ARRAY_TYPE
&& !TYPE_DOMAIN (type
))
9699 error ("declaration of %qD as multidimensional array must "
9700 "have bounds for all dimensions except the first",
9703 error ("multidimensional array must have bounds for all "
9704 "dimensions except the first");
9706 return error_mark_node
;
9709 /* Figure out the index type for the array. */
9711 itype
= compute_array_index_type (name
, size
, tf_warning_or_error
);
9714 T is called the array element type; this type shall not be [...] an
9715 abstract class type. */
9716 abstract_virtuals_error (name
, type
);
9718 return build_cplus_array_type (type
, itype
);
9721 /* Returns the smallest location != UNKNOWN_LOCATION among the
9722 three stored in LOCATIONS[ds_const], LOCATIONS[ds_volatile],
9723 and LOCATIONS[ds_restrict]. */
9726 smallest_type_quals_location (int type_quals
, const location_t
* locations
)
9728 location_t loc
= UNKNOWN_LOCATION
;
9730 if (type_quals
& TYPE_QUAL_CONST
)
9731 loc
= locations
[ds_const
];
9733 if ((type_quals
& TYPE_QUAL_VOLATILE
)
9734 && (loc
== UNKNOWN_LOCATION
|| locations
[ds_volatile
] < loc
))
9735 loc
= locations
[ds_volatile
];
9737 if ((type_quals
& TYPE_QUAL_RESTRICT
)
9738 && (loc
== UNKNOWN_LOCATION
|| locations
[ds_restrict
] < loc
))
9739 loc
= locations
[ds_restrict
];
9744 /* Check that it's OK to declare a function with the indicated TYPE
9745 and TYPE_QUALS. SFK indicates the kind of special function (if any)
9746 that this function is. OPTYPE is the type given in a conversion
9747 operator declaration, or the class type for a constructor/destructor.
9748 Returns the actual return type of the function; that may be different
9749 than TYPE if an error occurs, or for certain special functions. */
9752 check_special_function_return_type (special_function_kind sfk
,
9756 const location_t
* locations
)
9760 case sfk_constructor
:
9762 error ("return type specification for constructor invalid");
9763 else if (type_quals
!= TYPE_UNQUALIFIED
)
9764 error_at (smallest_type_quals_location (type_quals
, locations
),
9765 "qualifiers are not allowed on constructor declaration");
9767 if (targetm
.cxx
.cdtor_returns_this ())
9768 type
= build_pointer_type (optype
);
9770 type
= void_type_node
;
9773 case sfk_destructor
:
9775 error ("return type specification for destructor invalid");
9776 else if (type_quals
!= TYPE_UNQUALIFIED
)
9777 error_at (smallest_type_quals_location (type_quals
, locations
),
9778 "qualifiers are not allowed on destructor declaration");
9780 /* We can't use the proper return type here because we run into
9781 problems with ambiguous bases and covariant returns. */
9782 if (targetm
.cxx
.cdtor_returns_this ())
9783 type
= build_pointer_type (void_type_node
);
9785 type
= void_type_node
;
9788 case sfk_conversion
:
9790 error ("return type specified for %<operator %T%>", optype
);
9791 else if (type_quals
!= TYPE_UNQUALIFIED
)
9792 error_at (smallest_type_quals_location (type_quals
, locations
),
9793 "qualifiers are not allowed on declaration of "
9794 "%<operator %T%>", optype
);
9799 case sfk_deduction_guide
:
9801 error ("return type specified for deduction guide");
9802 else if (type_quals
!= TYPE_UNQUALIFIED
)
9803 error_at (smallest_type_quals_location (type_quals
, locations
),
9804 "qualifiers are not allowed on declaration of "
9806 type
= make_template_placeholder (CLASSTYPE_TI_TEMPLATE (optype
));
9807 for (int i
= 0; i
< ds_last
; ++i
)
9808 if (i
!= ds_explicit
&& locations
[i
])
9809 error_at (locations
[i
],
9810 "decl-specifier in declaration of deduction guide");
9820 /* A variable or data member (whose unqualified name is IDENTIFIER)
9821 has been declared with the indicated TYPE. If the TYPE is not
9822 acceptable, issue an error message and return a type to use for
9823 error-recovery purposes. */
9826 check_var_type (tree identifier
, tree type
)
9828 if (VOID_TYPE_P (type
))
9831 error ("unnamed variable or field declared void");
9832 else if (identifier_p (identifier
))
9834 gcc_assert (!IDENTIFIER_ANY_OP_P (identifier
));
9835 error ("variable or field %qE declared void", identifier
);
9838 error ("variable or field declared void");
9839 type
= error_mark_node
;
9845 /* Handle declaring DECL as an inline variable. */
9848 mark_inline_variable (tree decl
)
9850 bool inlinep
= true;
9851 if (! toplevel_bindings_p ())
9853 error ("%<inline%> specifier invalid for variable "
9854 "%qD declared at block scope", decl
);
9857 else if (cxx_dialect
< cxx17
)
9858 pedwarn (DECL_SOURCE_LOCATION (decl
), 0,
9859 "inline variables are only available "
9860 "with -std=c++17 or -std=gnu++17");
9863 retrofit_lang_decl (decl
);
9864 SET_DECL_VAR_DECLARED_INLINE_P (decl
);
9869 /* Assign a typedef-given name to a class or enumeration type declared
9870 as anonymous at first. This was split out of grokdeclarator
9871 because it is also used in libcc1. */
9874 name_unnamed_type (tree type
, tree decl
)
9876 gcc_assert (TYPE_UNNAMED_P (type
));
9878 /* Replace the anonymous name with the real name everywhere. */
9879 for (tree t
= TYPE_MAIN_VARIANT (type
); t
; t
= TYPE_NEXT_VARIANT (t
))
9881 if (anon_aggrname_p (TYPE_IDENTIFIER (t
)))
9882 /* We do not rename the debug info representing the
9883 unnamed tagged type because the standard says in
9884 [dcl.typedef] that the naming applies only for
9885 linkage purposes. */
9886 /*debug_hooks->set_name (t, decl);*/
9887 TYPE_NAME (t
) = decl
;
9890 if (TYPE_LANG_SPECIFIC (type
))
9891 TYPE_WAS_UNNAMED (type
) = 1;
9893 /* If this is a typedef within a template class, the nested
9894 type is a (non-primary) template. The name for the
9895 template needs updating as well. */
9896 if (TYPE_LANG_SPECIFIC (type
) && CLASSTYPE_TEMPLATE_INFO (type
))
9897 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type
))
9898 = TYPE_IDENTIFIER (type
);
9900 /* Adjust linkage now that we aren't unnamed anymore. */
9901 reset_type_linkage (type
);
9903 /* FIXME remangle member functions; member functions of a
9904 type with external linkage have external linkage. */
9906 /* Check that our job is done, and that it would fail if we
9907 attempted to do it again. */
9908 gcc_assert (!TYPE_UNNAMED_P (type
));
9911 /* Given declspecs and a declarator (abstract or otherwise), determine
9912 the name and type of the object declared and construct a DECL node
9915 DECLSPECS points to the representation of declaration-specifier
9916 sequence that precedes declarator.
9918 DECL_CONTEXT says which syntactic context this declaration is in:
9919 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9920 FUNCDEF for a function definition. Like NORMAL but a few different
9921 error messages in each case. Return value may be zero meaning
9922 this definition is too screwy to try to parse.
9923 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
9924 handle member functions (which have FIELD context).
9925 Return value may be zero meaning this definition is too screwy to
9927 PARM for a parameter declaration (either within a function prototype
9928 or before a function body). Make a PARM_DECL, or return void_type_node.
9929 TPARM for a template parameter declaration.
9930 CATCHPARM for a parameter declaration before a catch clause.
9931 TYPENAME if for a typename (in a cast or sizeof).
9932 Don't make a DECL node; just return the ..._TYPE node.
9933 FIELD for a struct or union field; make a FIELD_DECL.
9934 BITFIELD for a field with specified width.
9936 INITIALIZED is as for start_decl.
9938 ATTRLIST is a pointer to the list of attributes, which may be NULL
9939 if there are none; *ATTRLIST may be modified if attributes from inside
9940 the declarator should be applied to the declaration.
9942 When this function is called, scoping variables (such as
9943 CURRENT_CLASS_TYPE) should reflect the scope in which the
9944 declaration occurs, not the scope in which the new declaration will
9945 be placed. For example, on:
9949 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
9952 Returns a DECL (if a declarator is present), a TYPE (if there is no
9953 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
9957 grokdeclarator (const cp_declarator
*declarator
,
9958 cp_decl_specifier_seq
*declspecs
,
9959 enum decl_context decl_context
,
9963 tree type
= NULL_TREE
;
9965 int explicit_intN
= 0;
9966 int virtualp
, explicitp
, friendp
, inlinep
, staticp
;
9967 int explicit_int
= 0;
9968 int explicit_char
= 0;
9969 int defaulted_int
= 0;
9971 tree typedef_decl
= NULL_TREE
;
9972 const char *name
= NULL
;
9973 tree typedef_type
= NULL_TREE
;
9974 /* True if this declarator is a function definition. */
9975 bool funcdef_flag
= false;
9976 cp_declarator_kind innermost_code
= cdk_error
;
9979 /* See the code below that used this. */
9980 tree decl_attr
= NULL_TREE
;
9983 /* Keep track of what sort of function is being processed
9984 so that we can warn about default return values, or explicit
9985 return values which do not match prescribed defaults. */
9986 special_function_kind sfk
= sfk_none
;
9988 tree dname
= NULL_TREE
;
9989 tree ctor_return_type
= NULL_TREE
;
9990 enum overload_flags flags
= NO_SPECIAL
;
9991 /* cv-qualifiers that apply to the declarator, for a declaration of
9992 a member function. */
9993 cp_cv_quals memfn_quals
= TYPE_UNQUALIFIED
;
9994 /* virt-specifiers that apply to the declarator, for a declaration of
9995 a member function. */
9996 cp_virt_specifiers virt_specifiers
= VIRT_SPEC_UNSPECIFIED
;
9997 /* ref-qualifier that applies to the declarator, for a declaration of
9998 a member function. */
9999 cp_ref_qualifier rqual
= REF_QUAL_NONE
;
10000 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
10001 int type_quals
= TYPE_UNQUALIFIED
;
10002 tree raises
= NULL_TREE
;
10003 int template_count
= 0;
10004 tree returned_attrs
= NULL_TREE
;
10005 tree parms
= NULL_TREE
;
10006 const cp_declarator
*id_declarator
;
10007 /* The unqualified name of the declarator; either an
10008 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
10009 tree unqualified_id
;
10010 /* The class type, if any, in which this entity is located,
10011 or NULL_TREE if none. Note that this value may be different from
10012 the current class type; for example if an attempt is made to declare
10013 "A::f" inside "B", this value will be "A". */
10014 tree ctype
= current_class_type
;
10015 /* The NAMESPACE_DECL for the namespace in which this entity is
10016 located. If an unqualified name is used to declare the entity,
10017 this value will be NULL_TREE, even if the entity is located at
10018 namespace scope. */
10019 tree in_namespace
= NULL_TREE
;
10020 cp_storage_class storage_class
;
10021 bool unsigned_p
, signed_p
, short_p
, long_p
, thread_p
;
10022 bool type_was_error_mark_node
= false;
10023 bool parameter_pack_p
= declarator
? declarator
->parameter_pack_p
: false;
10024 bool template_type_arg
= false;
10025 bool template_parm_flag
= false;
10026 bool typedef_p
= decl_spec_seq_has_spec_p (declspecs
, ds_typedef
);
10027 bool constexpr_p
= decl_spec_seq_has_spec_p (declspecs
, ds_constexpr
);
10028 bool late_return_type_p
= false;
10029 bool array_parameter_p
= false;
10030 source_location saved_loc
= input_location
;
10031 tree reqs
= NULL_TREE
;
10033 signed_p
= decl_spec_seq_has_spec_p (declspecs
, ds_signed
);
10034 unsigned_p
= decl_spec_seq_has_spec_p (declspecs
, ds_unsigned
);
10035 short_p
= decl_spec_seq_has_spec_p (declspecs
, ds_short
);
10036 long_p
= decl_spec_seq_has_spec_p (declspecs
, ds_long
);
10037 longlong
= decl_spec_seq_has_spec_p (declspecs
, ds_long_long
);
10038 explicit_intN
= declspecs
->explicit_intN_p
;
10039 thread_p
= decl_spec_seq_has_spec_p (declspecs
, ds_thread
);
10041 // Was concept_p specified? Note that ds_concept
10042 // implies ds_constexpr!
10043 bool concept_p
= decl_spec_seq_has_spec_p (declspecs
, ds_concept
);
10045 constexpr_p
= true;
10047 if (decl_spec_seq_has_spec_p (declspecs
, ds_const
))
10048 type_quals
|= TYPE_QUAL_CONST
;
10049 if (decl_spec_seq_has_spec_p (declspecs
, ds_volatile
))
10050 type_quals
|= TYPE_QUAL_VOLATILE
;
10051 if (decl_spec_seq_has_spec_p (declspecs
, ds_restrict
))
10052 type_quals
|= TYPE_QUAL_RESTRICT
;
10054 if (decl_context
== FUNCDEF
)
10055 funcdef_flag
= true, decl_context
= NORMAL
;
10056 else if (decl_context
== MEMFUNCDEF
)
10057 funcdef_flag
= true, decl_context
= FIELD
;
10058 else if (decl_context
== BITFIELD
)
10059 bitfield
= 1, decl_context
= FIELD
;
10060 else if (decl_context
== TEMPLATE_TYPE_ARG
)
10061 template_type_arg
= true, decl_context
= TYPENAME
;
10062 else if (decl_context
== TPARM
)
10063 template_parm_flag
= true, decl_context
= PARM
;
10065 if (initialized
> 1)
10066 funcdef_flag
= true;
10068 location_t typespec_loc
= smallest_type_quals_location (type_quals
,
10069 declspecs
->locations
);
10070 if (typespec_loc
== UNKNOWN_LOCATION
)
10071 typespec_loc
= declspecs
->locations
[ds_type_spec
];
10072 if (typespec_loc
== UNKNOWN_LOCATION
)
10073 typespec_loc
= input_location
;
10075 /* Look inside a declarator for the name being declared
10076 and get it as a string, for an error message. */
10077 for (id_declarator
= declarator
;
10079 id_declarator
= id_declarator
->declarator
)
10081 if (id_declarator
->kind
!= cdk_id
)
10082 innermost_code
= id_declarator
->kind
;
10084 switch (id_declarator
->kind
)
10087 if (id_declarator
->declarator
10088 && id_declarator
->declarator
->kind
== cdk_id
)
10090 sfk
= id_declarator
->declarator
->u
.id
.sfk
;
10091 if (sfk
== sfk_destructor
)
10098 tree qualifying_scope
= id_declarator
->u
.id
.qualifying_scope
;
10099 tree decl
= id_declarator
->u
.id
.unqualified_name
;
10102 if (qualifying_scope
)
10104 if (at_function_scope_p ())
10108 A declarator-id shall not be qualified except
10111 None of the cases are permitted in block
10113 if (qualifying_scope
== global_namespace
)
10114 error ("invalid use of qualified-name %<::%D%>",
10116 else if (TYPE_P (qualifying_scope
))
10117 error ("invalid use of qualified-name %<%T::%D%>",
10118 qualifying_scope
, decl
);
10120 error ("invalid use of qualified-name %<%D::%D%>",
10121 qualifying_scope
, decl
);
10122 return error_mark_node
;
10124 else if (TYPE_P (qualifying_scope
))
10126 ctype
= qualifying_scope
;
10127 if (!MAYBE_CLASS_TYPE_P (ctype
))
10129 error ("%q#T is not a class or a namespace", ctype
);
10132 else if (innermost_code
!= cdk_function
10133 && current_class_type
10134 && !uniquely_derived_from_p (ctype
,
10135 current_class_type
))
10137 error ("invalid use of qualified-name %<%T::%D%>",
10138 qualifying_scope
, decl
);
10139 return error_mark_node
;
10142 else if (TREE_CODE (qualifying_scope
) == NAMESPACE_DECL
)
10143 in_namespace
= qualifying_scope
;
10145 switch (TREE_CODE (decl
))
10149 if (innermost_code
!= cdk_function
)
10151 error ("declaration of %qD as non-function", decl
);
10152 return error_mark_node
;
10154 else if (!qualifying_scope
10155 && !(current_class_type
&& at_class_scope_p ()))
10157 error ("declaration of %qD as non-member", decl
);
10158 return error_mark_node
;
10161 tree type
= TREE_OPERAND (decl
, 0);
10163 type
= constructor_name (type
);
10164 name
= identifier_to_locale (IDENTIFIER_POINTER (type
));
10169 case TEMPLATE_ID_EXPR
:
10171 tree fns
= TREE_OPERAND (decl
, 0);
10174 if (!identifier_p (dname
))
10175 dname
= OVL_NAME (dname
);
10177 /* Fall through. */
10179 case IDENTIFIER_NODE
:
10180 if (identifier_p (decl
))
10183 if (IDENTIFIER_KEYWORD_P (dname
))
10185 error ("declarator-id missing; using reserved word %qD",
10187 name
= identifier_to_locale (IDENTIFIER_POINTER (dname
));
10189 else if (!IDENTIFIER_CONV_OP_P (dname
))
10190 name
= identifier_to_locale (IDENTIFIER_POINTER (dname
));
10193 gcc_assert (flags
== NO_SPECIAL
);
10194 flags
= TYPENAME_FLAG
;
10195 sfk
= sfk_conversion
;
10196 tree glob
= get_global_binding (dname
);
10197 if (glob
&& TREE_CODE (glob
) == TYPE_DECL
)
10198 name
= identifier_to_locale (IDENTIFIER_POINTER (dname
));
10200 name
= "<invalid operator>";
10205 gcc_unreachable ();
10212 case cdk_reference
:
10217 name
= "structured binding";
10221 return error_mark_node
;
10224 gcc_unreachable ();
10226 if (id_declarator
->kind
== cdk_id
)
10232 The declarator in a function-definition shall have the form
10233 D1 ( parameter-declaration-clause) ... */
10234 if (funcdef_flag
&& innermost_code
!= cdk_function
)
10236 error ("function definition does not declare parameters");
10237 return error_mark_node
;
10240 if (flags
== TYPENAME_FLAG
10241 && innermost_code
!= cdk_function
10242 && ! (ctype
&& !declspecs
->any_specifiers_p
))
10244 error ("declaration of %qD as non-function", dname
);
10245 return error_mark_node
;
10248 if (dname
&& identifier_p (dname
))
10250 if (UDLIT_OPER_P (dname
)
10251 && innermost_code
!= cdk_function
)
10253 error ("declaration of %qD as non-function", dname
);
10254 return error_mark_node
;
10257 if (IDENTIFIER_ANY_OP_P (dname
))
10261 error ("declaration of %qD as %<typedef%>", dname
);
10262 return error_mark_node
;
10264 else if (decl_context
== PARM
|| decl_context
== CATCHPARM
)
10266 error ("declaration of %qD as parameter", dname
);
10267 return error_mark_node
;
10272 /* Anything declared one level down from the top level
10273 must be one of the parameters of a function
10274 (because the body is at least two levels down). */
10276 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
10277 by not allowing C++ class definitions to specify their parameters
10278 with xdecls (must be spec.d in the parmlist).
10280 Since we now wait to push a class scope until we are sure that
10281 we are in a legitimate method context, we must set oldcname
10282 explicitly (since current_class_name is not yet alive).
10284 We also want to avoid calling this a PARM if it is in a namespace. */
10286 if (decl_context
== NORMAL
&& !toplevel_bindings_p ())
10288 cp_binding_level
*b
= current_binding_level
;
10289 current_binding_level
= b
->level_chain
;
10290 if (current_binding_level
!= 0 && toplevel_bindings_p ())
10291 decl_context
= PARM
;
10292 current_binding_level
= b
;
10296 name
= decl_context
== PARM
? "parameter" : "type name";
10298 if (concept_p
&& typedef_p
)
10300 error ("%<concept%> cannot appear in a typedef declaration");
10301 return error_mark_node
;
10304 if (constexpr_p
&& typedef_p
)
10306 error ("%<constexpr%> cannot appear in a typedef declaration");
10307 return error_mark_node
;
10310 /* If there were multiple types specified in the decl-specifier-seq,
10311 issue an error message. */
10312 if (declspecs
->multiple_types_p
)
10314 error ("two or more data types in declaration of %qs", name
);
10315 return error_mark_node
;
10318 if (declspecs
->conflicting_specifiers_p
)
10320 error ("conflicting specifiers in declaration of %qs", name
);
10321 return error_mark_node
;
10324 /* Extract the basic type from the decl-specifier-seq. */
10325 type
= declspecs
->type
;
10326 if (type
== error_mark_node
)
10329 type_was_error_mark_node
= true;
10331 /* If the entire declaration is itself tagged as deprecated then
10332 suppress reports of deprecated items. */
10333 if (type
&& TREE_DEPRECATED (type
)
10334 && deprecated_state
!= DEPRECATED_SUPPRESS
)
10335 warn_deprecated_use (type
, NULL_TREE
);
10336 if (type
&& TREE_CODE (type
) == TYPE_DECL
)
10338 typedef_decl
= type
;
10339 type
= TREE_TYPE (typedef_decl
);
10340 if (TREE_DEPRECATED (type
)
10341 && DECL_ARTIFICIAL (typedef_decl
)
10342 && deprecated_state
!= DEPRECATED_SUPPRESS
)
10343 warn_deprecated_use (type
, NULL_TREE
);
10345 /* No type at all: default to `int', and set DEFAULTED_INT
10346 because it was not a user-defined typedef. */
10347 if (type
== NULL_TREE
)
10349 if (signed_p
|| unsigned_p
|| long_p
|| short_p
)
10351 /* These imply 'int'. */
10352 type
= integer_type_node
;
10355 /* If we just have "complex", it is equivalent to "complex double". */
10356 else if (!longlong
&& !explicit_intN
10357 && decl_spec_seq_has_spec_p (declspecs
, ds_complex
))
10359 type
= double_type_node
;
10360 pedwarn (declspecs
->locations
[ds_complex
], OPT_Wpedantic
,
10361 "ISO C++ does not support plain %<complex%> meaning "
10362 "%<double complex%>");
10365 /* Gather flags. */
10366 explicit_int
= declspecs
->explicit_int_p
;
10367 explicit_char
= declspecs
->explicit_char_p
;
10370 /* See the code below that used this. */
10372 decl_attr
= DECL_ATTRIBUTES (typedef_decl
);
10374 typedef_type
= type
;
10376 if (sfk
== sfk_conversion
|| sfk
== sfk_deduction_guide
)
10377 ctor_return_type
= TREE_TYPE (dname
);
10379 ctor_return_type
= ctype
;
10381 if (sfk
!= sfk_none
)
10383 type
= check_special_function_return_type (sfk
, type
,
10386 declspecs
->locations
);
10387 type_quals
= TYPE_UNQUALIFIED
;
10389 else if (type
== NULL_TREE
)
10395 /* We handle `main' specially here, because 'main () { }' is so
10396 common. With no options, it is allowed. With -Wreturn-type,
10397 it is a warning. It is only an error with -pedantic-errors. */
10398 is_main
= (funcdef_flag
10399 && dname
&& identifier_p (dname
)
10400 && MAIN_NAME_P (dname
)
10401 && ctype
== NULL_TREE
10402 && in_namespace
== NULL_TREE
10403 && current_namespace
== global_namespace
);
10405 if (type_was_error_mark_node
)
10406 /* We've already issued an error, don't complain more. */;
10407 else if (in_system_header_at (input_location
) || flag_ms_extensions
)
10408 /* Allow it, sigh. */;
10409 else if (! is_main
)
10410 permerror (input_location
, "ISO C++ forbids declaration of %qs with no type", name
);
10412 pedwarn (input_location
, OPT_Wpedantic
,
10413 "ISO C++ forbids declaration of %qs with no type", name
);
10415 warning (OPT_Wreturn_type
,
10416 "ISO C++ forbids declaration of %qs with no type", name
);
10418 if (type_was_error_mark_node
&& template_parm_flag
)
10419 /* FIXME we should be able to propagate the error_mark_node as is
10420 for other contexts too. */
10421 type
= error_mark_node
;
10423 type
= integer_type_node
;
10430 if (! int_n_enabled_p
[declspecs
->int_n_idx
])
10432 error ("%<__int%d%> is not supported by this target",
10433 int_n_data
[declspecs
->int_n_idx
].bitsize
);
10434 explicit_intN
= false;
10436 else if (pedantic
&& ! in_system_header_at (input_location
))
10437 pedwarn (input_location
, OPT_Wpedantic
,
10438 "ISO C++ does not support %<__int%d%> for %qs",
10439 int_n_data
[declspecs
->int_n_idx
].bitsize
, name
);
10442 /* Now process the modifiers that were specified
10443 and check for invalid combinations. */
10445 /* Long double is a special combination. */
10446 if (long_p
&& !longlong
&& TYPE_MAIN_VARIANT (type
) == double_type_node
)
10449 type
= cp_build_qualified_type (long_double_type_node
,
10450 cp_type_quals (type
));
10453 /* Check all other uses of type modifiers. */
10455 if (unsigned_p
|| signed_p
|| long_p
|| short_p
)
10459 if ((signed_p
|| unsigned_p
) && TREE_CODE (type
) != INTEGER_TYPE
)
10460 error ("%<signed%> or %<unsigned%> invalid for %qs", name
);
10461 else if (signed_p
&& unsigned_p
)
10462 error ("%<signed%> and %<unsigned%> specified together for %qs", name
);
10463 else if (longlong
&& TREE_CODE (type
) != INTEGER_TYPE
)
10464 error ("%<long long%> invalid for %qs", name
);
10465 else if (long_p
&& TREE_CODE (type
) == REAL_TYPE
)
10466 error ("%<long%> invalid for %qs", name
);
10467 else if (short_p
&& TREE_CODE (type
) == REAL_TYPE
)
10468 error ("%<short%> invalid for %qs", name
);
10469 else if ((long_p
|| short_p
) && TREE_CODE (type
) != INTEGER_TYPE
)
10470 error ("%<long%> or %<short%> invalid for %qs", name
);
10471 else if ((long_p
|| short_p
|| explicit_char
|| explicit_int
) && explicit_intN
)
10472 error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name
);
10473 else if ((long_p
|| short_p
) && explicit_char
)
10474 error ("%<long%> or %<short%> specified with char for %qs", name
);
10475 else if (long_p
&& short_p
)
10476 error ("%<long%> and %<short%> specified together for %qs", name
);
10477 else if (type
== char16_type_node
|| type
== char32_type_node
)
10479 if (signed_p
|| unsigned_p
)
10480 error ("%<signed%> or %<unsigned%> invalid for %qs", name
);
10481 else if (short_p
|| long_p
)
10482 error ("%<short%> or %<long%> invalid for %qs", name
);
10487 if (!explicit_int
&& !defaulted_int
&& !explicit_char
&& !explicit_intN
&& pedantic
)
10489 pedwarn (input_location
, OPT_Wpedantic
,
10490 "long, short, signed or unsigned used invalidly for %qs",
10492 if (flag_pedantic_errors
)
10497 /* Discard the type modifiers if they are invalid. */
10500 unsigned_p
= false;
10508 /* Decide whether an integer type is signed or not.
10509 Optionally treat bitfields as signed by default. */
10513 It is implementation-defined whether a plain (neither
10514 explicitly signed or unsigned) char, short, int, or long
10515 bit-field is signed or unsigned.
10517 Naturally, we extend this to long long as well. Note that
10518 this does not include wchar_t. */
10519 || (bitfield
&& !flag_signed_bitfields
10521 /* A typedef for plain `int' without `signed' can be
10522 controlled just like plain `int', but a typedef for
10523 `signed int' cannot be so controlled. */
10525 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl
))
10526 && TREE_CODE (type
) == INTEGER_TYPE
10527 && !same_type_p (TYPE_MAIN_VARIANT (type
), wchar_type_node
)))
10530 type
= int_n_trees
[declspecs
->int_n_idx
].unsigned_type
;
10532 type
= long_long_unsigned_type_node
;
10534 type
= long_unsigned_type_node
;
10536 type
= short_unsigned_type_node
;
10537 else if (type
== char_type_node
)
10538 type
= unsigned_char_type_node
;
10539 else if (typedef_decl
)
10540 type
= unsigned_type_for (type
);
10542 type
= unsigned_type_node
;
10544 else if (signed_p
&& type
== char_type_node
)
10545 type
= signed_char_type_node
;
10546 else if (explicit_intN
)
10547 type
= int_n_trees
[declspecs
->int_n_idx
].signed_type
;
10549 type
= long_long_integer_type_node
;
10551 type
= long_integer_type_node
;
10553 type
= short_integer_type_node
;
10555 if (decl_spec_seq_has_spec_p (declspecs
, ds_complex
))
10557 if (TREE_CODE (type
) != INTEGER_TYPE
&& TREE_CODE (type
) != REAL_TYPE
)
10558 error ("complex invalid for %qs", name
);
10559 /* If a modifier is specified, the resulting complex is the complex
10560 form of TYPE. E.g, "complex short" is "complex short int". */
10561 else if (type
== integer_type_node
)
10562 type
= complex_integer_type_node
;
10563 else if (type
== float_type_node
)
10564 type
= complex_float_type_node
;
10565 else if (type
== double_type_node
)
10566 type
= complex_double_type_node
;
10567 else if (type
== long_double_type_node
)
10568 type
= complex_long_double_type_node
;
10570 type
= build_complex_type (type
);
10573 /* If we're using the injected-class-name to form a compound type or a
10574 declaration, replace it with the underlying class so we don't get
10575 redundant typedefs in the debug output. But if we are returning the
10576 type unchanged, leave it alone so that it's available to
10577 maybe_get_template_decl_from_type_decl. */
10578 if (CLASS_TYPE_P (type
)
10579 && DECL_SELF_REFERENCE_P (TYPE_NAME (type
))
10580 && type
== TREE_TYPE (TYPE_NAME (type
))
10581 && (declarator
|| type_quals
))
10582 type
= DECL_ORIGINAL_TYPE (TYPE_NAME (type
));
10584 type_quals
|= cp_type_quals (type
);
10585 type
= cp_build_qualified_type_real
10586 (type
, type_quals
, ((((typedef_decl
&& !DECL_ARTIFICIAL (typedef_decl
))
10587 || declspecs
->decltype_p
)
10588 ? tf_ignore_bad_quals
: 0) | tf_warning_or_error
));
10589 /* We might have ignored or rejected some of the qualifiers. */
10590 type_quals
= cp_type_quals (type
);
10592 if (cxx_dialect
>= cxx17
&& type
&& is_auto (type
)
10593 && innermost_code
!= cdk_function
10594 && id_declarator
&& declarator
!= id_declarator
)
10595 if (tree tmpl
= CLASS_PLACEHOLDER_TEMPLATE (type
))
10597 error_at (typespec_loc
, "template placeholder type %qT must be followed "
10598 "by a simple declarator-id", type
);
10599 inform (DECL_SOURCE_LOCATION (tmpl
), "%qD declared here", tmpl
);
10603 inlinep
= decl_spec_seq_has_spec_p (declspecs
, ds_inline
);
10604 virtualp
= decl_spec_seq_has_spec_p (declspecs
, ds_virtual
);
10605 explicitp
= decl_spec_seq_has_spec_p (declspecs
, ds_explicit
);
10607 storage_class
= declspecs
->storage_class
;
10608 if (storage_class
== sc_static
)
10609 staticp
= 1 + (decl_context
== FIELD
);
10615 error ("member %qD cannot be declared both %<virtual%> "
10616 "and %<static%>", dname
);
10617 storage_class
= sc_none
;
10621 error ("member %qD cannot be declared both %<virtual%> "
10622 "and %<constexpr%>", dname
);
10624 friendp
= decl_spec_seq_has_spec_p (declspecs
, ds_friend
);
10626 /* Issue errors about use of storage classes for parameters. */
10627 if (decl_context
== PARM
)
10631 error ("typedef declaration invalid in parameter declaration");
10632 return error_mark_node
;
10634 else if (template_parm_flag
&& storage_class
!= sc_none
)
10636 error ("storage class specified for template parameter %qs", name
);
10637 return error_mark_node
;
10639 else if (storage_class
== sc_static
10640 || storage_class
== sc_extern
10642 error ("storage class specifiers invalid in parameter declarations");
10644 /* Function parameters cannot be concept. */
10646 error ("a parameter cannot be declared %<concept%>");
10647 /* Function parameters cannot be constexpr. If we saw one, moan
10648 and pretend it wasn't there. */
10649 else if (constexpr_p
)
10651 error ("a parameter cannot be declared %<constexpr%>");
10656 /* Give error if `virtual' is used outside of class declaration. */
10658 && (current_class_name
== NULL_TREE
|| decl_context
!= FIELD
))
10660 error_at (declspecs
->locations
[ds_virtual
],
10661 "%<virtual%> outside class declaration");
10665 if (innermost_code
== cdk_decomp
)
10667 location_t loc
= (declarator
->kind
== cdk_reference
10668 ? declarator
->declarator
->id_loc
: declarator
->id_loc
);
10670 error_at (declspecs
->locations
[ds_inline
],
10671 "structured binding declaration cannot be %<inline%>");
10673 error_at (declspecs
->locations
[ds_typedef
],
10674 "structured binding declaration cannot be %<typedef%>");
10676 error_at (declspecs
->locations
[ds_constexpr
], "structured "
10677 "binding declaration cannot be %<constexpr%>");
10679 error_at (declspecs
->locations
[ds_thread
],
10680 "structured binding declaration cannot be %qs",
10681 declspecs
->gnu_thread_keyword_p
10682 ? "__thread" : "thread_local");
10684 error_at (declspecs
->locations
[ds_concept
],
10685 "structured binding declaration cannot be %<concept%>");
10686 switch (storage_class
)
10691 error_at (loc
, "structured binding declaration cannot be "
10695 error_at (loc
, "structured binding declaration cannot be "
10699 error_at (loc
, "structured binding declaration cannot be "
10703 error_at (loc
, "structured binding declaration cannot be "
10707 error_at (loc
, "structured binding declaration cannot be "
10711 gcc_unreachable ();
10713 if (TREE_CODE (type
) != TEMPLATE_TYPE_PARM
10714 || TYPE_IDENTIFIER (type
) != auto_identifier
)
10716 if (type
!= error_mark_node
)
10718 error_at (loc
, "structured binding declaration cannot have "
10721 "type must be cv-qualified %<auto%> or reference to "
10722 "cv-qualified %<auto%>");
10724 type
= build_qualified_type (make_auto (), type_quals
);
10725 declspecs
->type
= type
;
10732 storage_class
= sc_none
;
10734 declspecs
->storage_class
= sc_none
;
10735 declspecs
->locations
[ds_thread
] = UNKNOWN_LOCATION
;
10738 /* Static anonymous unions are dealt with here. */
10739 if (staticp
&& decl_context
== TYPENAME
10741 && ANON_AGGR_TYPE_P (declspecs
->type
))
10742 decl_context
= FIELD
;
10744 /* Warn about storage classes that are invalid for certain
10745 kinds of declarations (parameters, typenames, etc.). */
10748 && storage_class
!= sc_extern
10749 && storage_class
!= sc_static
)
10752 error ("multiple storage classes in declaration of %qs", name
);
10755 if (decl_context
!= NORMAL
10756 && ((storage_class
!= sc_none
10757 && storage_class
!= sc_mutable
)
10760 if ((decl_context
== PARM
|| decl_context
== CATCHPARM
)
10761 && (storage_class
== sc_register
10762 || storage_class
== sc_auto
))
10764 else if (typedef_p
)
10766 else if (decl_context
== FIELD
10767 /* C++ allows static class elements. */
10768 && storage_class
== sc_static
)
10769 /* C++ also allows inlines and signed and unsigned elements,
10770 but in those cases we don't come in here. */
10774 if (decl_context
== FIELD
)
10775 error ("storage class specified for %qs", name
);
10778 if (decl_context
== PARM
|| decl_context
== CATCHPARM
)
10779 error ("storage class specified for parameter %qs", name
);
10781 error ("storage class specified for typename");
10783 if (storage_class
== sc_register
10784 || storage_class
== sc_auto
10785 || storage_class
== sc_extern
10787 storage_class
= sc_none
;
10790 else if (storage_class
== sc_extern
&& funcdef_flag
10791 && ! toplevel_bindings_p ())
10792 error ("nested function %qs declared %<extern%>", name
);
10793 else if (toplevel_bindings_p ())
10795 if (storage_class
== sc_auto
)
10796 error ("top-level declaration of %qs specifies %<auto%>", name
);
10799 && storage_class
!= sc_extern
10800 && storage_class
!= sc_static
)
10802 if (declspecs
->gnu_thread_keyword_p
)
10803 pedwarn (input_location
, 0, "function-scope %qs implicitly auto and "
10804 "declared %<__thread%>", name
);
10806 /* When thread_local is applied to a variable of block scope the
10807 storage-class-specifier static is implied if it does not appear
10809 storage_class
= declspecs
->storage_class
= sc_static
;
10813 if (storage_class
&& friendp
)
10815 error ("storage class specifiers invalid in friend function declarations");
10816 storage_class
= sc_none
;
10820 if (!id_declarator
)
10821 unqualified_id
= NULL_TREE
;
10824 unqualified_id
= id_declarator
->u
.id
.unqualified_name
;
10825 switch (TREE_CODE (unqualified_id
))
10828 unqualified_id
= TREE_OPERAND (unqualified_id
, 0);
10829 if (TYPE_P (unqualified_id
))
10830 unqualified_id
= constructor_name (unqualified_id
);
10833 case IDENTIFIER_NODE
:
10834 case TEMPLATE_ID_EXPR
:
10838 gcc_unreachable ();
10842 if (declspecs
->std_attributes
)
10844 /* Apply the c++11 attributes to the type preceding them. */
10845 input_location
= declspecs
->locations
[ds_std_attribute
];
10846 decl_attributes (&type
, declspecs
->std_attributes
, 0);
10847 input_location
= saved_loc
;
10850 /* Determine the type of the entity declared by recurring on the
10852 for (; declarator
; declarator
= declarator
->declarator
)
10854 const cp_declarator
*inner_declarator
;
10857 if (type
== error_mark_node
)
10858 return error_mark_node
;
10860 attrs
= declarator
->attributes
;
10866 if (declarator
== NULL
|| declarator
->kind
== cdk_id
)
10867 attr_flags
|= (int) ATTR_FLAG_DECL_NEXT
;
10868 if (declarator
->kind
== cdk_function
)
10869 attr_flags
|= (int) ATTR_FLAG_FUNCTION_NEXT
;
10870 if (declarator
->kind
== cdk_array
)
10871 attr_flags
|= (int) ATTR_FLAG_ARRAY_NEXT
;
10872 returned_attrs
= decl_attributes (&type
,
10873 chainon (returned_attrs
, attrs
),
10877 inner_declarator
= declarator
->declarator
;
10879 /* We don't want to warn in parameter context because we don't
10880 yet know if the parse will succeed, and this might turn out
10881 to be a constructor call. */
10882 if (decl_context
!= PARM
10883 && decl_context
!= TYPENAME
10884 && declarator
->parenthesized
!= UNKNOWN_LOCATION
10885 /* If the type is class-like and the inner name used a
10886 global namespace qualifier, we need the parens.
10887 Unfortunately all we can tell is whether a qualified name
10888 was used or not. */
10889 && !(inner_declarator
10890 && inner_declarator
->kind
== cdk_id
10891 && inner_declarator
->u
.id
.qualifying_scope
10892 && (MAYBE_CLASS_TYPE_P (type
)
10893 || TREE_CODE (type
) == ENUMERAL_TYPE
)))
10894 warning_at (declarator
->parenthesized
, OPT_Wparentheses
,
10895 "unnecessary parentheses in declaration of %qs", name
);
10896 if (declarator
->kind
== cdk_id
|| declarator
->kind
== cdk_decomp
)
10899 switch (declarator
->kind
)
10902 type
= create_array_type_for_decl (dname
, type
,
10903 declarator
->u
.array
.bounds
);
10904 if (!valid_array_size_p (input_location
, type
, dname
))
10905 type
= error_mark_node
;
10907 if (declarator
->std_attributes
)
10910 The optional attribute-specifier-seq appertains to the
10912 returned_attrs
= chainon (returned_attrs
,
10913 declarator
->std_attributes
);
10921 /* Declaring a function type. */
10923 input_location
= declspecs
->locations
[ds_type_spec
];
10924 abstract_virtuals_error (ACU_RETURN
, type
);
10925 input_location
= saved_loc
;
10927 /* Pick up type qualifiers which should be applied to `this'. */
10928 memfn_quals
= declarator
->u
.function
.qualifiers
;
10929 /* Pick up virt-specifiers. */
10930 virt_specifiers
= declarator
->u
.function
.virt_specifiers
;
10931 /* And ref-qualifier, too */
10932 rqual
= declarator
->u
.function
.ref_qualifier
;
10933 /* And tx-qualifier. */
10934 tree tx_qual
= declarator
->u
.function
.tx_qualifier
;
10935 /* Pick up the exception specifications. */
10936 raises
= declarator
->u
.function
.exception_specification
;
10937 /* If the exception-specification is ill-formed, let's pretend
10938 there wasn't one. */
10939 if (raises
== error_mark_node
)
10940 raises
= NULL_TREE
;
10943 error_at (location_of (reqs
), "requires-clause on return type");
10944 reqs
= declarator
->u
.function
.requires_clause
;
10946 /* Say it's a definition only for the CALL_EXPR
10947 closest to the identifier. */
10948 funcdecl_p
= inner_declarator
&& inner_declarator
->kind
== cdk_id
;
10950 /* Handle a late-specified return type. */
10951 tree late_return_type
= declarator
->u
.function
.late_return_type
;
10954 if (tree auto_node
= type_uses_auto (type
))
10956 if (!late_return_type
)
10958 if (current_class_type
10959 && LAMBDA_TYPE_P (current_class_type
))
10960 /* OK for C++11 lambdas. */;
10961 else if (cxx_dialect
< cxx14
)
10963 error ("%qs function uses "
10964 "%<auto%> type specifier without trailing "
10965 "return type", name
);
10966 inform (input_location
, "deduced return type "
10967 "only available with -std=c++14 or "
10972 error ("virtual function cannot "
10973 "have deduced return type");
10977 else if (!is_auto (type
) && sfk
!= sfk_conversion
)
10979 error ("%qs function with trailing return type has"
10980 " %qT as its type rather than plain %<auto%>",
10982 return error_mark_node
;
10984 if (tree tmpl
= CLASS_PLACEHOLDER_TEMPLATE (auto_node
))
10986 if (!late_return_type
)
10988 if (dguide_name_p (unqualified_id
))
10989 error_at (declarator
->id_loc
, "deduction guide "
10990 "for %qT must have trailing return "
10991 "type", TREE_TYPE (tmpl
));
10993 error_at (declarator
->id_loc
, "deduced class "
10994 "type %qT in function return type",
10996 inform (DECL_SOURCE_LOCATION (tmpl
),
10997 "%qD declared here", tmpl
);
10999 else if (CLASS_TYPE_P (late_return_type
)
11000 && CLASSTYPE_TEMPLATE_INFO (late_return_type
)
11001 && (CLASSTYPE_TI_TEMPLATE (late_return_type
)
11005 error ("trailing return type %qT of deduction guide "
11006 "is not a specialization of %qT",
11007 late_return_type
, TREE_TYPE (tmpl
));
11010 else if (late_return_type
11011 && sfk
!= sfk_conversion
)
11013 if (cxx_dialect
< cxx11
)
11014 /* Not using maybe_warn_cpp0x because this should
11015 always be an error. */
11016 error ("trailing return type only available with "
11017 "-std=c++11 or -std=gnu++11");
11019 error ("%qs function with trailing return type not "
11020 "declared with %<auto%> type specifier", name
);
11021 return error_mark_node
;
11024 type
= splice_late_return_type (type
, late_return_type
);
11025 if (type
== error_mark_node
)
11026 return error_mark_node
;
11028 if (late_return_type
)
11030 late_return_type_p
= true;
11031 type_quals
= cp_type_quals (type
);
11034 if (type_quals
!= TYPE_UNQUALIFIED
)
11036 if (SCALAR_TYPE_P (type
) || VOID_TYPE_P (type
))
11037 warning_at (typespec_loc
, OPT_Wignored_qualifiers
, "type "
11038 "qualifiers ignored on function return type");
11039 /* We now know that the TYPE_QUALS don't apply to the
11040 decl, but to its return type. */
11041 type_quals
= TYPE_UNQUALIFIED
;
11044 /* Error about some types functions can't return. */
11046 if (TREE_CODE (type
) == FUNCTION_TYPE
)
11048 error_at (typespec_loc
, "%qs declared as function returning "
11049 "a function", name
);
11050 return error_mark_node
;
11052 if (TREE_CODE (type
) == ARRAY_TYPE
)
11054 error_at (typespec_loc
, "%qs declared as function returning "
11056 return error_mark_node
;
11059 if (ctype
== NULL_TREE
11060 && decl_context
== FIELD
11063 ctype
= current_class_type
;
11065 if (ctype
&& (sfk
== sfk_constructor
11066 || sfk
== sfk_destructor
))
11068 /* We are within a class's scope. If our declarator name
11069 is the same as the class name, and we are defining
11070 a function, then it is a constructor/destructor, and
11071 therefore returns a void type. */
11073 /* ISO C++ 12.4/2. A destructor may not be declared
11074 const or volatile. A destructor may not be static.
11075 A destructor may not be declared with ref-qualifier.
11077 ISO C++ 12.1. A constructor may not be declared
11078 const or volatile. A constructor may not be
11079 virtual. A constructor may not be static.
11080 A constructor may not be declared with ref-qualifier. */
11082 error ((flags
== DTOR_FLAG
)
11083 ? G_("destructor cannot be static member function")
11084 : G_("constructor cannot be static member function"));
11087 error ((flags
== DTOR_FLAG
)
11088 ? G_("destructors may not be cv-qualified")
11089 : G_("constructors may not be cv-qualified"));
11090 memfn_quals
= TYPE_UNQUALIFIED
;
11095 maybe_warn_cpp0x (CPP0X_REF_QUALIFIER
);
11096 error ((flags
== DTOR_FLAG
)
11097 ? G_("destructors may not be ref-qualified")
11098 : G_("constructors may not be ref-qualified"));
11099 rqual
= REF_QUAL_NONE
;
11102 if (decl_context
== FIELD
11103 && !member_function_or_else (ctype
,
11104 current_class_type
,
11106 return error_mark_node
;
11108 if (flags
!= DTOR_FLAG
)
11110 /* It's a constructor. */
11111 if (explicitp
== 1)
11115 permerror (input_location
,
11116 "constructors cannot be declared %<virtual%>");
11119 if (decl_context
== FIELD
11120 && sfk
!= sfk_constructor
)
11121 return error_mark_node
;
11123 if (decl_context
== FIELD
)
11130 /* Cannot be both friend and virtual. */
11131 error ("virtual functions cannot be friends");
11134 if (decl_context
== NORMAL
)
11135 error ("friend declaration not in class definition");
11136 if (current_function_decl
&& funcdef_flag
)
11137 error ("can%'t define friend function %qs in a local "
11138 "class definition",
11141 else if (ctype
&& sfk
== sfk_conversion
)
11143 if (explicitp
== 1)
11145 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION
);
11148 if (late_return_type_p
)
11149 error ("a conversion function cannot have a trailing return type");
11151 else if (sfk
== sfk_deduction_guide
)
11153 if (explicitp
== 1)
11157 arg_types
= grokparms (declarator
->u
.function
.parameters
,
11160 if (inner_declarator
11161 && inner_declarator
->kind
== cdk_id
11162 && inner_declarator
->u
.id
.sfk
== sfk_destructor
11163 && arg_types
!= void_list_node
)
11165 error ("destructors may not have parameters");
11166 arg_types
= void_list_node
;
11170 type
= build_function_type (type
, arg_types
);
11172 tree attrs
= declarator
->std_attributes
;
11175 tree att
= build_tree_list (tx_qual
, NULL_TREE
);
11176 /* transaction_safe applies to the type, but
11177 transaction_safe_dynamic applies to the function. */
11178 if (is_attribute_p ("transaction_safe", tx_qual
))
11179 attrs
= chainon (attrs
, att
);
11181 returned_attrs
= chainon (returned_attrs
, att
);
11186 The optional attribute-specifier-seq appertains to
11187 the function type. */
11188 decl_attributes (&type
, attrs
, 0);
11191 type
= build_exception_variant (type
, raises
);
11196 case cdk_reference
:
11198 /* Filter out pointers-to-references and references-to-references.
11199 We can get these if a TYPE_DECL is used. */
11201 if (TREE_CODE (type
) == REFERENCE_TYPE
)
11203 if (declarator
->kind
!= cdk_reference
)
11205 error ("cannot declare pointer to %q#T", type
);
11206 type
= TREE_TYPE (type
);
11209 /* In C++0x, we allow reference to reference declarations
11210 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
11211 and template type arguments [14.3.1/4 temp.arg.type]. The
11212 check for direct reference to reference declarations, which
11213 are still forbidden, occurs below. Reasoning behind the change
11214 can be found in DR106, DR540, and the rvalue reference
11216 else if (cxx_dialect
== cxx98
)
11218 error ("cannot declare reference to %q#T", type
);
11219 type
= TREE_TYPE (type
);
11222 else if (VOID_TYPE_P (type
))
11224 if (declarator
->kind
== cdk_reference
)
11225 error ("cannot declare reference to %q#T", type
);
11226 else if (declarator
->kind
== cdk_ptrmem
)
11227 error ("cannot declare pointer to %q#T member", type
);
11230 /* We now know that the TYPE_QUALS don't apply to the decl,
11231 but to the target of the pointer. */
11232 type_quals
= TYPE_UNQUALIFIED
;
11234 /* This code used to handle METHOD_TYPE, but I don't think it's
11235 possible to get it here anymore. */
11236 gcc_assert (TREE_CODE (type
) != METHOD_TYPE
);
11237 if (declarator
->kind
== cdk_ptrmem
11238 && TREE_CODE (type
) == FUNCTION_TYPE
)
11240 memfn_quals
|= type_memfn_quals (type
);
11241 type
= build_memfn_type (type
,
11242 declarator
->u
.pointer
.class_type
,
11245 if (type
== error_mark_node
)
11246 return error_mark_node
;
11248 rqual
= REF_QUAL_NONE
;
11249 memfn_quals
= TYPE_UNQUALIFIED
;
11252 if (TREE_CODE (type
) == FUNCTION_TYPE
11253 && (type_memfn_quals (type
) != TYPE_UNQUALIFIED
11254 || type_memfn_rqual (type
) != REF_QUAL_NONE
))
11255 error (declarator
->kind
== cdk_reference
11256 ? G_("cannot declare reference to qualified function type %qT")
11257 : G_("cannot declare pointer to qualified function type %qT"),
11260 /* When the pointed-to type involves components of variable size,
11261 care must be taken to ensure that the size evaluation code is
11262 emitted early enough to dominate all the possible later uses
11263 and late enough for the variables on which it depends to have
11266 This is expected to happen automatically when the pointed-to
11267 type has a name/declaration of it's own, but special attention
11268 is required if the type is anonymous.
11270 We handle the NORMAL and FIELD contexts here by inserting a
11271 dummy statement that just evaluates the size at a safe point
11272 and ensures it is not deferred until e.g. within a deeper
11273 conditional context (c++/43555).
11275 We expect nothing to be needed here for PARM or TYPENAME.
11276 Evaluating the size at this point for TYPENAME would
11277 actually be incorrect, as we might be in the middle of an
11278 expression with side effects on the pointed-to type size
11279 "arguments" prior to the pointer declaration point and the
11280 size evaluation could end up prior to the side effects. */
11282 if (!TYPE_NAME (type
)
11283 && (decl_context
== NORMAL
|| decl_context
== FIELD
)
11284 && at_function_scope_p ()
11285 && variably_modified_type_p (type
, NULL_TREE
))
11287 TYPE_NAME (type
) = build_decl (UNKNOWN_LOCATION
, TYPE_DECL
,
11289 add_decl_expr (TYPE_NAME (type
));
11292 if (declarator
->kind
== cdk_reference
)
11294 /* In C++0x, the type we are creating a reference to might be
11295 a typedef which is itself a reference type. In that case,
11296 we follow the reference collapsing rules in
11297 [7.1.3/8 dcl.typedef] to create the final reference type:
11299 "If a typedef TD names a type that is a reference to a type
11300 T, an attempt to create the type 'lvalue reference to cv TD'
11301 creates the type 'lvalue reference to T,' while an attempt
11302 to create the type "rvalue reference to cv TD' creates the
11305 if (VOID_TYPE_P (type
))
11306 /* We already gave an error. */;
11307 else if (TREE_CODE (type
) == REFERENCE_TYPE
)
11309 if (declarator
->u
.reference
.rvalue_ref
)
11310 /* Leave type alone. */;
11312 type
= cp_build_reference_type (TREE_TYPE (type
), false);
11315 type
= cp_build_reference_type
11316 (type
, declarator
->u
.reference
.rvalue_ref
);
11318 /* In C++0x, we need this check for direct reference to
11319 reference declarations, which are forbidden by
11320 [8.3.2/5 dcl.ref]. Reference to reference declarations
11321 are only allowed indirectly through typedefs and template
11322 type arguments. Example:
11324 void foo(int & &); // invalid ref-to-ref decl
11326 typedef int & int_ref;
11327 void foo(int_ref &); // valid ref-to-ref decl
11329 if (inner_declarator
&& inner_declarator
->kind
== cdk_reference
)
11330 error ("cannot declare reference to %q#T, which is not "
11331 "a typedef or a template type argument", type
);
11333 else if (TREE_CODE (type
) == METHOD_TYPE
)
11334 type
= build_ptrmemfunc_type (build_pointer_type (type
));
11335 else if (declarator
->kind
== cdk_ptrmem
)
11337 gcc_assert (TREE_CODE (declarator
->u
.pointer
.class_type
)
11338 != NAMESPACE_DECL
);
11339 if (declarator
->u
.pointer
.class_type
== error_mark_node
)
11340 /* We will already have complained. */
11341 type
= error_mark_node
;
11343 type
= build_ptrmem_type (declarator
->u
.pointer
.class_type
,
11347 type
= build_pointer_type (type
);
11349 /* Process a list of type modifier keywords (such as
11350 const or volatile) that were given inside the `*' or `&'. */
11352 if (declarator
->u
.pointer
.qualifiers
)
11355 = cp_build_qualified_type (type
,
11356 declarator
->u
.pointer
.qualifiers
);
11357 type_quals
= cp_type_quals (type
);
11360 /* Apply C++11 attributes to the pointer, and not to the
11361 type pointed to. This is unlike what is done for GNU
11362 attributes above. It is to comply with [dcl.ptr]/1:
11364 [the optional attribute-specifier-seq (7.6.1) appertains
11365 to the pointer and not to the object pointed to]. */
11366 if (declarator
->std_attributes
)
11367 decl_attributes (&type
, declarator
->std_attributes
,
11377 gcc_unreachable ();
11381 /* A `constexpr' specifier used in an object declaration declares
11382 the object as `const'. */
11383 if (constexpr_p
&& innermost_code
!= cdk_function
)
11385 /* DR1688 says that a `constexpr' specifier in combination with
11386 `volatile' is valid. */
11388 if (TREE_CODE (type
) != REFERENCE_TYPE
)
11390 type_quals
|= TYPE_QUAL_CONST
;
11391 type
= cp_build_qualified_type (type
, type_quals
);
11395 if (unqualified_id
&& TREE_CODE (unqualified_id
) == TEMPLATE_ID_EXPR
11396 && TREE_CODE (type
) != FUNCTION_TYPE
11397 && TREE_CODE (type
) != METHOD_TYPE
11398 && !variable_template_p (TREE_OPERAND (unqualified_id
, 0)))
11400 error ("template-id %qD used as a declarator",
11402 unqualified_id
= dname
;
11405 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
11406 qualified with a class-name, turn it into a METHOD_TYPE, unless
11407 we know that the function is static. We take advantage of this
11408 opportunity to do other processing that pertains to entities
11409 explicitly declared to be class members. Note that if DECLARATOR
11410 is non-NULL, we know it is a cdk_id declarator; otherwise, we
11411 would not have exited the loop above. */
11413 && declarator
->kind
== cdk_id
11414 && declarator
->u
.id
.qualifying_scope
11415 && MAYBE_CLASS_TYPE_P (declarator
->u
.id
.qualifying_scope
))
11417 ctype
= declarator
->u
.id
.qualifying_scope
;
11418 ctype
= TYPE_MAIN_VARIANT (ctype
);
11419 template_count
= num_template_headers_for_class (ctype
);
11421 if (ctype
== current_class_type
)
11425 permerror (input_location
, "member functions are implicitly "
11426 "friends of their class");
11430 permerror (declarator
->id_loc
,
11431 "extra qualification %<%T::%> on member %qs",
11434 else if (/* If the qualifying type is already complete, then we
11435 can skip the following checks. */
11436 !COMPLETE_TYPE_P (ctype
)
11437 && (/* If the function is being defined, then
11438 qualifying type must certainly be complete. */
11440 /* A friend declaration of "T::f" is OK, even if
11441 "T" is a template parameter. But, if this
11442 function is not a friend, the qualifying type
11443 must be a class. */
11444 || (!friendp
&& !CLASS_TYPE_P (ctype
))
11445 /* For a declaration, the type need not be
11446 complete, if either it is dependent (since there
11447 is no meaningful definition of complete in that
11448 case) or the qualifying class is currently being
11450 || !(dependent_type_p (ctype
)
11451 || currently_open_class (ctype
)))
11452 /* Check that the qualifying type is complete. */
11453 && !complete_type_or_else (ctype
, NULL_TREE
))
11454 return error_mark_node
;
11455 else if (TREE_CODE (type
) == FUNCTION_TYPE
)
11457 if (current_class_type
11458 && (!friendp
|| funcdef_flag
|| initialized
))
11460 error (funcdef_flag
|| initialized
11461 ? G_("cannot define member function %<%T::%s%> "
11463 : G_("cannot declare member function %<%T::%s%> "
11465 ctype
, name
, current_class_type
);
11466 return error_mark_node
;
11469 else if (typedef_p
&& current_class_type
)
11471 error ("cannot declare member %<%T::%s%> within %qT",
11472 ctype
, name
, current_class_type
);
11473 return error_mark_node
;
11477 if (ctype
== NULL_TREE
&& decl_context
== FIELD
&& friendp
== 0)
11478 ctype
= current_class_type
;
11480 /* Now TYPE has the actual type. */
11482 if (returned_attrs
)
11485 *attrlist
= chainon (returned_attrs
, *attrlist
);
11487 attrlist
= &returned_attrs
;
11491 && declarator
->kind
== cdk_id
11492 && declarator
->std_attributes
11493 && attrlist
!= NULL
)
11495 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
11496 a declarator-id appertains to the entity that is declared. */
11497 if (declarator
->std_attributes
!= error_mark_node
)
11498 *attrlist
= chainon (*attrlist
, declarator
->std_attributes
);
11500 /* We should have already diagnosed the issue (c++/78344). */
11501 gcc_assert (seen_error ());
11504 /* Handle parameter packs. */
11505 if (parameter_pack_p
)
11507 if (decl_context
== PARM
)
11508 /* Turn the type into a pack expansion.*/
11509 type
= make_pack_expansion (type
);
11511 error ("non-parameter %qs cannot be a parameter pack", name
);
11514 if ((decl_context
== FIELD
|| decl_context
== PARM
)
11515 && !processing_template_decl
11516 && variably_modified_type_p (type
, NULL_TREE
))
11518 if (decl_context
== FIELD
)
11519 error ("data member may not have variably modified type %qT", type
);
11521 error ("parameter may not have variably modified type %qT", type
);
11522 type
= error_mark_node
;
11525 if (explicitp
== 1 || (explicitp
&& friendp
))
11527 /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
11528 in the declaration of a constructor or conversion function within
11529 a class definition. */
11530 if (!current_class_type
)
11531 error_at (declspecs
->locations
[ds_explicit
],
11532 "%<explicit%> outside class declaration");
11534 error_at (declspecs
->locations
[ds_explicit
],
11535 "%<explicit%> in friend declaration");
11537 error_at (declspecs
->locations
[ds_explicit
],
11538 "only declarations of constructors and conversion operators "
11539 "can be %<explicit%>");
11543 if (storage_class
== sc_mutable
)
11545 if (decl_context
!= FIELD
|| friendp
)
11547 error ("non-member %qs cannot be declared %<mutable%>", name
);
11548 storage_class
= sc_none
;
11550 else if (decl_context
== TYPENAME
|| typedef_p
)
11552 error ("non-object member %qs cannot be declared %<mutable%>", name
);
11553 storage_class
= sc_none
;
11555 else if (TREE_CODE (type
) == FUNCTION_TYPE
11556 || TREE_CODE (type
) == METHOD_TYPE
)
11558 error ("function %qs cannot be declared %<mutable%>", name
);
11559 storage_class
= sc_none
;
11563 error ("static %qs cannot be declared %<mutable%>", name
);
11564 storage_class
= sc_none
;
11566 else if (type_quals
& TYPE_QUAL_CONST
)
11568 error ("const %qs cannot be declared %<mutable%>", name
);
11569 storage_class
= sc_none
;
11571 else if (TREE_CODE (type
) == REFERENCE_TYPE
)
11573 permerror (input_location
, "reference %qs cannot be declared "
11574 "%<mutable%>", name
);
11575 storage_class
= sc_none
;
11579 /* If this is declaring a typedef name, return a TYPE_DECL. */
11580 if (typedef_p
&& decl_context
!= TYPENAME
)
11584 /* This declaration:
11586 typedef void f(int) const;
11588 declares a function type which is not a member of any
11589 particular class, but which is cv-qualified; for
11590 example "f S::*" declares a pointer to a const-qualified
11591 member function of S. We record the cv-qualification in the
11593 if ((rqual
|| memfn_quals
) && TREE_CODE (type
) == FUNCTION_TYPE
)
11595 type
= apply_memfn_quals (type
, memfn_quals
, rqual
);
11597 /* We have now dealt with these qualifiers. */
11598 memfn_quals
= TYPE_UNQUALIFIED
;
11599 rqual
= REF_QUAL_NONE
;
11602 if (type_uses_auto (type
))
11604 error ("typedef declared %<auto%>");
11605 type
= error_mark_node
;
11609 error_at (location_of (reqs
), "requires-clause on typedef");
11611 if (decl_context
== FIELD
)
11612 decl
= build_lang_decl (TYPE_DECL
, unqualified_id
, type
);
11614 decl
= build_decl (input_location
, TYPE_DECL
, unqualified_id
, type
);
11615 if (id_declarator
&& declarator
->u
.id
.qualifying_scope
) {
11616 error_at (DECL_SOURCE_LOCATION (decl
),
11617 "typedef name may not be a nested-name-specifier");
11618 TREE_TYPE (decl
) = error_mark_node
;
11621 if (decl_context
!= FIELD
)
11623 if (!current_function_decl
)
11624 DECL_CONTEXT (decl
) = FROB_CONTEXT (current_namespace
);
11625 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl
)
11626 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
11627 (current_function_decl
)))
11628 /* The TYPE_DECL is "abstract" because there will be
11629 clones of this constructor/destructor, and there will
11630 be copies of this TYPE_DECL generated in those
11631 clones. The decloning optimization (for space) may
11632 revert this subsequently if it determines that
11633 the clones should share a common implementation. */
11634 DECL_ABSTRACT_P (decl
) = true;
11636 else if (current_class_type
11637 && constructor_name_p (unqualified_id
, current_class_type
))
11638 permerror (input_location
, "ISO C++ forbids nested type %qD with same name "
11639 "as enclosing class",
11642 /* If the user declares "typedef struct {...} foo" then the
11643 struct will have an anonymous name. Fill that name in now.
11644 Nothing can refer to it, so nothing needs know about the name
11646 if (type
!= error_mark_node
11648 && TYPE_NAME (type
)
11649 && TREE_CODE (TYPE_NAME (type
)) == TYPE_DECL
11650 && TYPE_UNNAMED_P (type
)
11651 && declspecs
->type_definition_p
11652 && attributes_naming_typedef_ok (*attrlist
)
11653 && cp_type_quals (type
) == TYPE_UNQUALIFIED
)
11654 name_unnamed_type (type
, decl
);
11657 || (typedef_decl
&& C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl
)))
11658 C_TYPEDEF_EXPLICITLY_SIGNED (decl
) = 1;
11660 bad_specifiers (decl
, BSP_TYPE
, virtualp
,
11661 memfn_quals
!= TYPE_UNQUALIFIED
,
11662 inlinep
, friendp
, raises
!= NULL_TREE
);
11664 if (decl_spec_seq_has_spec_p (declspecs
, ds_alias
))
11665 /* Acknowledge that this was written:
11666 `using analias = atype;'. */
11667 TYPE_DECL_ALIAS_P (decl
) = 1;
11672 /* Detect the case of an array type of unspecified size
11673 which came, as such, direct from a typedef name.
11674 We must copy the type, so that the array's domain can be
11675 individually set by the object's initializer. */
11677 if (type
&& typedef_type
11678 && TREE_CODE (type
) == ARRAY_TYPE
&& !TYPE_DOMAIN (type
)
11679 && TYPE_MAIN_VARIANT (type
) == TYPE_MAIN_VARIANT (typedef_type
))
11680 type
= build_cplus_array_type (TREE_TYPE (type
), NULL_TREE
);
11682 /* Detect where we're using a typedef of function type to declare a
11683 function. PARMS will not be set, so we must create it now. */
11685 if (type
== typedef_type
&& TREE_CODE (type
) == FUNCTION_TYPE
)
11687 tree decls
= NULL_TREE
;
11690 for (args
= TYPE_ARG_TYPES (type
);
11691 args
&& args
!= void_list_node
;
11692 args
= TREE_CHAIN (args
))
11694 tree decl
= cp_build_parm_decl (NULL_TREE
, NULL_TREE
,
11695 TREE_VALUE (args
));
11697 DECL_CHAIN (decl
) = decls
;
11701 parms
= nreverse (decls
);
11703 if (decl_context
!= TYPENAME
)
11705 /* The qualifiers on the function type become the qualifiers on
11706 the non-static member function. */
11707 memfn_quals
|= type_memfn_quals (type
);
11708 rqual
= type_memfn_rqual (type
);
11709 type_quals
= TYPE_UNQUALIFIED
;
11713 /* If this is a type name (such as, in a cast or sizeof),
11714 compute the type and return it now. */
11716 if (decl_context
== TYPENAME
)
11718 /* Note that here we don't care about type_quals. */
11720 /* Special case: "friend class foo" looks like a TYPENAME context. */
11725 error ("%<inline%> specified for friend class declaration");
11731 /* Don't allow friend declaration without a class-key. */
11732 if (TREE_CODE (type
) == TEMPLATE_TYPE_PARM
)
11733 permerror (input_location
, "template parameters cannot be friends");
11734 else if (TREE_CODE (type
) == TYPENAME_TYPE
)
11735 permerror (input_location
, "friend declaration requires class-key, "
11736 "i.e. %<friend class %T::%D%>",
11737 TYPE_CONTEXT (type
), TYPENAME_TYPE_FULLNAME (type
));
11739 permerror (input_location
, "friend declaration requires class-key, "
11740 "i.e. %<friend %#T%>",
11744 /* Only try to do this stuff if we didn't already give up. */
11745 if (type
!= integer_type_node
)
11747 /* A friendly class? */
11748 if (current_class_type
)
11749 make_friend_class (current_class_type
, TYPE_MAIN_VARIANT (type
),
11750 /*complain=*/true);
11752 error ("trying to make class %qT a friend of global scope",
11755 type
= void_type_node
;
11758 else if (memfn_quals
|| rqual
)
11760 if (ctype
== NULL_TREE
11761 && TREE_CODE (type
) == METHOD_TYPE
)
11762 ctype
= TYPE_METHOD_BASETYPE (type
);
11765 type
= build_memfn_type (type
, ctype
, memfn_quals
, rqual
);
11766 /* Core issue #547: need to allow this in template type args.
11767 Allow it in general in C++11 for alias-declarations. */
11768 else if ((template_type_arg
|| cxx_dialect
>= cxx11
)
11769 && TREE_CODE (type
) == FUNCTION_TYPE
)
11770 type
= apply_memfn_quals (type
, memfn_quals
, rqual
);
11772 error ("invalid qualifiers on non-member function type");
11776 error_at (location_of (reqs
), "requires-clause on type-id");
11780 else if (unqualified_id
== NULL_TREE
&& decl_context
!= PARM
11781 && decl_context
!= CATCHPARM
11782 && TREE_CODE (type
) != UNION_TYPE
11784 && innermost_code
!= cdk_decomp
)
11786 error ("abstract declarator %qT used as declaration", type
);
11787 return error_mark_node
;
11790 if (!FUNC_OR_METHOD_TYPE_P (type
))
11792 /* Only functions may be declared using an operator-function-id. */
11793 if (dname
&& IDENTIFIER_ANY_OP_P (dname
))
11795 error ("declaration of %qD as non-function", dname
);
11796 return error_mark_node
;
11800 error_at (location_of (reqs
),
11801 "requires-clause on declaration of non-function type %qT",
11805 /* We don't check parameter types here because we can emit a better
11806 error message later. */
11807 if (decl_context
!= PARM
)
11809 type
= check_var_type (unqualified_id
, type
);
11810 if (type
== error_mark_node
)
11811 return error_mark_node
;
11814 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11815 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
11817 if (decl_context
== PARM
|| decl_context
== CATCHPARM
)
11819 if (ctype
|| in_namespace
)
11820 error ("cannot use %<::%> in parameter declaration");
11822 if (type_uses_auto (type
)
11823 && !(cxx_dialect
>= cxx17
&& template_parm_flag
))
11825 if (cxx_dialect
>= cxx14
)
11826 error ("%<auto%> parameter not permitted in this context");
11828 error ("parameter declared %<auto%>");
11829 type
= error_mark_node
;
11832 /* A parameter declared as an array of T is really a pointer to T.
11833 One declared as a function is really a pointer to a function.
11834 One declared as a member is really a pointer to member. */
11836 if (TREE_CODE (type
) == ARRAY_TYPE
)
11838 /* Transfer const-ness of array into that of type pointed to. */
11839 type
= build_pointer_type (TREE_TYPE (type
));
11840 type_quals
= TYPE_UNQUALIFIED
;
11841 array_parameter_p
= true;
11843 else if (TREE_CODE (type
) == FUNCTION_TYPE
)
11844 type
= build_pointer_type (type
);
11847 if (ctype
&& TREE_CODE (type
) == FUNCTION_TYPE
&& staticp
< 2
11848 && !(identifier_p (unqualified_id
)
11849 && IDENTIFIER_NEWDEL_OP_P (unqualified_id
)))
11851 cp_cv_quals real_quals
= memfn_quals
;
11852 if (cxx_dialect
< cxx14
&& constexpr_p
11853 && sfk
!= sfk_constructor
&& sfk
!= sfk_destructor
)
11854 real_quals
|= TYPE_QUAL_CONST
;
11855 type
= build_memfn_type (type
, ctype
, real_quals
, rqual
);
11859 tree decl
= NULL_TREE
;
11861 if (decl_context
== PARM
)
11863 decl
= cp_build_parm_decl (NULL_TREE
, unqualified_id
, type
);
11864 DECL_ARRAY_PARAMETER_P (decl
) = array_parameter_p
;
11866 bad_specifiers (decl
, BSP_PARM
, virtualp
,
11867 memfn_quals
!= TYPE_UNQUALIFIED
,
11868 inlinep
, friendp
, raises
!= NULL_TREE
);
11870 else if (decl_context
== FIELD
)
11872 if (!staticp
&& !friendp
&& TREE_CODE (type
) != METHOD_TYPE
)
11873 if (tree auto_node
= type_uses_auto (type
))
11875 location_t loc
= declspecs
->locations
[ds_type_spec
];
11876 if (CLASS_PLACEHOLDER_TEMPLATE (auto_node
))
11877 error_at (loc
, "invalid use of template-name %qE without an "
11879 CLASS_PLACEHOLDER_TEMPLATE (auto_node
));
11881 error_at (loc
, "non-static data member declared with "
11882 "placeholder %qT", auto_node
);
11883 type
= error_mark_node
;
11886 /* The C99 flexible array extension. */
11887 if (!staticp
&& TREE_CODE (type
) == ARRAY_TYPE
11888 && TYPE_DOMAIN (type
) == NULL_TREE
)
11891 && (TREE_CODE (ctype
) == UNION_TYPE
11892 || TREE_CODE (ctype
) == QUAL_UNION_TYPE
))
11894 error ("flexible array member in union");
11895 type
= error_mark_node
;
11899 /* Array is a flexible member. */
11900 if (in_system_header_at (input_location
))
11901 /* Do not warn on flexible array members in system
11902 headers because glibc uses them. */;
11904 pedwarn (input_location
, OPT_Wpedantic
,
11905 "ISO C++ forbids flexible array member %qs", name
);
11907 pedwarn (input_location
, OPT_Wpedantic
,
11908 "ISO C++ forbids flexible array members");
11910 /* Flexible array member has a null domain. */
11911 type
= build_cplus_array_type (TREE_TYPE (type
), NULL_TREE
);
11915 if (type
== error_mark_node
)
11917 /* Happens when declaring arrays of sizes which
11918 are error_mark_node, for example. */
11921 else if (in_namespace
&& !friendp
)
11923 /* Something like struct S { int N::j; }; */
11924 error ("invalid use of %<::%>");
11925 return error_mark_node
;
11927 else if (TREE_CODE (type
) == FUNCTION_TYPE
11928 || TREE_CODE (type
) == METHOD_TYPE
)
11931 tree function_context
;
11935 /* This should never happen in pure C++ (the check
11936 could be an assert). It could happen in
11937 Objective-C++ if someone writes invalid code that
11938 uses a function declaration for an instance
11939 variable or property (instance variables and
11940 properties are parsed as FIELD_DECLs, but they are
11941 part of an Objective-C class, not a C++ class).
11942 That code is invalid and is caught by this
11946 error ("declaration of function %qD in invalid context",
11948 return error_mark_node
;
11951 /* ``A union may [ ... ] not [ have ] virtual functions.''
11953 if (virtualp
&& TREE_CODE (ctype
) == UNION_TYPE
)
11955 error ("function %qD declared %<virtual%> inside a union",
11957 return error_mark_node
;
11961 && identifier_p (unqualified_id
)
11962 && IDENTIFIER_NEWDEL_OP_P (unqualified_id
))
11964 error ("%qD cannot be declared %<virtual%>, since it "
11965 "is always static", unqualified_id
);
11970 /* Check that the name used for a destructor makes sense. */
11971 if (sfk
== sfk_destructor
)
11973 tree uqname
= id_declarator
->u
.id
.unqualified_name
;
11977 gcc_assert (friendp
);
11978 error ("expected qualified name in friend declaration "
11979 "for destructor %qD", uqname
);
11980 return error_mark_node
;
11983 if (!check_dtor_name (ctype
, TREE_OPERAND (uqname
, 0)))
11985 error ("declaration of %qD as member of %qT",
11987 return error_mark_node
;
11991 error ("a destructor cannot be %<concept%>");
11992 return error_mark_node
;
11996 error ("a destructor cannot be %<constexpr%>");
11997 return error_mark_node
;
12000 else if (sfk
== sfk_constructor
&& friendp
&& !ctype
)
12002 error ("expected qualified name in friend declaration "
12003 "for constructor %qD",
12004 id_declarator
->u
.id
.unqualified_name
);
12005 return error_mark_node
;
12007 if (sfk
== sfk_constructor
)
12010 error ("a constructor cannot be %<concept%>");
12011 return error_mark_node
;
12015 error ("a concept cannot be a member function");
12019 if (TREE_CODE (unqualified_id
) == TEMPLATE_ID_EXPR
)
12021 tree tmpl
= TREE_OPERAND (unqualified_id
, 0);
12022 if (variable_template_p (tmpl
))
12024 error ("specialization of variable template %qD "
12025 "declared as function", tmpl
);
12026 inform (DECL_SOURCE_LOCATION (tmpl
),
12027 "variable template declared here");
12028 return error_mark_node
;
12032 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
12033 function_context
= (ctype
!= NULL_TREE
) ?
12034 decl_function_context (TYPE_MAIN_DECL (ctype
)) : NULL_TREE
;
12035 publicp
= (! friendp
|| ! staticp
)
12036 && function_context
== NULL_TREE
;
12038 if (late_return_type_p
)
12039 TYPE_HAS_LATE_RETURN_TYPE (type
) = 1;
12041 decl
= grokfndecl (ctype
, type
,
12042 TREE_CODE (unqualified_id
) != TEMPLATE_ID_EXPR
12043 ? unqualified_id
: dname
,
12047 virtualp
, flags
, memfn_quals
, rqual
, raises
,
12048 friendp
? -1 : 0, friendp
, publicp
,
12049 inlinep
| (2 * constexpr_p
) | (4 * concept_p
),
12050 initialized
== SD_DELETED
, sfk
,
12051 funcdef_flag
, template_count
, in_namespace
,
12052 attrlist
, declarator
->id_loc
);
12053 decl
= set_virt_specifiers (decl
, virt_specifiers
);
12054 if (decl
== NULL_TREE
)
12055 return error_mark_node
;
12057 /* This clobbers the attrs stored in `decl' from `attrlist'. */
12058 /* The decl and setting of decl_attr is also turned off. */
12059 decl
= build_decl_attribute_variant (decl
, decl_attr
);
12062 /* [class.conv.ctor]
12064 A constructor declared without the function-specifier
12065 explicit that can be called with a single parameter
12066 specifies a conversion from the type of its first
12067 parameter to the type of its class. Such a constructor
12068 is called a converting constructor. */
12069 if (explicitp
== 2)
12070 DECL_NONCONVERTING_P (decl
) = 1;
12072 else if (!staticp
&& !dependent_type_p (type
)
12073 && !COMPLETE_TYPE_P (complete_type (type
))
12074 && (!complete_or_array_type_p (type
)
12075 || initialized
== 0))
12077 if (TREE_CODE (type
) != ARRAY_TYPE
12078 || !COMPLETE_TYPE_P (TREE_TYPE (type
)))
12080 if (unqualified_id
)
12082 error ("field %qD has incomplete type %qT",
12083 unqualified_id
, type
);
12084 cxx_incomplete_type_inform (strip_array_types (type
));
12087 error ("name %qT has incomplete type", type
);
12089 type
= error_mark_node
;
12097 error ("%qE is neither function nor member function; "
12098 "cannot be declared friend", unqualified_id
);
12106 /* Friends are treated specially. */
12107 if (ctype
== current_class_type
)
12108 ; /* We already issued a permerror. */
12109 else if (decl
&& DECL_NAME (decl
))
12111 if (template_class_depth (current_class_type
) == 0)
12113 decl
= check_explicit_specialization
12114 (unqualified_id
, decl
, template_count
,
12115 2 * funcdef_flag
+ 4);
12116 if (decl
== error_mark_node
)
12117 return error_mark_node
;
12120 decl
= do_friend (ctype
, unqualified_id
, decl
,
12126 return error_mark_node
;
12129 /* Structure field. It may not be a function, except for C++. */
12131 if (decl
== NULL_TREE
)
12135 /* C++ allows static class members. All other work
12136 for this is done by grokfield. */
12137 decl
= build_lang_decl_loc (declarator
12138 ? declarator
->id_loc
12140 VAR_DECL
, unqualified_id
, type
);
12141 set_linkage_for_static_data_member (decl
);
12143 error ("static data member %qE declared %<concept%>",
12145 else if (constexpr_p
&& !initialized
)
12147 error ("%<constexpr%> static data member %qD must have an "
12148 "initializer", decl
);
12149 constexpr_p
= false;
12153 mark_inline_variable (decl
);
12155 if (!DECL_VAR_DECLARED_INLINE_P (decl
)
12156 && !(cxx_dialect
>= cxx17
&& constexpr_p
))
12157 /* Even if there is an in-class initialization, DECL
12158 is considered undefined until an out-of-class
12159 definition is provided, unless this is an inline
12161 DECL_EXTERNAL (decl
) = 1;
12165 CP_DECL_THREAD_LOCAL_P (decl
) = true;
12166 if (!processing_template_decl
)
12167 set_decl_tls_model (decl
, decl_default_tls_model (decl
));
12168 if (declspecs
->gnu_thread_keyword_p
)
12169 SET_DECL_GNU_TLS_P (decl
);
12175 error ("non-static data member %qE declared %<concept%>",
12177 else if (constexpr_p
)
12179 error ("non-static data member %qE declared %<constexpr%>",
12181 constexpr_p
= false;
12183 decl
= build_decl (input_location
,
12184 FIELD_DECL
, unqualified_id
, type
);
12185 DECL_NONADDRESSABLE_P (decl
) = bitfield
;
12186 if (bitfield
&& !unqualified_id
)
12188 TREE_NO_WARNING (decl
) = 1;
12189 DECL_PADDING_P (decl
) = 1;
12192 if (storage_class
== sc_mutable
)
12194 DECL_MUTABLE_P (decl
) = 1;
12195 storage_class
= sc_none
;
12200 /* An attempt is being made to initialize a non-static
12201 member. This is new in C++11. */
12202 maybe_warn_cpp0x (CPP0X_NSDMI
);
12204 /* If this has been parsed with static storage class, but
12205 errors forced staticp to be cleared, ensure NSDMI is
12207 if (declspecs
->storage_class
== sc_static
)
12208 DECL_INITIAL (decl
) = error_mark_node
;
12212 bad_specifiers (decl
, BSP_FIELD
, virtualp
,
12213 memfn_quals
!= TYPE_UNQUALIFIED
,
12214 staticp
? false : inlinep
, friendp
,
12215 raises
!= NULL_TREE
);
12218 else if (TREE_CODE (type
) == FUNCTION_TYPE
12219 || TREE_CODE (type
) == METHOD_TYPE
)
12221 tree original_name
;
12224 if (!unqualified_id
)
12225 return error_mark_node
;
12227 if (TREE_CODE (unqualified_id
) == TEMPLATE_ID_EXPR
)
12228 original_name
= dname
;
12230 original_name
= unqualified_id
;
12231 // FIXME:gcc_assert (original_name == dname);
12233 if (storage_class
== sc_auto
)
12234 error ("storage class %<auto%> invalid for function %qs", name
);
12235 else if (storage_class
== sc_register
)
12236 error ("storage class %<register%> invalid for function %qs", name
);
12239 if (declspecs
->gnu_thread_keyword_p
)
12240 error ("storage class %<__thread%> invalid for function %qs",
12243 error ("storage class %<thread_local%> invalid for function %qs",
12247 if (virt_specifiers
)
12248 error ("virt-specifiers in %qs not allowed outside a class definition", name
);
12249 /* Function declaration not at top level.
12250 Storage classes other than `extern' are not allowed
12251 and `extern' makes no difference. */
12252 if (! toplevel_bindings_p ()
12253 && (storage_class
== sc_static
12254 || decl_spec_seq_has_spec_p (declspecs
, ds_inline
))
12257 if (storage_class
== sc_static
)
12258 pedwarn (input_location
, OPT_Wpedantic
,
12259 "%<static%> specifier invalid for function %qs "
12260 "declared out of global scope", name
);
12262 pedwarn (input_location
, OPT_Wpedantic
,
12263 "%<inline%> specifier invalid for function %qs "
12264 "declared out of global scope", name
);
12267 if (ctype
== NULL_TREE
)
12271 error ("virtual non-class function %qs", name
);
12274 else if (sfk
== sfk_constructor
12275 || sfk
== sfk_destructor
)
12277 error (funcdef_flag
12278 ? G_("%qs defined in a non-class scope")
12279 : G_("%qs declared in a non-class scope"), name
);
12284 /* Record whether the function is public. */
12285 publicp
= (ctype
!= NULL_TREE
12286 || storage_class
!= sc_static
);
12288 if (late_return_type_p
)
12289 TYPE_HAS_LATE_RETURN_TYPE (type
) = 1;
12291 decl
= grokfndecl (ctype
, type
, original_name
, parms
, unqualified_id
,
12292 reqs
, virtualp
, flags
, memfn_quals
, rqual
, raises
,
12295 inlinep
| (2 * constexpr_p
) | (4 * concept_p
),
12296 initialized
== SD_DELETED
,
12299 template_count
, in_namespace
, attrlist
,
12300 declarator
->id_loc
);
12301 if (decl
== NULL_TREE
)
12302 return error_mark_node
;
12304 if (explicitp
== 2)
12305 DECL_NONCONVERTING_P (decl
) = 1;
12308 int invalid_static
= 0;
12310 /* Don't allow a static member function in a class, and forbid
12311 declaring main to be static. */
12312 if (TREE_CODE (type
) == METHOD_TYPE
)
12314 permerror (input_location
, "cannot declare member function %qD to have "
12315 "static linkage", decl
);
12316 invalid_static
= 1;
12318 else if (current_function_decl
)
12320 /* 7.1.1: There can be no static function declarations within a
12322 error ("cannot declare static function inside another function");
12323 invalid_static
= 1;
12326 if (invalid_static
)
12329 storage_class
= sc_none
;
12335 /* It's a variable. */
12337 /* An uninitialized decl with `extern' is a reference. */
12338 decl
= grokvardecl (type
, dname
, unqualified_id
,
12345 ctype
? ctype
: in_namespace
);
12346 if (decl
== NULL_TREE
)
12347 return error_mark_node
;
12349 bad_specifiers (decl
, BSP_VAR
, virtualp
,
12350 memfn_quals
!= TYPE_UNQUALIFIED
,
12351 inlinep
, friendp
, raises
!= NULL_TREE
);
12355 DECL_CONTEXT (decl
) = ctype
;
12358 permerror (input_location
, "%<static%> may not be used when defining "
12359 "(as opposed to declaring) a static data member");
12361 storage_class
= sc_none
;
12363 if (storage_class
== sc_register
&& TREE_STATIC (decl
))
12365 error ("static member %qD declared %<register%>", decl
);
12366 storage_class
= sc_none
;
12368 if (storage_class
== sc_extern
&& pedantic
)
12370 pedwarn (input_location
, OPT_Wpedantic
,
12371 "cannot explicitly declare member %q#D to have "
12372 "extern linkage", decl
);
12373 storage_class
= sc_none
;
12376 else if (constexpr_p
&& DECL_EXTERNAL (decl
))
12378 error ("declaration of %<constexpr%> variable %qD "
12379 "is not a definition", decl
);
12380 constexpr_p
= false;
12384 mark_inline_variable (decl
);
12385 if (innermost_code
== cdk_decomp
)
12387 gcc_assert (declarator
&& declarator
->kind
== cdk_decomp
);
12388 DECL_SOURCE_LOCATION (decl
) = declarator
->id_loc
;
12389 DECL_ARTIFICIAL (decl
) = 1;
12390 fit_decomposition_lang_decl (decl
, NULL_TREE
);
12394 if (VAR_P (decl
) && !initialized
)
12395 if (tree auto_node
= type_uses_auto (type
))
12396 if (!CLASS_PLACEHOLDER_TEMPLATE (auto_node
))
12398 location_t loc
= declspecs
->locations
[ds_type_spec
];
12399 error_at (loc
, "declaration of %q#D has no initializer", decl
);
12400 TREE_TYPE (decl
) = error_mark_node
;
12403 if (storage_class
== sc_extern
&& initialized
&& !funcdef_flag
)
12405 if (toplevel_bindings_p ())
12407 /* It's common practice (and completely valid) to have a const
12408 be initialized and declared extern. */
12409 if (!(type_quals
& TYPE_QUAL_CONST
))
12410 warning (0, "%qs initialized and declared %<extern%>", name
);
12414 error ("%qs has both %<extern%> and initializer", name
);
12415 return error_mark_node
;
12419 /* Record `register' declaration for warnings on &
12420 and in case doing stupid register allocation. */
12422 if (storage_class
== sc_register
)
12424 DECL_REGISTER (decl
) = 1;
12425 /* Warn about register storage specifiers on PARM_DECLs. */
12426 if (TREE_CODE (decl
) == PARM_DECL
)
12428 if (cxx_dialect
>= cxx17
)
12429 pedwarn (DECL_SOURCE_LOCATION (decl
), OPT_Wregister
,
12430 "ISO C++17 does not allow %<register%> storage "
12431 "class specifier");
12433 warning_at (DECL_SOURCE_LOCATION (decl
), OPT_Wregister
,
12434 "%<register%> storage class specifier used");
12437 else if (storage_class
== sc_extern
)
12438 DECL_THIS_EXTERN (decl
) = 1;
12439 else if (storage_class
== sc_static
)
12440 DECL_THIS_STATIC (decl
) = 1;
12442 /* Set constexpr flag on vars (functions got it in grokfndecl). */
12443 if (constexpr_p
&& VAR_P (decl
))
12444 DECL_DECLARED_CONSTEXPR_P (decl
) = true;
12446 /* Record constancy and volatility on the DECL itself . There's
12447 no need to do this when processing a template; we'll do this
12448 for the instantiated declaration based on the type of DECL. */
12449 if (!processing_template_decl
)
12450 cp_apply_type_quals_to_decl (type_quals
, decl
);
12456 /* Subroutine of start_function. Ensure that each of the parameter
12457 types (as listed in PARMS) is complete, as is required for a
12458 function definition. */
12461 require_complete_types_for_parms (tree parms
)
12463 for (; parms
; parms
= DECL_CHAIN (parms
))
12465 if (dependent_type_p (TREE_TYPE (parms
)))
12467 if (!VOID_TYPE_P (TREE_TYPE (parms
))
12468 && complete_type_or_else (TREE_TYPE (parms
), parms
))
12470 relayout_decl (parms
);
12471 DECL_ARG_TYPE (parms
) = type_passed_as (TREE_TYPE (parms
));
12473 maybe_warn_parm_abi (TREE_TYPE (parms
),
12474 DECL_SOURCE_LOCATION (parms
));
12477 /* grokparms or complete_type_or_else will have already issued
12479 TREE_TYPE (parms
) = error_mark_node
;
12483 /* Returns nonzero if T is a local variable. */
12486 local_variable_p (const_tree t
)
12489 /* A VAR_DECL with a context that is a _TYPE is a static data
12491 && !TYPE_P (CP_DECL_CONTEXT (t
))
12492 /* Any other non-local variable must be at namespace scope. */
12493 && !DECL_NAMESPACE_SCOPE_P (t
))
12494 || (TREE_CODE (t
) == PARM_DECL
))
12500 /* Like local_variable_p, but suitable for use as a tree-walking
12504 local_variable_p_walkfn (tree
*tp
, int *walk_subtrees
,
12507 if (local_variable_p (*tp
)
12508 && (!DECL_ARTIFICIAL (*tp
) || DECL_NAME (*tp
) == this_identifier
))
12510 else if (TYPE_P (*tp
))
12511 *walk_subtrees
= 0;
12516 /* Check that ARG, which is a default-argument expression for a
12517 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
12518 something goes wrong. DECL may also be a _TYPE node, rather than a
12519 DECL, if there is no DECL available. */
12522 check_default_argument (tree decl
, tree arg
, tsubst_flags_t complain
)
12527 if (TREE_CODE (arg
) == DEFAULT_ARG
)
12528 /* We get a DEFAULT_ARG when looking at an in-class declaration
12529 with a default argument. Ignore the argument for now; we'll
12530 deal with it after the class is complete. */
12539 decl_type
= TREE_TYPE (decl
);
12541 if (arg
== error_mark_node
12542 || decl
== error_mark_node
12543 || TREE_TYPE (arg
) == error_mark_node
12544 || decl_type
== error_mark_node
)
12545 /* Something already went wrong. There's no need to check
12547 return error_mark_node
;
12549 /* [dcl.fct.default]
12551 A default argument expression is implicitly converted to the
12553 ++cp_unevaluated_operand
;
12554 perform_implicit_conversion_flags (decl_type
, arg
, complain
,
12556 --cp_unevaluated_operand
;
12558 /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
12560 if (TYPE_PTR_OR_PTRMEM_P (decl_type
)
12561 && null_ptr_cst_p (arg
))
12562 return nullptr_node
;
12564 /* [dcl.fct.default]
12566 Local variables shall not be used in default argument
12569 The keyword `this' shall not be used in a default argument of a
12570 member function. */
12571 var
= cp_walk_tree_without_duplicates (&arg
, local_variable_p_walkfn
, NULL
);
12574 if (complain
& tf_warning_or_error
)
12576 if (DECL_NAME (var
) == this_identifier
)
12577 permerror (input_location
, "default argument %qE uses %qD",
12580 error ("default argument %qE uses local variable %qD", arg
, var
);
12582 return error_mark_node
;
12589 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
12592 type_is_deprecated (tree type
)
12594 enum tree_code code
;
12595 if (TREE_DEPRECATED (type
))
12597 if (TYPE_NAME (type
))
12599 if (TREE_DEPRECATED (TYPE_NAME (type
)))
12605 /* Do warn about using typedefs to a deprecated class. */
12606 if (OVERLOAD_TYPE_P (type
) && type
!= TYPE_MAIN_VARIANT (type
))
12607 return type_is_deprecated (TYPE_MAIN_VARIANT (type
));
12609 code
= TREE_CODE (type
);
12611 if (code
== POINTER_TYPE
|| code
== REFERENCE_TYPE
12612 || code
== OFFSET_TYPE
|| code
== FUNCTION_TYPE
12613 || code
== METHOD_TYPE
|| code
== ARRAY_TYPE
)
12614 return type_is_deprecated (TREE_TYPE (type
));
12616 if (TYPE_PTRMEMFUNC_P (type
))
12617 return type_is_deprecated
12618 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type
))));
12623 /* Decode the list of parameter types for a function type.
12624 Given the list of things declared inside the parens,
12625 return a list of types.
12627 If this parameter does not end with an ellipsis, we append
12630 *PARMS is set to the chain of PARM_DECLs created. */
12633 grokparms (tree parmlist
, tree
*parms
)
12635 tree result
= NULL_TREE
;
12636 tree decls
= NULL_TREE
;
12640 for (parm
= parmlist
; parm
!= NULL_TREE
; parm
= TREE_CHAIN (parm
))
12642 tree type
= NULL_TREE
;
12643 tree init
= TREE_PURPOSE (parm
);
12644 tree decl
= TREE_VALUE (parm
);
12646 if (parm
== void_list_node
)
12649 if (! decl
|| TREE_TYPE (decl
) == error_mark_node
)
12652 type
= TREE_TYPE (decl
);
12653 if (VOID_TYPE_P (type
))
12655 if (same_type_p (type
, void_type_node
)
12657 && !DECL_NAME (decl
) && !result
12658 && TREE_CHAIN (parm
) == void_list_node
)
12659 /* DR 577: A parameter list consisting of a single
12660 unnamed parameter of non-dependent type 'void'. */
12662 else if (cv_qualified_p (type
))
12663 error_at (DECL_SOURCE_LOCATION (decl
),
12664 "invalid use of cv-qualified type %qT in "
12665 "parameter declaration", type
);
12667 error_at (DECL_SOURCE_LOCATION (decl
),
12668 "invalid use of type %<void%> in parameter "
12670 /* It's not a good idea to actually create parameters of
12671 type `void'; other parts of the compiler assume that a
12672 void type terminates the parameter list. */
12673 type
= error_mark_node
;
12674 TREE_TYPE (decl
) = error_mark_node
;
12677 if (type
!= error_mark_node
)
12679 if (deprecated_state
!= DEPRECATED_SUPPRESS
)
12681 tree deptype
= type_is_deprecated (type
);
12683 warn_deprecated_use (deptype
, NULL_TREE
);
12686 /* Top-level qualifiers on the parameters are
12687 ignored for function types. */
12688 type
= cp_build_qualified_type (type
, 0);
12689 if (TREE_CODE (type
) == METHOD_TYPE
)
12691 error ("parameter %qD invalidly declared method type", decl
);
12692 type
= build_pointer_type (type
);
12693 TREE_TYPE (decl
) = type
;
12695 else if (abstract_virtuals_error (decl
, type
))
12696 any_error
= 1; /* Seems like a good idea. */
12697 else if (cxx_dialect
< cxx17
&& POINTER_TYPE_P (type
))
12699 /* Before C++17 DR 393:
12700 [dcl.fct]/6, parameter types cannot contain pointers
12701 (references) to arrays of unknown bound. */
12702 tree t
= TREE_TYPE (type
);
12703 int ptr
= TYPE_PTR_P (type
);
12707 if (TYPE_PTR_P (t
))
12709 else if (TREE_CODE (t
) != ARRAY_TYPE
)
12711 else if (!TYPE_DOMAIN (t
))
12715 if (TREE_CODE (t
) == ARRAY_TYPE
)
12716 pedwarn (DECL_SOURCE_LOCATION (decl
), OPT_Wpedantic
,
12718 ? G_("parameter %qD includes pointer to array of "
12719 "unknown bound %qT")
12720 : G_("parameter %qD includes reference to array of "
12721 "unknown bound %qT"),
12727 else if (init
&& !processing_template_decl
)
12728 init
= check_default_argument (decl
, init
, tf_warning_or_error
);
12731 DECL_CHAIN (decl
) = decls
;
12733 result
= tree_cons (init
, type
, result
);
12735 decls
= nreverse (decls
);
12736 result
= nreverse (result
);
12738 result
= chainon (result
, void_list_node
);
12745 /* D is a constructor or overloaded `operator='.
12747 Let T be the class in which D is declared. Then, this function
12750 -1 if D's is an ill-formed constructor or copy assignment operator
12751 whose first parameter is of type `T'.
12752 0 if D is not a copy constructor or copy assignment
12754 1 if D is a copy constructor or copy assignment operator whose
12755 first parameter is a reference to non-const qualified T.
12756 2 if D is a copy constructor or copy assignment operator whose
12757 first parameter is a reference to const qualified T.
12759 This function can be used as a predicate. Positive values indicate
12760 a copy constructor and nonzero values indicate a copy assignment
12764 copy_fn_p (const_tree d
)
12770 gcc_assert (DECL_FUNCTION_MEMBER_P (d
));
12772 if (TREE_CODE (d
) == TEMPLATE_DECL
12773 || (DECL_TEMPLATE_INFO (d
)
12774 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d
))))
12775 /* Instantiations of template member functions are never copy
12776 functions. Note that member functions of templated classes are
12777 represented as template functions internally, and we must
12778 accept those as copy functions. */
12781 args
= FUNCTION_FIRST_USER_PARMTYPE (d
);
12785 arg_type
= TREE_VALUE (args
);
12786 if (arg_type
== error_mark_node
)
12789 if (TYPE_MAIN_VARIANT (arg_type
) == DECL_CONTEXT (d
))
12791 /* Pass by value copy assignment operator. */
12794 else if (TREE_CODE (arg_type
) == REFERENCE_TYPE
12795 && !TYPE_REF_IS_RVALUE (arg_type
)
12796 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type
)) == DECL_CONTEXT (d
))
12798 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type
)))
12804 args
= TREE_CHAIN (args
);
12806 if (args
&& args
!= void_list_node
&& !TREE_PURPOSE (args
))
12807 /* There are more non-optional args. */
12813 /* D is a constructor or overloaded `operator='.
12815 Let T be the class in which D is declared. Then, this function
12816 returns true when D is a move constructor or move assignment
12817 operator, false otherwise. */
12820 move_fn_p (const_tree d
)
12822 gcc_assert (DECL_FUNCTION_MEMBER_P (d
));
12824 if (cxx_dialect
== cxx98
)
12825 /* There are no move constructors if we are in C++98 mode. */
12828 if (TREE_CODE (d
) == TEMPLATE_DECL
12829 || (DECL_TEMPLATE_INFO (d
)
12830 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d
))))
12831 /* Instantiations of template member functions are never move
12832 functions. Note that member functions of templated classes are
12833 represented as template functions internally, and we must
12834 accept those as move functions. */
12837 return move_signature_fn_p (d
);
12840 /* D is a constructor or overloaded `operator='.
12842 Then, this function returns true when D has the same signature as a move
12843 constructor or move assignment operator (because either it is such a
12844 ctor/op= or it is a template specialization with the same signature),
12845 false otherwise. */
12848 move_signature_fn_p (const_tree d
)
12852 bool result
= false;
12854 args
= FUNCTION_FIRST_USER_PARMTYPE (d
);
12858 arg_type
= TREE_VALUE (args
);
12859 if (arg_type
== error_mark_node
)
12862 if (TREE_CODE (arg_type
) == REFERENCE_TYPE
12863 && TYPE_REF_IS_RVALUE (arg_type
)
12864 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type
)),
12868 args
= TREE_CHAIN (args
);
12870 if (args
&& args
!= void_list_node
&& !TREE_PURPOSE (args
))
12871 /* There are more non-optional args. */
12877 /* Remember any special properties of member function DECL. */
12880 grok_special_member_properties (tree decl
)
12884 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl
))
12887 class_type
= DECL_CONTEXT (decl
);
12888 if (IDENTIFIER_CTOR_P (DECL_NAME (decl
)))
12890 int ctor
= copy_fn_p (decl
);
12892 if (!DECL_ARTIFICIAL (decl
))
12893 TYPE_HAS_USER_CONSTRUCTOR (class_type
) = 1;
12899 A non-template constructor for class X is a copy
12900 constructor if its first parameter is of type X&, const
12901 X&, volatile X& or const volatile X&, and either there
12902 are no other parameters or else all other parameters have
12903 default arguments. */
12904 TYPE_HAS_COPY_CTOR (class_type
) = 1;
12905 if (user_provided_p (decl
))
12906 TYPE_HAS_COMPLEX_COPY_CTOR (class_type
) = 1;
12908 TYPE_HAS_CONST_COPY_CTOR (class_type
) = 1;
12910 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl
)))
12911 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type
) = 1;
12912 else if (move_fn_p (decl
) && user_provided_p (decl
))
12913 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type
) = 1;
12914 else if (is_list_ctor (decl
))
12915 TYPE_HAS_LIST_CTOR (class_type
) = 1;
12917 if (DECL_DECLARED_CONSTEXPR_P (decl
)
12918 && !ctor
&& !move_fn_p (decl
))
12919 TYPE_HAS_CONSTEXPR_CTOR (class_type
) = 1;
12921 else if (DECL_NAME (decl
) == assign_op_identifier
)
12925 A non-template assignment operator for class X is a copy
12926 assignment operator if its parameter is of type X, X&, const
12927 X&, volatile X& or const volatile X&. */
12929 int assop
= copy_fn_p (decl
);
12933 TYPE_HAS_COPY_ASSIGN (class_type
) = 1;
12934 if (user_provided_p (decl
))
12935 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type
) = 1;
12937 TYPE_HAS_CONST_COPY_ASSIGN (class_type
) = 1;
12939 else if (move_fn_p (decl
) && user_provided_p (decl
))
12940 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type
) = 1;
12942 else if (IDENTIFIER_CONV_OP_P (DECL_NAME (decl
)))
12943 TYPE_HAS_CONVERSION (class_type
) = true;
12945 /* Destructors are handled in check_methods. */
12948 /* Check a constructor DECL has the correct form. Complains
12949 if the class has a constructor of the form X(X). */
12952 grok_ctor_properties (const_tree ctype
, const_tree decl
)
12954 int ctor_parm
= copy_fn_p (decl
);
12960 A declaration of a constructor for a class X is ill-formed if
12961 its first parameter is of type (optionally cv-qualified) X
12962 and either there are no other parameters or else all other
12963 parameters have default arguments.
12965 We *don't* complain about member template instantiations that
12966 have this form, though; they can occur as we try to decide
12967 what constructor to use during overload resolution. Since
12968 overload resolution will never prefer such a constructor to
12969 the non-template copy constructor (which is either explicitly
12970 or implicitly defined), there's no need to worry about their
12971 existence. Theoretically, they should never even be
12972 instantiated, but that's hard to forestall. */
12973 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
12981 /* DECL is a declaration for an overloaded or conversion operator. If
12982 COMPLAIN is true, errors are issued for invalid declarations. */
12985 grok_op_properties (tree decl
, bool complain
)
12987 tree argtypes
= TYPE_ARG_TYPES (TREE_TYPE (decl
));
12988 bool methodp
= TREE_CODE (TREE_TYPE (decl
)) == METHOD_TYPE
;
12989 tree name
= DECL_NAME (decl
);
12991 tree class_type
= DECL_CONTEXT (decl
);
12992 if (class_type
&& !CLASS_TYPE_P (class_type
))
12993 class_type
= NULL_TREE
;
12995 tree_code operator_code
;
12997 if (IDENTIFIER_CONV_OP_P (name
))
12999 /* Conversion operators are TYPE_EXPR for the purposes of this
13001 operator_code
= TYPE_EXPR
;
13002 op_flags
= OVL_OP_FLAG_UNARY
;
13006 const ovl_op_info_t
*ovl_op
= IDENTIFIER_OVL_OP_INFO (name
);
13008 operator_code
= ovl_op
->tree_code
;
13009 op_flags
= ovl_op
->flags
;
13010 gcc_checking_assert (operator_code
!= ERROR_MARK
);
13011 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl
) = ovl_op
->ovl_op_code
;
13014 if (op_flags
& OVL_OP_FLAG_ALLOC
)
13016 /* operator new and operator delete are quite special. */
13020 case OVL_OP_FLAG_ALLOC
:
13021 TYPE_HAS_NEW_OPERATOR (class_type
) = 1;
13024 case OVL_OP_FLAG_ALLOC
| OVL_OP_FLAG_DELETE
:
13025 TYPE_GETS_DELETE (class_type
) |= 1;
13028 case OVL_OP_FLAG_ALLOC
| OVL_OP_FLAG_VEC
:
13029 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type
) = 1;
13032 case OVL_OP_FLAG_ALLOC
| OVL_OP_FLAG_DELETE
| OVL_OP_FLAG_VEC
:
13033 TYPE_GETS_DELETE (class_type
) |= 2;
13037 gcc_unreachable ();
13040 /* [basic.std.dynamic.allocation]/1:
13042 A program is ill-formed if an allocation function is declared
13043 in a namespace scope other than global scope or declared
13044 static in global scope.
13046 The same also holds true for deallocation functions. */
13047 if (DECL_NAMESPACE_SCOPE_P (decl
))
13049 if (CP_DECL_CONTEXT (decl
) != global_namespace
)
13051 error ("%qD may not be declared within a namespace", decl
);
13055 if (!TREE_PUBLIC (decl
))
13057 error ("%qD may not be declared as static", decl
);
13062 if (op_flags
& OVL_OP_FLAG_DELETE
)
13063 TREE_TYPE (decl
) = coerce_delete_type (TREE_TYPE (decl
));
13066 DECL_IS_OPERATOR_NEW (decl
) = 1;
13067 TREE_TYPE (decl
) = coerce_new_type (TREE_TYPE (decl
));
13073 /* An operator function must either be a non-static member function
13074 or have at least one parameter of a class, a reference to a class,
13075 an enumeration, or a reference to an enumeration. 13.4.0.6 */
13076 if (! methodp
|| DECL_STATIC_FUNCTION_P (decl
))
13078 if (operator_code
== TYPE_EXPR
13079 || operator_code
== CALL_EXPR
13080 || operator_code
== COMPONENT_REF
13081 || operator_code
== ARRAY_REF
13082 || operator_code
== NOP_EXPR
)
13084 error ("%qD must be a nonstatic member function", decl
);
13088 if (DECL_STATIC_FUNCTION_P (decl
))
13090 error ("%qD must be either a non-static member "
13091 "function or a non-member function", decl
);
13095 for (tree arg
= argtypes
; ; arg
= TREE_CHAIN (arg
))
13097 if (!arg
|| arg
== void_list_node
)
13100 error ("%qD must have an argument of class or "
13101 "enumerated type", decl
);
13105 tree type
= non_reference (TREE_VALUE (arg
));
13106 if (type
== error_mark_node
)
13109 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
13110 because these checks are performed even on template
13112 if (MAYBE_CLASS_TYPE_P (type
)
13113 || TREE_CODE (type
) == ENUMERAL_TYPE
)
13118 if (operator_code
== CALL_EXPR
)
13119 /* There are no further restrictions on the arguments to an overloaded
13123 if (operator_code
== COND_EXPR
)
13126 error ("ISO C++ prohibits overloading operator ?:");
13130 /* Count the number of arguments and check for ellipsis. */
13132 for (tree arg
= argtypes
; arg
!= void_list_node
; arg
= TREE_CHAIN (arg
))
13137 error ("%qD must not have variable number of arguments", decl
);
13143 /* Verify correct number of arguments. */
13146 case OVL_OP_FLAG_AMBIARY
:
13149 /* We have a unary instance of an ambi-ary op. Remap to the
13151 unsigned alt
= ovl_op_alternate
[ovl_op_mapping
[operator_code
]];
13152 const ovl_op_info_t
*ovl_op
= &ovl_op_info
[false][alt
];
13153 gcc_checking_assert (ovl_op
->flags
== OVL_OP_FLAG_UNARY
);
13154 operator_code
= ovl_op
->tree_code
;
13155 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl
) = ovl_op
->ovl_op_code
;
13157 else if (arity
!= 2)
13159 /* This was an ambiguous operator but is invalid. */
13161 ? G_("%qD must have either zero or one argument")
13162 : G_("%qD must have either one or two arguments"), decl
);
13165 else if ((operator_code
== POSTINCREMENT_EXPR
13166 || operator_code
== POSTDECREMENT_EXPR
)
13167 && ! processing_template_decl
13168 /* x++ and x--'s second argument must be an int. */
13169 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes
)),
13170 integer_type_node
))
13173 ? G_("postfix %qD must have %<int%> as its argument")
13174 : G_("postfix %qD must have %<int%> as its second argument"),
13180 case OVL_OP_FLAG_UNARY
:
13184 ? G_("%qD must have no arguments")
13185 : G_("%qD must have exactly one argument"), decl
);
13190 case OVL_OP_FLAG_BINARY
:
13194 ? G_("%qD must have exactly one argument")
13195 : G_("%qD must have exactly two arguments"), decl
);
13201 gcc_unreachable ();
13204 /* There can be no default arguments. */
13205 for (tree arg
= argtypes
; arg
!= void_list_node
; arg
= TREE_CHAIN (arg
))
13206 if (TREE_PURPOSE (arg
))
13208 TREE_PURPOSE (arg
) = NULL_TREE
;
13209 if (operator_code
== POSTINCREMENT_EXPR
13210 || operator_code
== POSTDECREMENT_EXPR
)
13211 pedwarn (input_location
, OPT_Wpedantic
,
13212 "%qD cannot have default arguments", decl
);
13215 error ("%qD cannot have default arguments", decl
);
13220 /* At this point the declaration is well-formed. It may not be
13221 sensible though. */
13223 /* Check member function warnings only on the in-class declaration.
13224 There's no point warning on an out-of-class definition. */
13225 if (class_type
&& class_type
!= current_class_type
)
13228 /* Warn about conversion operators that will never be used. */
13229 if (IDENTIFIER_CONV_OP_P (name
)
13230 && ! DECL_TEMPLATE_INFO (decl
)
13231 && warn_conversion
)
13233 tree t
= TREE_TYPE (name
);
13234 int ref
= (TREE_CODE (t
) == REFERENCE_TYPE
);
13237 t
= TYPE_MAIN_VARIANT (TREE_TYPE (t
));
13239 if (VOID_TYPE_P (t
))
13240 warning (OPT_Wconversion
,
13242 ? G_("conversion to a reference to void "
13243 "will never use a type conversion operator")
13244 : G_("conversion to void "
13245 "will never use a type conversion operator"));
13246 else if (class_type
)
13248 if (t
== class_type
)
13249 warning (OPT_Wconversion
,
13251 ? G_("conversion to a reference to the same type "
13252 "will never use a type conversion operator")
13253 : G_("conversion to the same type "
13254 "will never use a type conversion operator"));
13255 /* Don't force t to be complete here. */
13256 else if (MAYBE_CLASS_TYPE_P (t
)
13257 && COMPLETE_TYPE_P (t
)
13258 && DERIVED_FROM_P (t
, class_type
))
13259 warning (OPT_Wconversion
,
13261 ? G_("conversion to a reference to a base class "
13262 "will never use a type conversion operator")
13263 : G_("conversion to a base class "
13264 "will never use a type conversion operator"));
13271 /* Effective C++ rules below. */
13273 /* More Effective C++ rule 7. */
13274 if (operator_code
== TRUTH_ANDIF_EXPR
13275 || operator_code
== TRUTH_ORIF_EXPR
13276 || operator_code
== COMPOUND_EXPR
)
13277 warning (OPT_Weffc__
,
13278 "user-defined %qD always evaluates both arguments", decl
);
13280 /* More Effective C++ rule 6. */
13281 if (operator_code
== POSTINCREMENT_EXPR
13282 || operator_code
== POSTDECREMENT_EXPR
13283 || operator_code
== PREINCREMENT_EXPR
13284 || operator_code
== PREDECREMENT_EXPR
)
13286 tree arg
= TREE_VALUE (argtypes
);
13287 tree ret
= TREE_TYPE (TREE_TYPE (decl
));
13288 if (methodp
|| TREE_CODE (arg
) == REFERENCE_TYPE
)
13289 arg
= TREE_TYPE (arg
);
13290 arg
= TYPE_MAIN_VARIANT (arg
);
13292 if (operator_code
== PREINCREMENT_EXPR
13293 || operator_code
== PREDECREMENT_EXPR
)
13295 if (TREE_CODE (ret
) != REFERENCE_TYPE
13296 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret
)), arg
))
13297 warning (OPT_Weffc__
, "prefix %qD should return %qT", decl
,
13298 build_reference_type (arg
));
13302 if (!same_type_p (TYPE_MAIN_VARIANT (ret
), arg
))
13303 warning (OPT_Weffc__
, "postfix %qD should return %qT", decl
, arg
);
13307 /* Effective C++ rule 23. */
13308 if (!DECL_ASSIGNMENT_OPERATOR_P (decl
)
13309 && (operator_code
== PLUS_EXPR
13310 || operator_code
== MINUS_EXPR
13311 || operator_code
== TRUNC_DIV_EXPR
13312 || operator_code
== MULT_EXPR
13313 || operator_code
== TRUNC_MOD_EXPR
)
13314 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl
))) == REFERENCE_TYPE
)
13315 warning (OPT_Weffc__
, "%qD should return by value", decl
);
13320 /* Return a string giving the keyword associate with CODE. */
13322 static const char *
13323 tag_name (enum tag_types code
)
13335 case typename_type
:
13338 gcc_unreachable ();
13342 /* Name lookup in an elaborated-type-specifier (after the keyword
13343 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
13344 elaborated-type-specifier is invalid, issue a diagnostic and return
13345 error_mark_node; otherwise, return the *_TYPE to which it referred.
13346 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
13349 check_elaborated_type_specifier (enum tag_types tag_code
,
13351 bool allow_template_p
)
13357 struct S { struct S *p; };
13359 name lookup will find the TYPE_DECL for the implicit "S::S"
13360 typedef. Adjust for that here. */
13361 if (DECL_SELF_REFERENCE_P (decl
))
13362 decl
= TYPE_NAME (TREE_TYPE (decl
));
13364 type
= TREE_TYPE (decl
);
13366 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
13367 is false for this case as well. */
13368 if (TREE_CODE (type
) == TEMPLATE_TYPE_PARM
)
13370 error ("using template type parameter %qT after %qs",
13371 type
, tag_name (tag_code
));
13372 return error_mark_node
;
13374 /* Accept template template parameters. */
13375 else if (allow_template_p
13376 && (TREE_CODE (type
) == BOUND_TEMPLATE_TEMPLATE_PARM
13377 || TREE_CODE (type
) == TEMPLATE_TEMPLATE_PARM
))
13381 If the identifier resolves to a typedef-name or the
13382 simple-template-id resolves to an alias template
13383 specialization, the elaborated-type-specifier is ill-formed.
13385 In other words, the only legitimate declaration to use in the
13386 elaborated type specifier is the implicit typedef created when
13387 the type is declared. */
13388 else if (!DECL_IMPLICIT_TYPEDEF_P (decl
)
13389 && !DECL_SELF_REFERENCE_P (decl
)
13390 && tag_code
!= typename_type
)
13392 if (alias_template_specialization_p (type
))
13393 error ("using alias template specialization %qT after %qs",
13394 type
, tag_name (tag_code
));
13396 error ("using typedef-name %qD after %qs", decl
, tag_name (tag_code
));
13397 inform (DECL_SOURCE_LOCATION (decl
),
13398 "%qD has a previous declaration here", decl
);
13399 return error_mark_node
;
13401 else if (TREE_CODE (type
) != RECORD_TYPE
13402 && TREE_CODE (type
) != UNION_TYPE
13403 && tag_code
!= enum_type
13404 && tag_code
!= typename_type
)
13406 error ("%qT referred to as %qs", type
, tag_name (tag_code
));
13407 inform (location_of (type
), "%qT has a previous declaration here", type
);
13408 return error_mark_node
;
13410 else if (TREE_CODE (type
) != ENUMERAL_TYPE
13411 && tag_code
== enum_type
)
13413 error ("%qT referred to as enum", type
);
13414 inform (location_of (type
), "%qT has a previous declaration here", type
);
13415 return error_mark_node
;
13417 else if (!allow_template_p
13418 && TREE_CODE (type
) == RECORD_TYPE
13419 && CLASSTYPE_IS_TEMPLATE (type
))
13421 /* If a class template appears as elaborated type specifier
13422 without a template header such as:
13424 template <class T> class C {};
13425 void f(class C); // No template header here
13427 then the required template argument is missing. */
13428 error ("template argument required for %<%s %T%>",
13429 tag_name (tag_code
),
13430 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type
)));
13431 return error_mark_node
;
13437 /* Lookup NAME in elaborate type specifier in scope according to
13438 SCOPE and issue diagnostics if necessary.
13439 Return *_TYPE node upon success, NULL_TREE when the NAME is not
13440 found, and ERROR_MARK_NODE for type error. */
13443 lookup_and_check_tag (enum tag_types tag_code
, tree name
,
13444 tag_scope scope
, bool template_header_p
)
13448 if (scope
== ts_global
)
13450 /* First try ordinary name lookup, ignoring hidden class name
13451 injected via friend declaration. */
13452 decl
= lookup_name_prefer_type (name
, 2);
13453 decl
= strip_using_decl (decl
);
13454 /* If that fails, the name will be placed in the smallest
13455 non-class, non-function-prototype scope according to 3.3.1/5.
13456 We may already have a hidden name declared as friend in this
13457 scope. So lookup again but not ignoring hidden names.
13458 If we find one, that name will be made visible rather than
13459 creating a new tag. */
13461 decl
= lookup_type_scope (name
, ts_within_enclosing_non_class
);
13464 decl
= lookup_type_scope (name
, scope
);
13467 && (DECL_CLASS_TEMPLATE_P (decl
)
13468 /* If scope is ts_current we're defining a class, so ignore a
13469 template template parameter. */
13470 || (scope
!= ts_current
13471 && DECL_TEMPLATE_TEMPLATE_PARM_P (decl
))))
13472 decl
= DECL_TEMPLATE_RESULT (decl
);
13474 if (decl
&& TREE_CODE (decl
) == TYPE_DECL
)
13476 /* Look for invalid nested type:
13480 if (scope
== ts_current
&& DECL_SELF_REFERENCE_P (decl
))
13482 error ("%qD has the same name as the class in which it is "
13485 return error_mark_node
;
13488 /* Two cases we need to consider when deciding if a class
13489 template is allowed as an elaborated type specifier:
13490 1. It is a self reference to its own class.
13491 2. It comes with a template header.
13495 template <class T> class C {
13496 class C *c1; // DECL_SELF_REFERENCE_P is true
13499 template <class U> class C; // template_header_p is true
13500 template <class T> class C<T>::D {
13501 class C *c2; // DECL_SELF_REFERENCE_P is true
13504 t
= check_elaborated_type_specifier (tag_code
,
13507 | DECL_SELF_REFERENCE_P (decl
));
13508 if (template_header_p
&& t
&& CLASS_TYPE_P (t
)
13509 && (!CLASSTYPE_TEMPLATE_INFO (t
)
13510 || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t
)))))
13512 error ("%qT is not a template", t
);
13513 inform (location_of (t
), "previous declaration here");
13514 if (TYPE_CLASS_SCOPE_P (t
)
13515 && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t
)))
13516 inform (input_location
,
13517 "perhaps you want to explicitly add %<%T::%>",
13519 t
= error_mark_node
;
13524 else if (decl
&& TREE_CODE (decl
) == TREE_LIST
)
13526 error ("reference to %qD is ambiguous", name
);
13527 print_candidates (decl
);
13528 return error_mark_node
;
13534 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
13535 Define the tag as a forward-reference if it is not defined.
13537 If a declaration is given, process it here, and report an error if
13538 multiple declarations are not identical.
13540 SCOPE is TS_CURRENT when this is also a definition. Only look in
13541 the current frame for the name (since C++ allows new names in any
13542 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
13543 declaration. Only look beginning from the current scope outward up
13544 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
13546 TEMPLATE_HEADER_P is true when this declaration is preceded by
13547 a set of template parameters. */
13550 xref_tag_1 (enum tag_types tag_code
, tree name
,
13551 tag_scope scope
, bool template_header_p
)
13553 enum tree_code code
;
13554 tree context
= NULL_TREE
;
13556 gcc_assert (identifier_p (name
));
13562 code
= RECORD_TYPE
;
13568 code
= ENUMERAL_TYPE
;
13571 gcc_unreachable ();
13574 /* In case of anonymous name, xref_tag is only called to
13575 make type node and push name. Name lookup is not required. */
13576 tree t
= NULL_TREE
;
13577 if (scope
!= ts_lambda
&& !anon_aggrname_p (name
))
13578 t
= lookup_and_check_tag (tag_code
, name
, scope
, template_header_p
);
13580 if (t
== error_mark_node
)
13581 return error_mark_node
;
13583 if (scope
!= ts_current
&& t
&& current_class_type
13584 && template_class_depth (current_class_type
)
13585 && template_header_p
)
13587 if (TREE_CODE (t
) == TEMPLATE_TEMPLATE_PARM
)
13590 /* Since SCOPE is not TS_CURRENT, we are not looking at a
13591 definition of this tag. Since, in addition, we are currently
13592 processing a (member) template declaration of a template
13593 class, we must be very careful; consider:
13595 template <class X> struct S1
13597 template <class U> struct S2
13599 template <class V> friend struct S1;
13602 Here, the S2::S1 declaration should not be confused with the
13603 outer declaration. In particular, the inner version should
13604 have a template parameter of level 2, not level 1.
13606 On the other hand, when presented with:
13608 template <class T> struct S1
13610 template <class U> struct S2 {};
13611 template <class U> friend struct S2;
13614 the friend must find S1::S2 eventually. We accomplish this
13615 by making sure that the new type we create to represent this
13616 declaration has the right TYPE_CONTEXT. */
13617 context
= TYPE_CONTEXT (t
);
13623 /* If no such tag is yet defined, create a forward-reference node
13624 and record it as the "definition".
13625 When a real declaration of this type is found,
13626 the forward-reference will be altered into a real type. */
13627 if (code
== ENUMERAL_TYPE
)
13629 error ("use of enum %q#D without previous declaration", name
);
13630 return error_mark_node
;
13634 t
= make_class_type (code
);
13635 TYPE_CONTEXT (t
) = context
;
13636 if (scope
== ts_lambda
)
13638 /* Mark it as a lambda type. */
13639 CLASSTYPE_LAMBDA_EXPR (t
) = error_mark_node
;
13640 /* And push it into current scope. */
13641 scope
= ts_current
;
13643 t
= pushtag (name
, t
, scope
);
13648 if (template_header_p
&& MAYBE_CLASS_TYPE_P (t
))
13650 /* Check that we aren't trying to overload a class with different
13652 tree constr
= NULL_TREE
;
13653 if (current_template_parms
)
13655 tree reqs
= TEMPLATE_PARMS_CONSTRAINTS (current_template_parms
);
13656 constr
= build_constraints (reqs
, NULL_TREE
);
13658 if (!redeclare_class_template (t
, current_template_parms
, constr
))
13659 return error_mark_node
;
13661 else if (!processing_template_decl
13662 && CLASS_TYPE_P (t
)
13663 && CLASSTYPE_IS_TEMPLATE (t
))
13665 error ("redeclaration of %qT as a non-template", t
);
13666 inform (location_of (t
), "previous declaration %qD", t
);
13667 return error_mark_node
;
13670 if (scope
!= ts_within_enclosing_non_class
&& TYPE_HIDDEN_P (t
))
13672 /* This is no longer an invisible friend. Make it
13674 tree decl
= TYPE_NAME (t
);
13676 DECL_ANTICIPATED (decl
) = false;
13677 DECL_FRIEND_P (decl
) = false;
13679 if (TYPE_TEMPLATE_INFO (t
))
13681 tree tmpl
= TYPE_TI_TEMPLATE (t
);
13682 DECL_ANTICIPATED (tmpl
) = false;
13683 DECL_FRIEND_P (tmpl
) = false;
13691 /* Wrapper for xref_tag_1. */
13694 xref_tag (enum tag_types tag_code
, tree name
,
13695 tag_scope scope
, bool template_header_p
)
13699 subtime
= timevar_cond_start (TV_NAME_LOOKUP
);
13700 ret
= xref_tag_1 (tag_code
, name
, scope
, template_header_p
);
13701 timevar_cond_stop (TV_NAME_LOOKUP
, subtime
);
13707 xref_tag_from_type (tree old
, tree id
, tag_scope scope
)
13709 enum tag_types tag_kind
;
13711 if (TREE_CODE (old
) == RECORD_TYPE
)
13712 tag_kind
= (CLASSTYPE_DECLARED_CLASS (old
) ? class_type
: record_type
);
13714 tag_kind
= union_type
;
13716 if (id
== NULL_TREE
)
13717 id
= TYPE_IDENTIFIER (old
);
13719 return xref_tag (tag_kind
, id
, scope
, false);
13722 /* Create the binfo hierarchy for REF with (possibly NULL) base list
13723 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
13724 access_* node, and the TREE_VALUE is the type of the base-class.
13725 Non-NULL TREE_TYPE indicates virtual inheritance. */
13728 xref_basetypes (tree ref
, tree base_list
)
13731 tree binfo
, base_binfo
;
13732 unsigned max_vbases
= 0; /* Maximum direct & indirect virtual bases. */
13733 unsigned max_bases
= 0; /* Maximum direct bases. */
13734 unsigned max_dvbases
= 0; /* Maximum direct virtual bases. */
13736 tree default_access
;
13737 tree igo_prev
; /* Track Inheritance Graph Order. */
13739 if (ref
== error_mark_node
)
13742 /* The base of a derived class is private by default, all others are
13744 default_access
= (TREE_CODE (ref
) == RECORD_TYPE
13745 && CLASSTYPE_DECLARED_CLASS (ref
)
13746 ? access_private_node
: access_public_node
);
13748 /* First, make sure that any templates in base-classes are
13749 instantiated. This ensures that if we call ourselves recursively
13750 we do not get confused about which classes are marked and which
13752 basep
= &base_list
;
13755 tree basetype
= TREE_VALUE (*basep
);
13757 /* The dependent_type_p call below should really be dependent_scope_p
13758 so that we give a hard error about using an incomplete type as a
13759 base, but we allow it with a pedwarn for backward
13761 if (processing_template_decl
13762 && CLASS_TYPE_P (basetype
) && TYPE_BEING_DEFINED (basetype
))
13763 cxx_incomplete_type_diagnostic (NULL_TREE
, basetype
, DK_PEDWARN
);
13764 if (!dependent_type_p (basetype
)
13765 && !complete_type_or_else (basetype
, NULL
))
13766 /* An incomplete type. Remove it from the list. */
13767 *basep
= TREE_CHAIN (*basep
);
13771 if (TREE_TYPE (*basep
))
13773 if (CLASS_TYPE_P (basetype
))
13774 max_vbases
+= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype
));
13775 basep
= &TREE_CHAIN (*basep
);
13778 max_vbases
+= max_dvbases
;
13780 TYPE_MARKED_P (ref
) = 1;
13782 /* The binfo slot should be empty, unless this is an (ill-formed)
13784 gcc_assert (!TYPE_BINFO (ref
) || TYPE_SIZE (ref
));
13786 gcc_assert (TYPE_MAIN_VARIANT (ref
) == ref
);
13788 binfo
= make_tree_binfo (max_bases
);
13790 TYPE_BINFO (ref
) = binfo
;
13791 BINFO_OFFSET (binfo
) = size_zero_node
;
13792 BINFO_TYPE (binfo
) = ref
;
13794 /* Apply base-class info set up to the variants of this type. */
13795 fixup_type_variants (ref
);
13799 vec_alloc (BINFO_BASE_ACCESSES (binfo
), max_bases
);
13800 /* A C++98 POD cannot have base classes. */
13801 CLASSTYPE_NON_LAYOUT_POD_P (ref
) = true;
13803 if (TREE_CODE (ref
) == UNION_TYPE
)
13805 error ("derived union %qT invalid", ref
);
13811 warning (OPT_Wmultiple_inheritance
,
13812 "%qT defined with multiple direct bases", ref
);
13816 /* An aggregate can't have virtual base classes. */
13817 CLASSTYPE_NON_AGGREGATE (ref
) = true;
13819 vec_alloc (CLASSTYPE_VBASECLASSES (ref
), max_vbases
);
13822 warning (OPT_Wvirtual_inheritance
,
13823 "%qT defined with direct virtual base", ref
);
13826 for (igo_prev
= binfo
; base_list
; base_list
= TREE_CHAIN (base_list
))
13828 tree access
= TREE_PURPOSE (base_list
);
13829 int via_virtual
= TREE_TYPE (base_list
) != NULL_TREE
;
13830 tree basetype
= TREE_VALUE (base_list
);
13832 if (access
== access_default_node
)
13833 access
= default_access
;
13835 /* Before C++17, an aggregate cannot have base classes. In C++17, an
13836 aggregate can't have virtual, private, or protected base classes. */
13837 if (cxx_dialect
< cxx17
13838 || access
!= access_public_node
13840 CLASSTYPE_NON_AGGREGATE (ref
) = true;
13842 if (PACK_EXPANSION_P (basetype
))
13843 basetype
= PACK_EXPANSION_PATTERN (basetype
);
13844 if (TREE_CODE (basetype
) == TYPE_DECL
)
13845 basetype
= TREE_TYPE (basetype
);
13846 if (!MAYBE_CLASS_TYPE_P (basetype
) || TREE_CODE (basetype
) == UNION_TYPE
)
13848 error ("base type %qT fails to be a struct or class type",
13853 base_binfo
= NULL_TREE
;
13854 if (CLASS_TYPE_P (basetype
) && !dependent_scope_p (basetype
))
13856 base_binfo
= TYPE_BINFO (basetype
);
13857 /* The original basetype could have been a typedef'd type. */
13858 basetype
= BINFO_TYPE (base_binfo
);
13860 /* Inherit flags from the base. */
13861 TYPE_HAS_NEW_OPERATOR (ref
)
13862 |= TYPE_HAS_NEW_OPERATOR (basetype
);
13863 TYPE_HAS_ARRAY_NEW_OPERATOR (ref
)
13864 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype
);
13865 TYPE_GETS_DELETE (ref
) |= TYPE_GETS_DELETE (basetype
);
13866 TYPE_HAS_CONVERSION (ref
) |= TYPE_HAS_CONVERSION (basetype
);
13867 CLASSTYPE_DIAMOND_SHAPED_P (ref
)
13868 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype
);
13869 CLASSTYPE_REPEATED_BASE_P (ref
)
13870 |= CLASSTYPE_REPEATED_BASE_P (basetype
);
13873 /* We must do this test after we've seen through a typedef
13875 if (TYPE_MARKED_P (basetype
))
13877 if (basetype
== ref
)
13878 error ("recursive type %qT undefined", basetype
);
13880 error ("duplicate base type %qT invalid", basetype
);
13884 if (PACK_EXPANSION_P (TREE_VALUE (base_list
)))
13885 /* Regenerate the pack expansion for the bases. */
13886 basetype
= make_pack_expansion (basetype
);
13888 TYPE_MARKED_P (basetype
) = 1;
13890 base_binfo
= copy_binfo (base_binfo
, basetype
, ref
,
13891 &igo_prev
, via_virtual
);
13892 if (!BINFO_INHERITANCE_CHAIN (base_binfo
))
13893 BINFO_INHERITANCE_CHAIN (base_binfo
) = binfo
;
13895 BINFO_BASE_APPEND (binfo
, base_binfo
);
13896 BINFO_BASE_ACCESS_APPEND (binfo
, access
);
13900 /* Update max_vbases to reflect the reality that we are dropping
13901 this base: if it reaches zero we want to undo the vec_alloc
13902 above to avoid inconsistencies during error-recovery: eg, in
13903 build_special_member_call, CLASSTYPE_VBASECLASSES non null
13904 and vtt null (c++/27952). */
13907 if (CLASS_TYPE_P (basetype
))
13909 -= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype
));
13912 if (CLASSTYPE_VBASECLASSES (ref
)
13913 && max_vbases
== 0)
13914 vec_free (CLASSTYPE_VBASECLASSES (ref
));
13916 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref
)) < max_vbases
)
13917 /* If we didn't get max_vbases vbases, we must have shared at
13918 least one of them, and are therefore diamond shaped. */
13919 CLASSTYPE_DIAMOND_SHAPED_P (ref
) = 1;
13921 /* Unmark all the types. */
13922 for (i
= 0; BINFO_BASE_ITERATE (binfo
, i
, base_binfo
); i
++)
13923 TYPE_MARKED_P (BINFO_TYPE (base_binfo
)) = 0;
13924 TYPE_MARKED_P (ref
) = 0;
13926 /* Now see if we have a repeated base type. */
13927 if (!CLASSTYPE_REPEATED_BASE_P (ref
))
13929 for (base_binfo
= binfo
; base_binfo
;
13930 base_binfo
= TREE_CHAIN (base_binfo
))
13932 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo
)))
13934 CLASSTYPE_REPEATED_BASE_P (ref
) = 1;
13937 TYPE_MARKED_P (BINFO_TYPE (base_binfo
)) = 1;
13939 for (base_binfo
= binfo
; base_binfo
;
13940 base_binfo
= TREE_CHAIN (base_binfo
))
13941 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo
)))
13942 TYPE_MARKED_P (BINFO_TYPE (base_binfo
)) = 0;
13949 /* Copies the enum-related properties from type SRC to type DST.
13950 Used with the underlying type of an enum and the enum itself. */
13952 copy_type_enum (tree dst
, tree src
)
13955 for (t
= dst
; t
; t
= TYPE_NEXT_VARIANT (t
))
13957 TYPE_MIN_VALUE (t
) = TYPE_MIN_VALUE (src
);
13958 TYPE_MAX_VALUE (t
) = TYPE_MAX_VALUE (src
);
13959 TYPE_SIZE (t
) = TYPE_SIZE (src
);
13960 TYPE_SIZE_UNIT (t
) = TYPE_SIZE_UNIT (src
);
13961 SET_TYPE_MODE (dst
, TYPE_MODE (src
));
13962 TYPE_PRECISION (t
) = TYPE_PRECISION (src
);
13963 unsigned valign
= TYPE_ALIGN (src
);
13964 if (TYPE_USER_ALIGN (t
))
13965 valign
= MAX (valign
, TYPE_ALIGN (t
));
13967 TYPE_USER_ALIGN (t
) = TYPE_USER_ALIGN (src
);
13968 SET_TYPE_ALIGN (t
, valign
);
13969 TYPE_UNSIGNED (t
) = TYPE_UNSIGNED (src
);
13973 /* Begin compiling the definition of an enumeration type.
13976 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
13978 UNDERLYING_TYPE is the type that will be used as the storage for
13979 the enumeration type. This should be NULL_TREE if no storage type
13982 ATTRIBUTES are any attributes specified after the enum-key.
13984 SCOPED_ENUM_P is true if this is a scoped enumeration type.
13986 if IS_NEW is not NULL, gets TRUE iff a new type is created.
13988 Returns the type object, as yet incomplete.
13989 Also records info about it so that build_enumerator
13990 may be used to declare the individual values as they are read. */
13993 start_enum (tree name
, tree enumtype
, tree underlying_type
,
13994 tree attributes
, bool scoped_enum_p
, bool *is_new
)
13996 tree prevtype
= NULL_TREE
;
13997 gcc_assert (identifier_p (name
));
14001 /* [C++0x dcl.enum]p5:
14003 If not explicitly specified, the underlying type of a scoped
14004 enumeration type is int. */
14005 if (!underlying_type
&& scoped_enum_p
)
14006 underlying_type
= integer_type_node
;
14008 if (underlying_type
)
14009 underlying_type
= cv_unqualified (underlying_type
);
14011 /* If this is the real definition for a previous forward reference,
14012 fill in the contents in the same object that used to be the
14013 forward reference. */
14015 enumtype
= lookup_and_check_tag (enum_type
, name
,
14016 /*tag_scope=*/ts_current
,
14017 /*template_header_p=*/false);
14019 /* In case of a template_decl, the only check that should be deferred
14020 to instantiation time is the comparison of underlying types. */
14021 if (enumtype
&& TREE_CODE (enumtype
) == ENUMERAL_TYPE
)
14023 if (scoped_enum_p
!= SCOPED_ENUM_P (enumtype
))
14025 error_at (input_location
, "scoped/unscoped mismatch "
14026 "in enum %q#T", enumtype
);
14027 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype
)),
14028 "previous definition here");
14029 enumtype
= error_mark_node
;
14031 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype
) != !! underlying_type
)
14033 error_at (input_location
, "underlying type mismatch "
14034 "in enum %q#T", enumtype
);
14035 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype
)),
14036 "previous definition here");
14037 enumtype
= error_mark_node
;
14039 else if (underlying_type
&& ENUM_UNDERLYING_TYPE (enumtype
)
14040 && !dependent_type_p (underlying_type
)
14041 && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype
))
14042 && !same_type_p (underlying_type
,
14043 ENUM_UNDERLYING_TYPE (enumtype
)))
14045 error_at (input_location
, "different underlying type "
14046 "in enum %q#T", enumtype
);
14047 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype
)),
14048 "previous definition here");
14049 underlying_type
= NULL_TREE
;
14053 if (!enumtype
|| TREE_CODE (enumtype
) != ENUMERAL_TYPE
14054 || processing_template_decl
)
14056 /* In case of error, make a dummy enum to allow parsing to
14058 if (enumtype
== error_mark_node
)
14060 name
= make_anon_name ();
14061 enumtype
= NULL_TREE
;
14064 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
14065 of an opaque enum, or an opaque enum of an already defined
14066 enumeration (C++0x only).
14067 In any other case, it'll be NULL_TREE. */
14073 prevtype
= enumtype
;
14075 /* Do not push the decl more than once, unless we need to
14076 compare underlying types at instantiation time */
14078 || TREE_CODE (enumtype
) != ENUMERAL_TYPE
14079 || (underlying_type
14080 && dependent_type_p (underlying_type
))
14081 || (ENUM_UNDERLYING_TYPE (enumtype
)
14082 && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype
))))
14084 enumtype
= cxx_make_type (ENUMERAL_TYPE
);
14085 enumtype
= pushtag (name
, enumtype
, /*tag_scope=*/ts_current
);
14087 /* std::byte aliases anything. */
14088 if (enumtype
!= error_mark_node
14089 && TYPE_CONTEXT (enumtype
) == std_node
14090 && !strcmp ("byte", TYPE_NAME_STRING (enumtype
)))
14091 TYPE_ALIAS_SET (enumtype
) = 0;
14094 enumtype
= xref_tag (enum_type
, name
, /*tag_scope=*/ts_current
,
14097 if (enumtype
== error_mark_node
)
14098 return error_mark_node
;
14100 /* The enum is considered opaque until the opening '{' of the
14101 enumerator list. */
14102 SET_OPAQUE_ENUM_P (enumtype
, true);
14103 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype
) = !! underlying_type
;
14106 SET_SCOPED_ENUM_P (enumtype
, scoped_enum_p
);
14108 cplus_decl_attributes (&enumtype
, attributes
, (int)ATTR_FLAG_TYPE_IN_PLACE
);
14110 if (underlying_type
)
14112 if (ENUM_UNDERLYING_TYPE (enumtype
))
14113 /* We already checked that it matches, don't change it to a different
14114 typedef variant. */;
14115 else if (CP_INTEGRAL_TYPE_P (underlying_type
))
14117 copy_type_enum (enumtype
, underlying_type
);
14118 ENUM_UNDERLYING_TYPE (enumtype
) = underlying_type
;
14120 else if (dependent_type_p (underlying_type
))
14121 ENUM_UNDERLYING_TYPE (enumtype
) = underlying_type
;
14123 error ("underlying type %qT of %qT must be an integral type",
14124 underlying_type
, enumtype
);
14127 /* If into a template class, the returned enum is always the first
14128 declaration (opaque or not) seen. This way all the references to
14129 this type will be to the same declaration. The following ones are used
14130 only to check for definition errors. */
14131 if (prevtype
&& processing_template_decl
)
14137 /* After processing and defining all the values of an enumeration type,
14138 install their decls in the enumeration type.
14139 ENUMTYPE is the type object. */
14142 finish_enum_value_list (tree enumtype
)
14145 tree underlying_type
;
14148 tree minnode
, maxnode
;
14151 bool fixed_underlying_type_p
14152 = ENUM_UNDERLYING_TYPE (enumtype
) != NULL_TREE
;
14154 /* We built up the VALUES in reverse order. */
14155 TYPE_VALUES (enumtype
) = nreverse (TYPE_VALUES (enumtype
));
14157 /* For an enum defined in a template, just set the type of the values;
14158 all further processing is postponed until the template is
14159 instantiated. We need to set the type so that tsubst of a CONST_DECL
14161 if (processing_template_decl
)
14163 for (values
= TYPE_VALUES (enumtype
);
14165 values
= TREE_CHAIN (values
))
14166 TREE_TYPE (TREE_VALUE (values
)) = enumtype
;
14170 /* Determine the minimum and maximum values of the enumerators. */
14171 if (TYPE_VALUES (enumtype
))
14173 minnode
= maxnode
= NULL_TREE
;
14175 for (values
= TYPE_VALUES (enumtype
);
14177 values
= TREE_CHAIN (values
))
14179 decl
= TREE_VALUE (values
);
14181 /* [dcl.enum]: Following the closing brace of an enum-specifier,
14182 each enumerator has the type of its enumeration. Prior to the
14183 closing brace, the type of each enumerator is the type of its
14184 initializing value. */
14185 TREE_TYPE (decl
) = enumtype
;
14187 /* Update the minimum and maximum values, if appropriate. */
14188 value
= DECL_INITIAL (decl
);
14189 if (value
== error_mark_node
)
14190 value
= integer_zero_node
;
14191 /* Figure out what the minimum and maximum values of the
14192 enumerators are. */
14194 minnode
= maxnode
= value
;
14195 else if (tree_int_cst_lt (maxnode
, value
))
14197 else if (tree_int_cst_lt (value
, minnode
))
14204 If the enumerator-list is empty, the underlying type is as if
14205 the enumeration had a single enumerator with value 0. */
14206 minnode
= maxnode
= integer_zero_node
;
14208 if (!fixed_underlying_type_p
)
14210 /* Compute the number of bits require to represent all values of the
14211 enumeration. We must do this before the type of MINNODE and
14212 MAXNODE are transformed, since tree_int_cst_min_precision relies
14213 on the TREE_TYPE of the value it is passed. */
14214 signop sgn
= tree_int_cst_sgn (minnode
) >= 0 ? UNSIGNED
: SIGNED
;
14215 int lowprec
= tree_int_cst_min_precision (minnode
, sgn
);
14216 int highprec
= tree_int_cst_min_precision (maxnode
, sgn
);
14217 int precision
= MAX (lowprec
, highprec
);
14219 bool use_short_enum
;
14221 /* Determine the underlying type of the enumeration.
14225 The underlying type of an enumeration is an integral type that
14226 can represent all the enumerator values defined in the
14227 enumeration. It is implementation-defined which integral type is
14228 used as the underlying type for an enumeration except that the
14229 underlying type shall not be larger than int unless the value of
14230 an enumerator cannot fit in an int or unsigned int.
14232 We use "int" or an "unsigned int" as the underlying type, even if
14233 a smaller integral type would work, unless the user has
14234 explicitly requested that we use the smallest possible type. The
14235 user can request that for all enumerations with a command line
14236 flag, or for just one enumeration with an attribute. */
14238 use_short_enum
= flag_short_enums
14239 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype
));
14241 /* If the precision of the type was specified with an attribute and it
14242 was too small, give an error. Otherwise, use it. */
14243 if (TYPE_PRECISION (enumtype
))
14245 if (precision
> TYPE_PRECISION (enumtype
))
14246 error ("specified mode too small for enumeral values");
14249 use_short_enum
= true;
14250 precision
= TYPE_PRECISION (enumtype
);
14254 for (itk
= (use_short_enum
? itk_char
: itk_int
);
14258 underlying_type
= integer_types
[itk
];
14259 if (underlying_type
!= NULL_TREE
14260 && TYPE_PRECISION (underlying_type
) >= precision
14261 && TYPE_SIGN (underlying_type
) == sgn
)
14264 if (itk
== itk_none
)
14268 IF no integral type can represent all the enumerator values, the
14269 enumeration is ill-formed. */
14270 error ("no integral type can represent all of the enumerator values "
14271 "for %qT", enumtype
);
14272 precision
= TYPE_PRECISION (long_long_integer_type_node
);
14273 underlying_type
= integer_types
[itk_unsigned_long_long
];
14278 The value of sizeof() applied to an enumeration type, an object
14279 of an enumeration type, or an enumerator, is the value of sizeof()
14280 applied to the underlying type. */
14281 copy_type_enum (enumtype
, underlying_type
);
14283 /* Compute the minimum and maximum values for the type.
14287 For an enumeration where emin is the smallest enumerator and emax
14288 is the largest, the values of the enumeration are the values of the
14289 underlying type in the range bmin to bmax, where bmin and bmax are,
14290 respectively, the smallest and largest values of the smallest bit-
14291 field that can store emin and emax. */
14293 /* The middle-end currently assumes that types with TYPE_PRECISION
14294 narrower than their underlying type are suitably zero or sign
14295 extended to fill their mode. Similarly, it assumes that the front
14296 end assures that a value of a particular type must be within
14297 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
14299 We used to set these fields based on bmin and bmax, but that led
14300 to invalid assumptions like optimizing away bounds checking. So
14301 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
14302 TYPE_MAX_VALUE to the values for the mode above and only restrict
14303 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
14304 ENUM_UNDERLYING_TYPE (enumtype
)
14305 = build_distinct_type_copy (underlying_type
);
14306 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype
)) = precision
;
14307 set_min_and_max_values_for_integral_type
14308 (ENUM_UNDERLYING_TYPE (enumtype
), precision
, sgn
);
14310 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
14311 if (flag_strict_enums
)
14312 set_min_and_max_values_for_integral_type (enumtype
, precision
, sgn
);
14315 underlying_type
= ENUM_UNDERLYING_TYPE (enumtype
);
14317 /* Convert each of the enumerators to the type of the underlying
14318 type of the enumeration. */
14319 for (values
= TYPE_VALUES (enumtype
); values
; values
= TREE_CHAIN (values
))
14321 location_t saved_location
;
14323 decl
= TREE_VALUE (values
);
14324 saved_location
= input_location
;
14325 input_location
= DECL_SOURCE_LOCATION (decl
);
14326 if (fixed_underlying_type_p
)
14327 /* If the enumeration type has a fixed underlying type, we
14328 already checked all of the enumerator values. */
14329 value
= DECL_INITIAL (decl
);
14331 value
= perform_implicit_conversion (underlying_type
,
14332 DECL_INITIAL (decl
),
14333 tf_warning_or_error
);
14334 input_location
= saved_location
;
14336 /* Do not clobber shared ints. */
14337 if (value
!= error_mark_node
)
14339 value
= copy_node (value
);
14341 TREE_TYPE (value
) = enumtype
;
14343 DECL_INITIAL (decl
) = value
;
14346 /* Fix up all variant types of this enum type. */
14347 for (t
= TYPE_MAIN_VARIANT (enumtype
); t
; t
= TYPE_NEXT_VARIANT (t
))
14348 TYPE_VALUES (t
) = TYPE_VALUES (enumtype
);
14350 if (at_class_scope_p ()
14351 && COMPLETE_TYPE_P (current_class_type
)
14352 && UNSCOPED_ENUM_P (enumtype
))
14354 insert_late_enum_def_bindings (current_class_type
, enumtype
);
14355 /* TYPE_FIELDS needs fixup. */
14356 fixup_type_variants (current_class_type
);
14359 /* Finish debugging output for this type. */
14360 rest_of_type_compilation (enumtype
, namespace_bindings_p ());
14362 /* Each enumerator now has the type of its enumeration. Clear the cache
14363 so that this change in types doesn't confuse us later on. */
14364 clear_cv_and_fold_caches ();
14367 /* Finishes the enum type. This is called only the first time an
14368 enumeration is seen, be it opaque or odinary.
14369 ENUMTYPE is the type object. */
14372 finish_enum (tree enumtype
)
14374 if (processing_template_decl
)
14376 if (at_function_scope_p ())
14377 add_stmt (build_min (TAG_DEFN
, enumtype
));
14381 /* If this is a forward declaration, there should not be any variants,
14382 though we can get a variant in the middle of an enum-specifier with
14383 wacky code like 'enum E { e = sizeof(const E*) };' */
14384 gcc_assert (enumtype
== TYPE_MAIN_VARIANT (enumtype
)
14385 && (TYPE_VALUES (enumtype
)
14386 || !TYPE_NEXT_VARIANT (enumtype
)));
14389 /* Build and install a CONST_DECL for an enumeration constant of the
14390 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
14391 Apply ATTRIBUTES if available. LOC is the location of NAME.
14392 Assignment of sequential values by default is handled here. */
14395 build_enumerator (tree name
, tree value
, tree enumtype
, tree attributes
,
14402 /* scalar_constant_value will pull out this expression, so make sure
14403 it's folded as appropriate. */
14404 if (processing_template_decl
)
14405 value
= fold_non_dependent_expr (value
);
14407 /* If the VALUE was erroneous, pretend it wasn't there; that will
14408 result in the enum being assigned the next value in sequence. */
14409 if (value
== error_mark_node
)
14412 /* Remove no-op casts from the value. */
14414 STRIP_TYPE_NOPS (value
);
14416 if (! processing_template_decl
)
14418 /* Validate and default VALUE. */
14419 if (value
!= NULL_TREE
)
14421 if (!ENUM_UNDERLYING_TYPE (enumtype
))
14423 tree tmp_value
= build_expr_type_conversion (WANT_INT
| WANT_ENUM
,
14428 else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14429 (TREE_TYPE (value
)))
14430 value
= perform_implicit_conversion_flags
14431 (ENUM_UNDERLYING_TYPE (enumtype
), value
, tf_warning_or_error
,
14432 LOOKUP_IMPLICIT
| LOOKUP_NO_NARROWING
);
14434 if (value
== error_mark_node
)
14437 if (value
!= NULL_TREE
)
14439 if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14440 (TREE_TYPE (value
)))
14442 error ("enumerator value for %qD must have integral or "
14443 "unscoped enumeration type", name
);
14448 value
= cxx_constant_value (value
);
14450 if (TREE_CODE (value
) != INTEGER_CST
)
14452 error ("enumerator value for %qD is not an integer "
14460 /* Default based on previous value. */
14461 if (value
== NULL_TREE
)
14463 if (TYPE_VALUES (enumtype
))
14468 /* C++03 7.2/4: If no initializer is specified for the first
14469 enumerator, the type is an unspecified integral
14470 type. Otherwise the type is the same as the type of the
14471 initializing value of the preceding enumerator unless the
14472 incremented value is not representable in that type, in
14473 which case the type is an unspecified integral type
14474 sufficient to contain the incremented value. */
14475 prev_value
= DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype
)));
14476 if (error_operand_p (prev_value
))
14477 value
= error_mark_node
;
14480 tree type
= TREE_TYPE (prev_value
);
14481 signop sgn
= TYPE_SIGN (type
);
14482 widest_int wi
= wi::add (wi::to_widest (prev_value
), 1, sgn
,
14486 bool pos
= !wi::neg_p (wi
, sgn
);
14487 if (!wi::fits_to_tree_p (wi
, type
))
14490 for (itk
= itk_int
; itk
!= itk_none
; itk
++)
14492 type
= integer_types
[itk
];
14493 if (type
!= NULL_TREE
14494 && (pos
|| !TYPE_UNSIGNED (type
))
14495 && wi::fits_to_tree_p (wi
, type
))
14498 if (type
&& cxx_dialect
< cxx11
14499 && itk
> itk_unsigned_long
)
14500 pedwarn (input_location
, OPT_Wlong_long
,
14502 incremented enumerator value is too large for %<unsigned long%>") : G_("\
14503 incremented enumerator value is too large for %<long%>"));
14505 if (type
== NULL_TREE
)
14508 value
= wide_int_to_tree (type
, wi
);
14513 error ("overflow in enumeration values at %qD", name
);
14514 value
= error_mark_node
;
14519 value
= integer_zero_node
;
14522 /* Remove no-op casts from the value. */
14523 STRIP_TYPE_NOPS (value
);
14525 /* If the underlying type of the enum is fixed, check whether
14526 the enumerator values fits in the underlying type. If it
14527 does not fit, the program is ill-formed [C++0x dcl.enum]. */
14528 if (ENUM_UNDERLYING_TYPE (enumtype
)
14530 && TREE_CODE (value
) == INTEGER_CST
)
14532 if (!int_fits_type_p (value
, ENUM_UNDERLYING_TYPE (enumtype
)))
14533 error ("enumerator value %qE is outside the range of underlying "
14534 "type %qT", value
, ENUM_UNDERLYING_TYPE (enumtype
));
14536 /* Convert the value to the appropriate type. */
14537 value
= fold_convert (ENUM_UNDERLYING_TYPE (enumtype
), value
);
14541 /* C++ associates enums with global, function, or class declarations. */
14542 context
= current_scope ();
14544 /* Build the actual enumeration constant. Note that the enumeration
14545 constants have the underlying type of the enum (if it is fixed)
14546 or the type of their initializer (if the underlying type of the
14547 enum is not fixed):
14551 If the underlying type is fixed, the type of each enumerator
14552 prior to the closing brace is the underlying type; if the
14553 initializing value of an enumerator cannot be represented by
14554 the underlying type, the program is ill-formed. If the
14555 underlying type is not fixed, the type of each enumerator is
14556 the type of its initializing value.
14558 If the underlying type is not fixed, it will be computed by
14559 finish_enum and we will reset the type of this enumerator. Of
14560 course, if we're processing a template, there may be no value. */
14561 type
= value
? TREE_TYPE (value
) : NULL_TREE
;
14563 decl
= build_decl (loc
, CONST_DECL
, name
, type
);
14565 DECL_CONTEXT (decl
) = enumtype
;
14566 TREE_CONSTANT (decl
) = 1;
14567 TREE_READONLY (decl
) = 1;
14568 DECL_INITIAL (decl
) = value
;
14571 cplus_decl_attributes (&decl
, attributes
, 0);
14573 if (context
&& context
== current_class_type
&& !SCOPED_ENUM_P (enumtype
))
14575 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
14576 on the TYPE_FIELDS list for `S'. (That's so that you can say
14577 things like `S::i' later.) */
14579 /* The enumerator may be getting declared outside of its enclosing
14582 class S { public: enum E : int; }; enum S::E : int { i = 7; };
14584 For which case we need to make sure that the access of `S::i'
14585 matches the access of `S::E'. */
14586 tree saved_cas
= current_access_specifier
;
14587 if (TREE_PRIVATE (TYPE_NAME (enumtype
)))
14588 current_access_specifier
= access_private_node
;
14589 else if (TREE_PROTECTED (TYPE_NAME (enumtype
)))
14590 current_access_specifier
= access_protected_node
;
14592 current_access_specifier
= access_public_node
;
14594 finish_member_declaration (decl
);
14596 current_access_specifier
= saved_cas
;
14601 /* Add this enumeration constant to the list for this type. */
14602 TYPE_VALUES (enumtype
) = tree_cons (name
, decl
, TYPE_VALUES (enumtype
));
14605 /* Look for an enumerator with the given NAME within the enumeration
14606 type ENUMTYPE. This routine is used primarily for qualified name
14607 lookup into an enumerator in C++0x, e.g.,
14609 enum class Color { Red, Green, Blue };
14611 Color color = Color::Red;
14613 Returns the value corresponding to the enumerator, or
14614 NULL_TREE if no such enumerator was found. */
14616 lookup_enumerator (tree enumtype
, tree name
)
14619 gcc_assert (enumtype
&& TREE_CODE (enumtype
) == ENUMERAL_TYPE
);
14621 e
= purpose_member (name
, TYPE_VALUES (enumtype
));
14622 return e
? TREE_VALUE (e
) : NULL_TREE
;
14626 /* We're defining DECL. Make sure that its type is OK. */
14629 check_function_type (tree decl
, tree current_function_parms
)
14631 tree fntype
= TREE_TYPE (decl
);
14632 tree return_type
= complete_type (TREE_TYPE (fntype
));
14634 /* In a function definition, arg types must be complete. */
14635 require_complete_types_for_parms (current_function_parms
);
14637 if (dependent_type_p (return_type
)
14638 || type_uses_auto (return_type
))
14640 if (!COMPLETE_OR_VOID_TYPE_P (return_type
))
14642 tree args
= TYPE_ARG_TYPES (fntype
);
14644 error ("return type %q#T is incomplete", return_type
);
14646 /* Make it return void instead. */
14647 if (TREE_CODE (fntype
) == METHOD_TYPE
)
14648 fntype
= build_method_type_directly (TREE_TYPE (TREE_VALUE (args
)),
14650 TREE_CHAIN (args
));
14652 fntype
= build_function_type (void_type_node
, args
);
14654 = build_exception_variant (fntype
,
14655 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl
)));
14656 fntype
= (cp_build_type_attribute_variant
14657 (fntype
, TYPE_ATTRIBUTES (TREE_TYPE (decl
))));
14658 TREE_TYPE (decl
) = fntype
;
14662 abstract_virtuals_error (decl
, TREE_TYPE (fntype
));
14663 maybe_warn_parm_abi (TREE_TYPE (fntype
),
14664 DECL_SOURCE_LOCATION (decl
));
14668 /* True iff FN is an implicitly-defined default constructor. */
14671 implicit_default_ctor_p (tree fn
)
14673 return (DECL_CONSTRUCTOR_P (fn
)
14674 && !user_provided_p (fn
)
14675 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn
)));
14678 /* Clobber the contents of *this to let the back end know that the object
14679 storage is dead when we enter the constructor or leave the destructor. */
14682 build_clobber_this ()
14684 /* Clobbering an empty base is pointless, and harmful if its one byte
14685 TYPE_SIZE overlays real data. */
14686 if (is_empty_class (current_class_type
))
14689 /* If we have virtual bases, clobber the whole object, but only if we're in
14690 charge. If we don't have virtual bases, clobber the as-base type so we
14691 don't mess with tail padding. */
14692 bool vbases
= CLASSTYPE_VBASECLASSES (current_class_type
);
14694 tree ctype
= current_class_type
;
14696 ctype
= CLASSTYPE_AS_BASE (ctype
);
14698 tree clobber
= build_constructor (ctype
, NULL
);
14699 TREE_THIS_VOLATILE (clobber
) = true;
14701 tree thisref
= current_class_ref
;
14702 if (ctype
!= current_class_type
)
14704 thisref
= build_nop (build_reference_type (ctype
), current_class_ptr
);
14705 thisref
= convert_from_reference (thisref
);
14708 tree exprstmt
= build2 (MODIFY_EXPR
, void_type_node
, thisref
, clobber
);
14710 exprstmt
= build_if_in_charge (exprstmt
);
14715 /* Create the FUNCTION_DECL for a function definition.
14716 DECLSPECS and DECLARATOR are the parts of the declaration;
14717 they describe the function's name and the type it returns,
14718 but twisted together in a fashion that parallels the syntax of C.
14720 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
14721 DECLARATOR is really the DECL for the function we are about to
14722 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
14723 indicating that the function is an inline defined in-class.
14725 This function creates a binding context for the function body
14726 as well as setting up the FUNCTION_DECL in current_function_decl.
14728 For C++, we must first check whether that datum makes any sense.
14729 For example, "class A local_a(1,2);" means that variable local_a
14730 is an aggregate of type A, which should have a constructor
14731 applied to it with the argument list [1, 2].
14733 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
14734 or may be a BLOCK if the function has been defined previously
14735 in this translation unit. On exit, DECL_INITIAL (decl1) will be
14736 error_mark_node if the function has never been defined, or
14737 a BLOCK if the function has been defined somewhere. */
14740 start_preparsed_function (tree decl1
, tree attrs
, int flags
)
14742 tree ctype
= NULL_TREE
;
14745 int doing_friend
= 0;
14746 cp_binding_level
*bl
;
14747 tree current_function_parms
;
14748 struct c_fileinfo
*finfo
14749 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1
)));
14750 bool honor_interface
;
14752 /* Sanity check. */
14753 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node
)));
14754 gcc_assert (TREE_CHAIN (void_list_node
) == NULL_TREE
);
14756 fntype
= TREE_TYPE (decl1
);
14757 if (TREE_CODE (fntype
) == METHOD_TYPE
)
14758 ctype
= TYPE_METHOD_BASETYPE (fntype
);
14760 /* ISO C++ 11.4/5. A friend function defined in a class is in
14761 the (lexical) scope of the class in which it is defined. */
14762 if (!ctype
&& DECL_FRIEND_P (decl1
))
14764 ctype
= DECL_FRIEND_CONTEXT (decl1
);
14766 /* CTYPE could be null here if we're dealing with a template;
14767 for example, `inline friend float foo()' inside a template
14768 will have no CTYPE set. */
14769 if (ctype
&& TREE_CODE (ctype
) != RECORD_TYPE
)
14775 if (DECL_DECLARED_INLINE_P (decl1
)
14776 && lookup_attribute ("noinline", attrs
))
14777 warning_at (DECL_SOURCE_LOCATION (decl1
), 0,
14778 "inline function %qD given attribute noinline", decl1
);
14780 /* Handle gnu_inline attribute. */
14781 if (GNU_INLINE_P (decl1
))
14783 DECL_EXTERNAL (decl1
) = 1;
14784 DECL_NOT_REALLY_EXTERN (decl1
) = 0;
14785 DECL_INTERFACE_KNOWN (decl1
) = 1;
14786 DECL_DISREGARD_INLINE_LIMITS (decl1
) = 1;
14789 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1
))
14790 /* This is a constructor, we must ensure that any default args
14791 introduced by this definition are propagated to the clones
14792 now. The clones are used directly in overload resolution. */
14793 adjust_clone_args (decl1
);
14795 /* Sometimes we don't notice that a function is a static member, and
14796 build a METHOD_TYPE for it. Fix that up now. */
14797 gcc_assert (!(ctype
!= NULL_TREE
&& DECL_STATIC_FUNCTION_P (decl1
)
14798 && TREE_CODE (TREE_TYPE (decl1
)) == METHOD_TYPE
));
14800 /* Set up current_class_type, and enter the scope of the class, if
14803 push_nested_class (ctype
);
14804 else if (DECL_STATIC_FUNCTION_P (decl1
))
14805 push_nested_class (DECL_CONTEXT (decl1
));
14807 /* Now that we have entered the scope of the class, we must restore
14808 the bindings for any template parameters surrounding DECL1, if it
14809 is an inline member template. (Order is important; consider the
14810 case where a template parameter has the same name as a field of
14811 the class.) It is not until after this point that
14812 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
14813 if (flags
& SF_INCLASS_INLINE
)
14814 maybe_begin_member_template_processing (decl1
);
14816 /* Effective C++ rule 15. */
14818 && DECL_ASSIGNMENT_OPERATOR_P (decl1
)
14819 && DECL_OVERLOADED_OPERATOR_IS (decl1
, NOP_EXPR
)
14820 && VOID_TYPE_P (TREE_TYPE (fntype
)))
14821 warning (OPT_Weffc__
,
14822 "%<operator=%> should return a reference to %<*this%>");
14824 /* Make the init_value nonzero so pushdecl knows this is not tentative.
14825 error_mark_node is replaced below (in poplevel) with the BLOCK. */
14826 if (!DECL_INITIAL (decl1
))
14827 DECL_INITIAL (decl1
) = error_mark_node
;
14829 /* This function exists in static storage.
14830 (This does not mean `static' in the C sense!) */
14831 TREE_STATIC (decl1
) = 1;
14833 /* We must call push_template_decl after current_class_type is set
14834 up. (If we are processing inline definitions after exiting a
14835 class scope, current_class_type will be NULL_TREE until set above
14836 by push_nested_class.) */
14837 if (processing_template_decl
)
14839 tree newdecl1
= push_template_decl (decl1
);
14840 if (newdecl1
== error_mark_node
)
14842 if (ctype
|| DECL_STATIC_FUNCTION_P (decl1
))
14843 pop_nested_class ();
14849 /* Make sure the parameter and return types are reasonable. When
14850 you declare a function, these types can be incomplete, but they
14851 must be complete when you define the function. */
14852 check_function_type (decl1
, DECL_ARGUMENTS (decl1
));
14854 /* Build the return declaration for the function. */
14855 restype
= TREE_TYPE (fntype
);
14857 if (DECL_RESULT (decl1
) == NULL_TREE
)
14861 resdecl
= build_decl (input_location
, RESULT_DECL
, 0, restype
);
14862 DECL_ARTIFICIAL (resdecl
) = 1;
14863 DECL_IGNORED_P (resdecl
) = 1;
14864 DECL_RESULT (decl1
) = resdecl
;
14866 cp_apply_type_quals_to_decl (cp_type_quals (restype
), resdecl
);
14869 /* Record the decl so that the function name is defined.
14870 If we already have a decl for this name, and it is a FUNCTION_DECL,
14871 use the old decl. */
14872 if (!processing_template_decl
&& !(flags
& SF_PRE_PARSED
))
14874 /* A specialization is not used to guide overload resolution. */
14875 if (!DECL_FUNCTION_MEMBER_P (decl1
)
14876 && !(DECL_USE_TEMPLATE (decl1
) &&
14877 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1
))))
14879 tree olddecl
= pushdecl (decl1
);
14881 if (olddecl
== error_mark_node
)
14882 /* If something went wrong when registering the declaration,
14883 use DECL1; we have to have a FUNCTION_DECL to use when
14884 parsing the body of the function. */
14888 /* Otherwise, OLDDECL is either a previous declaration
14889 of the same function or DECL1 itself. */
14891 if (warn_missing_declarations
14892 && olddecl
== decl1
14893 && !DECL_MAIN_P (decl1
)
14894 && TREE_PUBLIC (decl1
)
14895 && !DECL_DECLARED_INLINE_P (decl1
))
14899 /* Check whether DECL1 is in an anonymous
14901 for (context
= DECL_CONTEXT (decl1
);
14903 context
= DECL_CONTEXT (context
))
14905 if (TREE_CODE (context
) == NAMESPACE_DECL
14906 && DECL_NAME (context
) == NULL_TREE
)
14910 if (context
== NULL
)
14911 warning_at (DECL_SOURCE_LOCATION (decl1
),
14912 OPT_Wmissing_declarations
,
14913 "no previous declaration for %qD", decl1
);
14921 /* We need to set the DECL_CONTEXT. */
14922 if (!DECL_CONTEXT (decl1
) && DECL_TEMPLATE_INFO (decl1
))
14923 DECL_CONTEXT (decl1
) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1
));
14925 fntype
= TREE_TYPE (decl1
);
14926 restype
= TREE_TYPE (fntype
);
14928 /* If #pragma weak applies, mark the decl appropriately now.
14929 The pragma only applies to global functions. Because
14930 determining whether or not the #pragma applies involves
14931 computing the mangled name for the declaration, we cannot
14932 apply the pragma until after we have merged this declaration
14933 with any previous declarations; if the original declaration
14934 has a linkage specification, that specification applies to
14935 the definition as well, and may affect the mangled name. */
14936 if (DECL_FILE_SCOPE_P (decl1
))
14937 maybe_apply_pragma_weak (decl1
);
14940 /* We are now in the scope of the function being defined. */
14941 current_function_decl
= decl1
;
14943 /* Save the parm names or decls from this function's declarator
14944 where store_parm_decls will find them. */
14945 current_function_parms
= DECL_ARGUMENTS (decl1
);
14947 /* Let the user know we're compiling this function. */
14948 announce_function (decl1
);
14950 gcc_assert (DECL_INITIAL (decl1
));
14952 /* This function may already have been parsed, in which case just
14953 return; our caller will skip over the body without parsing. */
14954 if (DECL_INITIAL (decl1
) != error_mark_node
)
14957 /* Initialize RTL machinery. We cannot do this until
14958 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
14959 even when processing a template; this is how we get
14960 CFUN set up, and our per-function variables initialized.
14961 FIXME factor out the non-RTL stuff. */
14962 bl
= current_binding_level
;
14963 allocate_struct_function (decl1
, processing_template_decl
);
14965 /* Initialize the language data structures. Whenever we start
14966 a new function, we destroy temporaries in the usual way. */
14967 cfun
->language
= ggc_cleared_alloc
<language_function
> ();
14968 current_stmt_tree ()->stmts_are_full_exprs_p
= 1;
14969 current_binding_level
= bl
;
14971 if (!processing_template_decl
&& type_uses_auto (restype
))
14973 FNDECL_USED_AUTO (decl1
) = true;
14974 current_function_auto_return_pattern
= restype
;
14977 /* Start the statement-tree, start the tree now. */
14978 DECL_SAVED_TREE (decl1
) = push_stmt_list ();
14980 /* If we are (erroneously) defining a function that we have already
14981 defined before, wipe out what we knew before. */
14982 if (!DECL_PENDING_INLINE_P (decl1
))
14983 DECL_SAVED_FUNCTION_DATA (decl1
) = NULL
;
14985 if (ctype
&& !doing_friend
&& !DECL_STATIC_FUNCTION_P (decl1
))
14987 /* We know that this was set up by `grokclassfn'. We do not
14988 wait until `store_parm_decls', since evil parse errors may
14989 never get us to that point. Here we keep the consistency
14990 between `current_class_type' and `current_class_ptr'. */
14991 tree t
= DECL_ARGUMENTS (decl1
);
14993 gcc_assert (t
!= NULL_TREE
&& TREE_CODE (t
) == PARM_DECL
);
14994 gcc_assert (TYPE_PTR_P (TREE_TYPE (t
)));
14996 cp_function_chain
->x_current_class_ref
14997 = cp_build_fold_indirect_ref (t
);
14998 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
14999 cp_function_chain
->x_current_class_ptr
= t
;
15001 /* Constructors and destructors need to know whether they're "in
15002 charge" of initializing virtual base classes. */
15003 t
= DECL_CHAIN (t
);
15004 if (DECL_HAS_IN_CHARGE_PARM_P (decl1
))
15006 current_in_charge_parm
= t
;
15007 t
= DECL_CHAIN (t
);
15009 if (DECL_HAS_VTT_PARM_P (decl1
))
15011 gcc_assert (DECL_NAME (t
) == vtt_parm_identifier
);
15012 current_vtt_parm
= t
;
15016 honor_interface
= (!DECL_TEMPLATE_INSTANTIATION (decl1
)
15017 /* Implicitly-defined methods (like the
15018 destructor for a class in which no destructor
15019 is explicitly declared) must not be defined
15020 until their definition is needed. So, we
15021 ignore interface specifications for
15022 compiler-generated functions. */
15023 && !DECL_ARTIFICIAL (decl1
));
15025 if (processing_template_decl
)
15026 /* Don't mess with interface flags. */;
15027 else if (DECL_INTERFACE_KNOWN (decl1
))
15029 tree ctx
= decl_function_context (decl1
);
15031 if (DECL_NOT_REALLY_EXTERN (decl1
))
15032 DECL_EXTERNAL (decl1
) = 0;
15034 if (ctx
!= NULL_TREE
&& vague_linkage_p (ctx
))
15035 /* This is a function in a local class in an extern inline
15036 or template function. */
15037 comdat_linkage (decl1
);
15039 /* If this function belongs to an interface, it is public.
15040 If it belongs to someone else's interface, it is also external.
15041 This only affects inlines and template instantiations. */
15042 else if (!finfo
->interface_unknown
&& honor_interface
)
15044 if (DECL_DECLARED_INLINE_P (decl1
)
15045 || DECL_TEMPLATE_INSTANTIATION (decl1
))
15047 DECL_EXTERNAL (decl1
)
15048 = (finfo
->interface_only
15049 || (DECL_DECLARED_INLINE_P (decl1
)
15050 && ! flag_implement_inlines
15051 && !DECL_VINDEX (decl1
)));
15053 /* For WIN32 we also want to put these in linkonce sections. */
15054 maybe_make_one_only (decl1
);
15057 DECL_EXTERNAL (decl1
) = 0;
15058 DECL_INTERFACE_KNOWN (decl1
) = 1;
15059 /* If this function is in an interface implemented in this file,
15060 make sure that the back end knows to emit this function
15062 if (!DECL_EXTERNAL (decl1
))
15063 mark_needed (decl1
);
15065 else if (finfo
->interface_unknown
&& finfo
->interface_only
15066 && honor_interface
)
15068 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
15069 interface, we will have both finfo->interface_unknown and
15070 finfo->interface_only set. In that case, we don't want to
15071 use the normal heuristics because someone will supply a
15072 #pragma implementation elsewhere, and deducing it here would
15073 produce a conflict. */
15074 comdat_linkage (decl1
);
15075 DECL_EXTERNAL (decl1
) = 0;
15076 DECL_INTERFACE_KNOWN (decl1
) = 1;
15077 DECL_DEFER_OUTPUT (decl1
) = 1;
15081 /* This is a definition, not a reference.
15082 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
15083 if (!GNU_INLINE_P (decl1
))
15084 DECL_EXTERNAL (decl1
) = 0;
15086 if ((DECL_DECLARED_INLINE_P (decl1
)
15087 || DECL_TEMPLATE_INSTANTIATION (decl1
))
15088 && ! DECL_INTERFACE_KNOWN (decl1
))
15089 DECL_DEFER_OUTPUT (decl1
) = 1;
15091 DECL_INTERFACE_KNOWN (decl1
) = 1;
15094 /* Determine the ELF visibility attribute for the function. We must not
15095 do this before calling "pushdecl", as we must allow "duplicate_decls"
15096 to merge any attributes appropriately. We also need to wait until
15098 if (!DECL_CLONED_FUNCTION_P (decl1
))
15099 determine_visibility (decl1
);
15101 if (!processing_template_decl
)
15102 maybe_instantiate_noexcept (decl1
);
15104 begin_scope (sk_function_parms
, decl1
);
15108 if (DECL_DESTRUCTOR_P (decl1
)
15109 || (DECL_CONSTRUCTOR_P (decl1
)
15110 && targetm
.cxx
.cdtor_returns_this ()))
15112 cdtor_label
= create_artificial_label (input_location
);
15113 LABEL_DECL_CDTOR (cdtor_label
) = true;
15116 start_fname_decls ();
15118 store_parm_decls (current_function_parms
);
15120 if (!processing_template_decl
15121 && (flag_lifetime_dse
> 1)
15122 && DECL_CONSTRUCTOR_P (decl1
)
15123 && !DECL_CLONED_FUNCTION_P (decl1
)
15124 /* Clobbering an empty base is harmful if it overlays real data. */
15125 && !is_empty_class (current_class_type
)
15126 /* We can't clobber safely for an implicitly-defined default constructor
15127 because part of the initialization might happen before we enter the
15128 constructor, via AGGR_INIT_ZERO_FIRST (c++/68006). */
15129 && !implicit_default_ctor_p (decl1
))
15130 finish_expr_stmt (build_clobber_this ());
15132 if (!processing_template_decl
15133 && DECL_CONSTRUCTOR_P (decl1
)
15134 && sanitize_flags_p (SANITIZE_VPTR
)
15135 && !DECL_CLONED_FUNCTION_P (decl1
)
15136 && !implicit_default_ctor_p (decl1
))
15137 cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr
);
15139 start_lambda_scope (decl1
);
15145 /* Like start_preparsed_function, except that instead of a
15146 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
15148 Returns true on success. If the DECLARATOR is not suitable
15149 for a function, we return false, which tells the parser to
15150 skip the entire function. */
15153 start_function (cp_decl_specifier_seq
*declspecs
,
15154 const cp_declarator
*declarator
,
15159 decl1
= grokdeclarator (declarator
, declspecs
, FUNCDEF
, 1, &attrs
);
15160 invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION
, decl1
);
15161 if (decl1
== error_mark_node
)
15163 /* If the declarator is not suitable for a function definition,
15164 cause a syntax error. */
15165 if (decl1
== NULL_TREE
|| TREE_CODE (decl1
) != FUNCTION_DECL
)
15167 error ("invalid function declaration");
15171 if (DECL_MAIN_P (decl1
))
15172 /* main must return int. grokfndecl should have corrected it
15173 (and issued a diagnostic) if the user got it wrong. */
15174 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1
)),
15175 integer_type_node
));
15177 return start_preparsed_function (decl1
, attrs
, /*flags=*/SF_DEFAULT
);
15180 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
15184 use_eh_spec_block (tree fn
)
15186 return (flag_exceptions
&& flag_enforce_eh_specs
15187 && !processing_template_decl
15188 && !type_throw_all_p (TREE_TYPE (fn
))
15189 /* We insert the EH_SPEC_BLOCK only in the original
15190 function; then, it is copied automatically to the
15192 && !DECL_CLONED_FUNCTION_P (fn
)
15193 /* Implicitly-generated constructors and destructors have
15194 exception specifications. However, those specifications
15195 are the union of the possible exceptions specified by the
15196 constructors/destructors for bases and members, so no
15197 unallowed exception will ever reach this function. By
15198 not creating the EH_SPEC_BLOCK we save a little memory,
15199 and we avoid spurious warnings about unreachable
15201 && !DECL_DEFAULTED_FN (fn
));
15204 /* Store the parameter declarations into the current function declaration.
15205 This is called after parsing the parameter declarations, before
15206 digesting the body of the function.
15208 Also install to binding contour return value identifier, if any. */
15211 store_parm_decls (tree current_function_parms
)
15213 tree fndecl
= current_function_decl
;
15216 /* This is a chain of any other decls that came in among the parm
15217 declarations. If a parm is declared with enum {foo, bar} x;
15218 then CONST_DECLs for foo and bar are put here. */
15219 tree nonparms
= NULL_TREE
;
15221 if (current_function_parms
)
15223 /* This case is when the function was defined with an ANSI prototype.
15224 The parms already have decls, so we need not do anything here
15225 except record them as in effect
15226 and complain if any redundant old-style parm decls were written. */
15228 tree specparms
= current_function_parms
;
15231 /* Must clear this because it might contain TYPE_DECLs declared
15233 current_binding_level
->names
= NULL
;
15235 /* If we're doing semantic analysis, then we'll call pushdecl
15236 for each of these. We must do them in reverse order so that
15237 they end in the correct forward order. */
15238 specparms
= nreverse (specparms
);
15240 for (parm
= specparms
; parm
; parm
= next
)
15242 next
= DECL_CHAIN (parm
);
15243 if (TREE_CODE (parm
) == PARM_DECL
)
15247 /* If we find an enum constant or a type tag,
15248 put it aside for the moment. */
15249 TREE_CHAIN (parm
) = NULL_TREE
;
15250 nonparms
= chainon (nonparms
, parm
);
15254 /* Get the decls in their original chain order and record in the
15255 function. This is all and only the PARM_DECLs that were
15256 pushed into scope by the loop above. */
15257 DECL_ARGUMENTS (fndecl
) = get_local_decls ();
15260 DECL_ARGUMENTS (fndecl
) = NULL_TREE
;
15262 /* Now store the final chain of decls for the arguments
15263 as the decl-chain of the current lexical scope.
15264 Put the enumerators in as well, at the front so that
15265 DECL_ARGUMENTS is not modified. */
15266 current_binding_level
->names
= chainon (nonparms
, DECL_ARGUMENTS (fndecl
));
15268 if (use_eh_spec_block (current_function_decl
))
15269 current_eh_spec_block
= begin_eh_spec_block ();
15273 /* We have finished doing semantic analysis on DECL, but have not yet
15274 generated RTL for its body. Save away our current state, so that
15275 when we want to generate RTL later we know what to do. */
15278 save_function_data (tree decl
)
15280 struct language_function
*f
;
15282 /* Save the language-specific per-function data so that we can
15283 get it back when we really expand this function. */
15284 gcc_assert (!DECL_PENDING_INLINE_P (decl
));
15287 f
= ggc_alloc
<language_function
> ();
15288 memcpy (f
, cp_function_chain
, sizeof (struct language_function
));
15289 DECL_SAVED_FUNCTION_DATA (decl
) = f
;
15291 /* Clear out the bits we don't need. */
15292 f
->base
.x_stmt_tree
.x_cur_stmt_list
= NULL
;
15293 f
->bindings
= NULL
;
15294 f
->x_local_names
= NULL
;
15295 f
->base
.local_typedefs
= NULL
;
15299 /* Set the return value of the constructor (if present). */
15302 finish_constructor_body (void)
15307 if (targetm
.cxx
.cdtor_returns_this ())
15309 /* Any return from a constructor will end up here. */
15310 add_stmt (build_stmt (input_location
, LABEL_EXPR
, cdtor_label
));
15312 val
= DECL_ARGUMENTS (current_function_decl
);
15313 val
= build2 (MODIFY_EXPR
, TREE_TYPE (val
),
15314 DECL_RESULT (current_function_decl
), val
);
15315 /* Return the address of the object. */
15316 exprstmt
= build_stmt (input_location
, RETURN_EXPR
, val
);
15317 add_stmt (exprstmt
);
15321 /* Do all the processing for the beginning of a destructor; set up the
15322 vtable pointers and cleanups for bases and members. */
15325 begin_destructor_body (void)
15327 tree compound_stmt
;
15329 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
15330 issued an error message. We still want to try to process the
15331 body of the function, but initialize_vtbl_ptrs will crash if
15332 TYPE_BINFO is NULL. */
15333 if (COMPLETE_TYPE_P (current_class_type
))
15335 compound_stmt
= begin_compound_stmt (0);
15336 /* Make all virtual function table pointers in non-virtual base
15337 classes point to CURRENT_CLASS_TYPE's virtual function
15339 initialize_vtbl_ptrs (current_class_ptr
);
15340 finish_compound_stmt (compound_stmt
);
15342 if (flag_lifetime_dse
15343 /* Clobbering an empty base is harmful if it overlays real data. */
15344 && !is_empty_class (current_class_type
))
15346 if (sanitize_flags_p (SANITIZE_VPTR
)
15347 && (flag_sanitize_recover
& SANITIZE_VPTR
) == 0
15348 && TYPE_CONTAINS_VPTR_P (current_class_type
))
15350 tree binfo
= TYPE_BINFO (current_class_type
);
15352 = cp_build_fold_indirect_ref (current_class_ptr
);
15354 tree vtbl_ptr
= build_vfield_ref (ref
, TREE_TYPE (binfo
));
15355 tree vtbl
= build_zero_cst (TREE_TYPE (vtbl_ptr
));
15356 tree stmt
= cp_build_modify_expr (input_location
, vtbl_ptr
,
15358 tf_warning_or_error
);
15359 finish_decl_cleanup (NULL_TREE
, stmt
);
15362 finish_decl_cleanup (NULL_TREE
, build_clobber_this ());
15365 /* And insert cleanups for our bases and members so that they
15366 will be properly destroyed if we throw. */
15367 push_base_cleanups ();
15371 /* At the end of every destructor we generate code to delete the object if
15372 necessary. Do that now. */
15375 finish_destructor_body (void)
15379 /* Any return from a destructor will end up here; that way all base
15380 and member cleanups will be run when the function returns. */
15381 add_stmt (build_stmt (input_location
, LABEL_EXPR
, cdtor_label
));
15383 if (targetm
.cxx
.cdtor_returns_this ())
15387 val
= DECL_ARGUMENTS (current_function_decl
);
15388 val
= build2 (MODIFY_EXPR
, TREE_TYPE (val
),
15389 DECL_RESULT (current_function_decl
), val
);
15390 /* Return the address of the object. */
15391 exprstmt
= build_stmt (input_location
, RETURN_EXPR
, val
);
15392 add_stmt (exprstmt
);
15396 /* Do the necessary processing for the beginning of a function body, which
15397 in this case includes member-initializers, but not the catch clauses of
15398 a function-try-block. Currently, this means opening a binding level
15399 for the member-initializers (in a ctor), member cleanups (in a dtor),
15400 and capture proxies (in a lambda operator()). */
15403 begin_function_body (void)
15407 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl
))
15410 if (processing_template_decl
)
15411 /* Do nothing now. */;
15413 /* Always keep the BLOCK node associated with the outermost pair of
15414 curly braces of a function. These are needed for correct
15415 operation of dwarfout.c. */
15416 keep_next_level (true);
15418 stmt
= begin_compound_stmt (BCS_FN_BODY
);
15420 if (processing_template_decl
)
15421 /* Do nothing now. */;
15422 else if (DECL_DESTRUCTOR_P (current_function_decl
))
15423 begin_destructor_body ();
15428 /* Do the processing for the end of a function body. Currently, this means
15429 closing out the cleanups for fully-constructed bases and members, and in
15430 the case of the destructor, deleting the object if desired. Again, this
15431 is only meaningful for [cd]tors, since they are the only functions where
15432 there is a significant distinction between the main body and any
15433 function catch clauses. Handling, say, main() return semantics here
15434 would be wrong, as flowing off the end of a function catch clause for
15435 main() would also need to return 0. */
15438 finish_function_body (tree compstmt
)
15440 if (compstmt
== NULL_TREE
)
15443 /* Close the block. */
15444 finish_compound_stmt (compstmt
);
15446 if (processing_template_decl
)
15447 /* Do nothing now. */;
15448 else if (DECL_CONSTRUCTOR_P (current_function_decl
))
15449 finish_constructor_body ();
15450 else if (DECL_DESTRUCTOR_P (current_function_decl
))
15451 finish_destructor_body ();
15454 /* Given a function, returns the BLOCK corresponding to the outermost level
15455 of curly braces, skipping the artificial block created for constructor
15459 outer_curly_brace_block (tree fndecl
)
15461 tree block
= DECL_INITIAL (fndecl
);
15462 if (BLOCK_OUTER_CURLY_BRACE_P (block
))
15464 block
= BLOCK_SUBBLOCKS (block
);
15465 if (BLOCK_OUTER_CURLY_BRACE_P (block
))
15467 block
= BLOCK_SUBBLOCKS (block
);
15468 gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block
));
15472 /* If FNDECL is a class's key method, add the class to the list of
15473 keyed classes that should be emitted. */
15476 record_key_method_defined (tree fndecl
)
15478 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl
)
15479 && DECL_VIRTUAL_P (fndecl
)
15480 && !processing_template_decl
)
15482 tree fnclass
= DECL_CONTEXT (fndecl
);
15483 if (fndecl
== CLASSTYPE_KEY_METHOD (fnclass
))
15484 vec_safe_push (keyed_classes
, fnclass
);
15488 /* Subroutine of finish_function.
15489 Save the body of constexpr functions for possible
15490 future compile time evaluation. */
15493 maybe_save_function_definition (tree fun
)
15495 if (!processing_template_decl
15496 && DECL_DECLARED_CONSTEXPR_P (fun
)
15497 && !cp_function_chain
->invalid_constexpr
15498 && !DECL_CLONED_FUNCTION_P (fun
))
15499 register_constexpr_fundef (fun
, DECL_SAVED_TREE (fun
));
15502 /* Finish up a function declaration and compile that function
15503 all the way to assembler language output. The free the storage
15504 for the function definition. INLINE_P is TRUE if we just
15505 finished processing the body of an in-class inline function
15506 definition. (This processing will have taken place after the
15507 class definition is complete.) */
15510 finish_function (bool inline_p
)
15512 tree fndecl
= current_function_decl
;
15513 tree fntype
, ctype
= NULL_TREE
;
15515 /* When we get some parse errors, we can end up without a
15516 current_function_decl, so cope. */
15517 if (fndecl
== NULL_TREE
)
15518 return error_mark_node
;
15520 finish_lambda_scope ();
15522 if (c_dialect_objc ())
15523 objc_finish_function ();
15525 record_key_method_defined (fndecl
);
15527 fntype
= TREE_TYPE (fndecl
);
15529 /* TREE_READONLY (fndecl) = 1;
15530 This caused &foo to be of type ptr-to-const-function
15531 which then got a warning when stored in a ptr-to-function variable. */
15533 gcc_assert (building_stmt_list_p ());
15534 /* The current function is being defined, so its DECL_INITIAL should
15535 be set, and unless there's a multiple definition, it should be
15536 error_mark_node. */
15537 gcc_assert (DECL_INITIAL (fndecl
) == error_mark_node
);
15539 /* For a cloned function, we've already got all the code we need;
15540 there's no need to add any extra bits. */
15541 if (!DECL_CLONED_FUNCTION_P (fndecl
))
15543 /* Make it so that `main' always returns 0 by default. */
15544 if (DECL_MAIN_P (current_function_decl
))
15545 finish_return_stmt (integer_zero_node
);
15547 if (use_eh_spec_block (current_function_decl
))
15548 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
15549 (TREE_TYPE (current_function_decl
)),
15550 current_eh_spec_block
);
15553 /* If we're saving up tree structure, tie off the function now. */
15554 DECL_SAVED_TREE (fndecl
) = pop_stmt_list (DECL_SAVED_TREE (fndecl
));
15556 finish_fname_decls ();
15558 /* If this function can't throw any exceptions, remember that. */
15559 if (!processing_template_decl
15560 && !cp_function_chain
->can_throw
15561 && !flag_non_call_exceptions
15562 && !decl_replaceable_p (fndecl
))
15563 TREE_NOTHROW (fndecl
) = 1;
15565 /* This must come after expand_function_end because cleanups might
15566 have declarations (from inline functions) that need to go into
15567 this function's blocks. */
15569 /* If the current binding level isn't the outermost binding level
15570 for this function, either there is a bug, or we have experienced
15571 syntax errors and the statement tree is malformed. */
15572 if (current_binding_level
->kind
!= sk_function_parms
)
15574 /* Make sure we have already experienced errors. */
15575 gcc_assert (errorcount
);
15577 /* Throw away the broken statement tree and extra binding
15579 DECL_SAVED_TREE (fndecl
) = alloc_stmt_list ();
15581 while (current_binding_level
->kind
!= sk_function_parms
)
15583 if (current_binding_level
->kind
== sk_class
)
15584 pop_nested_class ();
15586 poplevel (0, 0, 0);
15589 poplevel (1, 0, 1);
15591 /* Statements should always be full-expressions at the outermost set
15592 of curly braces for a function. */
15593 gcc_assert (stmts_are_full_exprs_p ());
15595 /* If there are no return statements in a function with auto return type,
15596 the return type is void. But if the declared type is something like
15597 auto*, this is an error. */
15598 if (!processing_template_decl
&& FNDECL_USED_AUTO (fndecl
)
15599 && TREE_TYPE (fntype
) == current_function_auto_return_pattern
)
15601 if (is_auto (current_function_auto_return_pattern
))
15603 apply_deduced_return_type (fndecl
, void_type_node
);
15604 fntype
= TREE_TYPE (fndecl
);
15606 else if (!current_function_returns_value
15607 && !current_function_returns_null
)
15609 error ("no return statements in function returning %qT",
15610 current_function_auto_return_pattern
);
15611 inform (input_location
, "only plain %<auto%> return type can be "
15612 "deduced to %<void%>");
15616 // If this is a concept, check that the definition is reasonable.
15617 if (DECL_DECLARED_CONCEPT_P (fndecl
))
15618 check_function_concept (fndecl
);
15620 /* Lambda closure members are implicitly constexpr if possible. */
15621 if (cxx_dialect
>= cxx17
15622 && LAMBDA_TYPE_P (CP_DECL_CONTEXT (fndecl
)))
15623 DECL_DECLARED_CONSTEXPR_P (fndecl
)
15624 = ((processing_template_decl
15625 || is_valid_constexpr_fn (fndecl
, /*complain*/false))
15626 && potential_constant_expression (DECL_SAVED_TREE (fndecl
)));
15628 /* Save constexpr function body before it gets munged by
15629 the NRV transformation. */
15630 maybe_save_function_definition (fndecl
);
15632 /* Invoke the pre-genericize plugin before we start munging things. */
15633 if (!processing_template_decl
)
15634 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE
, fndecl
);
15636 /* Perform delayed folding before NRV transformation. */
15637 if (!processing_template_decl
)
15638 cp_fold_function (fndecl
);
15640 /* Set up the named return value optimization, if we can. Candidate
15641 variables are selected in check_return_expr. */
15642 if (current_function_return_value
)
15644 tree r
= current_function_return_value
;
15647 if (r
!= error_mark_node
15648 /* This is only worth doing for fns that return in memory--and
15649 simpler, since we don't have to worry about promoted modes. */
15650 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl
)), fndecl
)
15651 /* Only allow this for variables declared in the outer scope of
15652 the function so we know that their lifetime always ends with a
15653 return; see g++.dg/opt/nrv6.C. We could be more flexible if
15654 we were to do this optimization in tree-ssa. */
15655 && (outer
= outer_curly_brace_block (fndecl
))
15656 && chain_member (r
, BLOCK_VARS (outer
)))
15657 finalize_nrv (&DECL_SAVED_TREE (fndecl
), r
, DECL_RESULT (fndecl
));
15659 current_function_return_value
= NULL_TREE
;
15662 /* Remember that we were in class scope. */
15663 if (current_class_name
)
15664 ctype
= current_class_type
;
15666 /* Must mark the RESULT_DECL as being in this function. */
15667 DECL_CONTEXT (DECL_RESULT (fndecl
)) = fndecl
;
15669 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
15670 to the FUNCTION_DECL node itself. */
15671 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl
)) = fndecl
;
15673 /* Save away current state, if appropriate. */
15674 if (!processing_template_decl
)
15675 save_function_data (fndecl
);
15677 /* Complain if there's just no return statement. */
15678 if (warn_return_type
15679 && !VOID_TYPE_P (TREE_TYPE (fntype
))
15680 && !dependent_type_p (TREE_TYPE (fntype
))
15681 && !current_function_returns_value
&& !current_function_returns_null
15682 /* Don't complain if we abort or throw. */
15683 && !current_function_returns_abnormally
15684 /* Don't complain if there's an infinite loop. */
15685 && !current_function_infinite_loop
15686 /* Don't complain if we are declared noreturn. */
15687 && !TREE_THIS_VOLATILE (fndecl
)
15688 && !DECL_NAME (DECL_RESULT (fndecl
))
15689 && !TREE_NO_WARNING (fndecl
)
15690 /* Structor return values (if any) are set by the compiler. */
15691 && !DECL_CONSTRUCTOR_P (fndecl
)
15692 && !DECL_DESTRUCTOR_P (fndecl
)
15693 && targetm
.warn_func_return (fndecl
))
15695 warning (OPT_Wreturn_type
,
15696 "no return statement in function returning non-void");
15697 TREE_NO_WARNING (fndecl
) = 1;
15700 /* Store the end of the function, so that we get good line number
15701 info for the epilogue. */
15702 cfun
->function_end_locus
= input_location
;
15704 /* Complain about parameters that are only set, but never otherwise used. */
15705 if (warn_unused_but_set_parameter
15706 && !processing_template_decl
15707 && errorcount
== unused_but_set_errorcount
15708 && !DECL_CLONED_FUNCTION_P (fndecl
))
15712 for (decl
= DECL_ARGUMENTS (fndecl
);
15714 decl
= DECL_CHAIN (decl
))
15715 if (TREE_USED (decl
)
15716 && TREE_CODE (decl
) == PARM_DECL
15717 && !DECL_READ_P (decl
)
15718 && DECL_NAME (decl
)
15719 && !DECL_ARTIFICIAL (decl
)
15720 && !TREE_NO_WARNING (decl
)
15721 && !DECL_IN_SYSTEM_HEADER (decl
)
15722 && TREE_TYPE (decl
) != error_mark_node
15723 && TREE_CODE (TREE_TYPE (decl
)) != REFERENCE_TYPE
15724 && (!CLASS_TYPE_P (TREE_TYPE (decl
))
15725 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl
))))
15726 warning_at (DECL_SOURCE_LOCATION (decl
),
15727 OPT_Wunused_but_set_parameter
,
15728 "parameter %qD set but not used", decl
);
15729 unused_but_set_errorcount
= errorcount
;
15732 /* Complain about locally defined typedefs that are not used in this
15734 maybe_warn_unused_local_typedefs ();
15736 /* Possibly warn about unused parameters. */
15737 if (warn_unused_parameter
15738 && !processing_template_decl
15739 && !DECL_CLONED_FUNCTION_P (fndecl
))
15740 do_warn_unused_parameter (fndecl
);
15742 /* Genericize before inlining. */
15743 if (!processing_template_decl
)
15745 struct language_function
*f
= DECL_SAVED_FUNCTION_DATA (fndecl
);
15746 cp_genericize (fndecl
);
15747 /* Clear out the bits we don't need. */
15748 f
->x_current_class_ptr
= NULL
;
15749 f
->x_current_class_ref
= NULL
;
15750 f
->x_eh_spec_block
= NULL
;
15751 f
->x_in_charge_parm
= NULL
;
15752 f
->x_vtt_parm
= NULL
;
15753 f
->x_return_value
= NULL
;
15754 f
->bindings
= NULL
;
15755 f
->extern_decl_map
= NULL
;
15756 f
->infinite_loops
= NULL
;
15758 /* Clear out the bits we don't need. */
15759 local_names
= NULL
;
15761 /* We're leaving the context of this function, so zap cfun. It's still in
15762 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
15764 current_function_decl
= NULL
;
15766 /* If this is an in-class inline definition, we may have to pop the
15767 bindings for the template parameters that we added in
15768 maybe_begin_member_template_processing when start_function was
15771 maybe_end_member_template_processing ();
15773 /* Leave the scope of the class. */
15775 pop_nested_class ();
15780 current_function_decl
= NULL_TREE
;
15782 invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION
, fndecl
);
15786 /* Create the FUNCTION_DECL for a function definition.
15787 DECLSPECS and DECLARATOR are the parts of the declaration;
15788 they describe the return type and the name of the function,
15789 but twisted together in a fashion that parallels the syntax of C.
15791 This function creates a binding context for the function body
15792 as well as setting up the FUNCTION_DECL in current_function_decl.
15794 Returns a FUNCTION_DECL on success.
15796 If the DECLARATOR is not suitable for a function (it defines a datum
15797 instead), we return 0, which tells yyparse to report a parse error.
15799 May return void_type_node indicating that this method is actually
15800 a friend. See grokfield for more details.
15802 Came here with a `.pushlevel' .
15804 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
15805 CHANGES TO CODE IN `grokfield'. */
15808 grokmethod (cp_decl_specifier_seq
*declspecs
,
15809 const cp_declarator
*declarator
, tree attrlist
)
15811 tree fndecl
= grokdeclarator (declarator
, declspecs
, MEMFUNCDEF
, 0,
15814 if (fndecl
== error_mark_node
)
15815 return error_mark_node
;
15817 if (fndecl
== NULL
|| TREE_CODE (fndecl
) != FUNCTION_DECL
)
15819 error ("invalid member function declaration");
15820 return error_mark_node
;
15824 cplus_decl_attributes (&fndecl
, attrlist
, 0);
15826 /* Pass friends other than inline friend functions back. */
15827 if (fndecl
== void_type_node
)
15830 if (DECL_IN_AGGR_P (fndecl
))
15832 if (DECL_CLASS_SCOPE_P (fndecl
))
15833 error ("%qD is already defined in class %qT", fndecl
,
15834 DECL_CONTEXT (fndecl
));
15835 return error_mark_node
;
15838 check_template_shadow (fndecl
);
15840 if (TREE_PUBLIC (fndecl
))
15841 DECL_COMDAT (fndecl
) = 1;
15842 DECL_DECLARED_INLINE_P (fndecl
) = 1;
15843 DECL_NO_INLINE_WARNING_P (fndecl
) = 1;
15845 /* We process method specializations in finish_struct_1. */
15846 if (processing_template_decl
&& !DECL_TEMPLATE_SPECIALIZATION (fndecl
))
15848 fndecl
= push_template_decl (fndecl
);
15849 if (fndecl
== error_mark_node
)
15853 if (! DECL_FRIEND_P (fndecl
))
15855 if (DECL_CHAIN (fndecl
))
15857 fndecl
= copy_node (fndecl
);
15858 TREE_CHAIN (fndecl
) = NULL_TREE
;
15862 cp_finish_decl (fndecl
, NULL_TREE
, false, NULL_TREE
, 0);
15864 DECL_IN_AGGR_P (fndecl
) = 1;
15869 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
15870 we can lay it out later, when and if its type becomes complete.
15872 Also handle constexpr variables where the initializer involves
15873 an unlowered PTRMEM_CST because the class isn't complete yet. */
15876 maybe_register_incomplete_var (tree var
)
15878 gcc_assert (VAR_P (var
));
15880 /* Keep track of variables with incomplete types. */
15881 if (!processing_template_decl
&& TREE_TYPE (var
) != error_mark_node
15882 && DECL_EXTERNAL (var
))
15884 tree inner_type
= TREE_TYPE (var
);
15886 while (TREE_CODE (inner_type
) == ARRAY_TYPE
)
15887 inner_type
= TREE_TYPE (inner_type
);
15888 inner_type
= TYPE_MAIN_VARIANT (inner_type
);
15890 if ((!COMPLETE_TYPE_P (inner_type
) && CLASS_TYPE_P (inner_type
))
15891 /* RTTI TD entries are created while defining the type_info. */
15892 || (TYPE_LANG_SPECIFIC (inner_type
)
15893 && TYPE_BEING_DEFINED (inner_type
)))
15895 incomplete_var iv
= {var
, inner_type
};
15896 vec_safe_push (incomplete_vars
, iv
);
15898 else if (!(DECL_LANG_SPECIFIC (var
) && DECL_TEMPLATE_INFO (var
))
15899 && decl_constant_var_p (var
)
15900 && (TYPE_PTRMEM_P (inner_type
) || CLASS_TYPE_P (inner_type
)))
15902 /* When the outermost open class is complete we can resolve any
15903 pointers-to-members. */
15904 tree context
= outermost_open_class ();
15905 incomplete_var iv
= {var
, context
};
15906 vec_safe_push (incomplete_vars
, iv
);
15911 /* Called when a class type (given by TYPE) is defined. If there are
15912 any existing VAR_DECLs whose type has been completed by this
15913 declaration, update them now. */
15916 complete_vars (tree type
)
15919 incomplete_var
*iv
;
15921 for (ix
= 0; vec_safe_iterate (incomplete_vars
, ix
, &iv
); )
15923 if (same_type_p (type
, iv
->incomplete_type
))
15925 tree var
= iv
->decl
;
15926 tree type
= TREE_TYPE (var
);
15928 if (type
!= error_mark_node
15929 && (TYPE_MAIN_VARIANT (strip_array_types (type
))
15930 == iv
->incomplete_type
))
15932 /* Complete the type of the variable. The VAR_DECL itself
15933 will be laid out in expand_expr. */
15934 complete_type (type
);
15935 cp_apply_type_quals_to_decl (cp_type_quals (type
), var
);
15938 /* Remove this entry from the list. */
15939 incomplete_vars
->unordered_remove (ix
);
15945 /* Check for pending declarations which may have abstract type. */
15946 complete_type_check_abstract (type
);
15949 /* If DECL is of a type which needs a cleanup, build and return an
15950 expression to perform that cleanup here. Return NULL_TREE if no
15951 cleanup need be done. DECL can also be a _REF when called from
15952 split_nonconstant_init_1. */
15955 cxx_maybe_build_cleanup (tree decl
, tsubst_flags_t complain
)
15961 /* Assume no cleanup is required. */
15962 cleanup
= NULL_TREE
;
15964 if (error_operand_p (decl
))
15967 /* Handle "__attribute__((cleanup))". We run the cleanup function
15968 before the destructor since the destructor is what actually
15969 terminates the lifetime of the object. */
15971 attr
= lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl
));
15980 /* Get the name specified by the user for the cleanup function. */
15981 id
= TREE_VALUE (TREE_VALUE (attr
));
15982 /* Look up the name to find the cleanup function to call. It is
15983 important to use lookup_name here because that is what is
15984 used in c-common.c:handle_cleanup_attribute when performing
15985 initial checks on the attribute. Note that those checks
15986 include ensuring that the function found is not an overloaded
15987 function, or an object with an overloaded call operator,
15988 etc.; we can rely on the fact that the function found is an
15989 ordinary FUNCTION_DECL. */
15990 fn
= lookup_name (id
);
15991 arg
= build_address (decl
);
15992 if (!mark_used (decl
, complain
) && !(complain
& tf_error
))
15993 return error_mark_node
;
15994 cleanup
= cp_build_function_call_nary (fn
, complain
, arg
, NULL_TREE
);
15995 if (cleanup
== error_mark_node
)
15996 return error_mark_node
;
15998 /* Handle ordinary C++ destructors. */
15999 type
= TREE_TYPE (decl
);
16000 if (type_build_dtor_call (type
))
16002 int flags
= LOOKUP_NORMAL
|LOOKUP_NONVIRTUAL
|LOOKUP_DESTRUCTOR
;
16006 if (TREE_CODE (type
) == ARRAY_TYPE
)
16009 addr
= build_address (decl
);
16011 call
= build_delete (TREE_TYPE (addr
), addr
,
16012 sfk_complete_destructor
, flags
, 0, complain
);
16013 if (call
== error_mark_node
)
16014 cleanup
= error_mark_node
;
16015 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type
))
16016 /* Discard the call. */;
16018 cleanup
= cp_build_compound_expr (cleanup
, call
, complain
);
16023 /* build_delete sets the location of the destructor call to the
16024 current location, even though the destructor is going to be
16025 called later, at the end of the current scope. This can lead to
16026 a "jumpy" behavior for users of debuggers when they step around
16027 the end of the block. So let's unset the location of the
16028 destructor call instead. */
16029 protected_set_expr_location (cleanup
, UNKNOWN_LOCATION
);
16033 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl
)))
16034 /* Treat objects with destructors as used; the destructor may do
16035 something substantive. */
16036 && !mark_used (decl
, complain
) && !(complain
& tf_error
))
16037 return error_mark_node
;
16043 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
16044 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
16045 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
16048 static_fn_type (tree memfntype
)
16053 if (TYPE_PTRMEMFUNC_P (memfntype
))
16054 memfntype
= TYPE_PTRMEMFUNC_FN_TYPE (memfntype
);
16055 if (POINTER_TYPE_P (memfntype
)
16056 || TREE_CODE (memfntype
) == FUNCTION_DECL
)
16057 memfntype
= TREE_TYPE (memfntype
);
16058 if (TREE_CODE (memfntype
) == FUNCTION_TYPE
)
16060 gcc_assert (TREE_CODE (memfntype
) == METHOD_TYPE
);
16061 args
= TYPE_ARG_TYPES (memfntype
);
16062 cp_ref_qualifier rqual
= type_memfn_rqual (memfntype
);
16063 fntype
= build_function_type (TREE_TYPE (memfntype
), TREE_CHAIN (args
));
16064 fntype
= apply_memfn_quals (fntype
, type_memfn_quals (memfntype
), rqual
);
16065 fntype
= (cp_build_type_attribute_variant
16066 (fntype
, TYPE_ATTRIBUTES (memfntype
)));
16067 fntype
= (build_exception_variant
16068 (fntype
, TYPE_RAISES_EXCEPTIONS (memfntype
)));
16069 if (TYPE_HAS_LATE_RETURN_TYPE (memfntype
))
16070 TYPE_HAS_LATE_RETURN_TYPE (fntype
) = 1;
16074 /* DECL was originally constructed as a non-static member function,
16075 but turned out to be static. Update it accordingly. */
16078 revert_static_member_fn (tree decl
)
16080 tree stype
= static_fn_type (decl
);
16081 cp_cv_quals quals
= type_memfn_quals (stype
);
16082 cp_ref_qualifier rqual
= type_memfn_rqual (stype
);
16084 if (quals
!= TYPE_UNQUALIFIED
|| rqual
!= REF_QUAL_NONE
)
16085 stype
= apply_memfn_quals (stype
, TYPE_UNQUALIFIED
, REF_QUAL_NONE
);
16087 TREE_TYPE (decl
) = stype
;
16089 if (DECL_ARGUMENTS (decl
))
16090 DECL_ARGUMENTS (decl
) = DECL_CHAIN (DECL_ARGUMENTS (decl
));
16091 DECL_STATIC_FUNCTION_P (decl
) = 1;
16094 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
16095 one of the language-independent trees. */
16097 enum cp_tree_node_structure_enum
16098 cp_tree_node_structure (union lang_tree_node
* t
)
16100 switch (TREE_CODE (&t
->generic
))
16102 case DEFAULT_ARG
: return TS_CP_DEFAULT_ARG
;
16103 case DEFERRED_NOEXCEPT
: return TS_CP_DEFERRED_NOEXCEPT
;
16104 case IDENTIFIER_NODE
: return TS_CP_IDENTIFIER
;
16105 case OVERLOAD
: return TS_CP_OVERLOAD
;
16106 case TEMPLATE_PARM_INDEX
: return TS_CP_TPI
;
16107 case PTRMEM_CST
: return TS_CP_PTRMEM
;
16108 case BASELINK
: return TS_CP_BASELINK
;
16109 case TEMPLATE_DECL
: return TS_CP_TEMPLATE_DECL
;
16110 case STATIC_ASSERT
: return TS_CP_STATIC_ASSERT
;
16111 case ARGUMENT_PACK_SELECT
: return TS_CP_ARGUMENT_PACK_SELECT
;
16112 case TRAIT_EXPR
: return TS_CP_TRAIT_EXPR
;
16113 case LAMBDA_EXPR
: return TS_CP_LAMBDA_EXPR
;
16114 case TEMPLATE_INFO
: return TS_CP_TEMPLATE_INFO
;
16115 case CONSTRAINT_INFO
: return TS_CP_CONSTRAINT_INFO
;
16116 case USERDEF_LITERAL
: return TS_CP_USERDEF_LITERAL
;
16117 default: return TS_CP_GENERIC
;
16121 /* Build the void_list_node (void_type_node having been created). */
16123 build_void_list_node (void)
16125 tree t
= build_tree_list (NULL_TREE
, void_type_node
);
16130 cp_missing_noreturn_ok_p (tree decl
)
16132 /* A missing noreturn is ok for the `main' function. */
16133 return DECL_MAIN_P (decl
);
16136 /* Return the decl used to identify the COMDAT group into which DECL should
16140 cxx_comdat_group (tree decl
)
16142 /* Virtual tables, construction virtual tables, and virtual table
16143 tables all go in a single COMDAT group, named after the primary
16145 if (VAR_P (decl
) && DECL_VTABLE_OR_VTT_P (decl
))
16146 decl
= CLASSTYPE_VTABLES (DECL_CONTEXT (decl
));
16147 /* For all other DECLs, the COMDAT group is the mangled name of the
16148 declaration itself. */
16151 while (DECL_THUNK_P (decl
))
16153 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
16154 into the same section as the target function. In that case
16155 we must return target's name. */
16156 tree target
= THUNK_TARGET (decl
);
16157 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target
)
16158 && DECL_SECTION_NAME (target
) != NULL
16159 && DECL_ONE_ONLY (target
))
16169 /* Returns the return type for FN as written by the user, which may include
16170 a placeholder for a deduced return type. */
16173 fndecl_declared_return_type (tree fn
)
16175 fn
= STRIP_TEMPLATE (fn
);
16176 if (FNDECL_USED_AUTO (fn
))
16178 struct language_function
*f
= NULL
;
16179 if (DECL_STRUCT_FUNCTION (fn
))
16180 f
= DECL_STRUCT_FUNCTION (fn
)->language
;
16182 f
= DECL_SAVED_FUNCTION_DATA (fn
);
16183 return f
->x_auto_return_pattern
;
16185 return TREE_TYPE (TREE_TYPE (fn
));
16188 /* Returns true iff DECL was declared with an auto type and it has
16189 not yet been deduced to a real type. */
16192 undeduced_auto_decl (tree decl
)
16194 if (cxx_dialect
< cxx11
)
16196 return type_uses_auto (TREE_TYPE (decl
));
16199 /* Complain if DECL has an undeduced return type. */
16202 require_deduced_type (tree decl
, tsubst_flags_t complain
)
16204 if (undeduced_auto_decl (decl
))
16206 if (complain
& tf_error
)
16207 error ("use of %qD before deduction of %<auto%>", decl
);
16213 #include "gt-cp-decl.h"