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
)
11494 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
11495 a declarator-id appertains to the entity that is declared. */
11496 *attrlist
= chainon (*attrlist
, declarator
->std_attributes
);
11498 /* Handle parameter packs. */
11499 if (parameter_pack_p
)
11501 if (decl_context
== PARM
)
11502 /* Turn the type into a pack expansion.*/
11503 type
= make_pack_expansion (type
);
11505 error ("non-parameter %qs cannot be a parameter pack", name
);
11508 if ((decl_context
== FIELD
|| decl_context
== PARM
)
11509 && !processing_template_decl
11510 && variably_modified_type_p (type
, NULL_TREE
))
11512 if (decl_context
== FIELD
)
11513 error ("data member may not have variably modified type %qT", type
);
11515 error ("parameter may not have variably modified type %qT", type
);
11516 type
= error_mark_node
;
11519 if (explicitp
== 1 || (explicitp
&& friendp
))
11521 /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
11522 in the declaration of a constructor or conversion function within
11523 a class definition. */
11524 if (!current_class_type
)
11525 error_at (declspecs
->locations
[ds_explicit
],
11526 "%<explicit%> outside class declaration");
11528 error_at (declspecs
->locations
[ds_explicit
],
11529 "%<explicit%> in friend declaration");
11531 error_at (declspecs
->locations
[ds_explicit
],
11532 "only declarations of constructors and conversion operators "
11533 "can be %<explicit%>");
11537 if (storage_class
== sc_mutable
)
11539 if (decl_context
!= FIELD
|| friendp
)
11541 error ("non-member %qs cannot be declared %<mutable%>", name
);
11542 storage_class
= sc_none
;
11544 else if (decl_context
== TYPENAME
|| typedef_p
)
11546 error ("non-object member %qs cannot be declared %<mutable%>", name
);
11547 storage_class
= sc_none
;
11549 else if (TREE_CODE (type
) == FUNCTION_TYPE
11550 || TREE_CODE (type
) == METHOD_TYPE
)
11552 error ("function %qs cannot be declared %<mutable%>", name
);
11553 storage_class
= sc_none
;
11557 error ("static %qs cannot be declared %<mutable%>", name
);
11558 storage_class
= sc_none
;
11560 else if (type_quals
& TYPE_QUAL_CONST
)
11562 error ("const %qs cannot be declared %<mutable%>", name
);
11563 storage_class
= sc_none
;
11565 else if (TREE_CODE (type
) == REFERENCE_TYPE
)
11567 permerror (input_location
, "reference %qs cannot be declared "
11568 "%<mutable%>", name
);
11569 storage_class
= sc_none
;
11573 /* If this is declaring a typedef name, return a TYPE_DECL. */
11574 if (typedef_p
&& decl_context
!= TYPENAME
)
11578 /* This declaration:
11580 typedef void f(int) const;
11582 declares a function type which is not a member of any
11583 particular class, but which is cv-qualified; for
11584 example "f S::*" declares a pointer to a const-qualified
11585 member function of S. We record the cv-qualification in the
11587 if ((rqual
|| memfn_quals
) && TREE_CODE (type
) == FUNCTION_TYPE
)
11589 type
= apply_memfn_quals (type
, memfn_quals
, rqual
);
11591 /* We have now dealt with these qualifiers. */
11592 memfn_quals
= TYPE_UNQUALIFIED
;
11593 rqual
= REF_QUAL_NONE
;
11596 if (type_uses_auto (type
))
11598 error ("typedef declared %<auto%>");
11599 type
= error_mark_node
;
11603 error_at (location_of (reqs
), "requires-clause on typedef");
11605 if (decl_context
== FIELD
)
11606 decl
= build_lang_decl (TYPE_DECL
, unqualified_id
, type
);
11608 decl
= build_decl (input_location
, TYPE_DECL
, unqualified_id
, type
);
11609 if (id_declarator
&& declarator
->u
.id
.qualifying_scope
) {
11610 error_at (DECL_SOURCE_LOCATION (decl
),
11611 "typedef name may not be a nested-name-specifier");
11612 TREE_TYPE (decl
) = error_mark_node
;
11615 if (decl_context
!= FIELD
)
11617 if (!current_function_decl
)
11618 DECL_CONTEXT (decl
) = FROB_CONTEXT (current_namespace
);
11619 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl
)
11620 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
11621 (current_function_decl
)))
11622 /* The TYPE_DECL is "abstract" because there will be
11623 clones of this constructor/destructor, and there will
11624 be copies of this TYPE_DECL generated in those
11625 clones. The decloning optimization (for space) may
11626 revert this subsequently if it determines that
11627 the clones should share a common implementation. */
11628 DECL_ABSTRACT_P (decl
) = true;
11630 else if (current_class_type
11631 && constructor_name_p (unqualified_id
, current_class_type
))
11632 permerror (input_location
, "ISO C++ forbids nested type %qD with same name "
11633 "as enclosing class",
11636 /* If the user declares "typedef struct {...} foo" then the
11637 struct will have an anonymous name. Fill that name in now.
11638 Nothing can refer to it, so nothing needs know about the name
11640 if (type
!= error_mark_node
11642 && TYPE_NAME (type
)
11643 && TREE_CODE (TYPE_NAME (type
)) == TYPE_DECL
11644 && TYPE_UNNAMED_P (type
)
11645 && declspecs
->type_definition_p
11646 && attributes_naming_typedef_ok (*attrlist
)
11647 && cp_type_quals (type
) == TYPE_UNQUALIFIED
)
11648 name_unnamed_type (type
, decl
);
11651 || (typedef_decl
&& C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl
)))
11652 C_TYPEDEF_EXPLICITLY_SIGNED (decl
) = 1;
11654 bad_specifiers (decl
, BSP_TYPE
, virtualp
,
11655 memfn_quals
!= TYPE_UNQUALIFIED
,
11656 inlinep
, friendp
, raises
!= NULL_TREE
);
11658 if (decl_spec_seq_has_spec_p (declspecs
, ds_alias
))
11659 /* Acknowledge that this was written:
11660 `using analias = atype;'. */
11661 TYPE_DECL_ALIAS_P (decl
) = 1;
11666 /* Detect the case of an array type of unspecified size
11667 which came, as such, direct from a typedef name.
11668 We must copy the type, so that the array's domain can be
11669 individually set by the object's initializer. */
11671 if (type
&& typedef_type
11672 && TREE_CODE (type
) == ARRAY_TYPE
&& !TYPE_DOMAIN (type
)
11673 && TYPE_MAIN_VARIANT (type
) == TYPE_MAIN_VARIANT (typedef_type
))
11674 type
= build_cplus_array_type (TREE_TYPE (type
), NULL_TREE
);
11676 /* Detect where we're using a typedef of function type to declare a
11677 function. PARMS will not be set, so we must create it now. */
11679 if (type
== typedef_type
&& TREE_CODE (type
) == FUNCTION_TYPE
)
11681 tree decls
= NULL_TREE
;
11684 for (args
= TYPE_ARG_TYPES (type
);
11685 args
&& args
!= void_list_node
;
11686 args
= TREE_CHAIN (args
))
11688 tree decl
= cp_build_parm_decl (NULL_TREE
, NULL_TREE
,
11689 TREE_VALUE (args
));
11691 DECL_CHAIN (decl
) = decls
;
11695 parms
= nreverse (decls
);
11697 if (decl_context
!= TYPENAME
)
11699 /* The qualifiers on the function type become the qualifiers on
11700 the non-static member function. */
11701 memfn_quals
|= type_memfn_quals (type
);
11702 rqual
= type_memfn_rqual (type
);
11703 type_quals
= TYPE_UNQUALIFIED
;
11707 /* If this is a type name (such as, in a cast or sizeof),
11708 compute the type and return it now. */
11710 if (decl_context
== TYPENAME
)
11712 /* Note that here we don't care about type_quals. */
11714 /* Special case: "friend class foo" looks like a TYPENAME context. */
11719 error ("%<inline%> specified for friend class declaration");
11725 /* Don't allow friend declaration without a class-key. */
11726 if (TREE_CODE (type
) == TEMPLATE_TYPE_PARM
)
11727 permerror (input_location
, "template parameters cannot be friends");
11728 else if (TREE_CODE (type
) == TYPENAME_TYPE
)
11729 permerror (input_location
, "friend declaration requires class-key, "
11730 "i.e. %<friend class %T::%D%>",
11731 TYPE_CONTEXT (type
), TYPENAME_TYPE_FULLNAME (type
));
11733 permerror (input_location
, "friend declaration requires class-key, "
11734 "i.e. %<friend %#T%>",
11738 /* Only try to do this stuff if we didn't already give up. */
11739 if (type
!= integer_type_node
)
11741 /* A friendly class? */
11742 if (current_class_type
)
11743 make_friend_class (current_class_type
, TYPE_MAIN_VARIANT (type
),
11744 /*complain=*/true);
11746 error ("trying to make class %qT a friend of global scope",
11749 type
= void_type_node
;
11752 else if (memfn_quals
|| rqual
)
11754 if (ctype
== NULL_TREE
11755 && TREE_CODE (type
) == METHOD_TYPE
)
11756 ctype
= TYPE_METHOD_BASETYPE (type
);
11759 type
= build_memfn_type (type
, ctype
, memfn_quals
, rqual
);
11760 /* Core issue #547: need to allow this in template type args.
11761 Allow it in general in C++11 for alias-declarations. */
11762 else if ((template_type_arg
|| cxx_dialect
>= cxx11
)
11763 && TREE_CODE (type
) == FUNCTION_TYPE
)
11764 type
= apply_memfn_quals (type
, memfn_quals
, rqual
);
11766 error ("invalid qualifiers on non-member function type");
11770 error_at (location_of (reqs
), "requires-clause on type-id");
11774 else if (unqualified_id
== NULL_TREE
&& decl_context
!= PARM
11775 && decl_context
!= CATCHPARM
11776 && TREE_CODE (type
) != UNION_TYPE
11778 && innermost_code
!= cdk_decomp
)
11780 error ("abstract declarator %qT used as declaration", type
);
11781 return error_mark_node
;
11784 if (!FUNC_OR_METHOD_TYPE_P (type
))
11786 /* Only functions may be declared using an operator-function-id. */
11787 if (dname
&& IDENTIFIER_ANY_OP_P (dname
))
11789 error ("declaration of %qD as non-function", dname
);
11790 return error_mark_node
;
11794 error_at (location_of (reqs
),
11795 "requires-clause on declaration of non-function type %qT",
11799 /* We don't check parameter types here because we can emit a better
11800 error message later. */
11801 if (decl_context
!= PARM
)
11803 type
= check_var_type (unqualified_id
, type
);
11804 if (type
== error_mark_node
)
11805 return error_mark_node
;
11808 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11809 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
11811 if (decl_context
== PARM
|| decl_context
== CATCHPARM
)
11813 if (ctype
|| in_namespace
)
11814 error ("cannot use %<::%> in parameter declaration");
11816 if (type_uses_auto (type
)
11817 && !(cxx_dialect
>= cxx17
&& template_parm_flag
))
11819 if (cxx_dialect
>= cxx14
)
11820 error ("%<auto%> parameter not permitted in this context");
11822 error ("parameter declared %<auto%>");
11823 type
= error_mark_node
;
11826 /* A parameter declared as an array of T is really a pointer to T.
11827 One declared as a function is really a pointer to a function.
11828 One declared as a member is really a pointer to member. */
11830 if (TREE_CODE (type
) == ARRAY_TYPE
)
11832 /* Transfer const-ness of array into that of type pointed to. */
11833 type
= build_pointer_type (TREE_TYPE (type
));
11834 type_quals
= TYPE_UNQUALIFIED
;
11835 array_parameter_p
= true;
11837 else if (TREE_CODE (type
) == FUNCTION_TYPE
)
11838 type
= build_pointer_type (type
);
11841 if (ctype
&& TREE_CODE (type
) == FUNCTION_TYPE
&& staticp
< 2
11842 && !(identifier_p (unqualified_id
)
11843 && IDENTIFIER_NEWDEL_OP_P (unqualified_id
)))
11845 cp_cv_quals real_quals
= memfn_quals
;
11846 if (cxx_dialect
< cxx14
&& constexpr_p
11847 && sfk
!= sfk_constructor
&& sfk
!= sfk_destructor
)
11848 real_quals
|= TYPE_QUAL_CONST
;
11849 type
= build_memfn_type (type
, ctype
, real_quals
, rqual
);
11853 tree decl
= NULL_TREE
;
11855 if (decl_context
== PARM
)
11857 decl
= cp_build_parm_decl (NULL_TREE
, unqualified_id
, type
);
11858 DECL_ARRAY_PARAMETER_P (decl
) = array_parameter_p
;
11860 bad_specifiers (decl
, BSP_PARM
, virtualp
,
11861 memfn_quals
!= TYPE_UNQUALIFIED
,
11862 inlinep
, friendp
, raises
!= NULL_TREE
);
11864 else if (decl_context
== FIELD
)
11866 if (!staticp
&& !friendp
&& TREE_CODE (type
) != METHOD_TYPE
)
11867 if (tree auto_node
= type_uses_auto (type
))
11869 location_t loc
= declspecs
->locations
[ds_type_spec
];
11870 if (CLASS_PLACEHOLDER_TEMPLATE (auto_node
))
11871 error_at (loc
, "invalid use of template-name %qE without an "
11873 CLASS_PLACEHOLDER_TEMPLATE (auto_node
));
11875 error_at (loc
, "non-static data member declared with "
11876 "placeholder %qT", auto_node
);
11877 type
= error_mark_node
;
11880 /* The C99 flexible array extension. */
11881 if (!staticp
&& TREE_CODE (type
) == ARRAY_TYPE
11882 && TYPE_DOMAIN (type
) == NULL_TREE
)
11885 && (TREE_CODE (ctype
) == UNION_TYPE
11886 || TREE_CODE (ctype
) == QUAL_UNION_TYPE
))
11888 error ("flexible array member in union");
11889 type
= error_mark_node
;
11893 /* Array is a flexible member. */
11894 if (in_system_header_at (input_location
))
11895 /* Do not warn on flexible array members in system
11896 headers because glibc uses them. */;
11898 pedwarn (input_location
, OPT_Wpedantic
,
11899 "ISO C++ forbids flexible array member %qs", name
);
11901 pedwarn (input_location
, OPT_Wpedantic
,
11902 "ISO C++ forbids flexible array members");
11904 /* Flexible array member has a null domain. */
11905 type
= build_cplus_array_type (TREE_TYPE (type
), NULL_TREE
);
11909 if (type
== error_mark_node
)
11911 /* Happens when declaring arrays of sizes which
11912 are error_mark_node, for example. */
11915 else if (in_namespace
&& !friendp
)
11917 /* Something like struct S { int N::j; }; */
11918 error ("invalid use of %<::%>");
11919 return error_mark_node
;
11921 else if (TREE_CODE (type
) == FUNCTION_TYPE
11922 || TREE_CODE (type
) == METHOD_TYPE
)
11925 tree function_context
;
11929 /* This should never happen in pure C++ (the check
11930 could be an assert). It could happen in
11931 Objective-C++ if someone writes invalid code that
11932 uses a function declaration for an instance
11933 variable or property (instance variables and
11934 properties are parsed as FIELD_DECLs, but they are
11935 part of an Objective-C class, not a C++ class).
11936 That code is invalid and is caught by this
11940 error ("declaration of function %qD in invalid context",
11942 return error_mark_node
;
11945 /* ``A union may [ ... ] not [ have ] virtual functions.''
11947 if (virtualp
&& TREE_CODE (ctype
) == UNION_TYPE
)
11949 error ("function %qD declared %<virtual%> inside a union",
11951 return error_mark_node
;
11955 && identifier_p (unqualified_id
)
11956 && IDENTIFIER_NEWDEL_OP_P (unqualified_id
))
11958 error ("%qD cannot be declared %<virtual%>, since it "
11959 "is always static", unqualified_id
);
11964 /* Check that the name used for a destructor makes sense. */
11965 if (sfk
== sfk_destructor
)
11967 tree uqname
= id_declarator
->u
.id
.unqualified_name
;
11971 gcc_assert (friendp
);
11972 error ("expected qualified name in friend declaration "
11973 "for destructor %qD", uqname
);
11974 return error_mark_node
;
11977 if (!check_dtor_name (ctype
, TREE_OPERAND (uqname
, 0)))
11979 error ("declaration of %qD as member of %qT",
11981 return error_mark_node
;
11985 error ("a destructor cannot be %<concept%>");
11986 return error_mark_node
;
11990 error ("a destructor cannot be %<constexpr%>");
11991 return error_mark_node
;
11994 else if (sfk
== sfk_constructor
&& friendp
&& !ctype
)
11996 error ("expected qualified name in friend declaration "
11997 "for constructor %qD",
11998 id_declarator
->u
.id
.unqualified_name
);
11999 return error_mark_node
;
12001 if (sfk
== sfk_constructor
)
12004 error ("a constructor cannot be %<concept%>");
12005 return error_mark_node
;
12009 error ("a concept cannot be a member function");
12013 if (TREE_CODE (unqualified_id
) == TEMPLATE_ID_EXPR
)
12015 tree tmpl
= TREE_OPERAND (unqualified_id
, 0);
12016 if (variable_template_p (tmpl
))
12018 error ("specialization of variable template %qD "
12019 "declared as function", tmpl
);
12020 inform (DECL_SOURCE_LOCATION (tmpl
),
12021 "variable template declared here");
12022 return error_mark_node
;
12026 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
12027 function_context
= (ctype
!= NULL_TREE
) ?
12028 decl_function_context (TYPE_MAIN_DECL (ctype
)) : NULL_TREE
;
12029 publicp
= (! friendp
|| ! staticp
)
12030 && function_context
== NULL_TREE
;
12032 if (late_return_type_p
)
12033 TYPE_HAS_LATE_RETURN_TYPE (type
) = 1;
12035 decl
= grokfndecl (ctype
, type
,
12036 TREE_CODE (unqualified_id
) != TEMPLATE_ID_EXPR
12037 ? unqualified_id
: dname
,
12041 virtualp
, flags
, memfn_quals
, rqual
, raises
,
12042 friendp
? -1 : 0, friendp
, publicp
,
12043 inlinep
| (2 * constexpr_p
) | (4 * concept_p
),
12044 initialized
== SD_DELETED
, sfk
,
12045 funcdef_flag
, template_count
, in_namespace
,
12046 attrlist
, declarator
->id_loc
);
12047 decl
= set_virt_specifiers (decl
, virt_specifiers
);
12048 if (decl
== NULL_TREE
)
12049 return error_mark_node
;
12051 /* This clobbers the attrs stored in `decl' from `attrlist'. */
12052 /* The decl and setting of decl_attr is also turned off. */
12053 decl
= build_decl_attribute_variant (decl
, decl_attr
);
12056 /* [class.conv.ctor]
12058 A constructor declared without the function-specifier
12059 explicit that can be called with a single parameter
12060 specifies a conversion from the type of its first
12061 parameter to the type of its class. Such a constructor
12062 is called a converting constructor. */
12063 if (explicitp
== 2)
12064 DECL_NONCONVERTING_P (decl
) = 1;
12066 else if (!staticp
&& !dependent_type_p (type
)
12067 && !COMPLETE_TYPE_P (complete_type (type
))
12068 && (!complete_or_array_type_p (type
)
12069 || initialized
== 0))
12071 if (TREE_CODE (type
) != ARRAY_TYPE
12072 || !COMPLETE_TYPE_P (TREE_TYPE (type
)))
12074 if (unqualified_id
)
12076 error ("field %qD has incomplete type %qT",
12077 unqualified_id
, type
);
12078 cxx_incomplete_type_inform (strip_array_types (type
));
12081 error ("name %qT has incomplete type", type
);
12083 type
= error_mark_node
;
12091 error ("%qE is neither function nor member function; "
12092 "cannot be declared friend", unqualified_id
);
12100 /* Friends are treated specially. */
12101 if (ctype
== current_class_type
)
12102 ; /* We already issued a permerror. */
12103 else if (decl
&& DECL_NAME (decl
))
12105 if (template_class_depth (current_class_type
) == 0)
12107 decl
= check_explicit_specialization
12108 (unqualified_id
, decl
, template_count
,
12109 2 * funcdef_flag
+ 4);
12110 if (decl
== error_mark_node
)
12111 return error_mark_node
;
12114 decl
= do_friend (ctype
, unqualified_id
, decl
,
12120 return error_mark_node
;
12123 /* Structure field. It may not be a function, except for C++. */
12125 if (decl
== NULL_TREE
)
12129 /* C++ allows static class members. All other work
12130 for this is done by grokfield. */
12131 decl
= build_lang_decl_loc (declarator
12132 ? declarator
->id_loc
12134 VAR_DECL
, unqualified_id
, type
);
12135 set_linkage_for_static_data_member (decl
);
12137 error ("static data member %qE declared %<concept%>",
12139 else if (constexpr_p
&& !initialized
)
12141 error ("%<constexpr%> static data member %qD must have an "
12142 "initializer", decl
);
12143 constexpr_p
= false;
12147 mark_inline_variable (decl
);
12149 if (!DECL_VAR_DECLARED_INLINE_P (decl
)
12150 && !(cxx_dialect
>= cxx17
&& constexpr_p
))
12151 /* Even if there is an in-class initialization, DECL
12152 is considered undefined until an out-of-class
12153 definition is provided, unless this is an inline
12155 DECL_EXTERNAL (decl
) = 1;
12159 CP_DECL_THREAD_LOCAL_P (decl
) = true;
12160 if (!processing_template_decl
)
12161 set_decl_tls_model (decl
, decl_default_tls_model (decl
));
12162 if (declspecs
->gnu_thread_keyword_p
)
12163 SET_DECL_GNU_TLS_P (decl
);
12169 error ("non-static data member %qE declared %<concept%>",
12171 else if (constexpr_p
)
12173 error ("non-static data member %qE declared %<constexpr%>",
12175 constexpr_p
= false;
12177 decl
= build_decl (input_location
,
12178 FIELD_DECL
, unqualified_id
, type
);
12179 DECL_NONADDRESSABLE_P (decl
) = bitfield
;
12180 if (bitfield
&& !unqualified_id
)
12182 TREE_NO_WARNING (decl
) = 1;
12183 DECL_PADDING_P (decl
) = 1;
12186 if (storage_class
== sc_mutable
)
12188 DECL_MUTABLE_P (decl
) = 1;
12189 storage_class
= sc_none
;
12194 /* An attempt is being made to initialize a non-static
12195 member. This is new in C++11. */
12196 maybe_warn_cpp0x (CPP0X_NSDMI
);
12198 /* If this has been parsed with static storage class, but
12199 errors forced staticp to be cleared, ensure NSDMI is
12201 if (declspecs
->storage_class
== sc_static
)
12202 DECL_INITIAL (decl
) = error_mark_node
;
12206 bad_specifiers (decl
, BSP_FIELD
, virtualp
,
12207 memfn_quals
!= TYPE_UNQUALIFIED
,
12208 staticp
? false : inlinep
, friendp
,
12209 raises
!= NULL_TREE
);
12212 else if (TREE_CODE (type
) == FUNCTION_TYPE
12213 || TREE_CODE (type
) == METHOD_TYPE
)
12215 tree original_name
;
12218 if (!unqualified_id
)
12219 return error_mark_node
;
12221 if (TREE_CODE (unqualified_id
) == TEMPLATE_ID_EXPR
)
12222 original_name
= dname
;
12224 original_name
= unqualified_id
;
12225 // FIXME:gcc_assert (original_name == dname);
12227 if (storage_class
== sc_auto
)
12228 error ("storage class %<auto%> invalid for function %qs", name
);
12229 else if (storage_class
== sc_register
)
12230 error ("storage class %<register%> invalid for function %qs", name
);
12233 if (declspecs
->gnu_thread_keyword_p
)
12234 error ("storage class %<__thread%> invalid for function %qs",
12237 error ("storage class %<thread_local%> invalid for function %qs",
12241 if (virt_specifiers
)
12242 error ("virt-specifiers in %qs not allowed outside a class definition", name
);
12243 /* Function declaration not at top level.
12244 Storage classes other than `extern' are not allowed
12245 and `extern' makes no difference. */
12246 if (! toplevel_bindings_p ()
12247 && (storage_class
== sc_static
12248 || decl_spec_seq_has_spec_p (declspecs
, ds_inline
))
12251 if (storage_class
== sc_static
)
12252 pedwarn (input_location
, OPT_Wpedantic
,
12253 "%<static%> specifier invalid for function %qs "
12254 "declared out of global scope", name
);
12256 pedwarn (input_location
, OPT_Wpedantic
,
12257 "%<inline%> specifier invalid for function %qs "
12258 "declared out of global scope", name
);
12261 if (ctype
== NULL_TREE
)
12265 error ("virtual non-class function %qs", name
);
12268 else if (sfk
== sfk_constructor
12269 || sfk
== sfk_destructor
)
12271 error (funcdef_flag
12272 ? G_("%qs defined in a non-class scope")
12273 : G_("%qs declared in a non-class scope"), name
);
12278 /* Record whether the function is public. */
12279 publicp
= (ctype
!= NULL_TREE
12280 || storage_class
!= sc_static
);
12282 if (late_return_type_p
)
12283 TYPE_HAS_LATE_RETURN_TYPE (type
) = 1;
12285 decl
= grokfndecl (ctype
, type
, original_name
, parms
, unqualified_id
,
12286 reqs
, virtualp
, flags
, memfn_quals
, rqual
, raises
,
12289 inlinep
| (2 * constexpr_p
) | (4 * concept_p
),
12290 initialized
== SD_DELETED
,
12293 template_count
, in_namespace
, attrlist
,
12294 declarator
->id_loc
);
12295 if (decl
== NULL_TREE
)
12296 return error_mark_node
;
12298 if (explicitp
== 2)
12299 DECL_NONCONVERTING_P (decl
) = 1;
12302 int invalid_static
= 0;
12304 /* Don't allow a static member function in a class, and forbid
12305 declaring main to be static. */
12306 if (TREE_CODE (type
) == METHOD_TYPE
)
12308 permerror (input_location
, "cannot declare member function %qD to have "
12309 "static linkage", decl
);
12310 invalid_static
= 1;
12312 else if (current_function_decl
)
12314 /* 7.1.1: There can be no static function declarations within a
12316 error ("cannot declare static function inside another function");
12317 invalid_static
= 1;
12320 if (invalid_static
)
12323 storage_class
= sc_none
;
12329 /* It's a variable. */
12331 /* An uninitialized decl with `extern' is a reference. */
12332 decl
= grokvardecl (type
, dname
, unqualified_id
,
12339 ctype
? ctype
: in_namespace
);
12340 if (decl
== NULL_TREE
)
12341 return error_mark_node
;
12343 bad_specifiers (decl
, BSP_VAR
, virtualp
,
12344 memfn_quals
!= TYPE_UNQUALIFIED
,
12345 inlinep
, friendp
, raises
!= NULL_TREE
);
12349 DECL_CONTEXT (decl
) = ctype
;
12352 permerror (input_location
, "%<static%> may not be used when defining "
12353 "(as opposed to declaring) a static data member");
12355 storage_class
= sc_none
;
12357 if (storage_class
== sc_register
&& TREE_STATIC (decl
))
12359 error ("static member %qD declared %<register%>", decl
);
12360 storage_class
= sc_none
;
12362 if (storage_class
== sc_extern
&& pedantic
)
12364 pedwarn (input_location
, OPT_Wpedantic
,
12365 "cannot explicitly declare member %q#D to have "
12366 "extern linkage", decl
);
12367 storage_class
= sc_none
;
12370 else if (constexpr_p
&& DECL_EXTERNAL (decl
))
12372 error ("declaration of %<constexpr%> variable %qD "
12373 "is not a definition", decl
);
12374 constexpr_p
= false;
12378 mark_inline_variable (decl
);
12379 if (innermost_code
== cdk_decomp
)
12381 gcc_assert (declarator
&& declarator
->kind
== cdk_decomp
);
12382 DECL_SOURCE_LOCATION (decl
) = declarator
->id_loc
;
12383 DECL_ARTIFICIAL (decl
) = 1;
12384 fit_decomposition_lang_decl (decl
, NULL_TREE
);
12388 if (VAR_P (decl
) && !initialized
)
12389 if (tree auto_node
= type_uses_auto (type
))
12390 if (!CLASS_PLACEHOLDER_TEMPLATE (auto_node
))
12392 location_t loc
= declspecs
->locations
[ds_type_spec
];
12393 error_at (loc
, "declaration of %q#D has no initializer", decl
);
12394 TREE_TYPE (decl
) = error_mark_node
;
12397 if (storage_class
== sc_extern
&& initialized
&& !funcdef_flag
)
12399 if (toplevel_bindings_p ())
12401 /* It's common practice (and completely valid) to have a const
12402 be initialized and declared extern. */
12403 if (!(type_quals
& TYPE_QUAL_CONST
))
12404 warning (0, "%qs initialized and declared %<extern%>", name
);
12408 error ("%qs has both %<extern%> and initializer", name
);
12409 return error_mark_node
;
12413 /* Record `register' declaration for warnings on &
12414 and in case doing stupid register allocation. */
12416 if (storage_class
== sc_register
)
12418 DECL_REGISTER (decl
) = 1;
12419 /* Warn about register storage specifiers on PARM_DECLs. */
12420 if (TREE_CODE (decl
) == PARM_DECL
)
12422 if (cxx_dialect
>= cxx17
)
12423 pedwarn (DECL_SOURCE_LOCATION (decl
), OPT_Wregister
,
12424 "ISO C++17 does not allow %<register%> storage "
12425 "class specifier");
12427 warning_at (DECL_SOURCE_LOCATION (decl
), OPT_Wregister
,
12428 "%<register%> storage class specifier used");
12431 else if (storage_class
== sc_extern
)
12432 DECL_THIS_EXTERN (decl
) = 1;
12433 else if (storage_class
== sc_static
)
12434 DECL_THIS_STATIC (decl
) = 1;
12436 /* Set constexpr flag on vars (functions got it in grokfndecl). */
12437 if (constexpr_p
&& VAR_P (decl
))
12438 DECL_DECLARED_CONSTEXPR_P (decl
) = true;
12440 /* Record constancy and volatility on the DECL itself . There's
12441 no need to do this when processing a template; we'll do this
12442 for the instantiated declaration based on the type of DECL. */
12443 if (!processing_template_decl
)
12444 cp_apply_type_quals_to_decl (type_quals
, decl
);
12450 /* Subroutine of start_function. Ensure that each of the parameter
12451 types (as listed in PARMS) is complete, as is required for a
12452 function definition. */
12455 require_complete_types_for_parms (tree parms
)
12457 for (; parms
; parms
= DECL_CHAIN (parms
))
12459 if (dependent_type_p (TREE_TYPE (parms
)))
12461 if (!VOID_TYPE_P (TREE_TYPE (parms
))
12462 && complete_type_or_else (TREE_TYPE (parms
), parms
))
12464 relayout_decl (parms
);
12465 DECL_ARG_TYPE (parms
) = type_passed_as (TREE_TYPE (parms
));
12467 maybe_warn_parm_abi (TREE_TYPE (parms
),
12468 DECL_SOURCE_LOCATION (parms
));
12471 /* grokparms or complete_type_or_else will have already issued
12473 TREE_TYPE (parms
) = error_mark_node
;
12477 /* Returns nonzero if T is a local variable. */
12480 local_variable_p (const_tree t
)
12483 /* A VAR_DECL with a context that is a _TYPE is a static data
12485 && !TYPE_P (CP_DECL_CONTEXT (t
))
12486 /* Any other non-local variable must be at namespace scope. */
12487 && !DECL_NAMESPACE_SCOPE_P (t
))
12488 || (TREE_CODE (t
) == PARM_DECL
))
12494 /* Like local_variable_p, but suitable for use as a tree-walking
12498 local_variable_p_walkfn (tree
*tp
, int *walk_subtrees
,
12501 if (local_variable_p (*tp
)
12502 && (!DECL_ARTIFICIAL (*tp
) || DECL_NAME (*tp
) == this_identifier
))
12504 else if (TYPE_P (*tp
))
12505 *walk_subtrees
= 0;
12510 /* Check that ARG, which is a default-argument expression for a
12511 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
12512 something goes wrong. DECL may also be a _TYPE node, rather than a
12513 DECL, if there is no DECL available. */
12516 check_default_argument (tree decl
, tree arg
, tsubst_flags_t complain
)
12521 if (TREE_CODE (arg
) == DEFAULT_ARG
)
12522 /* We get a DEFAULT_ARG when looking at an in-class declaration
12523 with a default argument. Ignore the argument for now; we'll
12524 deal with it after the class is complete. */
12533 decl_type
= TREE_TYPE (decl
);
12535 if (arg
== error_mark_node
12536 || decl
== error_mark_node
12537 || TREE_TYPE (arg
) == error_mark_node
12538 || decl_type
== error_mark_node
)
12539 /* Something already went wrong. There's no need to check
12541 return error_mark_node
;
12543 /* [dcl.fct.default]
12545 A default argument expression is implicitly converted to the
12547 ++cp_unevaluated_operand
;
12548 perform_implicit_conversion_flags (decl_type
, arg
, complain
,
12550 --cp_unevaluated_operand
;
12552 /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
12554 if (TYPE_PTR_OR_PTRMEM_P (decl_type
)
12555 && null_ptr_cst_p (arg
))
12556 return nullptr_node
;
12558 /* [dcl.fct.default]
12560 Local variables shall not be used in default argument
12563 The keyword `this' shall not be used in a default argument of a
12564 member function. */
12565 var
= cp_walk_tree_without_duplicates (&arg
, local_variable_p_walkfn
, NULL
);
12568 if (complain
& tf_warning_or_error
)
12570 if (DECL_NAME (var
) == this_identifier
)
12571 permerror (input_location
, "default argument %qE uses %qD",
12574 error ("default argument %qE uses local variable %qD", arg
, var
);
12576 return error_mark_node
;
12583 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
12586 type_is_deprecated (tree type
)
12588 enum tree_code code
;
12589 if (TREE_DEPRECATED (type
))
12591 if (TYPE_NAME (type
))
12593 if (TREE_DEPRECATED (TYPE_NAME (type
)))
12599 /* Do warn about using typedefs to a deprecated class. */
12600 if (OVERLOAD_TYPE_P (type
) && type
!= TYPE_MAIN_VARIANT (type
))
12601 return type_is_deprecated (TYPE_MAIN_VARIANT (type
));
12603 code
= TREE_CODE (type
);
12605 if (code
== POINTER_TYPE
|| code
== REFERENCE_TYPE
12606 || code
== OFFSET_TYPE
|| code
== FUNCTION_TYPE
12607 || code
== METHOD_TYPE
|| code
== ARRAY_TYPE
)
12608 return type_is_deprecated (TREE_TYPE (type
));
12610 if (TYPE_PTRMEMFUNC_P (type
))
12611 return type_is_deprecated
12612 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type
))));
12617 /* Decode the list of parameter types for a function type.
12618 Given the list of things declared inside the parens,
12619 return a list of types.
12621 If this parameter does not end with an ellipsis, we append
12624 *PARMS is set to the chain of PARM_DECLs created. */
12627 grokparms (tree parmlist
, tree
*parms
)
12629 tree result
= NULL_TREE
;
12630 tree decls
= NULL_TREE
;
12634 for (parm
= parmlist
; parm
!= NULL_TREE
; parm
= TREE_CHAIN (parm
))
12636 tree type
= NULL_TREE
;
12637 tree init
= TREE_PURPOSE (parm
);
12638 tree decl
= TREE_VALUE (parm
);
12640 if (parm
== void_list_node
)
12643 if (! decl
|| TREE_TYPE (decl
) == error_mark_node
)
12646 type
= TREE_TYPE (decl
);
12647 if (VOID_TYPE_P (type
))
12649 if (same_type_p (type
, void_type_node
)
12651 && !DECL_NAME (decl
) && !result
12652 && TREE_CHAIN (parm
) == void_list_node
)
12653 /* DR 577: A parameter list consisting of a single
12654 unnamed parameter of non-dependent type 'void'. */
12656 else if (cv_qualified_p (type
))
12657 error_at (DECL_SOURCE_LOCATION (decl
),
12658 "invalid use of cv-qualified type %qT in "
12659 "parameter declaration", type
);
12661 error_at (DECL_SOURCE_LOCATION (decl
),
12662 "invalid use of type %<void%> in parameter "
12664 /* It's not a good idea to actually create parameters of
12665 type `void'; other parts of the compiler assume that a
12666 void type terminates the parameter list. */
12667 type
= error_mark_node
;
12668 TREE_TYPE (decl
) = error_mark_node
;
12671 if (type
!= error_mark_node
)
12673 if (deprecated_state
!= DEPRECATED_SUPPRESS
)
12675 tree deptype
= type_is_deprecated (type
);
12677 warn_deprecated_use (deptype
, NULL_TREE
);
12680 /* Top-level qualifiers on the parameters are
12681 ignored for function types. */
12682 type
= cp_build_qualified_type (type
, 0);
12683 if (TREE_CODE (type
) == METHOD_TYPE
)
12685 error ("parameter %qD invalidly declared method type", decl
);
12686 type
= build_pointer_type (type
);
12687 TREE_TYPE (decl
) = type
;
12689 else if (abstract_virtuals_error (decl
, type
))
12690 any_error
= 1; /* Seems like a good idea. */
12691 else if (cxx_dialect
< cxx17
&& POINTER_TYPE_P (type
))
12693 /* Before C++17 DR 393:
12694 [dcl.fct]/6, parameter types cannot contain pointers
12695 (references) to arrays of unknown bound. */
12696 tree t
= TREE_TYPE (type
);
12697 int ptr
= TYPE_PTR_P (type
);
12701 if (TYPE_PTR_P (t
))
12703 else if (TREE_CODE (t
) != ARRAY_TYPE
)
12705 else if (!TYPE_DOMAIN (t
))
12709 if (TREE_CODE (t
) == ARRAY_TYPE
)
12710 pedwarn (DECL_SOURCE_LOCATION (decl
), OPT_Wpedantic
,
12712 ? G_("parameter %qD includes pointer to array of "
12713 "unknown bound %qT")
12714 : G_("parameter %qD includes reference to array of "
12715 "unknown bound %qT"),
12721 else if (init
&& !processing_template_decl
)
12722 init
= check_default_argument (decl
, init
, tf_warning_or_error
);
12725 DECL_CHAIN (decl
) = decls
;
12727 result
= tree_cons (init
, type
, result
);
12729 decls
= nreverse (decls
);
12730 result
= nreverse (result
);
12732 result
= chainon (result
, void_list_node
);
12739 /* D is a constructor or overloaded `operator='.
12741 Let T be the class in which D is declared. Then, this function
12744 -1 if D's is an ill-formed constructor or copy assignment operator
12745 whose first parameter is of type `T'.
12746 0 if D is not a copy constructor or copy assignment
12748 1 if D is a copy constructor or copy assignment operator whose
12749 first parameter is a reference to non-const qualified T.
12750 2 if D is a copy constructor or copy assignment operator whose
12751 first parameter is a reference to const qualified T.
12753 This function can be used as a predicate. Positive values indicate
12754 a copy constructor and nonzero values indicate a copy assignment
12758 copy_fn_p (const_tree d
)
12764 gcc_assert (DECL_FUNCTION_MEMBER_P (d
));
12766 if (TREE_CODE (d
) == TEMPLATE_DECL
12767 || (DECL_TEMPLATE_INFO (d
)
12768 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d
))))
12769 /* Instantiations of template member functions are never copy
12770 functions. Note that member functions of templated classes are
12771 represented as template functions internally, and we must
12772 accept those as copy functions. */
12775 args
= FUNCTION_FIRST_USER_PARMTYPE (d
);
12779 arg_type
= TREE_VALUE (args
);
12780 if (arg_type
== error_mark_node
)
12783 if (TYPE_MAIN_VARIANT (arg_type
) == DECL_CONTEXT (d
))
12785 /* Pass by value copy assignment operator. */
12788 else if (TREE_CODE (arg_type
) == REFERENCE_TYPE
12789 && !TYPE_REF_IS_RVALUE (arg_type
)
12790 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type
)) == DECL_CONTEXT (d
))
12792 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type
)))
12798 args
= TREE_CHAIN (args
);
12800 if (args
&& args
!= void_list_node
&& !TREE_PURPOSE (args
))
12801 /* There are more non-optional args. */
12807 /* D is a constructor or overloaded `operator='.
12809 Let T be the class in which D is declared. Then, this function
12810 returns true when D is a move constructor or move assignment
12811 operator, false otherwise. */
12814 move_fn_p (const_tree d
)
12816 gcc_assert (DECL_FUNCTION_MEMBER_P (d
));
12818 if (cxx_dialect
== cxx98
)
12819 /* There are no move constructors if we are in C++98 mode. */
12822 if (TREE_CODE (d
) == TEMPLATE_DECL
12823 || (DECL_TEMPLATE_INFO (d
)
12824 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d
))))
12825 /* Instantiations of template member functions are never move
12826 functions. Note that member functions of templated classes are
12827 represented as template functions internally, and we must
12828 accept those as move functions. */
12831 return move_signature_fn_p (d
);
12834 /* D is a constructor or overloaded `operator='.
12836 Then, this function returns true when D has the same signature as a move
12837 constructor or move assignment operator (because either it is such a
12838 ctor/op= or it is a template specialization with the same signature),
12839 false otherwise. */
12842 move_signature_fn_p (const_tree d
)
12846 bool result
= false;
12848 args
= FUNCTION_FIRST_USER_PARMTYPE (d
);
12852 arg_type
= TREE_VALUE (args
);
12853 if (arg_type
== error_mark_node
)
12856 if (TREE_CODE (arg_type
) == REFERENCE_TYPE
12857 && TYPE_REF_IS_RVALUE (arg_type
)
12858 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type
)),
12862 args
= TREE_CHAIN (args
);
12864 if (args
&& args
!= void_list_node
&& !TREE_PURPOSE (args
))
12865 /* There are more non-optional args. */
12871 /* Remember any special properties of member function DECL. */
12874 grok_special_member_properties (tree decl
)
12878 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl
))
12881 class_type
= DECL_CONTEXT (decl
);
12882 if (IDENTIFIER_CTOR_P (DECL_NAME (decl
)))
12884 int ctor
= copy_fn_p (decl
);
12886 if (!DECL_ARTIFICIAL (decl
))
12887 TYPE_HAS_USER_CONSTRUCTOR (class_type
) = 1;
12893 A non-template constructor for class X is a copy
12894 constructor if its first parameter is of type X&, const
12895 X&, volatile X& or const volatile X&, and either there
12896 are no other parameters or else all other parameters have
12897 default arguments. */
12898 TYPE_HAS_COPY_CTOR (class_type
) = 1;
12899 if (user_provided_p (decl
))
12900 TYPE_HAS_COMPLEX_COPY_CTOR (class_type
) = 1;
12902 TYPE_HAS_CONST_COPY_CTOR (class_type
) = 1;
12904 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl
)))
12905 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type
) = 1;
12906 else if (move_fn_p (decl
) && user_provided_p (decl
))
12907 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type
) = 1;
12908 else if (is_list_ctor (decl
))
12909 TYPE_HAS_LIST_CTOR (class_type
) = 1;
12911 if (DECL_DECLARED_CONSTEXPR_P (decl
)
12912 && !ctor
&& !move_fn_p (decl
))
12913 TYPE_HAS_CONSTEXPR_CTOR (class_type
) = 1;
12915 else if (DECL_NAME (decl
) == assign_op_identifier
)
12919 A non-template assignment operator for class X is a copy
12920 assignment operator if its parameter is of type X, X&, const
12921 X&, volatile X& or const volatile X&. */
12923 int assop
= copy_fn_p (decl
);
12927 TYPE_HAS_COPY_ASSIGN (class_type
) = 1;
12928 if (user_provided_p (decl
))
12929 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type
) = 1;
12931 TYPE_HAS_CONST_COPY_ASSIGN (class_type
) = 1;
12933 else if (move_fn_p (decl
) && user_provided_p (decl
))
12934 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type
) = 1;
12936 else if (IDENTIFIER_CONV_OP_P (DECL_NAME (decl
)))
12937 TYPE_HAS_CONVERSION (class_type
) = true;
12939 /* Destructors are handled in check_methods. */
12942 /* Check a constructor DECL has the correct form. Complains
12943 if the class has a constructor of the form X(X). */
12946 grok_ctor_properties (const_tree ctype
, const_tree decl
)
12948 int ctor_parm
= copy_fn_p (decl
);
12954 A declaration of a constructor for a class X is ill-formed if
12955 its first parameter is of type (optionally cv-qualified) X
12956 and either there are no other parameters or else all other
12957 parameters have default arguments.
12959 We *don't* complain about member template instantiations that
12960 have this form, though; they can occur as we try to decide
12961 what constructor to use during overload resolution. Since
12962 overload resolution will never prefer such a constructor to
12963 the non-template copy constructor (which is either explicitly
12964 or implicitly defined), there's no need to worry about their
12965 existence. Theoretically, they should never even be
12966 instantiated, but that's hard to forestall. */
12967 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
12975 /* DECL is a declaration for an overloaded or conversion operator. If
12976 COMPLAIN is true, errors are issued for invalid declarations. */
12979 grok_op_properties (tree decl
, bool complain
)
12981 tree argtypes
= TYPE_ARG_TYPES (TREE_TYPE (decl
));
12982 bool methodp
= TREE_CODE (TREE_TYPE (decl
)) == METHOD_TYPE
;
12983 tree name
= DECL_NAME (decl
);
12985 tree class_type
= DECL_CONTEXT (decl
);
12986 if (class_type
&& !CLASS_TYPE_P (class_type
))
12987 class_type
= NULL_TREE
;
12989 tree_code operator_code
;
12991 if (IDENTIFIER_CONV_OP_P (name
))
12993 /* Conversion operators are TYPE_EXPR for the purposes of this
12995 operator_code
= TYPE_EXPR
;
12996 op_flags
= OVL_OP_FLAG_UNARY
;
13000 const ovl_op_info_t
*ovl_op
= IDENTIFIER_OVL_OP_INFO (name
);
13002 operator_code
= ovl_op
->tree_code
;
13003 op_flags
= ovl_op
->flags
;
13004 gcc_checking_assert (operator_code
!= ERROR_MARK
);
13005 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl
) = ovl_op
->ovl_op_code
;
13008 if (op_flags
& OVL_OP_FLAG_ALLOC
)
13010 /* operator new and operator delete are quite special. */
13014 case OVL_OP_FLAG_ALLOC
:
13015 TYPE_HAS_NEW_OPERATOR (class_type
) = 1;
13018 case OVL_OP_FLAG_ALLOC
| OVL_OP_FLAG_DELETE
:
13019 TYPE_GETS_DELETE (class_type
) |= 1;
13022 case OVL_OP_FLAG_ALLOC
| OVL_OP_FLAG_VEC
:
13023 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type
) = 1;
13026 case OVL_OP_FLAG_ALLOC
| OVL_OP_FLAG_DELETE
| OVL_OP_FLAG_VEC
:
13027 TYPE_GETS_DELETE (class_type
) |= 2;
13031 gcc_unreachable ();
13034 /* [basic.std.dynamic.allocation]/1:
13036 A program is ill-formed if an allocation function is declared
13037 in a namespace scope other than global scope or declared
13038 static in global scope.
13040 The same also holds true for deallocation functions. */
13041 if (DECL_NAMESPACE_SCOPE_P (decl
))
13043 if (CP_DECL_CONTEXT (decl
) != global_namespace
)
13045 error ("%qD may not be declared within a namespace", decl
);
13049 if (!TREE_PUBLIC (decl
))
13051 error ("%qD may not be declared as static", decl
);
13056 if (op_flags
& OVL_OP_FLAG_DELETE
)
13057 TREE_TYPE (decl
) = coerce_delete_type (TREE_TYPE (decl
));
13060 DECL_IS_OPERATOR_NEW (decl
) = 1;
13061 TREE_TYPE (decl
) = coerce_new_type (TREE_TYPE (decl
));
13067 /* An operator function must either be a non-static member function
13068 or have at least one parameter of a class, a reference to a class,
13069 an enumeration, or a reference to an enumeration. 13.4.0.6 */
13070 if (! methodp
|| DECL_STATIC_FUNCTION_P (decl
))
13072 if (operator_code
== TYPE_EXPR
13073 || operator_code
== CALL_EXPR
13074 || operator_code
== COMPONENT_REF
13075 || operator_code
== ARRAY_REF
13076 || operator_code
== NOP_EXPR
)
13078 error ("%qD must be a nonstatic member function", decl
);
13082 if (DECL_STATIC_FUNCTION_P (decl
))
13084 error ("%qD must be either a non-static member "
13085 "function or a non-member function", decl
);
13089 for (tree arg
= argtypes
; ; arg
= TREE_CHAIN (arg
))
13091 if (!arg
|| arg
== void_list_node
)
13094 error ("%qD must have an argument of class or "
13095 "enumerated type", decl
);
13099 tree type
= non_reference (TREE_VALUE (arg
));
13100 if (type
== error_mark_node
)
13103 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
13104 because these checks are performed even on template
13106 if (MAYBE_CLASS_TYPE_P (type
)
13107 || TREE_CODE (type
) == ENUMERAL_TYPE
)
13112 if (operator_code
== CALL_EXPR
)
13113 /* There are no further restrictions on the arguments to an overloaded
13117 if (operator_code
== COND_EXPR
)
13120 error ("ISO C++ prohibits overloading operator ?:");
13124 /* Count the number of arguments and check for ellipsis. */
13126 for (tree arg
= argtypes
; arg
!= void_list_node
; arg
= TREE_CHAIN (arg
))
13131 error ("%qD must not have variable number of arguments", decl
);
13137 /* Verify correct number of arguments. */
13140 case OVL_OP_FLAG_AMBIARY
:
13143 /* We have a unary instance of an ambi-ary op. Remap to the
13145 unsigned alt
= ovl_op_alternate
[ovl_op_mapping
[operator_code
]];
13146 const ovl_op_info_t
*ovl_op
= &ovl_op_info
[false][alt
];
13147 gcc_checking_assert (ovl_op
->flags
== OVL_OP_FLAG_UNARY
);
13148 operator_code
= ovl_op
->tree_code
;
13149 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl
) = ovl_op
->ovl_op_code
;
13151 else if (arity
!= 2)
13153 /* This was an ambiguous operator but is invalid. */
13155 ? G_("%qD must have either zero or one argument")
13156 : G_("%qD must have either one or two arguments"), decl
);
13159 else if ((operator_code
== POSTINCREMENT_EXPR
13160 || operator_code
== POSTDECREMENT_EXPR
)
13161 && ! processing_template_decl
13162 /* x++ and x--'s second argument must be an int. */
13163 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes
)),
13164 integer_type_node
))
13167 ? G_("postfix %qD must have %<int%> as its argument")
13168 : G_("postfix %qD must have %<int%> as its second argument"),
13174 case OVL_OP_FLAG_UNARY
:
13178 ? G_("%qD must have no arguments")
13179 : G_("%qD must have exactly one argument"), decl
);
13184 case OVL_OP_FLAG_BINARY
:
13188 ? G_("%qD must have exactly one argument")
13189 : G_("%qD must have exactly two arguments"), decl
);
13195 gcc_unreachable ();
13198 /* There can be no default arguments. */
13199 for (tree arg
= argtypes
; arg
!= void_list_node
; arg
= TREE_CHAIN (arg
))
13200 if (TREE_PURPOSE (arg
))
13202 TREE_PURPOSE (arg
) = NULL_TREE
;
13203 if (operator_code
== POSTINCREMENT_EXPR
13204 || operator_code
== POSTDECREMENT_EXPR
)
13205 pedwarn (input_location
, OPT_Wpedantic
,
13206 "%qD cannot have default arguments", decl
);
13209 error ("%qD cannot have default arguments", decl
);
13214 /* At this point the declaration is well-formed. It may not be
13215 sensible though. */
13217 /* Check member function warnings only on the in-class declaration.
13218 There's no point warning on an out-of-class definition. */
13219 if (class_type
&& class_type
!= current_class_type
)
13222 /* Warn about conversion operators that will never be used. */
13223 if (IDENTIFIER_CONV_OP_P (name
)
13224 && ! DECL_TEMPLATE_INFO (decl
)
13225 && warn_conversion
)
13227 tree t
= TREE_TYPE (name
);
13228 int ref
= (TREE_CODE (t
) == REFERENCE_TYPE
);
13231 t
= TYPE_MAIN_VARIANT (TREE_TYPE (t
));
13233 if (VOID_TYPE_P (t
))
13234 warning (OPT_Wconversion
,
13236 ? G_("conversion to a reference to void "
13237 "will never use a type conversion operator")
13238 : G_("conversion to void "
13239 "will never use a type conversion operator"));
13240 else if (class_type
)
13242 if (t
== class_type
)
13243 warning (OPT_Wconversion
,
13245 ? G_("conversion to a reference to the same type "
13246 "will never use a type conversion operator")
13247 : G_("conversion to the same type "
13248 "will never use a type conversion operator"));
13249 /* Don't force t to be complete here. */
13250 else if (MAYBE_CLASS_TYPE_P (t
)
13251 && COMPLETE_TYPE_P (t
)
13252 && DERIVED_FROM_P (t
, class_type
))
13253 warning (OPT_Wconversion
,
13255 ? G_("conversion to a reference to a base class "
13256 "will never use a type conversion operator")
13257 : G_("conversion to a base class "
13258 "will never use a type conversion operator"));
13265 /* Effective C++ rules below. */
13267 /* More Effective C++ rule 7. */
13268 if (operator_code
== TRUTH_ANDIF_EXPR
13269 || operator_code
== TRUTH_ORIF_EXPR
13270 || operator_code
== COMPOUND_EXPR
)
13271 warning (OPT_Weffc__
,
13272 "user-defined %qD always evaluates both arguments", decl
);
13274 /* More Effective C++ rule 6. */
13275 if (operator_code
== POSTINCREMENT_EXPR
13276 || operator_code
== POSTDECREMENT_EXPR
13277 || operator_code
== PREINCREMENT_EXPR
13278 || operator_code
== PREDECREMENT_EXPR
)
13280 tree arg
= TREE_VALUE (argtypes
);
13281 tree ret
= TREE_TYPE (TREE_TYPE (decl
));
13282 if (methodp
|| TREE_CODE (arg
) == REFERENCE_TYPE
)
13283 arg
= TREE_TYPE (arg
);
13284 arg
= TYPE_MAIN_VARIANT (arg
);
13286 if (operator_code
== PREINCREMENT_EXPR
13287 || operator_code
== PREDECREMENT_EXPR
)
13289 if (TREE_CODE (ret
) != REFERENCE_TYPE
13290 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret
)), arg
))
13291 warning (OPT_Weffc__
, "prefix %qD should return %qT", decl
,
13292 build_reference_type (arg
));
13296 if (!same_type_p (TYPE_MAIN_VARIANT (ret
), arg
))
13297 warning (OPT_Weffc__
, "postfix %qD should return %qT", decl
, arg
);
13301 /* Effective C++ rule 23. */
13302 if (!DECL_ASSIGNMENT_OPERATOR_P (decl
)
13303 && (operator_code
== PLUS_EXPR
13304 || operator_code
== MINUS_EXPR
13305 || operator_code
== TRUNC_DIV_EXPR
13306 || operator_code
== MULT_EXPR
13307 || operator_code
== TRUNC_MOD_EXPR
)
13308 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl
))) == REFERENCE_TYPE
)
13309 warning (OPT_Weffc__
, "%qD should return by value", decl
);
13314 /* Return a string giving the keyword associate with CODE. */
13316 static const char *
13317 tag_name (enum tag_types code
)
13329 case typename_type
:
13332 gcc_unreachable ();
13336 /* Name lookup in an elaborated-type-specifier (after the keyword
13337 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
13338 elaborated-type-specifier is invalid, issue a diagnostic and return
13339 error_mark_node; otherwise, return the *_TYPE to which it referred.
13340 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
13343 check_elaborated_type_specifier (enum tag_types tag_code
,
13345 bool allow_template_p
)
13351 struct S { struct S *p; };
13353 name lookup will find the TYPE_DECL for the implicit "S::S"
13354 typedef. Adjust for that here. */
13355 if (DECL_SELF_REFERENCE_P (decl
))
13356 decl
= TYPE_NAME (TREE_TYPE (decl
));
13358 type
= TREE_TYPE (decl
);
13360 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
13361 is false for this case as well. */
13362 if (TREE_CODE (type
) == TEMPLATE_TYPE_PARM
)
13364 error ("using template type parameter %qT after %qs",
13365 type
, tag_name (tag_code
));
13366 return error_mark_node
;
13368 /* Accept template template parameters. */
13369 else if (allow_template_p
13370 && (TREE_CODE (type
) == BOUND_TEMPLATE_TEMPLATE_PARM
13371 || TREE_CODE (type
) == TEMPLATE_TEMPLATE_PARM
))
13375 If the identifier resolves to a typedef-name or the
13376 simple-template-id resolves to an alias template
13377 specialization, the elaborated-type-specifier is ill-formed.
13379 In other words, the only legitimate declaration to use in the
13380 elaborated type specifier is the implicit typedef created when
13381 the type is declared. */
13382 else if (!DECL_IMPLICIT_TYPEDEF_P (decl
)
13383 && !DECL_SELF_REFERENCE_P (decl
)
13384 && tag_code
!= typename_type
)
13386 if (alias_template_specialization_p (type
))
13387 error ("using alias template specialization %qT after %qs",
13388 type
, tag_name (tag_code
));
13390 error ("using typedef-name %qD after %qs", decl
, tag_name (tag_code
));
13391 inform (DECL_SOURCE_LOCATION (decl
),
13392 "%qD has a previous declaration here", decl
);
13393 return error_mark_node
;
13395 else if (TREE_CODE (type
) != RECORD_TYPE
13396 && TREE_CODE (type
) != UNION_TYPE
13397 && tag_code
!= enum_type
13398 && tag_code
!= typename_type
)
13400 error ("%qT referred to as %qs", type
, tag_name (tag_code
));
13401 inform (location_of (type
), "%qT has a previous declaration here", type
);
13402 return error_mark_node
;
13404 else if (TREE_CODE (type
) != ENUMERAL_TYPE
13405 && tag_code
== enum_type
)
13407 error ("%qT referred to as enum", type
);
13408 inform (location_of (type
), "%qT has a previous declaration here", type
);
13409 return error_mark_node
;
13411 else if (!allow_template_p
13412 && TREE_CODE (type
) == RECORD_TYPE
13413 && CLASSTYPE_IS_TEMPLATE (type
))
13415 /* If a class template appears as elaborated type specifier
13416 without a template header such as:
13418 template <class T> class C {};
13419 void f(class C); // No template header here
13421 then the required template argument is missing. */
13422 error ("template argument required for %<%s %T%>",
13423 tag_name (tag_code
),
13424 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type
)));
13425 return error_mark_node
;
13431 /* Lookup NAME in elaborate type specifier in scope according to
13432 SCOPE and issue diagnostics if necessary.
13433 Return *_TYPE node upon success, NULL_TREE when the NAME is not
13434 found, and ERROR_MARK_NODE for type error. */
13437 lookup_and_check_tag (enum tag_types tag_code
, tree name
,
13438 tag_scope scope
, bool template_header_p
)
13442 if (scope
== ts_global
)
13444 /* First try ordinary name lookup, ignoring hidden class name
13445 injected via friend declaration. */
13446 decl
= lookup_name_prefer_type (name
, 2);
13447 decl
= strip_using_decl (decl
);
13448 /* If that fails, the name will be placed in the smallest
13449 non-class, non-function-prototype scope according to 3.3.1/5.
13450 We may already have a hidden name declared as friend in this
13451 scope. So lookup again but not ignoring hidden names.
13452 If we find one, that name will be made visible rather than
13453 creating a new tag. */
13455 decl
= lookup_type_scope (name
, ts_within_enclosing_non_class
);
13458 decl
= lookup_type_scope (name
, scope
);
13461 && (DECL_CLASS_TEMPLATE_P (decl
)
13462 /* If scope is ts_current we're defining a class, so ignore a
13463 template template parameter. */
13464 || (scope
!= ts_current
13465 && DECL_TEMPLATE_TEMPLATE_PARM_P (decl
))))
13466 decl
= DECL_TEMPLATE_RESULT (decl
);
13468 if (decl
&& TREE_CODE (decl
) == TYPE_DECL
)
13470 /* Look for invalid nested type:
13474 if (scope
== ts_current
&& DECL_SELF_REFERENCE_P (decl
))
13476 error ("%qD has the same name as the class in which it is "
13479 return error_mark_node
;
13482 /* Two cases we need to consider when deciding if a class
13483 template is allowed as an elaborated type specifier:
13484 1. It is a self reference to its own class.
13485 2. It comes with a template header.
13489 template <class T> class C {
13490 class C *c1; // DECL_SELF_REFERENCE_P is true
13493 template <class U> class C; // template_header_p is true
13494 template <class T> class C<T>::D {
13495 class C *c2; // DECL_SELF_REFERENCE_P is true
13498 t
= check_elaborated_type_specifier (tag_code
,
13501 | DECL_SELF_REFERENCE_P (decl
));
13502 if (template_header_p
&& t
&& CLASS_TYPE_P (t
)
13503 && (!CLASSTYPE_TEMPLATE_INFO (t
)
13504 || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t
)))))
13506 error ("%qT is not a template", t
);
13507 inform (location_of (t
), "previous declaration here");
13508 if (TYPE_CLASS_SCOPE_P (t
)
13509 && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t
)))
13510 inform (input_location
,
13511 "perhaps you want to explicitly add %<%T::%>",
13513 t
= error_mark_node
;
13518 else if (decl
&& TREE_CODE (decl
) == TREE_LIST
)
13520 error ("reference to %qD is ambiguous", name
);
13521 print_candidates (decl
);
13522 return error_mark_node
;
13528 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
13529 Define the tag as a forward-reference if it is not defined.
13531 If a declaration is given, process it here, and report an error if
13532 multiple declarations are not identical.
13534 SCOPE is TS_CURRENT when this is also a definition. Only look in
13535 the current frame for the name (since C++ allows new names in any
13536 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
13537 declaration. Only look beginning from the current scope outward up
13538 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
13540 TEMPLATE_HEADER_P is true when this declaration is preceded by
13541 a set of template parameters. */
13544 xref_tag_1 (enum tag_types tag_code
, tree name
,
13545 tag_scope scope
, bool template_header_p
)
13547 enum tree_code code
;
13548 tree context
= NULL_TREE
;
13550 gcc_assert (identifier_p (name
));
13556 code
= RECORD_TYPE
;
13562 code
= ENUMERAL_TYPE
;
13565 gcc_unreachable ();
13568 /* In case of anonymous name, xref_tag is only called to
13569 make type node and push name. Name lookup is not required. */
13570 tree t
= NULL_TREE
;
13571 if (scope
!= ts_lambda
&& !anon_aggrname_p (name
))
13572 t
= lookup_and_check_tag (tag_code
, name
, scope
, template_header_p
);
13574 if (t
== error_mark_node
)
13575 return error_mark_node
;
13577 if (scope
!= ts_current
&& t
&& current_class_type
13578 && template_class_depth (current_class_type
)
13579 && template_header_p
)
13581 if (TREE_CODE (t
) == TEMPLATE_TEMPLATE_PARM
)
13584 /* Since SCOPE is not TS_CURRENT, we are not looking at a
13585 definition of this tag. Since, in addition, we are currently
13586 processing a (member) template declaration of a template
13587 class, we must be very careful; consider:
13589 template <class X> struct S1
13591 template <class U> struct S2
13593 template <class V> friend struct S1;
13596 Here, the S2::S1 declaration should not be confused with the
13597 outer declaration. In particular, the inner version should
13598 have a template parameter of level 2, not level 1.
13600 On the other hand, when presented with:
13602 template <class T> struct S1
13604 template <class U> struct S2 {};
13605 template <class U> friend struct S2;
13608 the friend must find S1::S2 eventually. We accomplish this
13609 by making sure that the new type we create to represent this
13610 declaration has the right TYPE_CONTEXT. */
13611 context
= TYPE_CONTEXT (t
);
13617 /* If no such tag is yet defined, create a forward-reference node
13618 and record it as the "definition".
13619 When a real declaration of this type is found,
13620 the forward-reference will be altered into a real type. */
13621 if (code
== ENUMERAL_TYPE
)
13623 error ("use of enum %q#D without previous declaration", name
);
13624 return error_mark_node
;
13628 t
= make_class_type (code
);
13629 TYPE_CONTEXT (t
) = context
;
13630 if (scope
== ts_lambda
)
13632 /* Mark it as a lambda type. */
13633 CLASSTYPE_LAMBDA_EXPR (t
) = error_mark_node
;
13634 /* And push it into current scope. */
13635 scope
= ts_current
;
13637 t
= pushtag (name
, t
, scope
);
13642 if (template_header_p
&& MAYBE_CLASS_TYPE_P (t
))
13644 /* Check that we aren't trying to overload a class with different
13646 tree constr
= NULL_TREE
;
13647 if (current_template_parms
)
13649 tree reqs
= TEMPLATE_PARMS_CONSTRAINTS (current_template_parms
);
13650 constr
= build_constraints (reqs
, NULL_TREE
);
13652 if (!redeclare_class_template (t
, current_template_parms
, constr
))
13653 return error_mark_node
;
13655 else if (!processing_template_decl
13656 && CLASS_TYPE_P (t
)
13657 && CLASSTYPE_IS_TEMPLATE (t
))
13659 error ("redeclaration of %qT as a non-template", t
);
13660 inform (location_of (t
), "previous declaration %qD", t
);
13661 return error_mark_node
;
13664 if (scope
!= ts_within_enclosing_non_class
&& TYPE_HIDDEN_P (t
))
13666 /* This is no longer an invisible friend. Make it
13668 tree decl
= TYPE_NAME (t
);
13670 DECL_ANTICIPATED (decl
) = false;
13671 DECL_FRIEND_P (decl
) = false;
13673 if (TYPE_TEMPLATE_INFO (t
))
13675 tree tmpl
= TYPE_TI_TEMPLATE (t
);
13676 DECL_ANTICIPATED (tmpl
) = false;
13677 DECL_FRIEND_P (tmpl
) = false;
13685 /* Wrapper for xref_tag_1. */
13688 xref_tag (enum tag_types tag_code
, tree name
,
13689 tag_scope scope
, bool template_header_p
)
13693 subtime
= timevar_cond_start (TV_NAME_LOOKUP
);
13694 ret
= xref_tag_1 (tag_code
, name
, scope
, template_header_p
);
13695 timevar_cond_stop (TV_NAME_LOOKUP
, subtime
);
13701 xref_tag_from_type (tree old
, tree id
, tag_scope scope
)
13703 enum tag_types tag_kind
;
13705 if (TREE_CODE (old
) == RECORD_TYPE
)
13706 tag_kind
= (CLASSTYPE_DECLARED_CLASS (old
) ? class_type
: record_type
);
13708 tag_kind
= union_type
;
13710 if (id
== NULL_TREE
)
13711 id
= TYPE_IDENTIFIER (old
);
13713 return xref_tag (tag_kind
, id
, scope
, false);
13716 /* Create the binfo hierarchy for REF with (possibly NULL) base list
13717 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
13718 access_* node, and the TREE_VALUE is the type of the base-class.
13719 Non-NULL TREE_TYPE indicates virtual inheritance. */
13722 xref_basetypes (tree ref
, tree base_list
)
13725 tree binfo
, base_binfo
;
13726 unsigned max_vbases
= 0; /* Maximum direct & indirect virtual bases. */
13727 unsigned max_bases
= 0; /* Maximum direct bases. */
13728 unsigned max_dvbases
= 0; /* Maximum direct virtual bases. */
13730 tree default_access
;
13731 tree igo_prev
; /* Track Inheritance Graph Order. */
13733 if (ref
== error_mark_node
)
13736 /* The base of a derived class is private by default, all others are
13738 default_access
= (TREE_CODE (ref
) == RECORD_TYPE
13739 && CLASSTYPE_DECLARED_CLASS (ref
)
13740 ? access_private_node
: access_public_node
);
13742 /* First, make sure that any templates in base-classes are
13743 instantiated. This ensures that if we call ourselves recursively
13744 we do not get confused about which classes are marked and which
13746 basep
= &base_list
;
13749 tree basetype
= TREE_VALUE (*basep
);
13751 /* The dependent_type_p call below should really be dependent_scope_p
13752 so that we give a hard error about using an incomplete type as a
13753 base, but we allow it with a pedwarn for backward
13755 if (processing_template_decl
13756 && CLASS_TYPE_P (basetype
) && TYPE_BEING_DEFINED (basetype
))
13757 cxx_incomplete_type_diagnostic (NULL_TREE
, basetype
, DK_PEDWARN
);
13758 if (!dependent_type_p (basetype
)
13759 && !complete_type_or_else (basetype
, NULL
))
13760 /* An incomplete type. Remove it from the list. */
13761 *basep
= TREE_CHAIN (*basep
);
13765 if (TREE_TYPE (*basep
))
13767 if (CLASS_TYPE_P (basetype
))
13768 max_vbases
+= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype
));
13769 basep
= &TREE_CHAIN (*basep
);
13772 max_vbases
+= max_dvbases
;
13774 TYPE_MARKED_P (ref
) = 1;
13776 /* The binfo slot should be empty, unless this is an (ill-formed)
13778 gcc_assert (!TYPE_BINFO (ref
) || TYPE_SIZE (ref
));
13780 gcc_assert (TYPE_MAIN_VARIANT (ref
) == ref
);
13782 binfo
= make_tree_binfo (max_bases
);
13784 TYPE_BINFO (ref
) = binfo
;
13785 BINFO_OFFSET (binfo
) = size_zero_node
;
13786 BINFO_TYPE (binfo
) = ref
;
13788 /* Apply base-class info set up to the variants of this type. */
13789 fixup_type_variants (ref
);
13793 vec_alloc (BINFO_BASE_ACCESSES (binfo
), max_bases
);
13794 /* A C++98 POD cannot have base classes. */
13795 CLASSTYPE_NON_LAYOUT_POD_P (ref
) = true;
13797 if (TREE_CODE (ref
) == UNION_TYPE
)
13798 error ("derived union %qT invalid", ref
);
13802 warning (OPT_Wmultiple_inheritance
,
13803 "%qT defined with multiple direct bases", ref
);
13807 /* An aggregate can't have virtual base classes. */
13808 CLASSTYPE_NON_AGGREGATE (ref
) = true;
13810 vec_alloc (CLASSTYPE_VBASECLASSES (ref
), max_vbases
);
13813 warning (OPT_Wvirtual_inheritance
,
13814 "%qT defined with direct virtual base", ref
);
13817 for (igo_prev
= binfo
; base_list
; base_list
= TREE_CHAIN (base_list
))
13819 tree access
= TREE_PURPOSE (base_list
);
13820 int via_virtual
= TREE_TYPE (base_list
) != NULL_TREE
;
13821 tree basetype
= TREE_VALUE (base_list
);
13823 if (access
== access_default_node
)
13824 access
= default_access
;
13826 /* Before C++17, an aggregate cannot have base classes. In C++17, an
13827 aggregate can't have virtual, private, or protected base classes. */
13828 if (cxx_dialect
< cxx17
13829 || access
!= access_public_node
13831 CLASSTYPE_NON_AGGREGATE (ref
) = true;
13833 if (PACK_EXPANSION_P (basetype
))
13834 basetype
= PACK_EXPANSION_PATTERN (basetype
);
13835 if (TREE_CODE (basetype
) == TYPE_DECL
)
13836 basetype
= TREE_TYPE (basetype
);
13837 if (!MAYBE_CLASS_TYPE_P (basetype
) || TREE_CODE (basetype
) == UNION_TYPE
)
13839 error ("base type %qT fails to be a struct or class type",
13844 base_binfo
= NULL_TREE
;
13845 if (CLASS_TYPE_P (basetype
) && !dependent_scope_p (basetype
))
13847 base_binfo
= TYPE_BINFO (basetype
);
13848 /* The original basetype could have been a typedef'd type. */
13849 basetype
= BINFO_TYPE (base_binfo
);
13851 /* Inherit flags from the base. */
13852 TYPE_HAS_NEW_OPERATOR (ref
)
13853 |= TYPE_HAS_NEW_OPERATOR (basetype
);
13854 TYPE_HAS_ARRAY_NEW_OPERATOR (ref
)
13855 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype
);
13856 TYPE_GETS_DELETE (ref
) |= TYPE_GETS_DELETE (basetype
);
13857 TYPE_HAS_CONVERSION (ref
) |= TYPE_HAS_CONVERSION (basetype
);
13858 CLASSTYPE_DIAMOND_SHAPED_P (ref
)
13859 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype
);
13860 CLASSTYPE_REPEATED_BASE_P (ref
)
13861 |= CLASSTYPE_REPEATED_BASE_P (basetype
);
13864 /* We must do this test after we've seen through a typedef
13866 if (TYPE_MARKED_P (basetype
))
13868 if (basetype
== ref
)
13869 error ("recursive type %qT undefined", basetype
);
13871 error ("duplicate base type %qT invalid", basetype
);
13875 if (PACK_EXPANSION_P (TREE_VALUE (base_list
)))
13876 /* Regenerate the pack expansion for the bases. */
13877 basetype
= make_pack_expansion (basetype
);
13879 TYPE_MARKED_P (basetype
) = 1;
13881 base_binfo
= copy_binfo (base_binfo
, basetype
, ref
,
13882 &igo_prev
, via_virtual
);
13883 if (!BINFO_INHERITANCE_CHAIN (base_binfo
))
13884 BINFO_INHERITANCE_CHAIN (base_binfo
) = binfo
;
13886 BINFO_BASE_APPEND (binfo
, base_binfo
);
13887 BINFO_BASE_ACCESS_APPEND (binfo
, access
);
13891 /* Update max_vbases to reflect the reality that we are dropping
13892 this base: if it reaches zero we want to undo the vec_alloc
13893 above to avoid inconsistencies during error-recovery: eg, in
13894 build_special_member_call, CLASSTYPE_VBASECLASSES non null
13895 and vtt null (c++/27952). */
13898 if (CLASS_TYPE_P (basetype
))
13900 -= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype
));
13903 if (CLASSTYPE_VBASECLASSES (ref
)
13904 && max_vbases
== 0)
13905 vec_free (CLASSTYPE_VBASECLASSES (ref
));
13907 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref
)) < max_vbases
)
13908 /* If we didn't get max_vbases vbases, we must have shared at
13909 least one of them, and are therefore diamond shaped. */
13910 CLASSTYPE_DIAMOND_SHAPED_P (ref
) = 1;
13912 /* Unmark all the types. */
13913 for (i
= 0; BINFO_BASE_ITERATE (binfo
, i
, base_binfo
); i
++)
13914 TYPE_MARKED_P (BINFO_TYPE (base_binfo
)) = 0;
13915 TYPE_MARKED_P (ref
) = 0;
13917 /* Now see if we have a repeated base type. */
13918 if (!CLASSTYPE_REPEATED_BASE_P (ref
))
13920 for (base_binfo
= binfo
; base_binfo
;
13921 base_binfo
= TREE_CHAIN (base_binfo
))
13923 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo
)))
13925 CLASSTYPE_REPEATED_BASE_P (ref
) = 1;
13928 TYPE_MARKED_P (BINFO_TYPE (base_binfo
)) = 1;
13930 for (base_binfo
= binfo
; base_binfo
;
13931 base_binfo
= TREE_CHAIN (base_binfo
))
13932 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo
)))
13933 TYPE_MARKED_P (BINFO_TYPE (base_binfo
)) = 0;
13940 /* Copies the enum-related properties from type SRC to type DST.
13941 Used with the underlying type of an enum and the enum itself. */
13943 copy_type_enum (tree dst
, tree src
)
13946 for (t
= dst
; t
; t
= TYPE_NEXT_VARIANT (t
))
13948 TYPE_MIN_VALUE (t
) = TYPE_MIN_VALUE (src
);
13949 TYPE_MAX_VALUE (t
) = TYPE_MAX_VALUE (src
);
13950 TYPE_SIZE (t
) = TYPE_SIZE (src
);
13951 TYPE_SIZE_UNIT (t
) = TYPE_SIZE_UNIT (src
);
13952 SET_TYPE_MODE (dst
, TYPE_MODE (src
));
13953 TYPE_PRECISION (t
) = TYPE_PRECISION (src
);
13954 unsigned valign
= TYPE_ALIGN (src
);
13955 if (TYPE_USER_ALIGN (t
))
13956 valign
= MAX (valign
, TYPE_ALIGN (t
));
13958 TYPE_USER_ALIGN (t
) = TYPE_USER_ALIGN (src
);
13959 SET_TYPE_ALIGN (t
, valign
);
13960 TYPE_UNSIGNED (t
) = TYPE_UNSIGNED (src
);
13964 /* Begin compiling the definition of an enumeration type.
13967 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
13969 UNDERLYING_TYPE is the type that will be used as the storage for
13970 the enumeration type. This should be NULL_TREE if no storage type
13973 ATTRIBUTES are any attributes specified after the enum-key.
13975 SCOPED_ENUM_P is true if this is a scoped enumeration type.
13977 if IS_NEW is not NULL, gets TRUE iff a new type is created.
13979 Returns the type object, as yet incomplete.
13980 Also records info about it so that build_enumerator
13981 may be used to declare the individual values as they are read. */
13984 start_enum (tree name
, tree enumtype
, tree underlying_type
,
13985 tree attributes
, bool scoped_enum_p
, bool *is_new
)
13987 tree prevtype
= NULL_TREE
;
13988 gcc_assert (identifier_p (name
));
13992 /* [C++0x dcl.enum]p5:
13994 If not explicitly specified, the underlying type of a scoped
13995 enumeration type is int. */
13996 if (!underlying_type
&& scoped_enum_p
)
13997 underlying_type
= integer_type_node
;
13999 if (underlying_type
)
14000 underlying_type
= cv_unqualified (underlying_type
);
14002 /* If this is the real definition for a previous forward reference,
14003 fill in the contents in the same object that used to be the
14004 forward reference. */
14006 enumtype
= lookup_and_check_tag (enum_type
, name
,
14007 /*tag_scope=*/ts_current
,
14008 /*template_header_p=*/false);
14010 /* In case of a template_decl, the only check that should be deferred
14011 to instantiation time is the comparison of underlying types. */
14012 if (enumtype
&& TREE_CODE (enumtype
) == ENUMERAL_TYPE
)
14014 if (scoped_enum_p
!= SCOPED_ENUM_P (enumtype
))
14016 error_at (input_location
, "scoped/unscoped mismatch "
14017 "in enum %q#T", enumtype
);
14018 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype
)),
14019 "previous definition here");
14020 enumtype
= error_mark_node
;
14022 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype
) != !! underlying_type
)
14024 error_at (input_location
, "underlying type mismatch "
14025 "in enum %q#T", enumtype
);
14026 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype
)),
14027 "previous definition here");
14028 enumtype
= error_mark_node
;
14030 else if (underlying_type
&& ENUM_UNDERLYING_TYPE (enumtype
)
14031 && !dependent_type_p (underlying_type
)
14032 && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype
))
14033 && !same_type_p (underlying_type
,
14034 ENUM_UNDERLYING_TYPE (enumtype
)))
14036 error_at (input_location
, "different underlying type "
14037 "in enum %q#T", enumtype
);
14038 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype
)),
14039 "previous definition here");
14040 underlying_type
= NULL_TREE
;
14044 if (!enumtype
|| TREE_CODE (enumtype
) != ENUMERAL_TYPE
14045 || processing_template_decl
)
14047 /* In case of error, make a dummy enum to allow parsing to
14049 if (enumtype
== error_mark_node
)
14051 name
= make_anon_name ();
14052 enumtype
= NULL_TREE
;
14055 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
14056 of an opaque enum, or an opaque enum of an already defined
14057 enumeration (C++0x only).
14058 In any other case, it'll be NULL_TREE. */
14064 prevtype
= enumtype
;
14066 /* Do not push the decl more than once, unless we need to
14067 compare underlying types at instantiation time */
14069 || TREE_CODE (enumtype
) != ENUMERAL_TYPE
14070 || (underlying_type
14071 && dependent_type_p (underlying_type
))
14072 || (ENUM_UNDERLYING_TYPE (enumtype
)
14073 && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype
))))
14075 enumtype
= cxx_make_type (ENUMERAL_TYPE
);
14076 enumtype
= pushtag (name
, enumtype
, /*tag_scope=*/ts_current
);
14078 /* std::byte aliases anything. */
14079 if (enumtype
!= error_mark_node
14080 && TYPE_CONTEXT (enumtype
) == std_node
14081 && !strcmp ("byte", TYPE_NAME_STRING (enumtype
)))
14082 TYPE_ALIAS_SET (enumtype
) = 0;
14085 enumtype
= xref_tag (enum_type
, name
, /*tag_scope=*/ts_current
,
14088 if (enumtype
== error_mark_node
)
14089 return error_mark_node
;
14091 /* The enum is considered opaque until the opening '{' of the
14092 enumerator list. */
14093 SET_OPAQUE_ENUM_P (enumtype
, true);
14094 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype
) = !! underlying_type
;
14097 SET_SCOPED_ENUM_P (enumtype
, scoped_enum_p
);
14099 cplus_decl_attributes (&enumtype
, attributes
, (int)ATTR_FLAG_TYPE_IN_PLACE
);
14101 if (underlying_type
)
14103 if (ENUM_UNDERLYING_TYPE (enumtype
))
14104 /* We already checked that it matches, don't change it to a different
14105 typedef variant. */;
14106 else if (CP_INTEGRAL_TYPE_P (underlying_type
))
14108 copy_type_enum (enumtype
, underlying_type
);
14109 ENUM_UNDERLYING_TYPE (enumtype
) = underlying_type
;
14111 else if (dependent_type_p (underlying_type
))
14112 ENUM_UNDERLYING_TYPE (enumtype
) = underlying_type
;
14114 error ("underlying type %qT of %qT must be an integral type",
14115 underlying_type
, enumtype
);
14118 /* If into a template class, the returned enum is always the first
14119 declaration (opaque or not) seen. This way all the references to
14120 this type will be to the same declaration. The following ones are used
14121 only to check for definition errors. */
14122 if (prevtype
&& processing_template_decl
)
14128 /* After processing and defining all the values of an enumeration type,
14129 install their decls in the enumeration type.
14130 ENUMTYPE is the type object. */
14133 finish_enum_value_list (tree enumtype
)
14136 tree underlying_type
;
14139 tree minnode
, maxnode
;
14142 bool fixed_underlying_type_p
14143 = ENUM_UNDERLYING_TYPE (enumtype
) != NULL_TREE
;
14145 /* We built up the VALUES in reverse order. */
14146 TYPE_VALUES (enumtype
) = nreverse (TYPE_VALUES (enumtype
));
14148 /* For an enum defined in a template, just set the type of the values;
14149 all further processing is postponed until the template is
14150 instantiated. We need to set the type so that tsubst of a CONST_DECL
14152 if (processing_template_decl
)
14154 for (values
= TYPE_VALUES (enumtype
);
14156 values
= TREE_CHAIN (values
))
14157 TREE_TYPE (TREE_VALUE (values
)) = enumtype
;
14161 /* Determine the minimum and maximum values of the enumerators. */
14162 if (TYPE_VALUES (enumtype
))
14164 minnode
= maxnode
= NULL_TREE
;
14166 for (values
= TYPE_VALUES (enumtype
);
14168 values
= TREE_CHAIN (values
))
14170 decl
= TREE_VALUE (values
);
14172 /* [dcl.enum]: Following the closing brace of an enum-specifier,
14173 each enumerator has the type of its enumeration. Prior to the
14174 closing brace, the type of each enumerator is the type of its
14175 initializing value. */
14176 TREE_TYPE (decl
) = enumtype
;
14178 /* Update the minimum and maximum values, if appropriate. */
14179 value
= DECL_INITIAL (decl
);
14180 if (value
== error_mark_node
)
14181 value
= integer_zero_node
;
14182 /* Figure out what the minimum and maximum values of the
14183 enumerators are. */
14185 minnode
= maxnode
= value
;
14186 else if (tree_int_cst_lt (maxnode
, value
))
14188 else if (tree_int_cst_lt (value
, minnode
))
14195 If the enumerator-list is empty, the underlying type is as if
14196 the enumeration had a single enumerator with value 0. */
14197 minnode
= maxnode
= integer_zero_node
;
14199 if (!fixed_underlying_type_p
)
14201 /* Compute the number of bits require to represent all values of the
14202 enumeration. We must do this before the type of MINNODE and
14203 MAXNODE are transformed, since tree_int_cst_min_precision relies
14204 on the TREE_TYPE of the value it is passed. */
14205 signop sgn
= tree_int_cst_sgn (minnode
) >= 0 ? UNSIGNED
: SIGNED
;
14206 int lowprec
= tree_int_cst_min_precision (minnode
, sgn
);
14207 int highprec
= tree_int_cst_min_precision (maxnode
, sgn
);
14208 int precision
= MAX (lowprec
, highprec
);
14210 bool use_short_enum
;
14212 /* Determine the underlying type of the enumeration.
14216 The underlying type of an enumeration is an integral type that
14217 can represent all the enumerator values defined in the
14218 enumeration. It is implementation-defined which integral type is
14219 used as the underlying type for an enumeration except that the
14220 underlying type shall not be larger than int unless the value of
14221 an enumerator cannot fit in an int or unsigned int.
14223 We use "int" or an "unsigned int" as the underlying type, even if
14224 a smaller integral type would work, unless the user has
14225 explicitly requested that we use the smallest possible type. The
14226 user can request that for all enumerations with a command line
14227 flag, or for just one enumeration with an attribute. */
14229 use_short_enum
= flag_short_enums
14230 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype
));
14232 /* If the precision of the type was specified with an attribute and it
14233 was too small, give an error. Otherwise, use it. */
14234 if (TYPE_PRECISION (enumtype
))
14236 if (precision
> TYPE_PRECISION (enumtype
))
14237 error ("specified mode too small for enumeral values");
14240 use_short_enum
= true;
14241 precision
= TYPE_PRECISION (enumtype
);
14245 for (itk
= (use_short_enum
? itk_char
: itk_int
);
14249 underlying_type
= integer_types
[itk
];
14250 if (underlying_type
!= NULL_TREE
14251 && TYPE_PRECISION (underlying_type
) >= precision
14252 && TYPE_SIGN (underlying_type
) == sgn
)
14255 if (itk
== itk_none
)
14259 IF no integral type can represent all the enumerator values, the
14260 enumeration is ill-formed. */
14261 error ("no integral type can represent all of the enumerator values "
14262 "for %qT", enumtype
);
14263 precision
= TYPE_PRECISION (long_long_integer_type_node
);
14264 underlying_type
= integer_types
[itk_unsigned_long_long
];
14269 The value of sizeof() applied to an enumeration type, an object
14270 of an enumeration type, or an enumerator, is the value of sizeof()
14271 applied to the underlying type. */
14272 copy_type_enum (enumtype
, underlying_type
);
14274 /* Compute the minimum and maximum values for the type.
14278 For an enumeration where emin is the smallest enumerator and emax
14279 is the largest, the values of the enumeration are the values of the
14280 underlying type in the range bmin to bmax, where bmin and bmax are,
14281 respectively, the smallest and largest values of the smallest bit-
14282 field that can store emin and emax. */
14284 /* The middle-end currently assumes that types with TYPE_PRECISION
14285 narrower than their underlying type are suitably zero or sign
14286 extended to fill their mode. Similarly, it assumes that the front
14287 end assures that a value of a particular type must be within
14288 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
14290 We used to set these fields based on bmin and bmax, but that led
14291 to invalid assumptions like optimizing away bounds checking. So
14292 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
14293 TYPE_MAX_VALUE to the values for the mode above and only restrict
14294 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
14295 ENUM_UNDERLYING_TYPE (enumtype
)
14296 = build_distinct_type_copy (underlying_type
);
14297 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype
)) = precision
;
14298 set_min_and_max_values_for_integral_type
14299 (ENUM_UNDERLYING_TYPE (enumtype
), precision
, sgn
);
14301 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
14302 if (flag_strict_enums
)
14303 set_min_and_max_values_for_integral_type (enumtype
, precision
, sgn
);
14306 underlying_type
= ENUM_UNDERLYING_TYPE (enumtype
);
14308 /* Convert each of the enumerators to the type of the underlying
14309 type of the enumeration. */
14310 for (values
= TYPE_VALUES (enumtype
); values
; values
= TREE_CHAIN (values
))
14312 location_t saved_location
;
14314 decl
= TREE_VALUE (values
);
14315 saved_location
= input_location
;
14316 input_location
= DECL_SOURCE_LOCATION (decl
);
14317 if (fixed_underlying_type_p
)
14318 /* If the enumeration type has a fixed underlying type, we
14319 already checked all of the enumerator values. */
14320 value
= DECL_INITIAL (decl
);
14322 value
= perform_implicit_conversion (underlying_type
,
14323 DECL_INITIAL (decl
),
14324 tf_warning_or_error
);
14325 input_location
= saved_location
;
14327 /* Do not clobber shared ints. */
14328 if (value
!= error_mark_node
)
14330 value
= copy_node (value
);
14332 TREE_TYPE (value
) = enumtype
;
14334 DECL_INITIAL (decl
) = value
;
14337 /* Fix up all variant types of this enum type. */
14338 for (t
= TYPE_MAIN_VARIANT (enumtype
); t
; t
= TYPE_NEXT_VARIANT (t
))
14339 TYPE_VALUES (t
) = TYPE_VALUES (enumtype
);
14341 if (at_class_scope_p ()
14342 && COMPLETE_TYPE_P (current_class_type
)
14343 && UNSCOPED_ENUM_P (enumtype
))
14345 insert_late_enum_def_bindings (current_class_type
, enumtype
);
14346 /* TYPE_FIELDS needs fixup. */
14347 fixup_type_variants (current_class_type
);
14350 /* Finish debugging output for this type. */
14351 rest_of_type_compilation (enumtype
, namespace_bindings_p ());
14353 /* Each enumerator now has the type of its enumeration. Clear the cache
14354 so that this change in types doesn't confuse us later on. */
14355 clear_cv_and_fold_caches ();
14358 /* Finishes the enum type. This is called only the first time an
14359 enumeration is seen, be it opaque or odinary.
14360 ENUMTYPE is the type object. */
14363 finish_enum (tree enumtype
)
14365 if (processing_template_decl
)
14367 if (at_function_scope_p ())
14368 add_stmt (build_min (TAG_DEFN
, enumtype
));
14372 /* If this is a forward declaration, there should not be any variants,
14373 though we can get a variant in the middle of an enum-specifier with
14374 wacky code like 'enum E { e = sizeof(const E*) };' */
14375 gcc_assert (enumtype
== TYPE_MAIN_VARIANT (enumtype
)
14376 && (TYPE_VALUES (enumtype
)
14377 || !TYPE_NEXT_VARIANT (enumtype
)));
14380 /* Build and install a CONST_DECL for an enumeration constant of the
14381 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
14382 Apply ATTRIBUTES if available. LOC is the location of NAME.
14383 Assignment of sequential values by default is handled here. */
14386 build_enumerator (tree name
, tree value
, tree enumtype
, tree attributes
,
14393 /* scalar_constant_value will pull out this expression, so make sure
14394 it's folded as appropriate. */
14395 if (processing_template_decl
)
14396 value
= fold_non_dependent_expr (value
);
14398 /* If the VALUE was erroneous, pretend it wasn't there; that will
14399 result in the enum being assigned the next value in sequence. */
14400 if (value
== error_mark_node
)
14403 /* Remove no-op casts from the value. */
14405 STRIP_TYPE_NOPS (value
);
14407 if (! processing_template_decl
)
14409 /* Validate and default VALUE. */
14410 if (value
!= NULL_TREE
)
14412 if (!ENUM_UNDERLYING_TYPE (enumtype
))
14414 tree tmp_value
= build_expr_type_conversion (WANT_INT
| WANT_ENUM
,
14419 else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14420 (TREE_TYPE (value
)))
14421 value
= perform_implicit_conversion_flags
14422 (ENUM_UNDERLYING_TYPE (enumtype
), value
, tf_warning_or_error
,
14423 LOOKUP_IMPLICIT
| LOOKUP_NO_NARROWING
);
14425 if (value
== error_mark_node
)
14428 if (value
!= NULL_TREE
)
14430 if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14431 (TREE_TYPE (value
)))
14433 error ("enumerator value for %qD must have integral or "
14434 "unscoped enumeration type", name
);
14439 value
= cxx_constant_value (value
);
14441 if (TREE_CODE (value
) != INTEGER_CST
)
14443 error ("enumerator value for %qD is not an integer "
14451 /* Default based on previous value. */
14452 if (value
== NULL_TREE
)
14454 if (TYPE_VALUES (enumtype
))
14459 /* C++03 7.2/4: If no initializer is specified for the first
14460 enumerator, the type is an unspecified integral
14461 type. Otherwise the type is the same as the type of the
14462 initializing value of the preceding enumerator unless the
14463 incremented value is not representable in that type, in
14464 which case the type is an unspecified integral type
14465 sufficient to contain the incremented value. */
14466 prev_value
= DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype
)));
14467 if (error_operand_p (prev_value
))
14468 value
= error_mark_node
;
14471 tree type
= TREE_TYPE (prev_value
);
14472 signop sgn
= TYPE_SIGN (type
);
14473 widest_int wi
= wi::add (wi::to_widest (prev_value
), 1, sgn
,
14477 bool pos
= !wi::neg_p (wi
, sgn
);
14478 if (!wi::fits_to_tree_p (wi
, type
))
14481 for (itk
= itk_int
; itk
!= itk_none
; itk
++)
14483 type
= integer_types
[itk
];
14484 if (type
!= NULL_TREE
14485 && (pos
|| !TYPE_UNSIGNED (type
))
14486 && wi::fits_to_tree_p (wi
, type
))
14489 if (type
&& cxx_dialect
< cxx11
14490 && itk
> itk_unsigned_long
)
14491 pedwarn (input_location
, OPT_Wlong_long
,
14493 incremented enumerator value is too large for %<unsigned long%>") : G_("\
14494 incremented enumerator value is too large for %<long%>"));
14496 if (type
== NULL_TREE
)
14499 value
= wide_int_to_tree (type
, wi
);
14504 error ("overflow in enumeration values at %qD", name
);
14505 value
= error_mark_node
;
14510 value
= integer_zero_node
;
14513 /* Remove no-op casts from the value. */
14514 STRIP_TYPE_NOPS (value
);
14516 /* If the underlying type of the enum is fixed, check whether
14517 the enumerator values fits in the underlying type. If it
14518 does not fit, the program is ill-formed [C++0x dcl.enum]. */
14519 if (ENUM_UNDERLYING_TYPE (enumtype
)
14521 && TREE_CODE (value
) == INTEGER_CST
)
14523 if (!int_fits_type_p (value
, ENUM_UNDERLYING_TYPE (enumtype
)))
14524 error ("enumerator value %qE is outside the range of underlying "
14525 "type %qT", value
, ENUM_UNDERLYING_TYPE (enumtype
));
14527 /* Convert the value to the appropriate type. */
14528 value
= fold_convert (ENUM_UNDERLYING_TYPE (enumtype
), value
);
14532 /* C++ associates enums with global, function, or class declarations. */
14533 context
= current_scope ();
14535 /* Build the actual enumeration constant. Note that the enumeration
14536 constants have the underlying type of the enum (if it is fixed)
14537 or the type of their initializer (if the underlying type of the
14538 enum is not fixed):
14542 If the underlying type is fixed, the type of each enumerator
14543 prior to the closing brace is the underlying type; if the
14544 initializing value of an enumerator cannot be represented by
14545 the underlying type, the program is ill-formed. If the
14546 underlying type is not fixed, the type of each enumerator is
14547 the type of its initializing value.
14549 If the underlying type is not fixed, it will be computed by
14550 finish_enum and we will reset the type of this enumerator. Of
14551 course, if we're processing a template, there may be no value. */
14552 type
= value
? TREE_TYPE (value
) : NULL_TREE
;
14554 decl
= build_decl (loc
, CONST_DECL
, name
, type
);
14556 DECL_CONTEXT (decl
) = enumtype
;
14557 TREE_CONSTANT (decl
) = 1;
14558 TREE_READONLY (decl
) = 1;
14559 DECL_INITIAL (decl
) = value
;
14562 cplus_decl_attributes (&decl
, attributes
, 0);
14564 if (context
&& context
== current_class_type
&& !SCOPED_ENUM_P (enumtype
))
14566 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
14567 on the TYPE_FIELDS list for `S'. (That's so that you can say
14568 things like `S::i' later.) */
14570 /* The enumerator may be getting declared outside of its enclosing
14573 class S { public: enum E : int; }; enum S::E : int { i = 7; };
14575 For which case we need to make sure that the access of `S::i'
14576 matches the access of `S::E'. */
14577 tree saved_cas
= current_access_specifier
;
14578 if (TREE_PRIVATE (TYPE_NAME (enumtype
)))
14579 current_access_specifier
= access_private_node
;
14580 else if (TREE_PROTECTED (TYPE_NAME (enumtype
)))
14581 current_access_specifier
= access_protected_node
;
14583 current_access_specifier
= access_public_node
;
14585 finish_member_declaration (decl
);
14587 current_access_specifier
= saved_cas
;
14592 /* Add this enumeration constant to the list for this type. */
14593 TYPE_VALUES (enumtype
) = tree_cons (name
, decl
, TYPE_VALUES (enumtype
));
14596 /* Look for an enumerator with the given NAME within the enumeration
14597 type ENUMTYPE. This routine is used primarily for qualified name
14598 lookup into an enumerator in C++0x, e.g.,
14600 enum class Color { Red, Green, Blue };
14602 Color color = Color::Red;
14604 Returns the value corresponding to the enumerator, or
14605 NULL_TREE if no such enumerator was found. */
14607 lookup_enumerator (tree enumtype
, tree name
)
14610 gcc_assert (enumtype
&& TREE_CODE (enumtype
) == ENUMERAL_TYPE
);
14612 e
= purpose_member (name
, TYPE_VALUES (enumtype
));
14613 return e
? TREE_VALUE (e
) : NULL_TREE
;
14617 /* We're defining DECL. Make sure that its type is OK. */
14620 check_function_type (tree decl
, tree current_function_parms
)
14622 tree fntype
= TREE_TYPE (decl
);
14623 tree return_type
= complete_type (TREE_TYPE (fntype
));
14625 /* In a function definition, arg types must be complete. */
14626 require_complete_types_for_parms (current_function_parms
);
14628 if (dependent_type_p (return_type
)
14629 || type_uses_auto (return_type
))
14631 if (!COMPLETE_OR_VOID_TYPE_P (return_type
))
14633 tree args
= TYPE_ARG_TYPES (fntype
);
14635 error ("return type %q#T is incomplete", return_type
);
14637 /* Make it return void instead. */
14638 if (TREE_CODE (fntype
) == METHOD_TYPE
)
14639 fntype
= build_method_type_directly (TREE_TYPE (TREE_VALUE (args
)),
14641 TREE_CHAIN (args
));
14643 fntype
= build_function_type (void_type_node
, args
);
14645 = build_exception_variant (fntype
,
14646 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl
)));
14647 fntype
= (cp_build_type_attribute_variant
14648 (fntype
, TYPE_ATTRIBUTES (TREE_TYPE (decl
))));
14649 TREE_TYPE (decl
) = fntype
;
14653 abstract_virtuals_error (decl
, TREE_TYPE (fntype
));
14654 maybe_warn_parm_abi (TREE_TYPE (fntype
),
14655 DECL_SOURCE_LOCATION (decl
));
14659 /* True iff FN is an implicitly-defined default constructor. */
14662 implicit_default_ctor_p (tree fn
)
14664 return (DECL_CONSTRUCTOR_P (fn
)
14665 && !user_provided_p (fn
)
14666 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn
)));
14669 /* Clobber the contents of *this to let the back end know that the object
14670 storage is dead when we enter the constructor or leave the destructor. */
14673 build_clobber_this ()
14675 /* Clobbering an empty base is pointless, and harmful if its one byte
14676 TYPE_SIZE overlays real data. */
14677 if (is_empty_class (current_class_type
))
14680 /* If we have virtual bases, clobber the whole object, but only if we're in
14681 charge. If we don't have virtual bases, clobber the as-base type so we
14682 don't mess with tail padding. */
14683 bool vbases
= CLASSTYPE_VBASECLASSES (current_class_type
);
14685 tree ctype
= current_class_type
;
14687 ctype
= CLASSTYPE_AS_BASE (ctype
);
14689 tree clobber
= build_constructor (ctype
, NULL
);
14690 TREE_THIS_VOLATILE (clobber
) = true;
14692 tree thisref
= current_class_ref
;
14693 if (ctype
!= current_class_type
)
14695 thisref
= build_nop (build_reference_type (ctype
), current_class_ptr
);
14696 thisref
= convert_from_reference (thisref
);
14699 tree exprstmt
= build2 (MODIFY_EXPR
, void_type_node
, thisref
, clobber
);
14701 exprstmt
= build_if_in_charge (exprstmt
);
14706 /* Create the FUNCTION_DECL for a function definition.
14707 DECLSPECS and DECLARATOR are the parts of the declaration;
14708 they describe the function's name and the type it returns,
14709 but twisted together in a fashion that parallels the syntax of C.
14711 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
14712 DECLARATOR is really the DECL for the function we are about to
14713 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
14714 indicating that the function is an inline defined in-class.
14716 This function creates a binding context for the function body
14717 as well as setting up the FUNCTION_DECL in current_function_decl.
14719 For C++, we must first check whether that datum makes any sense.
14720 For example, "class A local_a(1,2);" means that variable local_a
14721 is an aggregate of type A, which should have a constructor
14722 applied to it with the argument list [1, 2].
14724 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
14725 or may be a BLOCK if the function has been defined previously
14726 in this translation unit. On exit, DECL_INITIAL (decl1) will be
14727 error_mark_node if the function has never been defined, or
14728 a BLOCK if the function has been defined somewhere. */
14731 start_preparsed_function (tree decl1
, tree attrs
, int flags
)
14733 tree ctype
= NULL_TREE
;
14736 int doing_friend
= 0;
14737 cp_binding_level
*bl
;
14738 tree current_function_parms
;
14739 struct c_fileinfo
*finfo
14740 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1
)));
14741 bool honor_interface
;
14743 /* Sanity check. */
14744 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node
)));
14745 gcc_assert (TREE_CHAIN (void_list_node
) == NULL_TREE
);
14747 fntype
= TREE_TYPE (decl1
);
14748 if (TREE_CODE (fntype
) == METHOD_TYPE
)
14749 ctype
= TYPE_METHOD_BASETYPE (fntype
);
14751 /* ISO C++ 11.4/5. A friend function defined in a class is in
14752 the (lexical) scope of the class in which it is defined. */
14753 if (!ctype
&& DECL_FRIEND_P (decl1
))
14755 ctype
= DECL_FRIEND_CONTEXT (decl1
);
14757 /* CTYPE could be null here if we're dealing with a template;
14758 for example, `inline friend float foo()' inside a template
14759 will have no CTYPE set. */
14760 if (ctype
&& TREE_CODE (ctype
) != RECORD_TYPE
)
14766 if (DECL_DECLARED_INLINE_P (decl1
)
14767 && lookup_attribute ("noinline", attrs
))
14768 warning_at (DECL_SOURCE_LOCATION (decl1
), 0,
14769 "inline function %qD given attribute noinline", decl1
);
14771 /* Handle gnu_inline attribute. */
14772 if (GNU_INLINE_P (decl1
))
14774 DECL_EXTERNAL (decl1
) = 1;
14775 DECL_NOT_REALLY_EXTERN (decl1
) = 0;
14776 DECL_INTERFACE_KNOWN (decl1
) = 1;
14777 DECL_DISREGARD_INLINE_LIMITS (decl1
) = 1;
14780 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1
))
14781 /* This is a constructor, we must ensure that any default args
14782 introduced by this definition are propagated to the clones
14783 now. The clones are used directly in overload resolution. */
14784 adjust_clone_args (decl1
);
14786 /* Sometimes we don't notice that a function is a static member, and
14787 build a METHOD_TYPE for it. Fix that up now. */
14788 gcc_assert (!(ctype
!= NULL_TREE
&& DECL_STATIC_FUNCTION_P (decl1
)
14789 && TREE_CODE (TREE_TYPE (decl1
)) == METHOD_TYPE
));
14791 /* Set up current_class_type, and enter the scope of the class, if
14794 push_nested_class (ctype
);
14795 else if (DECL_STATIC_FUNCTION_P (decl1
))
14796 push_nested_class (DECL_CONTEXT (decl1
));
14798 /* Now that we have entered the scope of the class, we must restore
14799 the bindings for any template parameters surrounding DECL1, if it
14800 is an inline member template. (Order is important; consider the
14801 case where a template parameter has the same name as a field of
14802 the class.) It is not until after this point that
14803 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
14804 if (flags
& SF_INCLASS_INLINE
)
14805 maybe_begin_member_template_processing (decl1
);
14807 /* Effective C++ rule 15. */
14809 && DECL_ASSIGNMENT_OPERATOR_P (decl1
)
14810 && DECL_OVERLOADED_OPERATOR_IS (decl1
, NOP_EXPR
)
14811 && VOID_TYPE_P (TREE_TYPE (fntype
)))
14812 warning (OPT_Weffc__
,
14813 "%<operator=%> should return a reference to %<*this%>");
14815 /* Make the init_value nonzero so pushdecl knows this is not tentative.
14816 error_mark_node is replaced below (in poplevel) with the BLOCK. */
14817 if (!DECL_INITIAL (decl1
))
14818 DECL_INITIAL (decl1
) = error_mark_node
;
14820 /* This function exists in static storage.
14821 (This does not mean `static' in the C sense!) */
14822 TREE_STATIC (decl1
) = 1;
14824 /* We must call push_template_decl after current_class_type is set
14825 up. (If we are processing inline definitions after exiting a
14826 class scope, current_class_type will be NULL_TREE until set above
14827 by push_nested_class.) */
14828 if (processing_template_decl
)
14830 tree newdecl1
= push_template_decl (decl1
);
14831 if (newdecl1
== error_mark_node
)
14833 if (ctype
|| DECL_STATIC_FUNCTION_P (decl1
))
14834 pop_nested_class ();
14840 /* Make sure the parameter and return types are reasonable. When
14841 you declare a function, these types can be incomplete, but they
14842 must be complete when you define the function. */
14843 check_function_type (decl1
, DECL_ARGUMENTS (decl1
));
14845 /* Build the return declaration for the function. */
14846 restype
= TREE_TYPE (fntype
);
14848 if (DECL_RESULT (decl1
) == NULL_TREE
)
14852 resdecl
= build_decl (input_location
, RESULT_DECL
, 0, restype
);
14853 DECL_ARTIFICIAL (resdecl
) = 1;
14854 DECL_IGNORED_P (resdecl
) = 1;
14855 DECL_RESULT (decl1
) = resdecl
;
14857 cp_apply_type_quals_to_decl (cp_type_quals (restype
), resdecl
);
14860 /* Record the decl so that the function name is defined.
14861 If we already have a decl for this name, and it is a FUNCTION_DECL,
14862 use the old decl. */
14863 if (!processing_template_decl
&& !(flags
& SF_PRE_PARSED
))
14865 /* A specialization is not used to guide overload resolution. */
14866 if (!DECL_FUNCTION_MEMBER_P (decl1
)
14867 && !(DECL_USE_TEMPLATE (decl1
) &&
14868 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1
))))
14870 tree olddecl
= pushdecl (decl1
);
14872 if (olddecl
== error_mark_node
)
14873 /* If something went wrong when registering the declaration,
14874 use DECL1; we have to have a FUNCTION_DECL to use when
14875 parsing the body of the function. */
14879 /* Otherwise, OLDDECL is either a previous declaration
14880 of the same function or DECL1 itself. */
14882 if (warn_missing_declarations
14883 && olddecl
== decl1
14884 && !DECL_MAIN_P (decl1
)
14885 && TREE_PUBLIC (decl1
)
14886 && !DECL_DECLARED_INLINE_P (decl1
))
14890 /* Check whether DECL1 is in an anonymous
14892 for (context
= DECL_CONTEXT (decl1
);
14894 context
= DECL_CONTEXT (context
))
14896 if (TREE_CODE (context
) == NAMESPACE_DECL
14897 && DECL_NAME (context
) == NULL_TREE
)
14901 if (context
== NULL
)
14902 warning_at (DECL_SOURCE_LOCATION (decl1
),
14903 OPT_Wmissing_declarations
,
14904 "no previous declaration for %qD", decl1
);
14912 /* We need to set the DECL_CONTEXT. */
14913 if (!DECL_CONTEXT (decl1
) && DECL_TEMPLATE_INFO (decl1
))
14914 DECL_CONTEXT (decl1
) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1
));
14916 fntype
= TREE_TYPE (decl1
);
14917 restype
= TREE_TYPE (fntype
);
14919 /* If #pragma weak applies, mark the decl appropriately now.
14920 The pragma only applies to global functions. Because
14921 determining whether or not the #pragma applies involves
14922 computing the mangled name for the declaration, we cannot
14923 apply the pragma until after we have merged this declaration
14924 with any previous declarations; if the original declaration
14925 has a linkage specification, that specification applies to
14926 the definition as well, and may affect the mangled name. */
14927 if (DECL_FILE_SCOPE_P (decl1
))
14928 maybe_apply_pragma_weak (decl1
);
14931 /* We are now in the scope of the function being defined. */
14932 current_function_decl
= decl1
;
14934 /* Save the parm names or decls from this function's declarator
14935 where store_parm_decls will find them. */
14936 current_function_parms
= DECL_ARGUMENTS (decl1
);
14938 /* Let the user know we're compiling this function. */
14939 announce_function (decl1
);
14941 gcc_assert (DECL_INITIAL (decl1
));
14943 /* This function may already have been parsed, in which case just
14944 return; our caller will skip over the body without parsing. */
14945 if (DECL_INITIAL (decl1
) != error_mark_node
)
14948 /* Initialize RTL machinery. We cannot do this until
14949 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
14950 even when processing a template; this is how we get
14951 CFUN set up, and our per-function variables initialized.
14952 FIXME factor out the non-RTL stuff. */
14953 bl
= current_binding_level
;
14954 allocate_struct_function (decl1
, processing_template_decl
);
14956 /* Initialize the language data structures. Whenever we start
14957 a new function, we destroy temporaries in the usual way. */
14958 cfun
->language
= ggc_cleared_alloc
<language_function
> ();
14959 current_stmt_tree ()->stmts_are_full_exprs_p
= 1;
14960 current_binding_level
= bl
;
14962 if (!processing_template_decl
&& type_uses_auto (restype
))
14964 FNDECL_USED_AUTO (decl1
) = true;
14965 current_function_auto_return_pattern
= restype
;
14968 /* Start the statement-tree, start the tree now. */
14969 DECL_SAVED_TREE (decl1
) = push_stmt_list ();
14971 /* If we are (erroneously) defining a function that we have already
14972 defined before, wipe out what we knew before. */
14973 if (!DECL_PENDING_INLINE_P (decl1
))
14974 DECL_SAVED_FUNCTION_DATA (decl1
) = NULL
;
14976 if (ctype
&& !doing_friend
&& !DECL_STATIC_FUNCTION_P (decl1
))
14978 /* We know that this was set up by `grokclassfn'. We do not
14979 wait until `store_parm_decls', since evil parse errors may
14980 never get us to that point. Here we keep the consistency
14981 between `current_class_type' and `current_class_ptr'. */
14982 tree t
= DECL_ARGUMENTS (decl1
);
14984 gcc_assert (t
!= NULL_TREE
&& TREE_CODE (t
) == PARM_DECL
);
14985 gcc_assert (TYPE_PTR_P (TREE_TYPE (t
)));
14987 cp_function_chain
->x_current_class_ref
14988 = cp_build_fold_indirect_ref (t
);
14989 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
14990 cp_function_chain
->x_current_class_ptr
= t
;
14992 /* Constructors and destructors need to know whether they're "in
14993 charge" of initializing virtual base classes. */
14994 t
= DECL_CHAIN (t
);
14995 if (DECL_HAS_IN_CHARGE_PARM_P (decl1
))
14997 current_in_charge_parm
= t
;
14998 t
= DECL_CHAIN (t
);
15000 if (DECL_HAS_VTT_PARM_P (decl1
))
15002 gcc_assert (DECL_NAME (t
) == vtt_parm_identifier
);
15003 current_vtt_parm
= t
;
15007 honor_interface
= (!DECL_TEMPLATE_INSTANTIATION (decl1
)
15008 /* Implicitly-defined methods (like the
15009 destructor for a class in which no destructor
15010 is explicitly declared) must not be defined
15011 until their definition is needed. So, we
15012 ignore interface specifications for
15013 compiler-generated functions. */
15014 && !DECL_ARTIFICIAL (decl1
));
15016 if (processing_template_decl
)
15017 /* Don't mess with interface flags. */;
15018 else if (DECL_INTERFACE_KNOWN (decl1
))
15020 tree ctx
= decl_function_context (decl1
);
15022 if (DECL_NOT_REALLY_EXTERN (decl1
))
15023 DECL_EXTERNAL (decl1
) = 0;
15025 if (ctx
!= NULL_TREE
&& vague_linkage_p (ctx
))
15026 /* This is a function in a local class in an extern inline
15027 or template function. */
15028 comdat_linkage (decl1
);
15030 /* If this function belongs to an interface, it is public.
15031 If it belongs to someone else's interface, it is also external.
15032 This only affects inlines and template instantiations. */
15033 else if (!finfo
->interface_unknown
&& honor_interface
)
15035 if (DECL_DECLARED_INLINE_P (decl1
)
15036 || DECL_TEMPLATE_INSTANTIATION (decl1
))
15038 DECL_EXTERNAL (decl1
)
15039 = (finfo
->interface_only
15040 || (DECL_DECLARED_INLINE_P (decl1
)
15041 && ! flag_implement_inlines
15042 && !DECL_VINDEX (decl1
)));
15044 /* For WIN32 we also want to put these in linkonce sections. */
15045 maybe_make_one_only (decl1
);
15048 DECL_EXTERNAL (decl1
) = 0;
15049 DECL_INTERFACE_KNOWN (decl1
) = 1;
15050 /* If this function is in an interface implemented in this file,
15051 make sure that the back end knows to emit this function
15053 if (!DECL_EXTERNAL (decl1
))
15054 mark_needed (decl1
);
15056 else if (finfo
->interface_unknown
&& finfo
->interface_only
15057 && honor_interface
)
15059 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
15060 interface, we will have both finfo->interface_unknown and
15061 finfo->interface_only set. In that case, we don't want to
15062 use the normal heuristics because someone will supply a
15063 #pragma implementation elsewhere, and deducing it here would
15064 produce a conflict. */
15065 comdat_linkage (decl1
);
15066 DECL_EXTERNAL (decl1
) = 0;
15067 DECL_INTERFACE_KNOWN (decl1
) = 1;
15068 DECL_DEFER_OUTPUT (decl1
) = 1;
15072 /* This is a definition, not a reference.
15073 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
15074 if (!GNU_INLINE_P (decl1
))
15075 DECL_EXTERNAL (decl1
) = 0;
15077 if ((DECL_DECLARED_INLINE_P (decl1
)
15078 || DECL_TEMPLATE_INSTANTIATION (decl1
))
15079 && ! DECL_INTERFACE_KNOWN (decl1
))
15080 DECL_DEFER_OUTPUT (decl1
) = 1;
15082 DECL_INTERFACE_KNOWN (decl1
) = 1;
15085 /* Determine the ELF visibility attribute for the function. We must not
15086 do this before calling "pushdecl", as we must allow "duplicate_decls"
15087 to merge any attributes appropriately. We also need to wait until
15089 if (!DECL_CLONED_FUNCTION_P (decl1
))
15090 determine_visibility (decl1
);
15092 if (!processing_template_decl
)
15093 maybe_instantiate_noexcept (decl1
);
15095 begin_scope (sk_function_parms
, decl1
);
15099 if (DECL_DESTRUCTOR_P (decl1
)
15100 || (DECL_CONSTRUCTOR_P (decl1
)
15101 && targetm
.cxx
.cdtor_returns_this ()))
15103 cdtor_label
= create_artificial_label (input_location
);
15104 LABEL_DECL_CDTOR (cdtor_label
) = true;
15107 start_fname_decls ();
15109 store_parm_decls (current_function_parms
);
15111 if (!processing_template_decl
15112 && (flag_lifetime_dse
> 1)
15113 && DECL_CONSTRUCTOR_P (decl1
)
15114 && !DECL_CLONED_FUNCTION_P (decl1
)
15115 /* Clobbering an empty base is harmful if it overlays real data. */
15116 && !is_empty_class (current_class_type
)
15117 /* We can't clobber safely for an implicitly-defined default constructor
15118 because part of the initialization might happen before we enter the
15119 constructor, via AGGR_INIT_ZERO_FIRST (c++/68006). */
15120 && !implicit_default_ctor_p (decl1
))
15121 finish_expr_stmt (build_clobber_this ());
15123 if (!processing_template_decl
15124 && DECL_CONSTRUCTOR_P (decl1
)
15125 && sanitize_flags_p (SANITIZE_VPTR
)
15126 && !DECL_CLONED_FUNCTION_P (decl1
)
15127 && !implicit_default_ctor_p (decl1
))
15128 cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr
);
15130 start_lambda_scope (decl1
);
15136 /* Like start_preparsed_function, except that instead of a
15137 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
15139 Returns true on success. If the DECLARATOR is not suitable
15140 for a function, we return false, which tells the parser to
15141 skip the entire function. */
15144 start_function (cp_decl_specifier_seq
*declspecs
,
15145 const cp_declarator
*declarator
,
15150 decl1
= grokdeclarator (declarator
, declspecs
, FUNCDEF
, 1, &attrs
);
15151 invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION
, decl1
);
15152 if (decl1
== error_mark_node
)
15154 /* If the declarator is not suitable for a function definition,
15155 cause a syntax error. */
15156 if (decl1
== NULL_TREE
|| TREE_CODE (decl1
) != FUNCTION_DECL
)
15158 error ("invalid function declaration");
15162 if (DECL_MAIN_P (decl1
))
15163 /* main must return int. grokfndecl should have corrected it
15164 (and issued a diagnostic) if the user got it wrong. */
15165 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1
)),
15166 integer_type_node
));
15168 return start_preparsed_function (decl1
, attrs
, /*flags=*/SF_DEFAULT
);
15171 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
15175 use_eh_spec_block (tree fn
)
15177 return (flag_exceptions
&& flag_enforce_eh_specs
15178 && !processing_template_decl
15179 && !type_throw_all_p (TREE_TYPE (fn
))
15180 /* We insert the EH_SPEC_BLOCK only in the original
15181 function; then, it is copied automatically to the
15183 && !DECL_CLONED_FUNCTION_P (fn
)
15184 /* Implicitly-generated constructors and destructors have
15185 exception specifications. However, those specifications
15186 are the union of the possible exceptions specified by the
15187 constructors/destructors for bases and members, so no
15188 unallowed exception will ever reach this function. By
15189 not creating the EH_SPEC_BLOCK we save a little memory,
15190 and we avoid spurious warnings about unreachable
15192 && !DECL_DEFAULTED_FN (fn
));
15195 /* Store the parameter declarations into the current function declaration.
15196 This is called after parsing the parameter declarations, before
15197 digesting the body of the function.
15199 Also install to binding contour return value identifier, if any. */
15202 store_parm_decls (tree current_function_parms
)
15204 tree fndecl
= current_function_decl
;
15207 /* This is a chain of any other decls that came in among the parm
15208 declarations. If a parm is declared with enum {foo, bar} x;
15209 then CONST_DECLs for foo and bar are put here. */
15210 tree nonparms
= NULL_TREE
;
15212 if (current_function_parms
)
15214 /* This case is when the function was defined with an ANSI prototype.
15215 The parms already have decls, so we need not do anything here
15216 except record them as in effect
15217 and complain if any redundant old-style parm decls were written. */
15219 tree specparms
= current_function_parms
;
15222 /* Must clear this because it might contain TYPE_DECLs declared
15224 current_binding_level
->names
= NULL
;
15226 /* If we're doing semantic analysis, then we'll call pushdecl
15227 for each of these. We must do them in reverse order so that
15228 they end in the correct forward order. */
15229 specparms
= nreverse (specparms
);
15231 for (parm
= specparms
; parm
; parm
= next
)
15233 next
= DECL_CHAIN (parm
);
15234 if (TREE_CODE (parm
) == PARM_DECL
)
15238 /* If we find an enum constant or a type tag,
15239 put it aside for the moment. */
15240 TREE_CHAIN (parm
) = NULL_TREE
;
15241 nonparms
= chainon (nonparms
, parm
);
15245 /* Get the decls in their original chain order and record in the
15246 function. This is all and only the PARM_DECLs that were
15247 pushed into scope by the loop above. */
15248 DECL_ARGUMENTS (fndecl
) = get_local_decls ();
15251 DECL_ARGUMENTS (fndecl
) = NULL_TREE
;
15253 /* Now store the final chain of decls for the arguments
15254 as the decl-chain of the current lexical scope.
15255 Put the enumerators in as well, at the front so that
15256 DECL_ARGUMENTS is not modified. */
15257 current_binding_level
->names
= chainon (nonparms
, DECL_ARGUMENTS (fndecl
));
15259 if (use_eh_spec_block (current_function_decl
))
15260 current_eh_spec_block
= begin_eh_spec_block ();
15264 /* We have finished doing semantic analysis on DECL, but have not yet
15265 generated RTL for its body. Save away our current state, so that
15266 when we want to generate RTL later we know what to do. */
15269 save_function_data (tree decl
)
15271 struct language_function
*f
;
15273 /* Save the language-specific per-function data so that we can
15274 get it back when we really expand this function. */
15275 gcc_assert (!DECL_PENDING_INLINE_P (decl
));
15278 f
= ggc_alloc
<language_function
> ();
15279 memcpy (f
, cp_function_chain
, sizeof (struct language_function
));
15280 DECL_SAVED_FUNCTION_DATA (decl
) = f
;
15282 /* Clear out the bits we don't need. */
15283 f
->base
.x_stmt_tree
.x_cur_stmt_list
= NULL
;
15284 f
->bindings
= NULL
;
15285 f
->x_local_names
= NULL
;
15286 f
->base
.local_typedefs
= NULL
;
15290 /* Set the return value of the constructor (if present). */
15293 finish_constructor_body (void)
15298 if (targetm
.cxx
.cdtor_returns_this ())
15300 /* Any return from a constructor will end up here. */
15301 add_stmt (build_stmt (input_location
, LABEL_EXPR
, cdtor_label
));
15303 val
= DECL_ARGUMENTS (current_function_decl
);
15304 val
= build2 (MODIFY_EXPR
, TREE_TYPE (val
),
15305 DECL_RESULT (current_function_decl
), val
);
15306 /* Return the address of the object. */
15307 exprstmt
= build_stmt (input_location
, RETURN_EXPR
, val
);
15308 add_stmt (exprstmt
);
15312 /* Do all the processing for the beginning of a destructor; set up the
15313 vtable pointers and cleanups for bases and members. */
15316 begin_destructor_body (void)
15318 tree compound_stmt
;
15320 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
15321 issued an error message. We still want to try to process the
15322 body of the function, but initialize_vtbl_ptrs will crash if
15323 TYPE_BINFO is NULL. */
15324 if (COMPLETE_TYPE_P (current_class_type
))
15326 compound_stmt
= begin_compound_stmt (0);
15327 /* Make all virtual function table pointers in non-virtual base
15328 classes point to CURRENT_CLASS_TYPE's virtual function
15330 initialize_vtbl_ptrs (current_class_ptr
);
15331 finish_compound_stmt (compound_stmt
);
15333 if (flag_lifetime_dse
15334 /* Clobbering an empty base is harmful if it overlays real data. */
15335 && !is_empty_class (current_class_type
))
15337 if (sanitize_flags_p (SANITIZE_VPTR
)
15338 && (flag_sanitize_recover
& SANITIZE_VPTR
) == 0
15339 && TYPE_CONTAINS_VPTR_P (current_class_type
))
15341 tree binfo
= TYPE_BINFO (current_class_type
);
15343 = cp_build_fold_indirect_ref (current_class_ptr
);
15345 tree vtbl_ptr
= build_vfield_ref (ref
, TREE_TYPE (binfo
));
15346 tree vtbl
= build_zero_cst (TREE_TYPE (vtbl_ptr
));
15347 tree stmt
= cp_build_modify_expr (input_location
, vtbl_ptr
,
15349 tf_warning_or_error
);
15350 finish_decl_cleanup (NULL_TREE
, stmt
);
15353 finish_decl_cleanup (NULL_TREE
, build_clobber_this ());
15356 /* And insert cleanups for our bases and members so that they
15357 will be properly destroyed if we throw. */
15358 push_base_cleanups ();
15362 /* At the end of every destructor we generate code to delete the object if
15363 necessary. Do that now. */
15366 finish_destructor_body (void)
15370 /* Any return from a destructor will end up here; that way all base
15371 and member cleanups will be run when the function returns. */
15372 add_stmt (build_stmt (input_location
, LABEL_EXPR
, cdtor_label
));
15374 if (targetm
.cxx
.cdtor_returns_this ())
15378 val
= DECL_ARGUMENTS (current_function_decl
);
15379 val
= build2 (MODIFY_EXPR
, TREE_TYPE (val
),
15380 DECL_RESULT (current_function_decl
), val
);
15381 /* Return the address of the object. */
15382 exprstmt
= build_stmt (input_location
, RETURN_EXPR
, val
);
15383 add_stmt (exprstmt
);
15387 /* Do the necessary processing for the beginning of a function body, which
15388 in this case includes member-initializers, but not the catch clauses of
15389 a function-try-block. Currently, this means opening a binding level
15390 for the member-initializers (in a ctor), member cleanups (in a dtor),
15391 and capture proxies (in a lambda operator()). */
15394 begin_function_body (void)
15398 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl
))
15401 if (processing_template_decl
)
15402 /* Do nothing now. */;
15404 /* Always keep the BLOCK node associated with the outermost pair of
15405 curly braces of a function. These are needed for correct
15406 operation of dwarfout.c. */
15407 keep_next_level (true);
15409 stmt
= begin_compound_stmt (BCS_FN_BODY
);
15411 if (processing_template_decl
)
15412 /* Do nothing now. */;
15413 else if (DECL_DESTRUCTOR_P (current_function_decl
))
15414 begin_destructor_body ();
15419 /* Do the processing for the end of a function body. Currently, this means
15420 closing out the cleanups for fully-constructed bases and members, and in
15421 the case of the destructor, deleting the object if desired. Again, this
15422 is only meaningful for [cd]tors, since they are the only functions where
15423 there is a significant distinction between the main body and any
15424 function catch clauses. Handling, say, main() return semantics here
15425 would be wrong, as flowing off the end of a function catch clause for
15426 main() would also need to return 0. */
15429 finish_function_body (tree compstmt
)
15431 if (compstmt
== NULL_TREE
)
15434 /* Close the block. */
15435 finish_compound_stmt (compstmt
);
15437 if (processing_template_decl
)
15438 /* Do nothing now. */;
15439 else if (DECL_CONSTRUCTOR_P (current_function_decl
))
15440 finish_constructor_body ();
15441 else if (DECL_DESTRUCTOR_P (current_function_decl
))
15442 finish_destructor_body ();
15445 /* Given a function, returns the BLOCK corresponding to the outermost level
15446 of curly braces, skipping the artificial block created for constructor
15450 outer_curly_brace_block (tree fndecl
)
15452 tree block
= DECL_INITIAL (fndecl
);
15453 if (BLOCK_OUTER_CURLY_BRACE_P (block
))
15455 block
= BLOCK_SUBBLOCKS (block
);
15456 if (BLOCK_OUTER_CURLY_BRACE_P (block
))
15458 block
= BLOCK_SUBBLOCKS (block
);
15459 gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block
));
15463 /* If FNDECL is a class's key method, add the class to the list of
15464 keyed classes that should be emitted. */
15467 record_key_method_defined (tree fndecl
)
15469 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl
)
15470 && DECL_VIRTUAL_P (fndecl
)
15471 && !processing_template_decl
)
15473 tree fnclass
= DECL_CONTEXT (fndecl
);
15474 if (fndecl
== CLASSTYPE_KEY_METHOD (fnclass
))
15475 vec_safe_push (keyed_classes
, fnclass
);
15479 /* Subroutine of finish_function.
15480 Save the body of constexpr functions for possible
15481 future compile time evaluation. */
15484 maybe_save_function_definition (tree fun
)
15486 if (!processing_template_decl
15487 && DECL_DECLARED_CONSTEXPR_P (fun
)
15488 && !cp_function_chain
->invalid_constexpr
15489 && !DECL_CLONED_FUNCTION_P (fun
))
15490 register_constexpr_fundef (fun
, DECL_SAVED_TREE (fun
));
15493 /* Finish up a function declaration and compile that function
15494 all the way to assembler language output. The free the storage
15495 for the function definition. INLINE_P is TRUE if we just
15496 finished processing the body of an in-class inline function
15497 definition. (This processing will have taken place after the
15498 class definition is complete.) */
15501 finish_function (bool inline_p
)
15503 tree fndecl
= current_function_decl
;
15504 tree fntype
, ctype
= NULL_TREE
;
15506 /* When we get some parse errors, we can end up without a
15507 current_function_decl, so cope. */
15508 if (fndecl
== NULL_TREE
)
15509 return error_mark_node
;
15511 finish_lambda_scope ();
15513 if (c_dialect_objc ())
15514 objc_finish_function ();
15516 record_key_method_defined (fndecl
);
15518 fntype
= TREE_TYPE (fndecl
);
15520 /* TREE_READONLY (fndecl) = 1;
15521 This caused &foo to be of type ptr-to-const-function
15522 which then got a warning when stored in a ptr-to-function variable. */
15524 gcc_assert (building_stmt_list_p ());
15525 /* The current function is being defined, so its DECL_INITIAL should
15526 be set, and unless there's a multiple definition, it should be
15527 error_mark_node. */
15528 gcc_assert (DECL_INITIAL (fndecl
) == error_mark_node
);
15530 /* For a cloned function, we've already got all the code we need;
15531 there's no need to add any extra bits. */
15532 if (!DECL_CLONED_FUNCTION_P (fndecl
))
15534 /* Make it so that `main' always returns 0 by default. */
15535 if (DECL_MAIN_P (current_function_decl
))
15536 finish_return_stmt (integer_zero_node
);
15538 if (use_eh_spec_block (current_function_decl
))
15539 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
15540 (TREE_TYPE (current_function_decl
)),
15541 current_eh_spec_block
);
15544 /* If we're saving up tree structure, tie off the function now. */
15545 DECL_SAVED_TREE (fndecl
) = pop_stmt_list (DECL_SAVED_TREE (fndecl
));
15547 finish_fname_decls ();
15549 /* If this function can't throw any exceptions, remember that. */
15550 if (!processing_template_decl
15551 && !cp_function_chain
->can_throw
15552 && !flag_non_call_exceptions
15553 && !decl_replaceable_p (fndecl
))
15554 TREE_NOTHROW (fndecl
) = 1;
15556 /* This must come after expand_function_end because cleanups might
15557 have declarations (from inline functions) that need to go into
15558 this function's blocks. */
15560 /* If the current binding level isn't the outermost binding level
15561 for this function, either there is a bug, or we have experienced
15562 syntax errors and the statement tree is malformed. */
15563 if (current_binding_level
->kind
!= sk_function_parms
)
15565 /* Make sure we have already experienced errors. */
15566 gcc_assert (errorcount
);
15568 /* Throw away the broken statement tree and extra binding
15570 DECL_SAVED_TREE (fndecl
) = alloc_stmt_list ();
15572 while (current_binding_level
->kind
!= sk_function_parms
)
15574 if (current_binding_level
->kind
== sk_class
)
15575 pop_nested_class ();
15577 poplevel (0, 0, 0);
15580 poplevel (1, 0, 1);
15582 /* Statements should always be full-expressions at the outermost set
15583 of curly braces for a function. */
15584 gcc_assert (stmts_are_full_exprs_p ());
15586 /* If there are no return statements in a function with auto return type,
15587 the return type is void. But if the declared type is something like
15588 auto*, this is an error. */
15589 if (!processing_template_decl
&& FNDECL_USED_AUTO (fndecl
)
15590 && TREE_TYPE (fntype
) == current_function_auto_return_pattern
)
15592 if (is_auto (current_function_auto_return_pattern
))
15594 apply_deduced_return_type (fndecl
, void_type_node
);
15595 fntype
= TREE_TYPE (fndecl
);
15597 else if (!current_function_returns_value
15598 && !current_function_returns_null
)
15600 error ("no return statements in function returning %qT",
15601 current_function_auto_return_pattern
);
15602 inform (input_location
, "only plain %<auto%> return type can be "
15603 "deduced to %<void%>");
15607 // If this is a concept, check that the definition is reasonable.
15608 if (DECL_DECLARED_CONCEPT_P (fndecl
))
15609 check_function_concept (fndecl
);
15611 /* Lambda closure members are implicitly constexpr if possible. */
15612 if (cxx_dialect
>= cxx17
15613 && LAMBDA_TYPE_P (CP_DECL_CONTEXT (fndecl
)))
15614 DECL_DECLARED_CONSTEXPR_P (fndecl
)
15615 = ((processing_template_decl
15616 || is_valid_constexpr_fn (fndecl
, /*complain*/false))
15617 && potential_constant_expression (DECL_SAVED_TREE (fndecl
)));
15619 /* Save constexpr function body before it gets munged by
15620 the NRV transformation. */
15621 maybe_save_function_definition (fndecl
);
15623 /* Invoke the pre-genericize plugin before we start munging things. */
15624 if (!processing_template_decl
)
15625 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE
, fndecl
);
15627 /* Perform delayed folding before NRV transformation. */
15628 if (!processing_template_decl
)
15629 cp_fold_function (fndecl
);
15631 /* Set up the named return value optimization, if we can. Candidate
15632 variables are selected in check_return_expr. */
15633 if (current_function_return_value
)
15635 tree r
= current_function_return_value
;
15638 if (r
!= error_mark_node
15639 /* This is only worth doing for fns that return in memory--and
15640 simpler, since we don't have to worry about promoted modes. */
15641 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl
)), fndecl
)
15642 /* Only allow this for variables declared in the outer scope of
15643 the function so we know that their lifetime always ends with a
15644 return; see g++.dg/opt/nrv6.C. We could be more flexible if
15645 we were to do this optimization in tree-ssa. */
15646 && (outer
= outer_curly_brace_block (fndecl
))
15647 && chain_member (r
, BLOCK_VARS (outer
)))
15648 finalize_nrv (&DECL_SAVED_TREE (fndecl
), r
, DECL_RESULT (fndecl
));
15650 current_function_return_value
= NULL_TREE
;
15653 /* Remember that we were in class scope. */
15654 if (current_class_name
)
15655 ctype
= current_class_type
;
15657 /* Must mark the RESULT_DECL as being in this function. */
15658 DECL_CONTEXT (DECL_RESULT (fndecl
)) = fndecl
;
15660 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
15661 to the FUNCTION_DECL node itself. */
15662 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl
)) = fndecl
;
15664 /* Save away current state, if appropriate. */
15665 if (!processing_template_decl
)
15666 save_function_data (fndecl
);
15668 /* Complain if there's just no return statement. */
15669 if (warn_return_type
15670 && !VOID_TYPE_P (TREE_TYPE (fntype
))
15671 && !dependent_type_p (TREE_TYPE (fntype
))
15672 && !current_function_returns_value
&& !current_function_returns_null
15673 /* Don't complain if we abort or throw. */
15674 && !current_function_returns_abnormally
15675 /* Don't complain if there's an infinite loop. */
15676 && !current_function_infinite_loop
15677 /* Don't complain if we are declared noreturn. */
15678 && !TREE_THIS_VOLATILE (fndecl
)
15679 && !DECL_NAME (DECL_RESULT (fndecl
))
15680 && !TREE_NO_WARNING (fndecl
)
15681 /* Structor return values (if any) are set by the compiler. */
15682 && !DECL_CONSTRUCTOR_P (fndecl
)
15683 && !DECL_DESTRUCTOR_P (fndecl
)
15684 && targetm
.warn_func_return (fndecl
))
15686 warning (OPT_Wreturn_type
,
15687 "no return statement in function returning non-void");
15688 TREE_NO_WARNING (fndecl
) = 1;
15691 /* Store the end of the function, so that we get good line number
15692 info for the epilogue. */
15693 cfun
->function_end_locus
= input_location
;
15695 /* Complain about parameters that are only set, but never otherwise used. */
15696 if (warn_unused_but_set_parameter
15697 && !processing_template_decl
15698 && errorcount
== unused_but_set_errorcount
15699 && !DECL_CLONED_FUNCTION_P (fndecl
))
15703 for (decl
= DECL_ARGUMENTS (fndecl
);
15705 decl
= DECL_CHAIN (decl
))
15706 if (TREE_USED (decl
)
15707 && TREE_CODE (decl
) == PARM_DECL
15708 && !DECL_READ_P (decl
)
15709 && DECL_NAME (decl
)
15710 && !DECL_ARTIFICIAL (decl
)
15711 && !TREE_NO_WARNING (decl
)
15712 && !DECL_IN_SYSTEM_HEADER (decl
)
15713 && TREE_TYPE (decl
) != error_mark_node
15714 && TREE_CODE (TREE_TYPE (decl
)) != REFERENCE_TYPE
15715 && (!CLASS_TYPE_P (TREE_TYPE (decl
))
15716 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl
))))
15717 warning_at (DECL_SOURCE_LOCATION (decl
),
15718 OPT_Wunused_but_set_parameter
,
15719 "parameter %qD set but not used", decl
);
15720 unused_but_set_errorcount
= errorcount
;
15723 /* Complain about locally defined typedefs that are not used in this
15725 maybe_warn_unused_local_typedefs ();
15727 /* Possibly warn about unused parameters. */
15728 if (warn_unused_parameter
15729 && !processing_template_decl
15730 && !DECL_CLONED_FUNCTION_P (fndecl
))
15731 do_warn_unused_parameter (fndecl
);
15733 /* Genericize before inlining. */
15734 if (!processing_template_decl
)
15736 struct language_function
*f
= DECL_SAVED_FUNCTION_DATA (fndecl
);
15737 cp_genericize (fndecl
);
15738 /* Clear out the bits we don't need. */
15739 f
->x_current_class_ptr
= NULL
;
15740 f
->x_current_class_ref
= NULL
;
15741 f
->x_eh_spec_block
= NULL
;
15742 f
->x_in_charge_parm
= NULL
;
15743 f
->x_vtt_parm
= NULL
;
15744 f
->x_return_value
= NULL
;
15745 f
->bindings
= NULL
;
15746 f
->extern_decl_map
= NULL
;
15747 f
->infinite_loops
= NULL
;
15749 /* Clear out the bits we don't need. */
15750 local_names
= NULL
;
15752 /* We're leaving the context of this function, so zap cfun. It's still in
15753 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
15755 current_function_decl
= NULL
;
15757 /* If this is an in-class inline definition, we may have to pop the
15758 bindings for the template parameters that we added in
15759 maybe_begin_member_template_processing when start_function was
15762 maybe_end_member_template_processing ();
15764 /* Leave the scope of the class. */
15766 pop_nested_class ();
15771 current_function_decl
= NULL_TREE
;
15773 invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION
, fndecl
);
15777 /* Create the FUNCTION_DECL for a function definition.
15778 DECLSPECS and DECLARATOR are the parts of the declaration;
15779 they describe the return type and the name of the function,
15780 but twisted together in a fashion that parallels the syntax of C.
15782 This function creates a binding context for the function body
15783 as well as setting up the FUNCTION_DECL in current_function_decl.
15785 Returns a FUNCTION_DECL on success.
15787 If the DECLARATOR is not suitable for a function (it defines a datum
15788 instead), we return 0, which tells yyparse to report a parse error.
15790 May return void_type_node indicating that this method is actually
15791 a friend. See grokfield for more details.
15793 Came here with a `.pushlevel' .
15795 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
15796 CHANGES TO CODE IN `grokfield'. */
15799 grokmethod (cp_decl_specifier_seq
*declspecs
,
15800 const cp_declarator
*declarator
, tree attrlist
)
15802 tree fndecl
= grokdeclarator (declarator
, declspecs
, MEMFUNCDEF
, 0,
15805 if (fndecl
== error_mark_node
)
15806 return error_mark_node
;
15808 if (fndecl
== NULL
|| TREE_CODE (fndecl
) != FUNCTION_DECL
)
15810 error ("invalid member function declaration");
15811 return error_mark_node
;
15815 cplus_decl_attributes (&fndecl
, attrlist
, 0);
15817 /* Pass friends other than inline friend functions back. */
15818 if (fndecl
== void_type_node
)
15821 if (DECL_IN_AGGR_P (fndecl
))
15823 if (DECL_CLASS_SCOPE_P (fndecl
))
15824 error ("%qD is already defined in class %qT", fndecl
,
15825 DECL_CONTEXT (fndecl
));
15826 return error_mark_node
;
15829 check_template_shadow (fndecl
);
15831 if (TREE_PUBLIC (fndecl
))
15832 DECL_COMDAT (fndecl
) = 1;
15833 DECL_DECLARED_INLINE_P (fndecl
) = 1;
15834 DECL_NO_INLINE_WARNING_P (fndecl
) = 1;
15836 /* We process method specializations in finish_struct_1. */
15837 if (processing_template_decl
&& !DECL_TEMPLATE_SPECIALIZATION (fndecl
))
15839 fndecl
= push_template_decl (fndecl
);
15840 if (fndecl
== error_mark_node
)
15844 if (! DECL_FRIEND_P (fndecl
))
15846 if (DECL_CHAIN (fndecl
))
15848 fndecl
= copy_node (fndecl
);
15849 TREE_CHAIN (fndecl
) = NULL_TREE
;
15853 cp_finish_decl (fndecl
, NULL_TREE
, false, NULL_TREE
, 0);
15855 DECL_IN_AGGR_P (fndecl
) = 1;
15860 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
15861 we can lay it out later, when and if its type becomes complete.
15863 Also handle constexpr variables where the initializer involves
15864 an unlowered PTRMEM_CST because the class isn't complete yet. */
15867 maybe_register_incomplete_var (tree var
)
15869 gcc_assert (VAR_P (var
));
15871 /* Keep track of variables with incomplete types. */
15872 if (!processing_template_decl
&& TREE_TYPE (var
) != error_mark_node
15873 && DECL_EXTERNAL (var
))
15875 tree inner_type
= TREE_TYPE (var
);
15877 while (TREE_CODE (inner_type
) == ARRAY_TYPE
)
15878 inner_type
= TREE_TYPE (inner_type
);
15879 inner_type
= TYPE_MAIN_VARIANT (inner_type
);
15881 if ((!COMPLETE_TYPE_P (inner_type
) && CLASS_TYPE_P (inner_type
))
15882 /* RTTI TD entries are created while defining the type_info. */
15883 || (TYPE_LANG_SPECIFIC (inner_type
)
15884 && TYPE_BEING_DEFINED (inner_type
)))
15886 incomplete_var iv
= {var
, inner_type
};
15887 vec_safe_push (incomplete_vars
, iv
);
15889 else if (!(DECL_LANG_SPECIFIC (var
) && DECL_TEMPLATE_INFO (var
))
15890 && decl_constant_var_p (var
)
15891 && (TYPE_PTRMEM_P (inner_type
) || CLASS_TYPE_P (inner_type
)))
15893 /* When the outermost open class is complete we can resolve any
15894 pointers-to-members. */
15895 tree context
= outermost_open_class ();
15896 incomplete_var iv
= {var
, context
};
15897 vec_safe_push (incomplete_vars
, iv
);
15902 /* Called when a class type (given by TYPE) is defined. If there are
15903 any existing VAR_DECLs whose type has been completed by this
15904 declaration, update them now. */
15907 complete_vars (tree type
)
15910 incomplete_var
*iv
;
15912 for (ix
= 0; vec_safe_iterate (incomplete_vars
, ix
, &iv
); )
15914 if (same_type_p (type
, iv
->incomplete_type
))
15916 tree var
= iv
->decl
;
15917 tree type
= TREE_TYPE (var
);
15919 if (type
!= error_mark_node
15920 && (TYPE_MAIN_VARIANT (strip_array_types (type
))
15921 == iv
->incomplete_type
))
15923 /* Complete the type of the variable. The VAR_DECL itself
15924 will be laid out in expand_expr. */
15925 complete_type (type
);
15926 cp_apply_type_quals_to_decl (cp_type_quals (type
), var
);
15929 /* Remove this entry from the list. */
15930 incomplete_vars
->unordered_remove (ix
);
15936 /* Check for pending declarations which may have abstract type. */
15937 complete_type_check_abstract (type
);
15940 /* If DECL is of a type which needs a cleanup, build and return an
15941 expression to perform that cleanup here. Return NULL_TREE if no
15942 cleanup need be done. DECL can also be a _REF when called from
15943 split_nonconstant_init_1. */
15946 cxx_maybe_build_cleanup (tree decl
, tsubst_flags_t complain
)
15952 /* Assume no cleanup is required. */
15953 cleanup
= NULL_TREE
;
15955 if (error_operand_p (decl
))
15958 /* Handle "__attribute__((cleanup))". We run the cleanup function
15959 before the destructor since the destructor is what actually
15960 terminates the lifetime of the object. */
15962 attr
= lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl
));
15971 /* Get the name specified by the user for the cleanup function. */
15972 id
= TREE_VALUE (TREE_VALUE (attr
));
15973 /* Look up the name to find the cleanup function to call. It is
15974 important to use lookup_name here because that is what is
15975 used in c-common.c:handle_cleanup_attribute when performing
15976 initial checks on the attribute. Note that those checks
15977 include ensuring that the function found is not an overloaded
15978 function, or an object with an overloaded call operator,
15979 etc.; we can rely on the fact that the function found is an
15980 ordinary FUNCTION_DECL. */
15981 fn
= lookup_name (id
);
15982 arg
= build_address (decl
);
15983 if (!mark_used (decl
, complain
) && !(complain
& tf_error
))
15984 return error_mark_node
;
15985 cleanup
= cp_build_function_call_nary (fn
, complain
, arg
, NULL_TREE
);
15986 if (cleanup
== error_mark_node
)
15987 return error_mark_node
;
15989 /* Handle ordinary C++ destructors. */
15990 type
= TREE_TYPE (decl
);
15991 if (type_build_dtor_call (type
))
15993 int flags
= LOOKUP_NORMAL
|LOOKUP_NONVIRTUAL
|LOOKUP_DESTRUCTOR
;
15997 if (TREE_CODE (type
) == ARRAY_TYPE
)
16000 addr
= build_address (decl
);
16002 call
= build_delete (TREE_TYPE (addr
), addr
,
16003 sfk_complete_destructor
, flags
, 0, complain
);
16004 if (call
== error_mark_node
)
16005 cleanup
= error_mark_node
;
16006 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type
))
16007 /* Discard the call. */;
16009 cleanup
= cp_build_compound_expr (cleanup
, call
, complain
);
16014 /* build_delete sets the location of the destructor call to the
16015 current location, even though the destructor is going to be
16016 called later, at the end of the current scope. This can lead to
16017 a "jumpy" behavior for users of debuggers when they step around
16018 the end of the block. So let's unset the location of the
16019 destructor call instead. */
16020 protected_set_expr_location (cleanup
, UNKNOWN_LOCATION
);
16024 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl
)))
16025 /* Treat objects with destructors as used; the destructor may do
16026 something substantive. */
16027 && !mark_used (decl
, complain
) && !(complain
& tf_error
))
16028 return error_mark_node
;
16034 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
16035 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
16036 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
16039 static_fn_type (tree memfntype
)
16044 if (TYPE_PTRMEMFUNC_P (memfntype
))
16045 memfntype
= TYPE_PTRMEMFUNC_FN_TYPE (memfntype
);
16046 if (POINTER_TYPE_P (memfntype
)
16047 || TREE_CODE (memfntype
) == FUNCTION_DECL
)
16048 memfntype
= TREE_TYPE (memfntype
);
16049 if (TREE_CODE (memfntype
) == FUNCTION_TYPE
)
16051 gcc_assert (TREE_CODE (memfntype
) == METHOD_TYPE
);
16052 args
= TYPE_ARG_TYPES (memfntype
);
16053 cp_ref_qualifier rqual
= type_memfn_rqual (memfntype
);
16054 fntype
= build_function_type (TREE_TYPE (memfntype
), TREE_CHAIN (args
));
16055 fntype
= apply_memfn_quals (fntype
, type_memfn_quals (memfntype
), rqual
);
16056 fntype
= (cp_build_type_attribute_variant
16057 (fntype
, TYPE_ATTRIBUTES (memfntype
)));
16058 fntype
= (build_exception_variant
16059 (fntype
, TYPE_RAISES_EXCEPTIONS (memfntype
)));
16060 if (TYPE_HAS_LATE_RETURN_TYPE (memfntype
))
16061 TYPE_HAS_LATE_RETURN_TYPE (fntype
) = 1;
16065 /* DECL was originally constructed as a non-static member function,
16066 but turned out to be static. Update it accordingly. */
16069 revert_static_member_fn (tree decl
)
16071 tree stype
= static_fn_type (decl
);
16072 cp_cv_quals quals
= type_memfn_quals (stype
);
16073 cp_ref_qualifier rqual
= type_memfn_rqual (stype
);
16075 if (quals
!= TYPE_UNQUALIFIED
|| rqual
!= REF_QUAL_NONE
)
16076 stype
= apply_memfn_quals (stype
, TYPE_UNQUALIFIED
, REF_QUAL_NONE
);
16078 TREE_TYPE (decl
) = stype
;
16080 if (DECL_ARGUMENTS (decl
))
16081 DECL_ARGUMENTS (decl
) = DECL_CHAIN (DECL_ARGUMENTS (decl
));
16082 DECL_STATIC_FUNCTION_P (decl
) = 1;
16085 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
16086 one of the language-independent trees. */
16088 enum cp_tree_node_structure_enum
16089 cp_tree_node_structure (union lang_tree_node
* t
)
16091 switch (TREE_CODE (&t
->generic
))
16093 case DEFAULT_ARG
: return TS_CP_DEFAULT_ARG
;
16094 case DEFERRED_NOEXCEPT
: return TS_CP_DEFERRED_NOEXCEPT
;
16095 case IDENTIFIER_NODE
: return TS_CP_IDENTIFIER
;
16096 case OVERLOAD
: return TS_CP_OVERLOAD
;
16097 case TEMPLATE_PARM_INDEX
: return TS_CP_TPI
;
16098 case PTRMEM_CST
: return TS_CP_PTRMEM
;
16099 case BASELINK
: return TS_CP_BASELINK
;
16100 case TEMPLATE_DECL
: return TS_CP_TEMPLATE_DECL
;
16101 case STATIC_ASSERT
: return TS_CP_STATIC_ASSERT
;
16102 case ARGUMENT_PACK_SELECT
: return TS_CP_ARGUMENT_PACK_SELECT
;
16103 case TRAIT_EXPR
: return TS_CP_TRAIT_EXPR
;
16104 case LAMBDA_EXPR
: return TS_CP_LAMBDA_EXPR
;
16105 case TEMPLATE_INFO
: return TS_CP_TEMPLATE_INFO
;
16106 case CONSTRAINT_INFO
: return TS_CP_CONSTRAINT_INFO
;
16107 case USERDEF_LITERAL
: return TS_CP_USERDEF_LITERAL
;
16108 default: return TS_CP_GENERIC
;
16112 /* Build the void_list_node (void_type_node having been created). */
16114 build_void_list_node (void)
16116 tree t
= build_tree_list (NULL_TREE
, void_type_node
);
16121 cp_missing_noreturn_ok_p (tree decl
)
16123 /* A missing noreturn is ok for the `main' function. */
16124 return DECL_MAIN_P (decl
);
16127 /* Return the decl used to identify the COMDAT group into which DECL should
16131 cxx_comdat_group (tree decl
)
16133 /* Virtual tables, construction virtual tables, and virtual table
16134 tables all go in a single COMDAT group, named after the primary
16136 if (VAR_P (decl
) && DECL_VTABLE_OR_VTT_P (decl
))
16137 decl
= CLASSTYPE_VTABLES (DECL_CONTEXT (decl
));
16138 /* For all other DECLs, the COMDAT group is the mangled name of the
16139 declaration itself. */
16142 while (DECL_THUNK_P (decl
))
16144 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
16145 into the same section as the target function. In that case
16146 we must return target's name. */
16147 tree target
= THUNK_TARGET (decl
);
16148 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target
)
16149 && DECL_SECTION_NAME (target
) != NULL
16150 && DECL_ONE_ONLY (target
))
16160 /* Returns the return type for FN as written by the user, which may include
16161 a placeholder for a deduced return type. */
16164 fndecl_declared_return_type (tree fn
)
16166 fn
= STRIP_TEMPLATE (fn
);
16167 if (FNDECL_USED_AUTO (fn
))
16169 struct language_function
*f
= NULL
;
16170 if (DECL_STRUCT_FUNCTION (fn
))
16171 f
= DECL_STRUCT_FUNCTION (fn
)->language
;
16173 f
= DECL_SAVED_FUNCTION_DATA (fn
);
16174 return f
->x_auto_return_pattern
;
16176 return TREE_TYPE (TREE_TYPE (fn
));
16179 /* Returns true iff DECL was declared with an auto type and it has
16180 not yet been deduced to a real type. */
16183 undeduced_auto_decl (tree decl
)
16185 if (cxx_dialect
< cxx11
)
16187 return type_uses_auto (TREE_TYPE (decl
));
16190 /* Complain if DECL has an undeduced return type. */
16193 require_deduced_type (tree decl
, tsubst_flags_t complain
)
16195 if (undeduced_auto_decl (decl
))
16197 if (complain
& tf_error
)
16198 error ("use of %qD before deduction of %<auto%>", decl
);
16204 #include "gt-cp-decl.h"