Less verbose fix-it hints for missing header files (PR 87091)
[official-gcc.git] / gcc / cp / decl.c
blobd9f4d3489292c0f14cb9ef4effc8a9345cfa2f23
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)
10 any later version.
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
22 /* Process declarations and symbol lookup for C++ front end.
23 Also constructs types; the standard scalar types at initialization,
24 and structure, union, array and enum types when they are declared. */
26 /* ??? not all decl nodes are given the most useful possible
27 line numbers. For example, the CONST_DECLs for enum values. */
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "target.h"
33 #include "c-family/c-target.h"
34 #include "cp-tree.h"
35 #include "timevar.h"
36 #include "stringpool.h"
37 #include "cgraph.h"
38 #include "stor-layout.h"
39 #include "varasm.h"
40 #include "attribs.h"
41 #include "flags.h"
42 #include "tree-iterator.h"
43 #include "decl.h"
44 #include "intl.h"
45 #include "toplev.h"
46 #include "c-family/c-objc.h"
47 #include "c-family/c-pragma.h"
48 #include "c-family/c-ubsan.h"
49 #include "debug.h"
50 #include "plugin.h"
51 #include "builtins.h"
52 #include "gimplify.h"
53 #include "asan.h"
54 #include "gcc-rich-location.h"
55 #include "langhooks.h"
57 /* Possible cases of bad specifiers type used by bad_specifiers. */
58 enum bad_spec_place {
59 BSP_VAR, /* variable */
60 BSP_PARM, /* parameter */
61 BSP_TYPE, /* type */
62 BSP_FIELD /* field */
65 static const char *redeclaration_error_message (tree, tree);
67 static int decl_jump_unsafe (tree);
68 static void require_complete_types_for_parms (tree);
69 static void push_local_name (tree);
70 static tree grok_reference_init (tree, tree, tree, int);
71 static tree grokvardecl (tree, tree, tree, const cp_decl_specifier_seq *,
72 int, int, int, bool, int, tree);
73 static void check_static_variable_definition (tree, tree);
74 static void record_unknown_type (tree, const char *);
75 static tree builtin_function_1 (tree, tree, bool);
76 static int member_function_or_else (tree, tree, enum overload_flags);
77 static tree local_variable_p_walkfn (tree *, int *, void *);
78 static const char *tag_name (enum tag_types);
79 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
80 static void maybe_deduce_size_from_array_init (tree, tree);
81 static void layout_var_decl (tree);
82 static tree check_initializer (tree, tree, int, vec<tree, va_gc> **);
83 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
84 static void save_function_data (tree);
85 static void copy_type_enum (tree , tree);
86 static void check_function_type (tree, tree);
87 static void finish_constructor_body (void);
88 static void begin_destructor_body (void);
89 static void finish_destructor_body (void);
90 static void record_key_method_defined (tree);
91 static tree create_array_type_for_decl (tree, tree, tree);
92 static tree get_atexit_node (void);
93 static tree get_dso_handle_node (void);
94 static tree start_cleanup_fn (void);
95 static void end_cleanup_fn (void);
96 static tree cp_make_fname_decl (location_t, tree, int);
97 static void initialize_predefined_identifiers (void);
98 static tree check_special_function_return_type
99 (special_function_kind, tree, tree, int, const location_t*);
100 static tree push_cp_library_fn (enum tree_code, tree, int);
101 static tree build_cp_library_fn (tree, enum tree_code, tree, int);
102 static void store_parm_decls (tree);
103 static void initialize_local_var (tree, tree);
104 static void expand_static_init (tree, tree);
106 /* The following symbols are subsumed in the cp_global_trees array, and
107 listed here individually for documentation purposes.
109 C++ extensions
110 tree wchar_decl_node;
112 tree vtable_entry_type;
113 tree delta_type_node;
114 tree __t_desc_type_node;
116 tree class_type_node;
117 tree unknown_type_node;
119 Array type `vtable_entry_type[]'
121 tree vtbl_type_node;
122 tree vtbl_ptr_type_node;
124 Namespaces,
126 tree std_node;
127 tree abi_node;
129 A FUNCTION_DECL which can call `abort'. Not necessarily the
130 one that the user will declare, but sufficient to be called
131 by routines that want to abort the program.
133 tree abort_fndecl;
135 Used by RTTI
136 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
137 tree tinfo_var_id; */
139 tree cp_global_trees[CPTI_MAX];
141 #define local_names cp_function_chain->x_local_names
143 /* A list of objects which have constructors or destructors
144 which reside in the global scope. The decl is stored in
145 the TREE_VALUE slot and the initializer is stored
146 in the TREE_PURPOSE slot. */
147 tree static_aggregates;
149 /* Like static_aggregates, but for thread_local variables. */
150 tree tls_aggregates;
152 /* -- end of C++ */
154 /* A node for the integer constant 2. */
156 tree integer_two_node;
158 /* vector of static decls. */
159 vec<tree, va_gc> *static_decls;
161 /* vector of keyed classes. */
162 vec<tree, va_gc> *keyed_classes;
164 /* Used only for jumps to as-yet undefined labels, since jumps to
165 defined labels can have their validity checked immediately. */
167 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
168 struct named_label_use_entry *next;
169 /* The binding level to which this entry is *currently* attached.
170 This is initially the binding level in which the goto appeared,
171 but is modified as scopes are closed. */
172 cp_binding_level *binding_level;
173 /* The head of the names list that was current when the goto appeared,
174 or the inner scope popped. These are the decls that will *not* be
175 skipped when jumping to the label. */
176 tree names_in_scope;
177 /* The location of the goto, for error reporting. */
178 location_t o_goto_locus;
179 /* True if an OpenMP structured block scope has been closed since
180 the goto appeared. This means that the branch from the label will
181 illegally exit an OpenMP scope. */
182 bool in_omp_scope;
185 /* A list of all LABEL_DECLs in the function that have names. Here so
186 we can clear out their names' definitions at the end of the
187 function, and so we can check the validity of jumps to these labels. */
189 struct GTY((for_user)) named_label_entry {
191 tree name; /* Name of decl. */
193 tree label_decl; /* LABEL_DECL, unless deleted local label. */
195 named_label_entry *outer; /* Outer shadowed chain. */
197 /* The binding level to which the label is *currently* attached.
198 This is initially set to the binding level in which the label
199 is defined, but is modified as scopes are closed. */
200 cp_binding_level *binding_level;
202 /* The head of the names list that was current when the label was
203 defined, or the inner scope popped. These are the decls that will
204 be skipped when jumping to the label. */
205 tree names_in_scope;
207 /* A vector of all decls from all binding levels that would be
208 crossed by a backward branch to the label. */
209 vec<tree, va_gc> *bad_decls;
211 /* A list of uses of the label, before the label is defined. */
212 named_label_use_entry *uses;
214 /* The following bits are set after the label is defined, and are
215 updated as scopes are popped. They indicate that a jump to the
216 label will illegally enter a scope of the given flavor. */
217 bool in_try_scope;
218 bool in_catch_scope;
219 bool in_omp_scope;
220 bool in_transaction_scope;
221 bool in_constexpr_if;
224 #define named_labels cp_function_chain->x_named_labels
226 /* The number of function bodies which we are currently processing.
227 (Zero if we are at namespace scope, one inside the body of a
228 function, two inside the body of a function in a local class, etc.) */
229 int function_depth;
231 /* Whether the exception-specifier is part of a function type (i.e. C++17). */
232 bool flag_noexcept_type;
234 /* States indicating how grokdeclarator() should handle declspecs marked
235 with __attribute__((deprecated)). An object declared as
236 __attribute__((deprecated)) suppresses warnings of uses of other
237 deprecated items. */
238 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
241 /* A list of VAR_DECLs whose type was incomplete at the time the
242 variable was declared. */
244 struct GTY(()) incomplete_var {
245 tree decl;
246 tree incomplete_type;
250 static GTY(()) vec<incomplete_var, va_gc> *incomplete_vars;
252 /* Returns the kind of template specialization we are currently
253 processing, given that it's declaration contained N_CLASS_SCOPES
254 explicit scope qualifications. */
256 tmpl_spec_kind
257 current_tmpl_spec_kind (int n_class_scopes)
259 int n_template_parm_scopes = 0;
260 int seen_specialization_p = 0;
261 int innermost_specialization_p = 0;
262 cp_binding_level *b;
264 /* Scan through the template parameter scopes. */
265 for (b = current_binding_level;
266 b->kind == sk_template_parms;
267 b = b->level_chain)
269 /* If we see a specialization scope inside a parameter scope,
270 then something is wrong. That corresponds to a declaration
271 like:
273 template <class T> template <> ...
275 which is always invalid since [temp.expl.spec] forbids the
276 specialization of a class member template if the enclosing
277 class templates are not explicitly specialized as well. */
278 if (b->explicit_spec_p)
280 if (n_template_parm_scopes == 0)
281 innermost_specialization_p = 1;
282 else
283 seen_specialization_p = 1;
285 else if (seen_specialization_p == 1)
286 return tsk_invalid_member_spec;
288 ++n_template_parm_scopes;
291 /* Handle explicit instantiations. */
292 if (processing_explicit_instantiation)
294 if (n_template_parm_scopes != 0)
295 /* We've seen a template parameter list during an explicit
296 instantiation. For example:
298 template <class T> template void f(int);
300 This is erroneous. */
301 return tsk_invalid_expl_inst;
302 else
303 return tsk_expl_inst;
306 if (n_template_parm_scopes < n_class_scopes)
307 /* We've not seen enough template headers to match all the
308 specialized classes present. For example:
310 template <class T> void R<T>::S<T>::f(int);
312 This is invalid; there needs to be one set of template
313 parameters for each class. */
314 return tsk_insufficient_parms;
315 else if (n_template_parm_scopes == n_class_scopes)
316 /* We're processing a non-template declaration (even though it may
317 be a member of a template class.) For example:
319 template <class T> void S<T>::f(int);
321 The `class T' matches the `S<T>', leaving no template headers
322 corresponding to the `f'. */
323 return tsk_none;
324 else if (n_template_parm_scopes > n_class_scopes + 1)
325 /* We've got too many template headers. For example:
327 template <> template <class T> void f (T);
329 There need to be more enclosing classes. */
330 return tsk_excessive_parms;
331 else
332 /* This must be a template. It's of the form:
334 template <class T> template <class U> void S<T>::f(U);
336 This is a specialization if the innermost level was a
337 specialization; otherwise it's just a definition of the
338 template. */
339 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
342 /* Exit the current scope. */
344 void
345 finish_scope (void)
347 poplevel (0, 0, 0);
350 /* When a label goes out of scope, check to see if that label was used
351 in a valid manner, and issue any appropriate warnings or errors. */
353 static void
354 check_label_used (tree label)
356 if (!processing_template_decl)
358 if (DECL_INITIAL (label) == NULL_TREE)
360 location_t location;
362 error ("label %q+D used but not defined", label);
363 location = input_location;
364 /* FIXME want (LOCATION_FILE (input_location), (line)0) */
365 /* Avoid crashing later. */
366 define_label (location, DECL_NAME (label));
368 else
369 warn_for_unused_label (label);
373 /* Helper function to sort named label entries in a vector by DECL_UID. */
375 static int
376 sort_labels (const void *a, const void *b)
378 tree label1 = *(tree const *) a;
379 tree label2 = *(tree const *) b;
381 /* DECL_UIDs can never be equal. */
382 return DECL_UID (label1) > DECL_UID (label2) ? -1 : +1;
385 /* At the end of a function, all labels declared within the function
386 go out of scope. BLOCK is the top-level block for the
387 function. */
389 static void
390 pop_labels (tree block)
392 if (!named_labels)
393 return;
395 /* We need to add the labels to the block chain, so debug
396 information is emitted. But, we want the order to be stable so
397 need to sort them first. Otherwise the debug output could be
398 randomly ordered. I guess it's mostly stable, unless the hash
399 table implementation changes. */
400 auto_vec<tree, 32> labels (named_labels->elements ());
401 hash_table<named_label_hash>::iterator end (named_labels->end ());
402 for (hash_table<named_label_hash>::iterator iter
403 (named_labels->begin ()); iter != end; ++iter)
405 named_label_entry *ent = *iter;
407 gcc_checking_assert (!ent->outer);
408 if (ent->label_decl)
409 labels.quick_push (ent->label_decl);
410 ggc_free (ent);
412 named_labels = NULL;
413 labels.qsort (sort_labels);
415 while (labels.length ())
417 tree label = labels.pop ();
419 DECL_CHAIN (label) = BLOCK_VARS (block);
420 BLOCK_VARS (block) = label;
422 check_label_used (label);
426 /* At the end of a block with local labels, restore the outer definition. */
428 static void
429 pop_local_label (tree id, tree label)
431 check_label_used (label);
432 named_label_entry **slot = named_labels->find_slot_with_hash
433 (id, IDENTIFIER_HASH_VALUE (id), NO_INSERT);
434 named_label_entry *ent = *slot;
436 if (ent->outer)
437 ent = ent->outer;
438 else
440 ent = ggc_cleared_alloc<named_label_entry> ();
441 ent->name = id;
443 *slot = ent;
446 /* The following two routines are used to interface to Objective-C++.
447 The binding level is purposely treated as an opaque type. */
449 void *
450 objc_get_current_scope (void)
452 return current_binding_level;
455 /* The following routine is used by the NeXT-style SJLJ exceptions;
456 variables get marked 'volatile' so as to not be clobbered by
457 _setjmp()/_longjmp() calls. All variables in the current scope,
458 as well as parent scopes up to (but not including) ENCLOSING_BLK
459 shall be thusly marked. */
461 void
462 objc_mark_locals_volatile (void *enclosing_blk)
464 cp_binding_level *scope;
466 for (scope = current_binding_level;
467 scope && scope != enclosing_blk;
468 scope = scope->level_chain)
470 tree decl;
472 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
473 objc_volatilize_decl (decl);
475 /* Do not climb up past the current function. */
476 if (scope->kind == sk_function_parms)
477 break;
481 /* True if B is the level for the condition of a constexpr if. */
483 static bool
484 level_for_constexpr_if (cp_binding_level *b)
486 return (b->kind == sk_cond && b->this_entity
487 && TREE_CODE (b->this_entity) == IF_STMT
488 && IF_STMT_CONSTEXPR_P (b->this_entity));
491 /* Update data for defined and undefined labels when leaving a scope. */
494 poplevel_named_label_1 (named_label_entry **slot, cp_binding_level *bl)
496 named_label_entry *ent = *slot;
497 cp_binding_level *obl = bl->level_chain;
499 if (ent->binding_level == bl)
501 tree decl;
503 /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
504 TREE_LISTs representing OVERLOADs, so be careful. */
505 for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
506 ? DECL_CHAIN (decl)
507 : TREE_CHAIN (decl)))
508 if (decl_jump_unsafe (decl))
509 vec_safe_push (ent->bad_decls, decl);
511 ent->binding_level = obl;
512 ent->names_in_scope = obl->names;
513 switch (bl->kind)
515 case sk_try:
516 ent->in_try_scope = true;
517 break;
518 case sk_catch:
519 ent->in_catch_scope = true;
520 break;
521 case sk_omp:
522 ent->in_omp_scope = true;
523 break;
524 case sk_transaction:
525 ent->in_transaction_scope = true;
526 break;
527 case sk_block:
528 if (level_for_constexpr_if (bl->level_chain))
529 ent->in_constexpr_if = true;
530 break;
531 default:
532 break;
535 else if (ent->uses)
537 struct named_label_use_entry *use;
539 for (use = ent->uses; use ; use = use->next)
540 if (use->binding_level == bl)
542 use->binding_level = obl;
543 use->names_in_scope = obl->names;
544 if (bl->kind == sk_omp)
545 use->in_omp_scope = true;
549 return 1;
552 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
553 when errors were reported, except for -Werror-unused-but-set-*. */
554 static int unused_but_set_errorcount;
556 /* Exit a binding level.
557 Pop the level off, and restore the state of the identifier-decl mappings
558 that were in effect when this level was entered.
560 If KEEP == 1, this level had explicit declarations, so
561 and create a "block" (a BLOCK node) for the level
562 to record its declarations and subblocks for symbol table output.
564 If FUNCTIONBODY is nonzero, this level is the body of a function,
565 so create a block as if KEEP were set and also clear out all
566 label names.
568 If REVERSE is nonzero, reverse the order of decls before putting
569 them into the BLOCK. */
571 tree
572 poplevel (int keep, int reverse, int functionbody)
574 tree link;
575 /* The chain of decls was accumulated in reverse order.
576 Put it into forward order, just for cleanliness. */
577 tree decls;
578 tree subblocks;
579 tree block;
580 tree decl;
581 scope_kind kind;
583 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
584 restart:
586 block = NULL_TREE;
588 gcc_assert (current_binding_level->kind != sk_class
589 && current_binding_level->kind != sk_namespace);
591 if (current_binding_level->kind == sk_cleanup)
592 functionbody = 0;
593 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
595 gcc_assert (!vec_safe_length (current_binding_level->class_shadowed));
597 /* We used to use KEEP == 2 to indicate that the new block should go
598 at the beginning of the list of blocks at this binding level,
599 rather than the end. This hack is no longer used. */
600 gcc_assert (keep == 0 || keep == 1);
602 if (current_binding_level->keep)
603 keep = 1;
605 /* Any uses of undefined labels, and any defined labels, now operate
606 under constraints of next binding contour. */
607 if (cfun && !functionbody && named_labels)
608 named_labels->traverse<cp_binding_level *, poplevel_named_label_1>
609 (current_binding_level);
611 /* Get the decls in the order they were written.
612 Usually current_binding_level->names is in reverse order.
613 But parameter decls were previously put in forward order. */
615 decls = current_binding_level->names;
616 if (reverse)
618 decls = nreverse (decls);
619 current_binding_level->names = decls;
622 /* If there were any declarations or structure tags in that level,
623 or if this level is a function body,
624 create a BLOCK to record them for the life of this function. */
625 block = NULL_TREE;
626 /* Avoid function body block if possible. */
627 if (functionbody && subblocks && BLOCK_CHAIN (subblocks) == NULL_TREE)
628 keep = 0;
629 else if (keep == 1 || functionbody)
630 block = make_node (BLOCK);
631 if (block != NULL_TREE)
633 BLOCK_VARS (block) = decls;
634 BLOCK_SUBBLOCKS (block) = subblocks;
637 /* In each subblock, record that this is its superior. */
638 if (keep >= 0)
639 for (link = subblocks; link; link = BLOCK_CHAIN (link))
640 BLOCK_SUPERCONTEXT (link) = block;
642 /* Before we remove the declarations first check for unused variables. */
643 if ((warn_unused_variable || warn_unused_but_set_variable)
644 && current_binding_level->kind != sk_template_parms
645 && !processing_template_decl)
646 for (tree d = get_local_decls (); d; d = TREE_CHAIN (d))
648 /* There are cases where D itself is a TREE_LIST. See in
649 push_local_binding where the list of decls returned by
650 getdecls is built. */
651 decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
653 tree type = TREE_TYPE (decl);
654 if (VAR_P (decl)
655 && (! TREE_USED (decl) || !DECL_READ_P (decl))
656 && ! DECL_IN_SYSTEM_HEADER (decl)
657 /* For structured bindings, consider only real variables, not
658 subobjects. */
659 && (DECL_DECOMPOSITION_P (decl) ? !DECL_DECOMP_BASE (decl)
660 : (DECL_NAME (decl) && !DECL_ARTIFICIAL (decl)))
661 && type != error_mark_node
662 && (!CLASS_TYPE_P (type)
663 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
664 || lookup_attribute ("warn_unused",
665 TYPE_ATTRIBUTES (TREE_TYPE (decl)))))
667 if (! TREE_USED (decl))
669 if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
670 warning_at (DECL_SOURCE_LOCATION (decl),
671 OPT_Wunused_variable,
672 "unused structured binding declaration");
673 else
674 warning_at (DECL_SOURCE_LOCATION (decl),
675 OPT_Wunused_variable, "unused variable %qD", decl);
677 else if (DECL_CONTEXT (decl) == current_function_decl
678 // For -Wunused-but-set-variable leave references alone.
679 && !TYPE_REF_P (TREE_TYPE (decl))
680 && errorcount == unused_but_set_errorcount)
682 if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
683 warning_at (DECL_SOURCE_LOCATION (decl),
684 OPT_Wunused_but_set_variable, "structured "
685 "binding declaration set but not used");
686 else
687 warning_at (DECL_SOURCE_LOCATION (decl),
688 OPT_Wunused_but_set_variable,
689 "variable %qD set but not used", decl);
690 unused_but_set_errorcount = errorcount;
695 /* Remove declarations for all the DECLs in this level. */
696 for (link = decls; link; link = TREE_CHAIN (link))
698 decl = TREE_CODE (link) == TREE_LIST ? TREE_VALUE (link) : link;
699 tree name = OVL_NAME (decl);
701 /* Remove the binding. */
702 if (TREE_CODE (decl) == LABEL_DECL)
703 pop_local_label (name, decl);
704 else
705 pop_local_binding (name, decl);
708 /* Restore the IDENTIFIER_TYPE_VALUEs. */
709 for (link = current_binding_level->type_shadowed;
710 link; link = TREE_CHAIN (link))
711 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
713 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
714 list if a `using' declaration put them there. The debugging
715 back ends won't understand OVERLOAD, so we remove them here.
716 Because the BLOCK_VARS are (temporarily) shared with
717 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
718 popped all the bindings. Also remove undeduced 'auto' decls,
719 which LTO doesn't understand, and can't have been used by anything. */
720 if (block)
722 tree* d;
724 for (d = &BLOCK_VARS (block); *d; )
726 if (TREE_CODE (*d) == TREE_LIST
727 || (!processing_template_decl
728 && undeduced_auto_decl (*d)))
729 *d = TREE_CHAIN (*d);
730 else
731 d = &DECL_CHAIN (*d);
735 /* If the level being exited is the top level of a function,
736 check over all the labels. */
737 if (functionbody)
739 if (block)
741 /* Since this is the top level block of a function, the vars are
742 the function's parameters. Don't leave them in the BLOCK
743 because they are found in the FUNCTION_DECL instead. */
744 BLOCK_VARS (block) = 0;
745 pop_labels (block);
747 else
748 pop_labels (subblocks);
751 kind = current_binding_level->kind;
752 if (kind == sk_cleanup)
754 tree stmt;
756 /* If this is a temporary binding created for a cleanup, then we'll
757 have pushed a statement list level. Pop that, create a new
758 BIND_EXPR for the block, and insert it into the stream. */
759 stmt = pop_stmt_list (current_binding_level->statement_list);
760 stmt = c_build_bind_expr (input_location, block, stmt);
761 add_stmt (stmt);
764 leave_scope ();
765 if (functionbody)
767 /* The current function is being defined, so its DECL_INITIAL
768 should be error_mark_node. */
769 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
770 DECL_INITIAL (current_function_decl) = block ? block : subblocks;
771 if (subblocks)
773 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
775 if (BLOCK_SUBBLOCKS (subblocks))
776 BLOCK_OUTER_CURLY_BRACE_P (BLOCK_SUBBLOCKS (subblocks)) = 1;
778 else
779 BLOCK_OUTER_CURLY_BRACE_P (subblocks) = 1;
782 else if (block)
783 current_binding_level->blocks
784 = block_chainon (current_binding_level->blocks, block);
786 /* If we did not make a block for the level just exited,
787 any blocks made for inner levels
788 (since they cannot be recorded as subblocks in that level)
789 must be carried forward so they will later become subblocks
790 of something else. */
791 else if (subblocks)
792 current_binding_level->blocks
793 = block_chainon (current_binding_level->blocks, subblocks);
795 /* Each and every BLOCK node created here in `poplevel' is important
796 (e.g. for proper debugging information) so if we created one
797 earlier, mark it as "used". */
798 if (block)
799 TREE_USED (block) = 1;
801 /* All temporary bindings created for cleanups are popped silently. */
802 if (kind == sk_cleanup)
803 goto restart;
805 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
806 return block;
809 /* Call wrapup_globals_declarations for the globals in NAMESPACE. */
810 /* Diagnose odr-used extern inline variables without definitions
811 in the current TU. */
814 wrapup_namespace_globals ()
816 if (vec<tree, va_gc> *statics = static_decls)
818 tree decl;
819 unsigned int i;
820 FOR_EACH_VEC_ELT (*statics, i, decl)
822 if (warn_unused_function
823 && TREE_CODE (decl) == FUNCTION_DECL
824 && DECL_INITIAL (decl) == 0
825 && DECL_EXTERNAL (decl)
826 && !TREE_PUBLIC (decl)
827 && !DECL_ARTIFICIAL (decl)
828 && !DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
829 && !TREE_NO_WARNING (decl))
830 warning_at (DECL_SOURCE_LOCATION (decl),
831 OPT_Wunused_function,
832 "%qF declared %<static%> but never defined", decl);
834 if (VAR_P (decl)
835 && DECL_EXTERNAL (decl)
836 && DECL_INLINE_VAR_P (decl)
837 && DECL_ODR_USED (decl))
838 error_at (DECL_SOURCE_LOCATION (decl),
839 "odr-used inline variable %qD is not defined", decl);
842 /* Clear out the list, so we don't rescan next time. */
843 static_decls = NULL;
845 /* Write out any globals that need to be output. */
846 return wrapup_global_declarations (statics->address (),
847 statics->length ());
849 return 0;
852 /* In C++, you don't have to write `struct S' to refer to `S'; you
853 can just use `S'. We accomplish this by creating a TYPE_DECL as
854 if the user had written `typedef struct S S'. Create and return
855 the TYPE_DECL for TYPE. */
857 tree
858 create_implicit_typedef (tree name, tree type)
860 tree decl;
862 decl = build_decl (input_location, TYPE_DECL, name, type);
863 DECL_ARTIFICIAL (decl) = 1;
864 /* There are other implicit type declarations, like the one *within*
865 a class that allows you to write `S::S'. We must distinguish
866 amongst these. */
867 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
868 TYPE_NAME (type) = decl;
869 TYPE_STUB_DECL (type) = decl;
871 return decl;
874 /* Remember a local name for name-mangling purposes. */
876 static void
877 push_local_name (tree decl)
879 size_t i, nelts;
880 tree t, name;
882 timevar_start (TV_NAME_LOOKUP);
884 name = DECL_NAME (decl);
886 nelts = vec_safe_length (local_names);
887 for (i = 0; i < nelts; i++)
889 t = (*local_names)[i];
890 if (DECL_NAME (t) == name)
892 retrofit_lang_decl (decl);
893 DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
894 if (DECL_DISCRIMINATOR_SET_P (t))
895 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
896 else
897 DECL_DISCRIMINATOR (decl) = 1;
899 (*local_names)[i] = decl;
900 timevar_stop (TV_NAME_LOOKUP);
901 return;
905 vec_safe_push (local_names, decl);
906 timevar_stop (TV_NAME_LOOKUP);
909 /* Subroutine of duplicate_decls: return truthvalue of whether
910 or not types of these decls match.
912 For C++, we must compare the parameter list so that `int' can match
913 `int&' in a parameter position, but `int&' is not confused with
914 `const int&'. */
917 decls_match (tree newdecl, tree olddecl, bool record_versions /* = true */)
919 int types_match;
921 if (newdecl == olddecl)
922 return 1;
924 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
925 /* If the two DECLs are not even the same kind of thing, we're not
926 interested in their types. */
927 return 0;
929 gcc_assert (DECL_P (newdecl));
931 if (TREE_CODE (newdecl) == FUNCTION_DECL)
933 tree f1 = TREE_TYPE (newdecl);
934 tree f2 = TREE_TYPE (olddecl);
935 tree p1 = TYPE_ARG_TYPES (f1);
936 tree p2 = TYPE_ARG_TYPES (f2);
937 tree r2;
939 /* Specializations of different templates are different functions
940 even if they have the same type. */
941 tree t1 = (DECL_USE_TEMPLATE (newdecl)
942 ? DECL_TI_TEMPLATE (newdecl)
943 : NULL_TREE);
944 tree t2 = (DECL_USE_TEMPLATE (olddecl)
945 ? DECL_TI_TEMPLATE (olddecl)
946 : NULL_TREE);
947 if (t1 != t2)
948 return 0;
950 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
951 && ! (DECL_EXTERN_C_P (newdecl)
952 && DECL_EXTERN_C_P (olddecl)))
953 return 0;
955 /* A new declaration doesn't match a built-in one unless it
956 is also extern "C". */
957 if (DECL_IS_BUILTIN (olddecl)
958 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
959 return 0;
961 if (TREE_CODE (f1) != TREE_CODE (f2))
962 return 0;
964 /* A declaration with deduced return type should use its pre-deduction
965 type for declaration matching. */
966 r2 = fndecl_declared_return_type (olddecl);
968 if (same_type_p (TREE_TYPE (f1), r2))
970 if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
971 && (fndecl_built_in_p (olddecl)
972 #ifdef SYSTEM_IMPLICIT_EXTERN_C
973 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
974 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
975 #endif
978 types_match = self_promoting_args_p (p1);
979 if (p1 == void_list_node)
980 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
982 #ifdef SYSTEM_IMPLICIT_EXTERN_C
983 else if (!prototype_p (f1)
984 && (DECL_EXTERN_C_P (olddecl)
985 && DECL_IN_SYSTEM_HEADER (olddecl)
986 && !DECL_CLASS_SCOPE_P (olddecl))
987 && (DECL_EXTERN_C_P (newdecl)
988 && DECL_IN_SYSTEM_HEADER (newdecl)
989 && !DECL_CLASS_SCOPE_P (newdecl)))
991 types_match = self_promoting_args_p (p2);
992 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
994 #endif
995 else
996 types_match =
997 compparms (p1, p2)
998 && type_memfn_rqual (f1) == type_memfn_rqual (f2)
999 && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1000 || comp_type_attributes (TREE_TYPE (newdecl),
1001 TREE_TYPE (olddecl)) != 0);
1003 else
1004 types_match = 0;
1006 /* The decls dont match if they correspond to two different versions
1007 of the same function. Disallow extern "C" functions to be
1008 versions for now. */
1009 if (types_match
1010 && !DECL_EXTERN_C_P (newdecl)
1011 && !DECL_EXTERN_C_P (olddecl)
1012 && record_versions
1013 && maybe_version_functions (newdecl, olddecl,
1014 (!DECL_FUNCTION_VERSIONED (newdecl)
1015 || !DECL_FUNCTION_VERSIONED (olddecl))))
1016 return 0;
1018 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1020 tree oldres = DECL_TEMPLATE_RESULT (olddecl);
1021 tree newres = DECL_TEMPLATE_RESULT (newdecl);
1023 if (TREE_CODE (newres) != TREE_CODE (oldres))
1024 return 0;
1026 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1027 DECL_TEMPLATE_PARMS (olddecl)))
1028 return 0;
1030 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1031 types_match = (same_type_p (TREE_TYPE (oldres), TREE_TYPE (newres))
1032 && equivalently_constrained (olddecl, newdecl));
1033 else
1034 // We don't need to check equivalently_constrained for variable and
1035 // function templates because we check it on the results.
1036 types_match = decls_match (oldres, newres);
1038 else
1040 /* Need to check scope for variable declaration (VAR_DECL).
1041 For typedef (TYPE_DECL), scope is ignored. */
1042 if (VAR_P (newdecl)
1043 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1044 /* [dcl.link]
1045 Two declarations for an object with C language linkage
1046 with the same name (ignoring the namespace that qualify
1047 it) that appear in different namespace scopes refer to
1048 the same object. */
1049 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1050 return 0;
1052 if (TREE_TYPE (newdecl) == error_mark_node)
1053 types_match = TREE_TYPE (olddecl) == error_mark_node;
1054 else if (TREE_TYPE (olddecl) == NULL_TREE)
1055 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1056 else if (TREE_TYPE (newdecl) == NULL_TREE)
1057 types_match = 0;
1058 else
1059 types_match = comptypes (TREE_TYPE (newdecl),
1060 TREE_TYPE (olddecl),
1061 COMPARE_REDECLARATION);
1064 // Normal functions can be constrained, as can variable partial
1065 // specializations.
1066 if (types_match && VAR_OR_FUNCTION_DECL_P (newdecl))
1067 types_match = equivalently_constrained (newdecl, olddecl);
1069 return types_match;
1072 /* NEWDECL and OLDDECL have identical signatures. If they are
1073 different versions adjust them and return true.
1074 If RECORD is set to true, record function versions. */
1076 bool
1077 maybe_version_functions (tree newdecl, tree olddecl, bool record)
1079 if (!targetm.target_option.function_versions (newdecl, olddecl))
1080 return false;
1082 if (!DECL_FUNCTION_VERSIONED (olddecl))
1084 DECL_FUNCTION_VERSIONED (olddecl) = 1;
1085 if (DECL_ASSEMBLER_NAME_SET_P (olddecl))
1086 mangle_decl (olddecl);
1089 if (!DECL_FUNCTION_VERSIONED (newdecl))
1091 DECL_FUNCTION_VERSIONED (newdecl) = 1;
1092 if (DECL_ASSEMBLER_NAME_SET_P (newdecl))
1093 mangle_decl (newdecl);
1096 if (record)
1097 cgraph_node::record_function_versions (olddecl, newdecl);
1099 return true;
1102 /* If NEWDECL is `static' and an `extern' was seen previously,
1103 warn about it. OLDDECL is the previous declaration.
1105 Note that this does not apply to the C++ case of declaring
1106 a variable `extern const' and then later `const'.
1108 Don't complain about built-in functions, since they are beyond
1109 the user's control. */
1111 void
1112 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1114 if (TREE_CODE (newdecl) == TYPE_DECL
1115 || TREE_CODE (newdecl) == TEMPLATE_DECL
1116 || TREE_CODE (newdecl) == CONST_DECL
1117 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1118 return;
1120 /* Don't get confused by static member functions; that's a different
1121 use of `static'. */
1122 if (TREE_CODE (newdecl) == FUNCTION_DECL
1123 && DECL_STATIC_FUNCTION_P (newdecl))
1124 return;
1126 /* If the old declaration was `static', or the new one isn't, then
1127 everything is OK. */
1128 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1129 return;
1131 /* It's OK to declare a builtin function as `static'. */
1132 if (TREE_CODE (olddecl) == FUNCTION_DECL
1133 && DECL_ARTIFICIAL (olddecl))
1134 return;
1136 auto_diagnostic_group d;
1137 if (permerror (DECL_SOURCE_LOCATION (newdecl),
1138 "%qD was declared %<extern%> and later %<static%>", newdecl))
1139 inform (DECL_SOURCE_LOCATION (olddecl),
1140 "previous declaration of %qD", olddecl);
1143 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1144 function templates. If their exception specifications do not
1145 match, issue a diagnostic. */
1147 static void
1148 check_redeclaration_exception_specification (tree new_decl,
1149 tree old_decl)
1151 tree new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1152 tree old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1154 /* Two default specs are equivalent, don't force evaluation. */
1155 if (UNEVALUATED_NOEXCEPT_SPEC_P (new_exceptions)
1156 && UNEVALUATED_NOEXCEPT_SPEC_P (old_exceptions))
1157 return;
1159 if (!type_dependent_expression_p (old_decl))
1161 maybe_instantiate_noexcept (new_decl);
1162 maybe_instantiate_noexcept (old_decl);
1164 new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1165 old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1167 /* [except.spec]
1169 If any declaration of a function has an exception-specification,
1170 all declarations, including the definition and an explicit
1171 specialization, of that function shall have an
1172 exception-specification with the same set of type-ids. */
1173 if (! DECL_IS_BUILTIN (old_decl)
1174 && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1176 const char *const msg
1177 = G_("declaration of %qF has a different exception specifier");
1178 bool complained = true;
1179 location_t new_loc = DECL_SOURCE_LOCATION (new_decl);
1180 auto_diagnostic_group d;
1181 if (DECL_IN_SYSTEM_HEADER (old_decl))
1182 complained = pedwarn (new_loc, OPT_Wsystem_headers, msg, new_decl);
1183 else if (!flag_exceptions)
1184 /* We used to silently permit mismatched eh specs with
1185 -fno-exceptions, so make them a pedwarn now. */
1186 complained = pedwarn (new_loc, OPT_Wpedantic, msg, new_decl);
1187 else
1188 error_at (new_loc, msg, new_decl);
1189 if (complained)
1190 inform (DECL_SOURCE_LOCATION (old_decl),
1191 "from previous declaration %qF", old_decl);
1195 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1196 Otherwise issue diagnostics. */
1198 static bool
1199 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1201 old_decl = STRIP_TEMPLATE (old_decl);
1202 new_decl = STRIP_TEMPLATE (new_decl);
1203 if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1204 || !VAR_OR_FUNCTION_DECL_P (new_decl))
1205 return true;
1206 if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1207 == DECL_DECLARED_CONSTEXPR_P (new_decl))
1208 return true;
1209 if (TREE_CODE (old_decl) == FUNCTION_DECL)
1211 if (fndecl_built_in_p (old_decl))
1213 /* Hide a built-in declaration. */
1214 DECL_DECLARED_CONSTEXPR_P (old_decl)
1215 = DECL_DECLARED_CONSTEXPR_P (new_decl);
1216 return true;
1218 /* 7.1.5 [dcl.constexpr]
1219 Note: An explicit specialization can differ from the template
1220 declaration with respect to the constexpr specifier. */
1221 if (! DECL_TEMPLATE_SPECIALIZATION (old_decl)
1222 && DECL_TEMPLATE_SPECIALIZATION (new_decl))
1223 return true;
1225 error_at (DECL_SOURCE_LOCATION (new_decl),
1226 "redeclaration %qD differs in %<constexpr%> "
1227 "from previous declaration", new_decl);
1228 inform (DECL_SOURCE_LOCATION (old_decl),
1229 "previous declaration %qD", old_decl);
1230 return false;
1232 return true;
1235 // If OLDDECL and NEWDECL are concept declarations with the same type
1236 // (i.e., and template parameters), but different requirements,
1237 // emit diagnostics and return true. Otherwise, return false.
1238 static inline bool
1239 check_concept_refinement (tree olddecl, tree newdecl)
1241 if (!DECL_DECLARED_CONCEPT_P (olddecl) || !DECL_DECLARED_CONCEPT_P (newdecl))
1242 return false;
1244 tree d1 = DECL_TEMPLATE_RESULT (olddecl);
1245 tree d2 = DECL_TEMPLATE_RESULT (newdecl);
1246 if (TREE_CODE (d1) != TREE_CODE (d2))
1247 return false;
1249 tree t1 = TREE_TYPE (d1);
1250 tree t2 = TREE_TYPE (d2);
1251 if (TREE_CODE (d1) == FUNCTION_DECL)
1253 if (compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2))
1254 && comp_template_parms (DECL_TEMPLATE_PARMS (olddecl),
1255 DECL_TEMPLATE_PARMS (newdecl))
1256 && !equivalently_constrained (olddecl, newdecl))
1258 error ("cannot specialize concept %q#D", olddecl);
1259 return true;
1262 return false;
1265 /* DECL is a redeclaration of a function or function template. If
1266 it does have default arguments issue a diagnostic. Note: this
1267 function is used to enforce the requirements in C++11 8.3.6 about
1268 no default arguments in redeclarations. */
1270 static void
1271 check_redeclaration_no_default_args (tree decl)
1273 gcc_assert (DECL_DECLARES_FUNCTION_P (decl));
1275 for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
1276 t && t != void_list_node; t = TREE_CHAIN (t))
1277 if (TREE_PURPOSE (t))
1279 permerror (DECL_SOURCE_LOCATION (decl),
1280 "redeclaration of %q#D may not have default "
1281 "arguments", decl);
1282 return;
1286 /* NEWDECL is a redeclaration of a function or function template OLDDECL,
1287 in any case represented as FUNCTION_DECLs (the DECL_TEMPLATE_RESULTs of
1288 the TEMPLATE_DECLs in case of function templates). This function is used
1289 to enforce the final part of C++17 11.3.6/4, about a single declaration:
1290 "If a friend declaration specifies a default argument expression, that
1291 declaration shall be a definition and shall be the only declaration of
1292 the function or function template in the translation unit." */
1294 static void
1295 check_no_redeclaration_friend_default_args (tree olddecl, tree newdecl,
1296 bool olddecl_hidden_friend_p)
1298 if (!olddecl_hidden_friend_p && !DECL_FRIEND_P (newdecl))
1299 return;
1301 tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl);
1302 tree t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
1304 for (; t1 && t1 != void_list_node;
1305 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1306 if ((olddecl_hidden_friend_p && TREE_PURPOSE (t1))
1307 || (DECL_FRIEND_P (newdecl) && TREE_PURPOSE (t2)))
1309 auto_diagnostic_group d;
1310 if (permerror (DECL_SOURCE_LOCATION (newdecl),
1311 "friend declaration of %q#D specifies default "
1312 "arguments and isn't the only declaration", newdecl))
1313 inform (DECL_SOURCE_LOCATION (olddecl),
1314 "previous declaration of %q#D", olddecl);
1315 return;
1319 /* Merge tree bits that correspond to attributes noreturn, nothrow,
1320 const, malloc, and pure from NEWDECL with those of OLDDECL. */
1322 static void
1323 merge_attribute_bits (tree newdecl, tree olddecl)
1325 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1326 TREE_THIS_VOLATILE (olddecl) |= TREE_THIS_VOLATILE (newdecl);
1327 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1328 TREE_NOTHROW (olddecl) |= TREE_NOTHROW (newdecl);
1329 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1330 TREE_READONLY (olddecl) |= TREE_READONLY (newdecl);
1331 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1332 DECL_IS_MALLOC (olddecl) |= DECL_IS_MALLOC (newdecl);
1333 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1334 DECL_PURE_P (olddecl) |= DECL_PURE_P (newdecl);
1335 DECL_UNINLINABLE (newdecl) |= DECL_UNINLINABLE (olddecl);
1336 DECL_UNINLINABLE (olddecl) |= DECL_UNINLINABLE (newdecl);
1339 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1340 && lookup_attribute ("gnu_inline", \
1341 DECL_ATTRIBUTES (fn)))
1343 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1344 If the redeclaration is invalid, a diagnostic is issued, and the
1345 error_mark_node is returned. Otherwise, OLDDECL is returned.
1347 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1348 returned.
1350 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1352 tree
1353 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1355 unsigned olddecl_uid = DECL_UID (olddecl);
1356 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1357 int olddecl_hidden_friend = 0;
1358 int new_defines_function = 0;
1359 tree new_template_info;
1360 location_t olddecl_loc = DECL_SOURCE_LOCATION (olddecl);
1361 location_t newdecl_loc = DECL_SOURCE_LOCATION (newdecl);
1363 if (newdecl == olddecl)
1364 return olddecl;
1366 types_match = decls_match (newdecl, olddecl);
1368 /* If either the type of the new decl or the type of the old decl is an
1369 error_mark_node, then that implies that we have already issued an
1370 error (earlier) for some bogus type specification, and in that case,
1371 it is rather pointless to harass the user with yet more error message
1372 about the same declaration, so just pretend the types match here. */
1373 if (TREE_TYPE (newdecl) == error_mark_node
1374 || TREE_TYPE (olddecl) == error_mark_node)
1375 return error_mark_node;
1377 if (DECL_NAME (newdecl)
1378 && DECL_NAME (olddecl)
1379 && UDLIT_OPER_P (DECL_NAME (newdecl))
1380 && UDLIT_OPER_P (DECL_NAME (olddecl)))
1382 if (TREE_CODE (newdecl) == TEMPLATE_DECL
1383 && TREE_CODE (olddecl) != TEMPLATE_DECL
1384 && check_raw_literal_operator (olddecl))
1385 error_at (newdecl_loc,
1386 "literal operator template %qD conflicts with"
1387 " raw literal operator %qD", newdecl, olddecl);
1388 else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1389 && TREE_CODE (olddecl) == TEMPLATE_DECL
1390 && check_raw_literal_operator (newdecl))
1391 error_at (newdecl_loc,
1392 "raw literal operator %qD conflicts with"
1393 " literal operator template %qD", newdecl, olddecl);
1396 /* True to merge attributes between the declarations, false to
1397 set OLDDECL's attributes to those of NEWDECL (for template
1398 explicit specializations that specify their own attributes
1399 independent of those specified for the primary template). */
1400 const bool merge_attr = (TREE_CODE (newdecl) != FUNCTION_DECL
1401 || !DECL_TEMPLATE_SPECIALIZATION (newdecl)
1402 || DECL_TEMPLATE_SPECIALIZATION (olddecl));
1404 if (DECL_P (olddecl)
1405 && TREE_CODE (newdecl) == FUNCTION_DECL
1406 && TREE_CODE (olddecl) == FUNCTION_DECL
1407 && merge_attr
1408 && diagnose_mismatched_attributes (olddecl, newdecl))
1410 if (DECL_INITIAL (olddecl))
1411 inform (olddecl_loc,
1412 "previous definition of %qD was here", olddecl);
1413 else
1414 inform (olddecl_loc,
1415 "previous declaration of %qD was here", olddecl);
1418 /* Check for redeclaration and other discrepancies. */
1419 if (TREE_CODE (olddecl) == FUNCTION_DECL
1420 && DECL_ARTIFICIAL (olddecl))
1422 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1423 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1425 /* Avoid warnings redeclaring built-ins which have not been
1426 explicitly declared. */
1427 if (DECL_ANTICIPATED (olddecl))
1429 if (TREE_PUBLIC (newdecl)
1430 && CP_DECL_CONTEXT (newdecl) == global_namespace)
1431 warning_at (newdecl_loc,
1432 OPT_Wbuiltin_declaration_mismatch,
1433 "built-in function %qD declared as non-function",
1434 newdecl);
1435 return NULL_TREE;
1438 /* If you declare a built-in or predefined function name as static,
1439 the old definition is overridden, but optionally warn this was a
1440 bad choice of name. */
1441 if (! TREE_PUBLIC (newdecl))
1443 warning_at (newdecl_loc,
1444 OPT_Wshadow,
1445 fndecl_built_in_p (olddecl)
1446 ? G_("shadowing built-in function %q#D")
1447 : G_("shadowing library function %q#D"), olddecl);
1448 /* Discard the old built-in function. */
1449 return NULL_TREE;
1451 /* If the built-in is not ansi, then programs can override
1452 it even globally without an error. */
1453 else if (! fndecl_built_in_p (olddecl))
1454 warning_at (newdecl_loc, 0,
1455 "library function %q#D redeclared as non-function %q#D",
1456 olddecl, newdecl);
1457 else
1458 error_at (newdecl_loc,
1459 "declaration of %q#D conflicts with built-in "
1460 "declaration %q#D", newdecl, olddecl);
1461 return NULL_TREE;
1463 else if (DECL_OMP_DECLARE_REDUCTION_P (olddecl))
1465 gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (newdecl));
1466 error_at (newdecl_loc,
1467 "redeclaration of %<pragma omp declare reduction%>");
1468 inform (olddecl_loc,
1469 "previous %<pragma omp declare reduction%> declaration");
1470 return error_mark_node;
1472 else if (!types_match)
1474 /* Avoid warnings redeclaring built-ins which have not been
1475 explicitly declared. */
1476 if (DECL_ANTICIPATED (olddecl))
1478 tree t1, t2;
1480 /* A new declaration doesn't match a built-in one unless it
1481 is also extern "C". */
1482 gcc_assert (DECL_IS_BUILTIN (olddecl));
1483 gcc_assert (DECL_EXTERN_C_P (olddecl));
1484 if (!DECL_EXTERN_C_P (newdecl))
1485 return NULL_TREE;
1487 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1488 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1489 t1 || t2;
1490 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1492 if (!t1 || !t2)
1493 break;
1494 /* FILE, tm types are not known at the time
1495 we create the builtins. */
1496 for (unsigned i = 0;
1497 i < sizeof (builtin_structptr_types)
1498 / sizeof (builtin_structptr_type);
1499 ++i)
1500 if (TREE_VALUE (t2) == builtin_structptr_types[i].node)
1502 tree t = TREE_VALUE (t1);
1504 if (TYPE_PTR_P (t)
1505 && TYPE_IDENTIFIER (TREE_TYPE (t))
1506 == get_identifier (builtin_structptr_types[i].str)
1507 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1509 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1511 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1512 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1513 types_match = decls_match (newdecl, olddecl);
1514 if (types_match)
1515 return duplicate_decls (newdecl, olddecl,
1516 newdecl_is_friend);
1517 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1519 goto next_arg;
1522 if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1523 break;
1524 next_arg:;
1527 warning_at (newdecl_loc,
1528 OPT_Wbuiltin_declaration_mismatch,
1529 "declaration of %q#D conflicts with built-in "
1530 "declaration %q#D", newdecl, olddecl);
1532 else if ((DECL_EXTERN_C_P (newdecl)
1533 && DECL_EXTERN_C_P (olddecl))
1534 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1535 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1537 /* Don't really override olddecl for __* prefixed builtins
1538 except for __[^b]*_chk, the compiler might be using those
1539 explicitly. */
1540 if (fndecl_built_in_p (olddecl))
1542 tree id = DECL_NAME (olddecl);
1543 const char *name = IDENTIFIER_POINTER (id);
1544 size_t len;
1546 if (name[0] == '_'
1547 && name[1] == '_'
1548 && (strncmp (name + 2, "builtin_",
1549 strlen ("builtin_")) == 0
1550 || (len = strlen (name)) <= strlen ("___chk")
1551 || memcmp (name + len - strlen ("_chk"),
1552 "_chk", strlen ("_chk") + 1) != 0))
1554 if (DECL_INITIAL (newdecl))
1556 error_at (newdecl_loc,
1557 "definition of %q#D ambiguates built-in "
1558 "declaration %q#D", newdecl, olddecl);
1559 return error_mark_node;
1561 auto_diagnostic_group d;
1562 if (permerror (newdecl_loc,
1563 "new declaration %q#D ambiguates built-in"
1564 " declaration %q#D", newdecl, olddecl)
1565 && flag_permissive)
1566 inform (newdecl_loc,
1567 "ignoring the %q#D declaration", newdecl);
1568 return flag_permissive ? olddecl : error_mark_node;
1572 /* A near match; override the builtin. */
1574 if (TREE_PUBLIC (newdecl))
1575 warning_at (newdecl_loc,
1576 OPT_Wbuiltin_declaration_mismatch,
1577 "new declaration %q#D ambiguates built-in "
1578 "declaration %q#D", newdecl, olddecl);
1579 else
1580 warning (OPT_Wshadow,
1581 fndecl_built_in_p (olddecl)
1582 ? G_("shadowing built-in function %q#D")
1583 : G_("shadowing library function %q#D"), olddecl);
1585 else
1586 /* Discard the old built-in function. */
1587 return NULL_TREE;
1589 /* Replace the old RTL to avoid problems with inlining. */
1590 COPY_DECL_RTL (newdecl, olddecl);
1592 /* Even if the types match, prefer the new declarations type for
1593 built-ins which have not been explicitly declared, for
1594 exception lists, etc... */
1595 else if (DECL_IS_BUILTIN (olddecl))
1597 tree type = TREE_TYPE (newdecl);
1598 tree attribs = (*targetm.merge_type_attributes)
1599 (TREE_TYPE (olddecl), type);
1601 type = cp_build_type_attribute_variant (type, attribs);
1602 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1605 /* If a function is explicitly declared "throw ()", propagate that to
1606 the corresponding builtin. */
1607 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1608 && DECL_ANTICIPATED (olddecl)
1609 && TREE_NOTHROW (newdecl)
1610 && !TREE_NOTHROW (olddecl))
1612 enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1613 tree tmpdecl = builtin_decl_explicit (fncode);
1614 if (tmpdecl && tmpdecl != olddecl && types_match)
1615 TREE_NOTHROW (tmpdecl) = 1;
1618 /* Whether or not the builtin can throw exceptions has no
1619 bearing on this declarator. */
1620 TREE_NOTHROW (olddecl) = 0;
1622 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1624 /* If a builtin function is redeclared as `static', merge
1625 the declarations, but make the original one static. */
1626 DECL_THIS_STATIC (olddecl) = 1;
1627 TREE_PUBLIC (olddecl) = 0;
1629 /* Make the old declaration consistent with the new one so
1630 that all remnants of the builtin-ness of this function
1631 will be banished. */
1632 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1633 COPY_DECL_RTL (newdecl, olddecl);
1636 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1638 /* C++ Standard, 3.3, clause 4:
1639 "[Note: a namespace name or a class template name must be unique
1640 in its declarative region (7.3.2, clause 14). ]" */
1641 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1642 && TREE_CODE (newdecl) != NAMESPACE_DECL
1643 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1644 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1645 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1646 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1648 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1649 && TREE_CODE (newdecl) != TYPE_DECL)
1650 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1651 && TREE_CODE (olddecl) != TYPE_DECL))
1653 /* We do nothing special here, because C++ does such nasty
1654 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1655 get shadowed, and know that if we need to find a TYPE_DECL
1656 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1657 slot of the identifier. */
1658 return NULL_TREE;
1661 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1662 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1663 || (TREE_CODE (olddecl) == FUNCTION_DECL
1664 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1665 return NULL_TREE;
1668 error ("%q#D redeclared as different kind of symbol", newdecl);
1669 if (TREE_CODE (olddecl) == TREE_LIST)
1670 olddecl = TREE_VALUE (olddecl);
1671 inform (olddecl_loc,
1672 "previous declaration %q#D", olddecl);
1674 return error_mark_node;
1676 else if (!types_match)
1678 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1679 /* These are certainly not duplicate declarations; they're
1680 from different scopes. */
1681 return NULL_TREE;
1683 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1685 /* The name of a class template may not be declared to refer to
1686 any other template, class, function, object, namespace, value,
1687 or type in the same scope. */
1688 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1689 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1691 error_at (newdecl_loc,
1692 "conflicting declaration of template %q#D", newdecl);
1693 inform (olddecl_loc,
1694 "previous declaration %q#D", olddecl);
1695 return error_mark_node;
1697 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1698 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1699 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1700 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1701 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1702 DECL_TEMPLATE_PARMS (olddecl))
1703 /* Template functions can be disambiguated by
1704 return type. */
1705 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1706 TREE_TYPE (TREE_TYPE (olddecl)))
1707 // Template functions can also be disambiguated by
1708 // constraints.
1709 && equivalently_constrained (olddecl, newdecl))
1711 error_at (newdecl_loc, "ambiguating new declaration %q#D",
1712 newdecl);
1713 inform (olddecl_loc,
1714 "old declaration %q#D", olddecl);
1716 else if (check_concept_refinement (olddecl, newdecl))
1717 return error_mark_node;
1718 return NULL_TREE;
1720 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1722 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1724 error_at (newdecl_loc,
1725 "conflicting declaration of C function %q#D",
1726 newdecl);
1727 inform (olddecl_loc,
1728 "previous declaration %q#D", olddecl);
1729 return NULL_TREE;
1731 /* For function versions, params and types match, but they
1732 are not ambiguous. */
1733 else if ((!DECL_FUNCTION_VERSIONED (newdecl)
1734 && !DECL_FUNCTION_VERSIONED (olddecl))
1735 // The functions have the same parameter types.
1736 && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1737 TYPE_ARG_TYPES (TREE_TYPE (olddecl)))
1738 // And the same constraints.
1739 && equivalently_constrained (newdecl, olddecl))
1741 error_at (newdecl_loc,
1742 "ambiguating new declaration of %q#D", newdecl);
1743 inform (olddecl_loc,
1744 "old declaration %q#D", olddecl);
1745 return error_mark_node;
1747 else
1748 return NULL_TREE;
1750 else
1752 error_at (newdecl_loc, "conflicting declaration %q#D", newdecl);
1753 inform (olddecl_loc,
1754 "previous declaration as %q#D", olddecl);
1755 return error_mark_node;
1758 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1759 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1760 && (!DECL_TEMPLATE_INFO (newdecl)
1761 || (DECL_TI_TEMPLATE (newdecl)
1762 != DECL_TI_TEMPLATE (olddecl))))
1763 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1764 && (!DECL_TEMPLATE_INFO (olddecl)
1765 || (DECL_TI_TEMPLATE (olddecl)
1766 != DECL_TI_TEMPLATE (newdecl))))))
1767 /* It's OK to have a template specialization and a non-template
1768 with the same type, or to have specializations of two
1769 different templates with the same type. Note that if one is a
1770 specialization, and the other is an instantiation of the same
1771 template, that we do not exit at this point. That situation
1772 can occur if we instantiate a template class, and then
1773 specialize one of its methods. This situation is valid, but
1774 the declarations must be merged in the usual way. */
1775 return NULL_TREE;
1776 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1777 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1778 && !DECL_USE_TEMPLATE (newdecl))
1779 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1780 && !DECL_USE_TEMPLATE (olddecl))))
1781 /* One of the declarations is a template instantiation, and the
1782 other is not a template at all. That's OK. */
1783 return NULL_TREE;
1784 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1786 /* In [namespace.alias] we have:
1788 In a declarative region, a namespace-alias-definition can be
1789 used to redefine a namespace-alias declared in that declarative
1790 region to refer only to the namespace to which it already
1791 refers.
1793 Therefore, if we encounter a second alias directive for the same
1794 alias, we can just ignore the second directive. */
1795 if (DECL_NAMESPACE_ALIAS (newdecl)
1796 && (DECL_NAMESPACE_ALIAS (newdecl)
1797 == DECL_NAMESPACE_ALIAS (olddecl)))
1798 return olddecl;
1800 /* Leave it to update_binding to merge or report error. */
1801 return NULL_TREE;
1803 else
1805 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1806 if (errmsg)
1808 auto_diagnostic_group d;
1809 error_at (newdecl_loc, errmsg, newdecl);
1810 if (DECL_NAME (olddecl) != NULL_TREE)
1811 inform (olddecl_loc,
1812 (DECL_INITIAL (olddecl) && namespace_bindings_p ())
1813 ? G_("%q#D previously defined here")
1814 : G_("%q#D previously declared here"), olddecl);
1815 return error_mark_node;
1817 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1818 && DECL_INITIAL (olddecl) != NULL_TREE
1819 && !prototype_p (TREE_TYPE (olddecl))
1820 && prototype_p (TREE_TYPE (newdecl)))
1822 /* Prototype decl follows defn w/o prototype. */
1823 auto_diagnostic_group d;
1824 if (warning_at (newdecl_loc, 0,
1825 "prototype specified for %q#D", newdecl))
1826 inform (olddecl_loc,
1827 "previous non-prototype definition here");
1829 else if (VAR_OR_FUNCTION_DECL_P (olddecl)
1830 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1832 /* [dcl.link]
1833 If two declarations of the same function or object
1834 specify different linkage-specifications ..., the program
1835 is ill-formed.... Except for functions with C++ linkage,
1836 a function declaration without a linkage specification
1837 shall not precede the first linkage specification for
1838 that function. A function can be declared without a
1839 linkage specification after an explicit linkage
1840 specification has been seen; the linkage explicitly
1841 specified in the earlier declaration is not affected by
1842 such a function declaration.
1844 DR 563 raises the question why the restrictions on
1845 functions should not also apply to objects. Older
1846 versions of G++ silently ignore the linkage-specification
1847 for this example:
1849 namespace N {
1850 extern int i;
1851 extern "C" int i;
1854 which is clearly wrong. Therefore, we now treat objects
1855 like functions. */
1856 if (current_lang_depth () == 0)
1858 /* There is no explicit linkage-specification, so we use
1859 the linkage from the previous declaration. */
1860 retrofit_lang_decl (newdecl);
1861 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1863 else
1865 auto_diagnostic_group d;
1866 error_at (newdecl_loc,
1867 "conflicting declaration of %q#D with %qL linkage",
1868 newdecl, DECL_LANGUAGE (newdecl));
1869 inform (olddecl_loc,
1870 "previous declaration with %qL linkage",
1871 DECL_LANGUAGE (olddecl));
1875 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1877 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1879 /* Note: free functions, as TEMPLATE_DECLs, are handled below. */
1880 if (DECL_FUNCTION_MEMBER_P (olddecl)
1881 && (/* grokfndecl passes member function templates too
1882 as FUNCTION_DECLs. */
1883 DECL_TEMPLATE_INFO (olddecl)
1884 /* C++11 8.3.6/6.
1885 Default arguments for a member function of a class
1886 template shall be specified on the initial declaration
1887 of the member function within the class template. */
1888 || CLASSTYPE_TEMPLATE_INFO (CP_DECL_CONTEXT (olddecl))))
1889 check_redeclaration_no_default_args (newdecl);
1890 else
1892 tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl);
1893 tree t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
1894 int i = 1;
1896 for (; t1 && t1 != void_list_node;
1897 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1898 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1900 if (simple_cst_equal (TREE_PURPOSE (t1),
1901 TREE_PURPOSE (t2)) == 1)
1903 auto_diagnostic_group d;
1904 if (permerror (newdecl_loc,
1905 "default argument given for parameter "
1906 "%d of %q#D", i, newdecl))
1907 inform (olddecl_loc,
1908 "previous specification in %q#D here",
1909 olddecl);
1911 else
1913 auto_diagnostic_group d;
1914 error_at (newdecl_loc,
1915 "default argument given for parameter %d "
1916 "of %q#D", i, newdecl);
1917 inform (olddecl_loc,
1918 "previous specification in %q#D here",
1919 olddecl);
1923 /* C++17 11.3.6/4: "If a friend declaration specifies a default
1924 argument expression, that declaration... shall be the only
1925 declaration of the function or function template in the
1926 translation unit." */
1927 check_no_redeclaration_friend_default_args
1928 (olddecl, newdecl, DECL_HIDDEN_FRIEND_P (olddecl));
1933 /* Do not merge an implicit typedef with an explicit one. In:
1935 class A;
1937 typedef class A A __attribute__ ((foo));
1939 the attribute should apply only to the typedef. */
1940 if (TREE_CODE (olddecl) == TYPE_DECL
1941 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1942 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1943 return NULL_TREE;
1945 /* If new decl is `static' and an `extern' was seen previously,
1946 warn about it. */
1947 warn_extern_redeclared_static (newdecl, olddecl);
1949 if (!validate_constexpr_redeclaration (olddecl, newdecl))
1950 return error_mark_node;
1952 /* We have committed to returning 1 at this point. */
1953 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1955 /* Now that functions must hold information normally held
1956 by field decls, there is extra work to do so that
1957 declaration information does not get destroyed during
1958 definition. */
1959 if (DECL_VINDEX (olddecl))
1960 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1961 if (DECL_CONTEXT (olddecl))
1962 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1963 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1964 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1965 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1966 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1967 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1968 DECL_FINAL_P (newdecl) |= DECL_FINAL_P (olddecl);
1969 DECL_OVERRIDE_P (newdecl) |= DECL_OVERRIDE_P (olddecl);
1970 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1971 if (DECL_OVERLOADED_OPERATOR_P (olddecl))
1972 DECL_OVERLOADED_OPERATOR_CODE_RAW (newdecl)
1973 = DECL_OVERLOADED_OPERATOR_CODE_RAW (olddecl);
1974 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1976 /* Optionally warn about more than one declaration for the same
1977 name, but don't warn about a function declaration followed by a
1978 definition. */
1979 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1980 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1981 /* Don't warn about extern decl followed by definition. */
1982 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1983 /* Don't warn about friends, let add_friend take care of it. */
1984 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1985 /* Don't warn about declaration followed by specialization. */
1986 && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1987 || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1989 auto_diagnostic_group d;
1990 if (warning_at (newdecl_loc,
1991 OPT_Wredundant_decls,
1992 "redundant redeclaration of %qD in same scope",
1993 newdecl))
1994 inform (olddecl_loc,
1995 "previous declaration of %qD", olddecl);
1998 if (!(DECL_TEMPLATE_INSTANTIATION (olddecl)
1999 && DECL_TEMPLATE_SPECIALIZATION (newdecl)))
2001 if (DECL_DELETED_FN (newdecl))
2003 auto_diagnostic_group d;
2004 error_at (newdecl_loc, "deleted definition of %qD", newdecl);
2005 inform (olddecl_loc,
2006 "previous declaration of %qD", olddecl);
2008 DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
2012 /* Deal with C++: must preserve virtual function table size. */
2013 if (TREE_CODE (olddecl) == TYPE_DECL)
2015 tree newtype = TREE_TYPE (newdecl);
2016 tree oldtype = TREE_TYPE (olddecl);
2018 if (newtype != error_mark_node && oldtype != error_mark_node
2019 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
2020 CLASSTYPE_FRIEND_CLASSES (newtype)
2021 = CLASSTYPE_FRIEND_CLASSES (oldtype);
2023 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
2026 /* Copy all the DECL_... slots specified in the new decl except for
2027 any that we copy here from the old type. */
2028 if (merge_attr)
2029 DECL_ATTRIBUTES (newdecl)
2030 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
2031 else
2032 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2034 if (DECL_DECLARES_FUNCTION_P (olddecl) && DECL_DECLARES_FUNCTION_P (newdecl))
2036 olddecl_friend = DECL_FRIEND_P (olddecl);
2037 olddecl_hidden_friend = DECL_HIDDEN_FRIEND_P (olddecl);
2038 hidden_friend = (DECL_ANTICIPATED (olddecl)
2039 && DECL_HIDDEN_FRIEND_P (olddecl)
2040 && newdecl_is_friend);
2041 if (!hidden_friend)
2043 DECL_ANTICIPATED (olddecl) = 0;
2044 DECL_HIDDEN_FRIEND_P (olddecl) = 0;
2048 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2050 tree old_result = DECL_TEMPLATE_RESULT (olddecl);
2051 tree new_result = DECL_TEMPLATE_RESULT (newdecl);
2052 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
2053 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
2054 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
2055 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
2057 DECL_ATTRIBUTES (old_result)
2058 = (*targetm.merge_decl_attributes) (old_result, new_result);
2060 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2062 if (DECL_SOURCE_LOCATION (newdecl)
2063 != DECL_SOURCE_LOCATION (olddecl))
2065 /* Per C++11 8.3.6/4, default arguments cannot be added in
2066 later declarations of a function template. */
2067 check_redeclaration_no_default_args (newdecl);
2068 /* C++17 11.3.6/4: "If a friend declaration specifies a default
2069 argument expression, that declaration... shall be the only
2070 declaration of the function or function template in the
2071 translation unit." */
2072 check_no_redeclaration_friend_default_args
2073 (old_result, new_result, olddecl_hidden_friend);
2076 check_default_args (newdecl);
2078 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
2079 && DECL_INITIAL (new_result))
2081 if (DECL_INITIAL (old_result))
2082 DECL_UNINLINABLE (old_result) = 1;
2083 else
2084 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
2085 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
2086 DECL_NOT_REALLY_EXTERN (old_result)
2087 = DECL_NOT_REALLY_EXTERN (new_result);
2088 DECL_INTERFACE_KNOWN (old_result)
2089 = DECL_INTERFACE_KNOWN (new_result);
2090 DECL_DECLARED_INLINE_P (old_result)
2091 = DECL_DECLARED_INLINE_P (new_result);
2092 DECL_DISREGARD_INLINE_LIMITS (old_result)
2093 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2096 else
2098 DECL_DECLARED_INLINE_P (old_result)
2099 |= DECL_DECLARED_INLINE_P (new_result);
2100 DECL_DISREGARD_INLINE_LIMITS (old_result)
2101 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2102 check_redeclaration_exception_specification (newdecl, olddecl);
2104 merge_attribute_bits (new_result, old_result);
2108 /* If the new declaration is a definition, update the file and
2109 line information on the declaration, and also make
2110 the old declaration the same definition. */
2111 if (DECL_INITIAL (new_result) != NULL_TREE)
2113 DECL_SOURCE_LOCATION (olddecl)
2114 = DECL_SOURCE_LOCATION (old_result)
2115 = DECL_SOURCE_LOCATION (newdecl);
2116 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
2117 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2119 tree parm;
2120 DECL_ARGUMENTS (old_result)
2121 = DECL_ARGUMENTS (new_result);
2122 for (parm = DECL_ARGUMENTS (old_result); parm;
2123 parm = DECL_CHAIN (parm))
2124 DECL_CONTEXT (parm) = old_result;
2128 return olddecl;
2131 if (types_match)
2133 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2134 check_redeclaration_exception_specification (newdecl, olddecl);
2136 /* Automatically handles default parameters. */
2137 tree oldtype = TREE_TYPE (olddecl);
2138 tree newtype;
2140 /* For typedefs use the old type, as the new type's DECL_NAME points
2141 at newdecl, which will be ggc_freed. */
2142 if (TREE_CODE (newdecl) == TYPE_DECL)
2144 /* But NEWTYPE might have an attribute, honor that. */
2145 tree tem = TREE_TYPE (newdecl);
2146 newtype = oldtype;
2148 if (TYPE_USER_ALIGN (tem))
2150 if (TYPE_ALIGN (tem) > TYPE_ALIGN (newtype))
2151 SET_TYPE_ALIGN (newtype, TYPE_ALIGN (tem));
2152 TYPE_USER_ALIGN (newtype) = true;
2155 /* And remove the new type from the variants list. */
2156 if (TYPE_NAME (TREE_TYPE (newdecl)) == newdecl)
2158 tree remove = TREE_TYPE (newdecl);
2159 for (tree t = TYPE_MAIN_VARIANT (remove); ;
2160 t = TYPE_NEXT_VARIANT (t))
2161 if (TYPE_NEXT_VARIANT (t) == remove)
2163 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove);
2164 break;
2168 else if (merge_attr)
2169 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
2170 else
2171 newtype = TREE_TYPE (newdecl);
2173 if (VAR_P (newdecl))
2175 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
2176 /* For already initialized vars, TREE_READONLY could have been
2177 cleared in cp_finish_decl, because the var needs runtime
2178 initialization or destruction. Make sure not to set
2179 TREE_READONLY on it again. */
2180 if (DECL_INITIALIZED_P (olddecl)
2181 && !DECL_EXTERNAL (olddecl)
2182 && !TREE_READONLY (olddecl))
2183 TREE_READONLY (newdecl) = 0;
2184 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
2185 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
2186 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
2187 if (DECL_DEPENDENT_INIT_P (olddecl))
2188 SET_DECL_DEPENDENT_INIT_P (newdecl, true);
2189 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
2190 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
2191 if (DECL_CLASS_SCOPE_P (olddecl))
2192 DECL_DECLARED_CONSTEXPR_P (newdecl)
2193 |= DECL_DECLARED_CONSTEXPR_P (olddecl);
2195 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
2196 if (DECL_LANG_SPECIFIC (olddecl)
2197 && CP_DECL_THREADPRIVATE_P (olddecl))
2199 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
2200 retrofit_lang_decl (newdecl);
2201 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
2205 /* An explicit specialization of a function template or of a member
2206 function of a class template can be declared transaction_safe
2207 independently of whether the corresponding template entity is declared
2208 transaction_safe. */
2209 if (flag_tm && TREE_CODE (newdecl) == FUNCTION_DECL
2210 && DECL_TEMPLATE_INSTANTIATION (olddecl)
2211 && DECL_TEMPLATE_SPECIALIZATION (newdecl)
2212 && tx_safe_fn_type_p (newtype)
2213 && !tx_safe_fn_type_p (TREE_TYPE (newdecl)))
2214 newtype = tx_unsafe_fn_variant (newtype);
2216 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
2218 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2219 check_default_args (newdecl);
2221 /* Lay the type out, unless already done. */
2222 if (! same_type_p (newtype, oldtype)
2223 && TREE_TYPE (newdecl) != error_mark_node
2224 && !(processing_template_decl && uses_template_parms (newdecl)))
2225 layout_type (TREE_TYPE (newdecl));
2227 if ((VAR_P (newdecl)
2228 || TREE_CODE (newdecl) == PARM_DECL
2229 || TREE_CODE (newdecl) == RESULT_DECL
2230 || TREE_CODE (newdecl) == FIELD_DECL
2231 || TREE_CODE (newdecl) == TYPE_DECL)
2232 && !(processing_template_decl && uses_template_parms (newdecl)))
2233 layout_decl (newdecl, 0);
2235 /* Merge deprecatedness. */
2236 if (TREE_DEPRECATED (newdecl))
2237 TREE_DEPRECATED (olddecl) = 1;
2239 /* Preserve function specific target and optimization options */
2240 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2242 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2243 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2244 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2245 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2247 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2248 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2249 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2250 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2252 else
2254 /* Merge the const type qualifier. */
2255 if (TREE_READONLY (newdecl))
2256 TREE_READONLY (olddecl) = 1;
2257 /* Merge the volatile type qualifier. */
2258 if (TREE_THIS_VOLATILE (newdecl))
2259 TREE_THIS_VOLATILE (olddecl) = 1;
2262 /* Merge the initialization information. */
2263 if (DECL_INITIAL (newdecl) == NULL_TREE
2264 && DECL_INITIAL (olddecl) != NULL_TREE)
2266 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2267 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2268 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2270 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2271 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2275 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2277 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2278 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2279 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2280 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2281 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
2282 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2284 if (merge_attr)
2285 merge_attribute_bits (newdecl, olddecl);
2286 else
2288 /* Merge the noreturn bit. */
2289 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2290 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2291 TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2292 DECL_IS_MALLOC (olddecl) = DECL_IS_MALLOC (newdecl);
2293 DECL_PURE_P (olddecl) = DECL_PURE_P (newdecl);
2295 /* Keep the old RTL. */
2296 COPY_DECL_RTL (olddecl, newdecl);
2298 else if (VAR_P (newdecl)
2299 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2301 /* Keep the old RTL. We cannot keep the old RTL if the old
2302 declaration was for an incomplete object and the new
2303 declaration is not since many attributes of the RTL will
2304 change. */
2305 COPY_DECL_RTL (olddecl, newdecl);
2308 /* If cannot merge, then use the new type and qualifiers,
2309 and don't preserve the old rtl. */
2310 else
2312 /* Clean out any memory we had of the old declaration. */
2313 tree oldstatic = value_member (olddecl, static_aggregates);
2314 if (oldstatic)
2315 TREE_VALUE (oldstatic) = error_mark_node;
2317 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2318 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2319 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2320 TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2321 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2324 /* Merge the storage class information. */
2325 merge_weak (newdecl, olddecl);
2327 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2328 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2329 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2330 if (! DECL_EXTERNAL (olddecl))
2331 DECL_EXTERNAL (newdecl) = 0;
2332 if (! DECL_COMDAT (olddecl))
2333 DECL_COMDAT (newdecl) = 0;
2335 new_template_info = NULL_TREE;
2336 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2338 bool new_redefines_gnu_inline = false;
2340 if (new_defines_function
2341 && ((DECL_INTERFACE_KNOWN (olddecl)
2342 && TREE_CODE (olddecl) == FUNCTION_DECL)
2343 || (TREE_CODE (olddecl) == TEMPLATE_DECL
2344 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2345 == FUNCTION_DECL))))
2347 tree fn = olddecl;
2349 if (TREE_CODE (fn) == TEMPLATE_DECL)
2350 fn = DECL_TEMPLATE_RESULT (olddecl);
2352 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
2355 if (!new_redefines_gnu_inline)
2357 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2358 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2359 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2361 DECL_TEMPLATE_INSTANTIATED (newdecl)
2362 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
2363 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2365 /* If the OLDDECL is an instantiation and/or specialization,
2366 then the NEWDECL must be too. But, it may not yet be marked
2367 as such if the caller has created NEWDECL, but has not yet
2368 figured out that it is a redeclaration. */
2369 if (!DECL_USE_TEMPLATE (newdecl))
2370 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2372 /* Don't really know how much of the language-specific
2373 values we should copy from old to new. */
2374 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2375 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2376 DECL_INITIALIZED_IN_CLASS_P (newdecl)
2377 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2379 if (LANG_DECL_HAS_MIN (newdecl))
2381 DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2382 DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2383 if (DECL_TEMPLATE_INFO (newdecl))
2385 new_template_info = DECL_TEMPLATE_INFO (newdecl);
2386 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2387 && DECL_TEMPLATE_SPECIALIZATION (newdecl))
2388 /* Remember the presence of explicit specialization args. */
2389 TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (olddecl))
2390 = TINFO_USED_TEMPLATE_ID (new_template_info);
2392 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2394 /* Only functions have these fields. */
2395 if (DECL_DECLARES_FUNCTION_P (newdecl))
2397 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2398 DECL_BEFRIENDING_CLASSES (newdecl)
2399 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2400 DECL_BEFRIENDING_CLASSES (olddecl));
2401 /* DECL_THUNKS is only valid for virtual functions,
2402 otherwise it is a DECL_FRIEND_CONTEXT. */
2403 if (DECL_VIRTUAL_P (newdecl))
2404 SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2406 /* Only variables have this field. */
2407 else if (VAR_P (newdecl)
2408 && VAR_HAD_UNKNOWN_BOUND (olddecl))
2409 SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2412 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2414 tree parm;
2416 /* Merge parameter attributes. */
2417 tree oldarg, newarg;
2418 for (oldarg = DECL_ARGUMENTS(olddecl),
2419 newarg = DECL_ARGUMENTS(newdecl);
2420 oldarg && newarg;
2421 oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2422 DECL_ATTRIBUTES (newarg)
2423 = (*targetm.merge_decl_attributes) (oldarg, newarg);
2424 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2427 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2428 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2430 /* If newdecl is not a specialization, then it is not a
2431 template-related function at all. And that means that we
2432 should have exited above, returning 0. */
2433 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2435 if (DECL_ODR_USED (olddecl))
2436 /* From [temp.expl.spec]:
2438 If a template, a member template or the member of a class
2439 template is explicitly specialized then that
2440 specialization shall be declared before the first use of
2441 that specialization that would cause an implicit
2442 instantiation to take place, in every translation unit in
2443 which such a use occurs. */
2444 error ("explicit specialization of %qD after first use",
2445 olddecl);
2447 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2448 DECL_COMDAT (newdecl) = (TREE_PUBLIC (newdecl)
2449 && DECL_DECLARED_INLINE_P (newdecl));
2451 /* Don't propagate visibility from the template to the
2452 specialization here. We'll do that in determine_visibility if
2453 appropriate. */
2454 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2456 /* [temp.expl.spec/14] We don't inline explicit specialization
2457 just because the primary template says so. */
2458 gcc_assert (!merge_attr);
2460 DECL_DECLARED_INLINE_P (olddecl)
2461 = DECL_DECLARED_INLINE_P (newdecl);
2463 DECL_DISREGARD_INLINE_LIMITS (olddecl)
2464 = DECL_DISREGARD_INLINE_LIMITS (newdecl);
2466 DECL_UNINLINABLE (olddecl) = DECL_UNINLINABLE (newdecl);
2468 else if (new_defines_function && DECL_INITIAL (olddecl))
2470 /* Never inline re-defined extern inline functions.
2471 FIXME: this could be better handled by keeping both
2472 function as separate declarations. */
2473 DECL_UNINLINABLE (newdecl) = 1;
2475 else
2477 if (DECL_PENDING_INLINE_P (olddecl))
2479 DECL_PENDING_INLINE_P (newdecl) = 1;
2480 DECL_PENDING_INLINE_INFO (newdecl)
2481 = DECL_PENDING_INLINE_INFO (olddecl);
2483 else if (DECL_PENDING_INLINE_P (newdecl))
2485 else if (DECL_SAVED_FUNCTION_DATA (newdecl) == NULL)
2486 DECL_SAVED_FUNCTION_DATA (newdecl)
2487 = DECL_SAVED_FUNCTION_DATA (olddecl);
2489 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2491 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2492 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2494 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2495 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2496 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2497 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2500 /* Preserve abstractness on cloned [cd]tors. */
2501 DECL_ABSTRACT_P (newdecl) = DECL_ABSTRACT_P (olddecl);
2503 /* Update newdecl's parms to point at olddecl. */
2504 for (parm = DECL_ARGUMENTS (newdecl); parm;
2505 parm = DECL_CHAIN (parm))
2506 DECL_CONTEXT (parm) = olddecl;
2508 if (! types_match)
2510 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2511 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2512 COPY_DECL_RTL (newdecl, olddecl);
2514 if (! types_match || new_defines_function)
2516 /* These need to be copied so that the names are available.
2517 Note that if the types do match, we'll preserve inline
2518 info and other bits, but if not, we won't. */
2519 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2520 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2522 /* If redeclaring a builtin function, it stays built in
2523 if newdecl is a gnu_inline definition, or if newdecl is just
2524 a declaration. */
2525 if (fndecl_built_in_p (olddecl)
2526 && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2528 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2529 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2530 /* If we're keeping the built-in definition, keep the rtl,
2531 regardless of declaration matches. */
2532 COPY_DECL_RTL (olddecl, newdecl);
2533 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2535 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2536 switch (fncode)
2538 /* If a compatible prototype of these builtin functions
2539 is seen, assume the runtime implements it with the
2540 expected semantics. */
2541 case BUILT_IN_STPCPY:
2542 if (builtin_decl_explicit_p (fncode))
2543 set_builtin_decl_implicit_p (fncode, true);
2544 break;
2545 default:
2546 if (builtin_decl_explicit_p (fncode))
2547 set_builtin_decl_declared_p (fncode, true);
2548 break;
2552 copy_attributes_to_builtin (newdecl);
2554 if (new_defines_function)
2555 /* If defining a function declared with other language
2556 linkage, use the previously declared language linkage. */
2557 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2558 else if (types_match)
2560 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2561 /* Don't clear out the arguments if we're just redeclaring a
2562 function. */
2563 if (DECL_ARGUMENTS (olddecl))
2564 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2567 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2568 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2570 /* Now preserve various other info from the definition. */
2571 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2572 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2573 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2574 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2576 /* Warn about conflicting visibility specifications. */
2577 if (DECL_VISIBILITY_SPECIFIED (olddecl)
2578 && DECL_VISIBILITY_SPECIFIED (newdecl)
2579 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2581 auto_diagnostic_group d;
2582 if (warning_at (newdecl_loc, OPT_Wattributes,
2583 "%qD: visibility attribute ignored because it "
2584 "conflicts with previous declaration", newdecl))
2585 inform (olddecl_loc,
2586 "previous declaration of %qD", olddecl);
2588 /* Choose the declaration which specified visibility. */
2589 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2591 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2592 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2594 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2595 so keep this behavior. */
2596 if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2598 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2599 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2601 /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED. */
2602 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2604 SET_DECL_ALIGN (newdecl, DECL_ALIGN (olddecl));
2605 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2607 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2608 if (DECL_WARN_IF_NOT_ALIGN (olddecl)
2609 > DECL_WARN_IF_NOT_ALIGN (newdecl))
2610 SET_DECL_WARN_IF_NOT_ALIGN (newdecl,
2611 DECL_WARN_IF_NOT_ALIGN (olddecl));
2612 if (TREE_CODE (newdecl) == FIELD_DECL)
2613 DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2615 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2616 with that from NEWDECL below. */
2617 if (DECL_LANG_SPECIFIC (olddecl))
2619 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2620 != DECL_LANG_SPECIFIC (newdecl));
2621 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2624 /* Merge the USED information. */
2625 if (TREE_USED (olddecl))
2626 TREE_USED (newdecl) = 1;
2627 else if (TREE_USED (newdecl))
2628 TREE_USED (olddecl) = 1;
2629 if (VAR_P (newdecl))
2631 if (DECL_READ_P (olddecl))
2632 DECL_READ_P (newdecl) = 1;
2633 else if (DECL_READ_P (newdecl))
2634 DECL_READ_P (olddecl) = 1;
2636 if (DECL_PRESERVE_P (olddecl))
2637 DECL_PRESERVE_P (newdecl) = 1;
2638 else if (DECL_PRESERVE_P (newdecl))
2639 DECL_PRESERVE_P (olddecl) = 1;
2641 /* Merge the DECL_FUNCTION_VERSIONED information. newdecl will be copied
2642 to olddecl and deleted. */
2643 if (TREE_CODE (newdecl) == FUNCTION_DECL
2644 && DECL_FUNCTION_VERSIONED (olddecl))
2646 /* Set the flag for newdecl so that it gets copied to olddecl. */
2647 DECL_FUNCTION_VERSIONED (newdecl) = 1;
2648 /* newdecl will be purged after copying to olddecl and is no longer
2649 a version. */
2650 cgraph_node::delete_function_version_by_decl (newdecl);
2653 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2655 int function_size;
2656 struct symtab_node *snode = symtab_node::get (olddecl);
2658 function_size = sizeof (struct tree_decl_common);
2660 memcpy ((char *) olddecl + sizeof (struct tree_common),
2661 (char *) newdecl + sizeof (struct tree_common),
2662 function_size - sizeof (struct tree_common));
2664 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2665 (char *) newdecl + sizeof (struct tree_decl_common),
2666 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2668 /* Preserve symtab node mapping. */
2669 olddecl->decl_with_vis.symtab_node = snode;
2671 if (new_template_info)
2672 /* If newdecl is a template instantiation, it is possible that
2673 the following sequence of events has occurred:
2675 o A friend function was declared in a class template. The
2676 class template was instantiated.
2678 o The instantiation of the friend declaration was
2679 recorded on the instantiation list, and is newdecl.
2681 o Later, however, instantiate_class_template called pushdecl
2682 on the newdecl to perform name injection. But, pushdecl in
2683 turn called duplicate_decls when it discovered that another
2684 declaration of a global function with the same name already
2685 existed.
2687 o Here, in duplicate_decls, we decided to clobber newdecl.
2689 If we're going to do that, we'd better make sure that
2690 olddecl, and not newdecl, is on the list of
2691 instantiations so that if we try to do the instantiation
2692 again we won't get the clobbered declaration. */
2693 reregister_specialization (newdecl,
2694 new_template_info,
2695 olddecl);
2697 else
2699 size_t size = tree_code_size (TREE_CODE (newdecl));
2701 memcpy ((char *) olddecl + sizeof (struct tree_common),
2702 (char *) newdecl + sizeof (struct tree_common),
2703 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2704 switch (TREE_CODE (newdecl))
2706 case LABEL_DECL:
2707 case VAR_DECL:
2708 case RESULT_DECL:
2709 case PARM_DECL:
2710 case FIELD_DECL:
2711 case TYPE_DECL:
2712 case CONST_DECL:
2714 struct symtab_node *snode = NULL;
2716 if (VAR_P (newdecl)
2717 && (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl)
2718 || DECL_EXTERNAL (olddecl)))
2719 snode = symtab_node::get (olddecl);
2720 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2721 (char *) newdecl + sizeof (struct tree_decl_common),
2722 size - sizeof (struct tree_decl_common)
2723 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2724 if (VAR_P (newdecl))
2725 olddecl->decl_with_vis.symtab_node = snode;
2727 break;
2728 default:
2729 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2730 (char *) newdecl + sizeof (struct tree_decl_common),
2731 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2732 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2733 break;
2737 if (VAR_OR_FUNCTION_DECL_P (newdecl))
2739 if (DECL_EXTERNAL (olddecl)
2740 || TREE_PUBLIC (olddecl)
2741 || TREE_STATIC (olddecl))
2743 /* Merge the section attribute.
2744 We want to issue an error if the sections conflict but that must be
2745 done later in decl_attributes since we are called before attributes
2746 are assigned. */
2747 if (DECL_SECTION_NAME (newdecl) != NULL)
2748 set_decl_section_name (olddecl, DECL_SECTION_NAME (newdecl));
2750 if (DECL_ONE_ONLY (newdecl))
2752 struct symtab_node *oldsym, *newsym;
2753 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2754 oldsym = cgraph_node::get_create (olddecl);
2755 else
2756 oldsym = varpool_node::get_create (olddecl);
2757 newsym = symtab_node::get (newdecl);
2758 oldsym->set_comdat_group (newsym->get_comdat_group ());
2762 if (VAR_P (newdecl)
2763 && CP_DECL_THREAD_LOCAL_P (newdecl))
2765 CP_DECL_THREAD_LOCAL_P (olddecl) = true;
2766 if (!processing_template_decl)
2767 set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl));
2771 DECL_UID (olddecl) = olddecl_uid;
2772 if (olddecl_friend)
2773 DECL_FRIEND_P (olddecl) = 1;
2774 if (hidden_friend)
2776 DECL_ANTICIPATED (olddecl) = 1;
2777 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2780 /* NEWDECL contains the merged attribute lists.
2781 Update OLDDECL to be the same. */
2782 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2784 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2785 so that encode_section_info has a chance to look at the new decl
2786 flags and attributes. */
2787 if (DECL_RTL_SET_P (olddecl)
2788 && (TREE_CODE (olddecl) == FUNCTION_DECL
2789 || (VAR_P (olddecl)
2790 && TREE_STATIC (olddecl))))
2791 make_decl_rtl (olddecl);
2793 /* The NEWDECL will no longer be needed. Because every out-of-class
2794 declaration of a member results in a call to duplicate_decls,
2795 freeing these nodes represents in a significant savings.
2797 Before releasing the node, be sore to remove function from symbol
2798 table that might have been inserted there to record comdat group.
2799 Be sure to however do not free DECL_STRUCT_FUNCTION because this
2800 structure is shared in between newdecl and oldecl. */
2801 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2802 DECL_STRUCT_FUNCTION (newdecl) = NULL;
2803 if (VAR_OR_FUNCTION_DECL_P (newdecl))
2805 struct symtab_node *snode = symtab_node::get (newdecl);
2806 if (snode)
2807 snode->remove ();
2810 /* Remove the associated constraints for newdecl, if any, before
2811 reclaiming memory. */
2812 if (flag_concepts)
2813 remove_constraints (newdecl);
2815 ggc_free (newdecl);
2817 return olddecl;
2820 /* Return zero if the declaration NEWDECL is valid
2821 when the declaration OLDDECL (assumed to be for the same name)
2822 has already been seen.
2823 Otherwise return an error message format string with a %s
2824 where the identifier should go. */
2826 static const char *
2827 redeclaration_error_message (tree newdecl, tree olddecl)
2829 if (TREE_CODE (newdecl) == TYPE_DECL)
2831 /* Because C++ can put things into name space for free,
2832 constructs like "typedef struct foo { ... } foo"
2833 would look like an erroneous redeclaration. */
2834 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2835 return NULL;
2836 else
2837 return G_("redefinition of %q#D");
2839 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2841 /* If this is a pure function, its olddecl will actually be
2842 the original initialization to `0' (which we force to call
2843 abort()). Don't complain about redefinition in this case. */
2844 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2845 && DECL_INITIAL (olddecl) == NULL_TREE)
2846 return NULL;
2848 /* If both functions come from different namespaces, this is not
2849 a redeclaration - this is a conflict with a used function. */
2850 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2851 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2852 && ! decls_match (olddecl, newdecl))
2853 return G_("%qD conflicts with used function");
2855 /* We'll complain about linkage mismatches in
2856 warn_extern_redeclared_static. */
2858 /* Defining the same name twice is no good. */
2859 if (decl_defined_p (olddecl)
2860 && decl_defined_p (newdecl))
2862 if (DECL_NAME (olddecl) == NULL_TREE)
2863 return G_("%q#D not declared in class");
2864 else if (!GNU_INLINE_P (olddecl)
2865 || GNU_INLINE_P (newdecl))
2866 return G_("redefinition of %q#D");
2869 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2871 bool olda = GNU_INLINE_P (olddecl);
2872 bool newa = GNU_INLINE_P (newdecl);
2874 if (olda != newa)
2876 if (newa)
2877 return G_("%q+D redeclared inline with "
2878 "%<gnu_inline%> attribute");
2879 else
2880 return G_("%q+D redeclared inline without "
2881 "%<gnu_inline%> attribute");
2885 check_abi_tag_redeclaration
2886 (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
2887 lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
2889 return NULL;
2891 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2893 tree nt, ot;
2895 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2897 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2898 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2899 return G_("redefinition of %q#D");
2900 return NULL;
2903 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2904 || (DECL_TEMPLATE_RESULT (newdecl)
2905 == DECL_TEMPLATE_RESULT (olddecl)))
2906 return NULL;
2908 nt = DECL_TEMPLATE_RESULT (newdecl);
2909 if (DECL_TEMPLATE_INFO (nt))
2910 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2911 ot = DECL_TEMPLATE_RESULT (olddecl);
2912 if (DECL_TEMPLATE_INFO (ot))
2913 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2914 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2915 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2916 return G_("redefinition of %q#D");
2918 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2920 bool olda = GNU_INLINE_P (ot);
2921 bool newa = GNU_INLINE_P (nt);
2923 if (olda != newa)
2925 if (newa)
2926 return G_("%q+D redeclared inline with "
2927 "%<gnu_inline%> attribute");
2928 else
2929 return G_("%q+D redeclared inline without "
2930 "%<gnu_inline%> attribute");
2934 /* Core issue #226 (C++0x):
2936 If a friend function template declaration specifies a
2937 default template-argument, that declaration shall be a
2938 definition and shall be the only declaration of the
2939 function template in the translation unit. */
2940 if ((cxx_dialect != cxx98)
2941 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2942 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2943 /*is_primary=*/true,
2944 /*is_partial=*/false,
2945 /*is_friend_decl=*/2))
2946 return G_("redeclaration of friend %q#D "
2947 "may not have default template arguments");
2949 return NULL;
2951 else if (VAR_P (newdecl)
2952 && CP_DECL_THREAD_LOCAL_P (newdecl) != CP_DECL_THREAD_LOCAL_P (olddecl)
2953 && (! DECL_LANG_SPECIFIC (olddecl)
2954 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2955 || CP_DECL_THREAD_LOCAL_P (newdecl)))
2957 /* Only variables can be thread-local, and all declarations must
2958 agree on this property. */
2959 if (CP_DECL_THREAD_LOCAL_P (newdecl))
2960 return G_("thread-local declaration of %q#D follows "
2961 "non-thread-local declaration");
2962 else
2963 return G_("non-thread-local declaration of %q#D follows "
2964 "thread-local declaration");
2966 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2968 /* The objects have been declared at namespace scope. If either
2969 is a member of an anonymous union, then this is an invalid
2970 redeclaration. For example:
2972 int i;
2973 union { int i; };
2975 is invalid. */
2976 if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
2977 || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
2978 return G_("redeclaration of %q#D");
2979 /* If at least one declaration is a reference, there is no
2980 conflict. For example:
2982 int i = 3;
2983 extern int i;
2985 is valid. */
2986 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2987 return NULL;
2989 /* Static data member declared outside a class definition
2990 if the variable is defined within the class with constexpr
2991 specifier is declaration rather than definition (and
2992 deprecated). */
2993 if (cxx_dialect >= cxx17
2994 && VAR_P (olddecl)
2995 && DECL_CLASS_SCOPE_P (olddecl)
2996 && DECL_DECLARED_CONSTEXPR_P (olddecl)
2997 && !DECL_INITIAL (newdecl))
2999 DECL_EXTERNAL (newdecl) = 1;
3000 /* For now, only warn with explicit -Wdeprecated. */
3001 if (global_options_set.x_warn_deprecated)
3003 auto_diagnostic_group d;
3004 if (warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wdeprecated,
3005 "redundant redeclaration of %<constexpr%> "
3006 "static data member %qD", newdecl))
3007 inform (DECL_SOURCE_LOCATION (olddecl),
3008 "previous declaration of %qD", olddecl);
3010 return NULL;
3013 /* Reject two definitions. */
3014 return G_("redefinition of %q#D");
3016 else
3018 /* Objects declared with block scope: */
3019 /* Reject two definitions, and reject a definition
3020 together with an external reference. */
3021 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
3022 return G_("redeclaration of %q#D");
3023 return NULL;
3028 /* Hash and equality functions for the named_label table. */
3030 hashval_t
3031 named_label_hash::hash (const value_type entry)
3033 return IDENTIFIER_HASH_VALUE (entry->name);
3036 bool
3037 named_label_hash::equal (const value_type entry, compare_type name)
3039 return name == entry->name;
3042 /* Look for a label named ID in the current function. If one cannot
3043 be found, create one. Return the named_label_entry, or NULL on
3044 failure. */
3046 static named_label_entry *
3047 lookup_label_1 (tree id, bool making_local_p)
3049 /* You can't use labels at global scope. */
3050 if (current_function_decl == NULL_TREE)
3052 error ("label %qE referenced outside of any function", id);
3053 return NULL;
3056 if (!named_labels)
3057 named_labels = hash_table<named_label_hash>::create_ggc (13);
3059 hashval_t hash = IDENTIFIER_HASH_VALUE (id);
3060 named_label_entry **slot
3061 = named_labels->find_slot_with_hash (id, hash, INSERT);
3062 named_label_entry *old = *slot;
3064 if (old && old->label_decl)
3066 if (!making_local_p)
3067 return old;
3069 if (old->binding_level == current_binding_level)
3071 error ("local label %qE conflicts with existing label", id);
3072 inform (DECL_SOURCE_LOCATION (old->label_decl), "previous label");
3073 return NULL;
3077 /* We are making a new decl, create or reuse the named_label_entry */
3078 named_label_entry *ent = NULL;
3079 if (old && !old->label_decl)
3080 ent = old;
3081 else
3083 ent = ggc_cleared_alloc<named_label_entry> ();
3084 ent->name = id;
3085 ent->outer = old;
3086 *slot = ent;
3089 /* Now create the LABEL_DECL. */
3090 tree decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
3092 DECL_CONTEXT (decl) = current_function_decl;
3093 SET_DECL_MODE (decl, VOIDmode);
3094 if (making_local_p)
3096 C_DECLARED_LABEL_FLAG (decl) = true;
3097 DECL_CHAIN (decl) = current_binding_level->names;
3098 current_binding_level->names = decl;
3101 ent->label_decl = decl;
3103 return ent;
3106 /* Wrapper for lookup_label_1. */
3108 tree
3109 lookup_label (tree id)
3111 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3112 named_label_entry *ent = lookup_label_1 (id, false);
3113 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3114 return ent ? ent->label_decl : NULL_TREE;
3117 tree
3118 declare_local_label (tree id)
3120 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3121 named_label_entry *ent = lookup_label_1 (id, true);
3122 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3123 return ent ? ent->label_decl : NULL_TREE;
3126 /* Returns nonzero if it is ill-formed to jump past the declaration of
3127 DECL. Returns 2 if it's also a real problem. */
3129 static int
3130 decl_jump_unsafe (tree decl)
3132 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
3133 with automatic storage duration is not in scope to a point where it is
3134 in scope is ill-formed unless the variable has scalar type, class type
3135 with a trivial default constructor and a trivial destructor, a
3136 cv-qualified version of one of these types, or an array of one of the
3137 preceding types and is declared without an initializer (8.5). */
3138 tree type = TREE_TYPE (decl);
3140 if (!VAR_P (decl) || TREE_STATIC (decl)
3141 || type == error_mark_node)
3142 return 0;
3144 if (DECL_NONTRIVIALLY_INITIALIZED_P (decl)
3145 || variably_modified_type_p (type, NULL_TREE))
3146 return 2;
3148 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3149 return 1;
3151 return 0;
3154 /* A subroutine of check_previous_goto_1 and check_goto to identify a branch
3155 to the user. */
3157 static bool
3158 identify_goto (tree decl, location_t loc, const location_t *locus,
3159 diagnostic_t diag_kind)
3161 bool complained
3162 = emit_diagnostic (diag_kind, loc, 0,
3163 decl ? N_("jump to label %qD")
3164 : N_("jump to case label"), decl);
3165 if (complained && locus)
3166 inform (*locus, " from here");
3167 return complained;
3170 /* Check that a single previously seen jump to a newly defined label
3171 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
3172 the jump context; NAMES are the names in scope in LEVEL at the jump
3173 context; LOCUS is the source position of the jump or 0. Returns
3174 true if all is well. */
3176 static bool
3177 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
3178 bool exited_omp, const location_t *locus)
3180 cp_binding_level *b;
3181 bool complained = false;
3182 int identified = 0;
3183 bool saw_eh = false, saw_omp = false, saw_tm = false, saw_cxif = false;
3185 if (exited_omp)
3187 complained = identify_goto (decl, input_location, locus, DK_ERROR);
3188 if (complained)
3189 inform (input_location, " exits OpenMP structured block");
3190 saw_omp = true;
3191 identified = 2;
3194 for (b = current_binding_level; b ; b = b->level_chain)
3196 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
3198 for (new_decls = b->names; new_decls != old_decls;
3199 new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
3200 : TREE_CHAIN (new_decls)))
3202 int problem = decl_jump_unsafe (new_decls);
3203 if (! problem)
3204 continue;
3206 if (!identified)
3208 complained = identify_goto (decl, input_location, locus,
3209 problem > 1
3210 ? DK_ERROR : DK_PERMERROR);
3211 identified = 1;
3213 if (complained)
3215 if (problem > 1)
3216 inform (DECL_SOURCE_LOCATION (new_decls),
3217 " crosses initialization of %q#D", new_decls);
3218 else
3219 inform (DECL_SOURCE_LOCATION (new_decls),
3220 " enters scope of %q#D, which has "
3221 "non-trivial destructor", new_decls);
3225 if (b == level)
3226 break;
3228 const char *inf = NULL;
3229 location_t loc = input_location;
3230 switch (b->kind)
3232 case sk_try:
3233 if (!saw_eh)
3234 inf = N_("enters try block");
3235 saw_eh = true;
3236 break;
3238 case sk_catch:
3239 if (!saw_eh)
3240 inf = N_("enters catch block");
3241 saw_eh = true;
3242 break;
3244 case sk_omp:
3245 if (!saw_omp)
3246 inf = N_("enters OpenMP structured block");
3247 saw_omp = true;
3248 break;
3250 case sk_transaction:
3251 if (!saw_tm)
3252 inf = N_("enters synchronized or atomic statement");
3253 saw_tm = true;
3254 break;
3256 case sk_block:
3257 if (!saw_cxif && level_for_constexpr_if (b->level_chain))
3259 inf = N_("enters constexpr if statement");
3260 loc = EXPR_LOCATION (b->level_chain->this_entity);
3261 saw_cxif = true;
3263 break;
3265 default:
3266 break;
3269 if (inf)
3271 if (identified < 2)
3272 complained = identify_goto (decl, input_location, locus, DK_ERROR);
3273 identified = 2;
3274 if (complained)
3275 inform (loc, " %s", inf);
3279 return !identified;
3282 static void
3283 check_previous_goto (tree decl, struct named_label_use_entry *use)
3285 check_previous_goto_1 (decl, use->binding_level,
3286 use->names_in_scope, use->in_omp_scope,
3287 &use->o_goto_locus);
3290 static bool
3291 check_switch_goto (cp_binding_level* level)
3293 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
3296 /* Check that a new jump to a label DECL is OK. Called by
3297 finish_goto_stmt. */
3299 void
3300 check_goto (tree decl)
3302 /* We can't know where a computed goto is jumping.
3303 So we assume that it's OK. */
3304 if (TREE_CODE (decl) != LABEL_DECL)
3305 return;
3307 /* We didn't record any information about this label when we created it,
3308 and there's not much point since it's trivial to analyze as a return. */
3309 if (decl == cdtor_label)
3310 return;
3312 hashval_t hash = IDENTIFIER_HASH_VALUE (DECL_NAME (decl));
3313 named_label_entry **slot
3314 = named_labels->find_slot_with_hash (DECL_NAME (decl), hash, NO_INSERT);
3315 named_label_entry *ent = *slot;
3317 /* If the label hasn't been defined yet, defer checking. */
3318 if (! DECL_INITIAL (decl))
3320 /* Don't bother creating another use if the last goto had the
3321 same data, and will therefore create the same set of errors. */
3322 if (ent->uses
3323 && ent->uses->names_in_scope == current_binding_level->names)
3324 return;
3326 named_label_use_entry *new_use
3327 = ggc_alloc<named_label_use_entry> ();
3328 new_use->binding_level = current_binding_level;
3329 new_use->names_in_scope = current_binding_level->names;
3330 new_use->o_goto_locus = input_location;
3331 new_use->in_omp_scope = false;
3333 new_use->next = ent->uses;
3334 ent->uses = new_use;
3335 return;
3338 bool saw_catch = false, complained = false;
3339 int identified = 0;
3340 tree bad;
3341 unsigned ix;
3343 if (ent->in_try_scope || ent->in_catch_scope || ent->in_transaction_scope
3344 || ent->in_constexpr_if
3345 || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
3347 diagnostic_t diag_kind = DK_PERMERROR;
3348 if (ent->in_try_scope || ent->in_catch_scope || ent->in_constexpr_if
3349 || ent->in_transaction_scope || ent->in_omp_scope)
3350 diag_kind = DK_ERROR;
3351 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3352 &input_location, diag_kind);
3353 identified = 1 + (diag_kind == DK_ERROR);
3356 FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
3358 int u = decl_jump_unsafe (bad);
3360 if (u > 1 && DECL_ARTIFICIAL (bad))
3362 /* Can't skip init of __exception_info. */
3363 if (identified == 1)
3365 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3366 &input_location, DK_ERROR);
3367 identified = 2;
3369 if (complained)
3370 inform (DECL_SOURCE_LOCATION (bad), " enters catch block");
3371 saw_catch = true;
3373 else if (complained)
3375 if (u > 1)
3376 inform (DECL_SOURCE_LOCATION (bad),
3377 " skips initialization of %q#D", bad);
3378 else
3379 inform (DECL_SOURCE_LOCATION (bad),
3380 " enters scope of %q#D which has "
3381 "non-trivial destructor", bad);
3385 if (complained)
3387 if (ent->in_try_scope)
3388 inform (input_location, " enters try block");
3389 else if (ent->in_catch_scope && !saw_catch)
3390 inform (input_location, " enters catch block");
3391 else if (ent->in_transaction_scope)
3392 inform (input_location, " enters synchronized or atomic statement");
3393 else if (ent->in_constexpr_if)
3394 inform (input_location, " enters %<constexpr%> if statement");
3397 if (ent->in_omp_scope)
3399 if (complained)
3400 inform (input_location, " enters OpenMP structured block");
3402 else if (flag_openmp)
3403 for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3405 if (b == ent->binding_level)
3406 break;
3407 if (b->kind == sk_omp)
3409 if (identified < 2)
3411 complained = identify_goto (decl,
3412 DECL_SOURCE_LOCATION (decl),
3413 &input_location, DK_ERROR);
3414 identified = 2;
3416 if (complained)
3417 inform (input_location, " exits OpenMP structured block");
3418 break;
3423 /* Check that a return is ok wrt OpenMP structured blocks.
3424 Called by finish_return_stmt. Returns true if all is well. */
3426 bool
3427 check_omp_return (void)
3429 for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3430 if (b->kind == sk_omp)
3432 error ("invalid exit from OpenMP structured block");
3433 return false;
3435 else if (b->kind == sk_function_parms)
3436 break;
3437 return true;
3440 /* Define a label, specifying the location in the source file.
3441 Return the LABEL_DECL node for the label. */
3443 static tree
3444 define_label_1 (location_t location, tree name)
3446 /* After labels, make any new cleanups in the function go into their
3447 own new (temporary) binding contour. */
3448 for (cp_binding_level *p = current_binding_level;
3449 p->kind != sk_function_parms;
3450 p = p->level_chain)
3451 p->more_cleanups_ok = 0;
3453 named_label_entry *ent = lookup_label_1 (name, false);
3454 tree decl = ent->label_decl;
3456 if (DECL_INITIAL (decl) != NULL_TREE)
3458 error ("duplicate label %qD", decl);
3459 return error_mark_node;
3461 else
3463 /* Mark label as having been defined. */
3464 DECL_INITIAL (decl) = error_mark_node;
3465 /* Say where in the source. */
3466 DECL_SOURCE_LOCATION (decl) = location;
3468 ent->binding_level = current_binding_level;
3469 ent->names_in_scope = current_binding_level->names;
3471 for (named_label_use_entry *use = ent->uses; use; use = use->next)
3472 check_previous_goto (decl, use);
3473 ent->uses = NULL;
3476 return decl;
3479 /* Wrapper for define_label_1. */
3481 tree
3482 define_label (location_t location, tree name)
3484 bool running = timevar_cond_start (TV_NAME_LOOKUP);
3485 tree ret = define_label_1 (location, name);
3486 timevar_cond_stop (TV_NAME_LOOKUP, running);
3487 return ret;
3491 struct cp_switch
3493 cp_binding_level *level;
3494 struct cp_switch *next;
3495 /* The SWITCH_STMT being built. */
3496 tree switch_stmt;
3497 /* A splay-tree mapping the low element of a case range to the high
3498 element, or NULL_TREE if there is no high element. Used to
3499 determine whether or not a new case label duplicates an old case
3500 label. We need a tree, rather than simply a hash table, because
3501 of the GNU case range extension. */
3502 splay_tree cases;
3503 /* Remember whether there was a case value that is outside the
3504 range of the original type of the controlling expression. */
3505 bool outside_range_p;
3506 /* Remember whether a default: case label has been seen. */
3507 bool has_default_p;
3508 /* Remember whether a BREAK_STMT has been seen in this SWITCH_STMT. */
3509 bool break_stmt_seen_p;
3510 /* Set if inside of {FOR,DO,WHILE}_BODY nested inside of a switch,
3511 where BREAK_STMT doesn't belong to the SWITCH_STMT. */
3512 bool in_loop_body_p;
3515 /* A stack of the currently active switch statements. The innermost
3516 switch statement is on the top of the stack. There is no need to
3517 mark the stack for garbage collection because it is only active
3518 during the processing of the body of a function, and we never
3519 collect at that point. */
3521 static struct cp_switch *switch_stack;
3523 /* Called right after a switch-statement condition is parsed.
3524 SWITCH_STMT is the switch statement being parsed. */
3526 void
3527 push_switch (tree switch_stmt)
3529 struct cp_switch *p = XNEW (struct cp_switch);
3530 p->level = current_binding_level;
3531 p->next = switch_stack;
3532 p->switch_stmt = switch_stmt;
3533 p->cases = splay_tree_new (case_compare, NULL, NULL);
3534 p->outside_range_p = false;
3535 p->has_default_p = false;
3536 p->break_stmt_seen_p = false;
3537 p->in_loop_body_p = false;
3538 switch_stack = p;
3541 void
3542 pop_switch (void)
3544 struct cp_switch *cs = switch_stack;
3545 location_t switch_location;
3547 /* Emit warnings as needed. */
3548 switch_location = cp_expr_loc_or_loc (cs->switch_stmt, input_location);
3549 const bool bool_cond_p
3550 = (SWITCH_STMT_TYPE (cs->switch_stmt)
3551 && TREE_CODE (SWITCH_STMT_TYPE (cs->switch_stmt)) == BOOLEAN_TYPE);
3552 if (!processing_template_decl)
3553 c_do_switch_warnings (cs->cases, switch_location,
3554 SWITCH_STMT_TYPE (cs->switch_stmt),
3555 SWITCH_STMT_COND (cs->switch_stmt),
3556 bool_cond_p, cs->outside_range_p);
3558 /* For the benefit of block_may_fallthru remember if the switch body
3559 case labels cover all possible values and if there are break; stmts. */
3560 if (cs->has_default_p
3561 || (!processing_template_decl
3562 && c_switch_covers_all_cases_p (cs->cases,
3563 SWITCH_STMT_TYPE (cs->switch_stmt))))
3564 SWITCH_STMT_ALL_CASES_P (cs->switch_stmt) = 1;
3565 if (!cs->break_stmt_seen_p)
3566 SWITCH_STMT_NO_BREAK_P (cs->switch_stmt) = 1;
3567 gcc_assert (!cs->in_loop_body_p);
3568 splay_tree_delete (cs->cases);
3569 switch_stack = switch_stack->next;
3570 free (cs);
3573 /* Note that a BREAK_STMT is about to be added. If it is inside of
3574 a SWITCH_STMT and not inside of a loop body inside of it, note
3575 in switch_stack we've seen a BREAK_STMT. */
3577 void
3578 note_break_stmt (void)
3580 if (switch_stack && !switch_stack->in_loop_body_p)
3581 switch_stack->break_stmt_seen_p = true;
3584 /* Note the start of processing of an iteration statement's body.
3585 The note_break_stmt function will do nothing while processing it.
3586 Return a flag that should be passed to note_iteration_stmt_body_end. */
3588 bool
3589 note_iteration_stmt_body_start (void)
3591 if (!switch_stack)
3592 return false;
3593 bool ret = switch_stack->in_loop_body_p;
3594 switch_stack->in_loop_body_p = true;
3595 return ret;
3598 /* Note the end of processing of an iteration statement's body. */
3600 void
3601 note_iteration_stmt_body_end (bool prev)
3603 if (switch_stack)
3604 switch_stack->in_loop_body_p = prev;
3607 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3608 condition. Note that if TYPE and VALUE are already integral we don't
3609 really do the conversion because the language-independent
3610 warning/optimization code will work better that way. */
3612 static tree
3613 case_conversion (tree type, tree value)
3615 if (value == NULL_TREE)
3616 return value;
3618 value = mark_rvalue_use (value);
3620 if (cxx_dialect >= cxx11
3621 && (SCOPED_ENUM_P (type)
3622 || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3624 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3625 type = type_promotes_to (type);
3626 value = (perform_implicit_conversion_flags
3627 (type, value, tf_warning_or_error,
3628 LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL));
3630 return cxx_constant_value (value);
3633 /* Note that we've seen a definition of a case label, and complain if this
3634 is a bad place for one. */
3636 tree
3637 finish_case_label (location_t loc, tree low_value, tree high_value)
3639 tree cond, r;
3640 cp_binding_level *p;
3641 tree type;
3643 if (low_value == NULL_TREE && high_value == NULL_TREE)
3644 switch_stack->has_default_p = true;
3646 if (processing_template_decl)
3648 tree label;
3650 /* For templates, just add the case label; we'll do semantic
3651 analysis at instantiation-time. */
3652 label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3653 return add_stmt (build_case_label (low_value, high_value, label));
3656 /* Find the condition on which this switch statement depends. */
3657 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3658 if (cond && TREE_CODE (cond) == TREE_LIST)
3659 cond = TREE_VALUE (cond);
3661 if (!check_switch_goto (switch_stack->level))
3662 return error_mark_node;
3664 type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3666 low_value = case_conversion (type, low_value);
3667 high_value = case_conversion (type, high_value);
3669 r = c_add_case_label (loc, switch_stack->cases, cond, type,
3670 low_value, high_value,
3671 &switch_stack->outside_range_p);
3673 /* After labels, make any new cleanups in the function go into their
3674 own new (temporary) binding contour. */
3675 for (p = current_binding_level;
3676 p->kind != sk_function_parms;
3677 p = p->level_chain)
3678 p->more_cleanups_ok = 0;
3680 return r;
3683 struct typename_info {
3684 tree scope;
3685 tree name;
3686 tree template_id;
3687 bool enum_p;
3688 bool class_p;
3691 struct typename_hasher : ggc_ptr_hash<tree_node>
3693 typedef typename_info *compare_type;
3695 /* Hash a TYPENAME_TYPE. */
3697 static hashval_t
3698 hash (tree t)
3700 hashval_t hash;
3702 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3703 ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
3705 return hash;
3708 /* Compare two TYPENAME_TYPEs. */
3710 static bool
3711 equal (tree t1, const typename_info *t2)
3713 return (TYPE_IDENTIFIER (t1) == t2->name
3714 && TYPE_CONTEXT (t1) == t2->scope
3715 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3716 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3717 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3721 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
3722 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3724 Returns the new TYPENAME_TYPE. */
3726 static GTY (()) hash_table<typename_hasher> *typename_htab;
3728 tree
3729 build_typename_type (tree context, tree name, tree fullname,
3730 enum tag_types tag_type)
3732 tree t;
3733 tree d;
3734 typename_info ti;
3735 tree *e;
3736 hashval_t hash;
3738 if (typename_htab == NULL)
3739 typename_htab = hash_table<typename_hasher>::create_ggc (61);
3741 ti.scope = FROB_CONTEXT (context);
3742 ti.name = name;
3743 ti.template_id = fullname;
3744 ti.enum_p = tag_type == enum_type;
3745 ti.class_p = (tag_type == class_type
3746 || tag_type == record_type
3747 || tag_type == union_type);
3748 hash = (htab_hash_pointer (ti.scope)
3749 ^ htab_hash_pointer (ti.name));
3751 /* See if we already have this type. */
3752 e = typename_htab->find_slot_with_hash (&ti, hash, INSERT);
3753 if (*e)
3754 t = *e;
3755 else
3757 /* Build the TYPENAME_TYPE. */
3758 t = cxx_make_type (TYPENAME_TYPE);
3759 TYPE_CONTEXT (t) = ti.scope;
3760 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3761 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3762 TYPENAME_IS_CLASS_P (t) = ti.class_p;
3764 /* Build the corresponding TYPE_DECL. */
3765 d = build_decl (input_location, TYPE_DECL, name, t);
3766 TYPE_NAME (TREE_TYPE (d)) = d;
3767 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3768 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3769 DECL_ARTIFICIAL (d) = 1;
3771 /* Store it in the hash table. */
3772 *e = t;
3774 /* TYPENAME_TYPEs must always be compared structurally, because
3775 they may or may not resolve down to another type depending on
3776 the currently open classes. */
3777 SET_TYPE_STRUCTURAL_EQUALITY (t);
3780 return t;
3783 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
3784 provided to name the type. Returns an appropriate type, unless an
3785 error occurs, in which case error_mark_node is returned. If we
3786 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3787 return that, rather than the _TYPE it corresponds to, in other
3788 cases we look through the type decl. If TF_ERROR is set, complain
3789 about errors, otherwise be quiet. */
3791 tree
3792 make_typename_type (tree context, tree name, enum tag_types tag_type,
3793 tsubst_flags_t complain)
3795 tree fullname;
3796 tree t;
3797 bool want_template;
3799 if (name == error_mark_node
3800 || context == NULL_TREE
3801 || context == error_mark_node)
3802 return error_mark_node;
3804 if (TYPE_P (name))
3806 if (!(TYPE_LANG_SPECIFIC (name)
3807 && (CLASSTYPE_IS_TEMPLATE (name)
3808 || CLASSTYPE_USE_TEMPLATE (name))))
3809 name = TYPE_IDENTIFIER (name);
3810 else
3811 /* Create a TEMPLATE_ID_EXPR for the type. */
3812 name = build_nt (TEMPLATE_ID_EXPR,
3813 CLASSTYPE_TI_TEMPLATE (name),
3814 CLASSTYPE_TI_ARGS (name));
3816 else if (TREE_CODE (name) == TYPE_DECL)
3817 name = DECL_NAME (name);
3819 fullname = name;
3821 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3823 name = TREE_OPERAND (name, 0);
3824 if (DECL_TYPE_TEMPLATE_P (name))
3825 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3826 if (TREE_CODE (name) != IDENTIFIER_NODE)
3828 if (complain & tf_error)
3829 error ("%qD is not a type", name);
3830 return error_mark_node;
3833 if (TREE_CODE (name) == TEMPLATE_DECL)
3835 if (complain & tf_error)
3836 error ("%qD used without template arguments", name);
3837 return error_mark_node;
3839 gcc_assert (identifier_p (name));
3840 gcc_assert (TYPE_P (context));
3842 if (!MAYBE_CLASS_TYPE_P (context))
3844 if (complain & tf_error)
3845 error ("%q#T is not a class", context);
3846 return error_mark_node;
3849 /* When the CONTEXT is a dependent type, NAME could refer to a
3850 dependent base class of CONTEXT. But look inside it anyway
3851 if CONTEXT is a currently open scope, in case it refers to a
3852 member of the current instantiation or a non-dependent base;
3853 lookup will stop when we hit a dependent base. */
3854 if (!dependent_scope_p (context))
3855 /* We should only set WANT_TYPE when we're a nested typename type.
3856 Then we can give better diagnostics if we find a non-type. */
3857 t = lookup_field (context, name, 2, /*want_type=*/true);
3858 else
3859 t = NULL_TREE;
3861 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3862 return build_typename_type (context, name, fullname, tag_type);
3864 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3866 if (!t)
3868 if (complain & tf_error)
3870 if (!COMPLETE_TYPE_P (context))
3871 cxx_incomplete_type_error (NULL_TREE, context);
3872 else
3873 error (want_template ? G_("no class template named %q#T in %q#T")
3874 : G_("no type named %q#T in %q#T"), name, context);
3876 return error_mark_node;
3879 /* Pull out the template from an injected-class-name (or multiple). */
3880 if (want_template)
3881 t = maybe_get_template_decl_from_type_decl (t);
3883 if (TREE_CODE (t) == TREE_LIST)
3885 if (complain & tf_error)
3887 error ("lookup of %qT in %qT is ambiguous", name, context);
3888 print_candidates (t);
3890 return error_mark_node;
3893 if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3895 if (complain & tf_error)
3896 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3897 context, name, t);
3898 return error_mark_node;
3900 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3902 if (complain & tf_error)
3903 error ("%<typename %T::%D%> names %q#T, which is not a type",
3904 context, name, t);
3905 return error_mark_node;
3908 if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3909 return error_mark_node;
3911 /* If we are currently parsing a template and if T is a typedef accessed
3912 through CONTEXT then we need to remember and check access of T at
3913 template instantiation time. */
3914 add_typedef_to_current_template_for_access_check (t, context, input_location);
3916 if (want_template)
3917 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3918 NULL_TREE, context,
3919 /*entering_scope=*/0,
3920 complain | tf_user);
3922 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3923 t = TREE_TYPE (t);
3925 maybe_record_typedef_use (t);
3927 return t;
3930 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3931 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3932 in which case error_mark_node is returned.
3934 If PARM_LIST is non-NULL, also make sure that the template parameter
3935 list of TEMPLATE_DECL matches.
3937 If COMPLAIN zero, don't complain about any errors that occur. */
3939 tree
3940 make_unbound_class_template (tree context, tree name, tree parm_list,
3941 tsubst_flags_t complain)
3943 tree t;
3944 tree d;
3946 if (TYPE_P (name))
3947 name = TYPE_IDENTIFIER (name);
3948 else if (DECL_P (name))
3949 name = DECL_NAME (name);
3950 gcc_assert (identifier_p (name));
3952 if (!dependent_type_p (context)
3953 || currently_open_class (context))
3955 tree tmpl = NULL_TREE;
3957 if (MAYBE_CLASS_TYPE_P (context))
3958 tmpl = lookup_field (context, name, 0, false);
3960 if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3961 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3963 if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3965 if (complain & tf_error)
3966 error ("no class template named %q#T in %q#T", name, context);
3967 return error_mark_node;
3970 if (parm_list
3971 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3973 if (complain & tf_error)
3975 error ("template parameters do not match template %qD", tmpl);
3976 inform (DECL_SOURCE_LOCATION (tmpl),
3977 "%qD declared here", tmpl);
3979 return error_mark_node;
3982 if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3983 complain))
3984 return error_mark_node;
3986 return tmpl;
3989 /* Build the UNBOUND_CLASS_TEMPLATE. */
3990 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3991 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3992 TREE_TYPE (t) = NULL_TREE;
3993 SET_TYPE_STRUCTURAL_EQUALITY (t);
3995 /* Build the corresponding TEMPLATE_DECL. */
3996 d = build_decl (input_location, TEMPLATE_DECL, name, t);
3997 TYPE_NAME (TREE_TYPE (d)) = d;
3998 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3999 DECL_CONTEXT (d) = FROB_CONTEXT (context);
4000 DECL_ARTIFICIAL (d) = 1;
4001 DECL_TEMPLATE_PARMS (d) = parm_list;
4003 return t;
4008 /* Push the declarations of builtin types into the global namespace.
4009 RID_INDEX is the index of the builtin type in the array
4010 RID_POINTERS. NAME is the name used when looking up the builtin
4011 type. TYPE is the _TYPE node for the builtin type.
4013 The calls to set_global_binding below should be
4014 eliminated. Built-in types should not be looked up name; their
4015 names are keywords that the parser can recognize. However, there
4016 is code in c-common.c that uses identifier_global_value to look up
4017 built-in types by name. */
4019 void
4020 record_builtin_type (enum rid rid_index,
4021 const char* name,
4022 tree type)
4024 tree decl = NULL_TREE;
4026 if (name)
4028 tree tname = get_identifier (name);
4029 tree tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
4030 DECL_ARTIFICIAL (tdecl) = 1;
4031 set_global_binding (tdecl);
4032 decl = tdecl;
4035 if ((int) rid_index < (int) RID_MAX)
4036 if (tree rname = ridpointers[(int) rid_index])
4037 if (!decl || DECL_NAME (decl) != rname)
4039 tree rdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
4040 DECL_ARTIFICIAL (rdecl) = 1;
4041 set_global_binding (rdecl);
4042 if (!decl)
4043 decl = rdecl;
4046 if (decl)
4048 if (!TYPE_NAME (type))
4049 TYPE_NAME (type) = decl;
4050 debug_hooks->type_decl (decl, 0);
4054 /* Push a type into the namespace so that the back ends ignore it. */
4056 static void
4057 record_unknown_type (tree type, const char* name)
4059 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
4060 TYPE_DECL, get_identifier (name), type));
4061 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
4062 DECL_IGNORED_P (decl) = 1;
4063 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
4064 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
4065 SET_TYPE_ALIGN (type, 1);
4066 TYPE_USER_ALIGN (type) = 0;
4067 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
4070 /* Create all the predefined identifiers. */
4072 static void
4073 initialize_predefined_identifiers (void)
4075 struct predefined_identifier
4077 const char *name; /* Name. */
4078 tree *node; /* Node to store it in. */
4079 cp_identifier_kind kind; /* Kind of identifier. */
4082 /* A table of identifiers to create at startup. */
4083 static const predefined_identifier predefined_identifiers[] = {
4084 {"C++", &lang_name_cplusplus, cik_normal},
4085 {"C", &lang_name_c, cik_normal},
4086 /* Some of these names have a trailing space so that it is
4087 impossible for them to conflict with names written by users. */
4088 {"__ct ", &ctor_identifier, cik_ctor},
4089 {"__ct_base ", &base_ctor_identifier, cik_ctor},
4090 {"__ct_comp ", &complete_ctor_identifier, cik_ctor},
4091 {"__dt ", &dtor_identifier, cik_dtor},
4092 {"__dt_base ", &base_dtor_identifier, cik_dtor},
4093 {"__dt_comp ", &complete_dtor_identifier, cik_dtor},
4094 {"__dt_del ", &deleting_dtor_identifier, cik_dtor},
4095 {"__conv_op ", &conv_op_identifier, cik_conv_op},
4096 {"__in_chrg", &in_charge_identifier, cik_normal},
4097 {"this", &this_identifier, cik_normal},
4098 {"__delta", &delta_identifier, cik_normal},
4099 {"__pfn", &pfn_identifier, cik_normal},
4100 {"_vptr", &vptr_identifier, cik_normal},
4101 {"__vtt_parm", &vtt_parm_identifier, cik_normal},
4102 {"::", &global_identifier, cik_normal},
4103 {"std", &std_identifier, cik_normal},
4104 /* The demangler expects anonymous namespaces to be called
4105 something starting with '_GLOBAL__N_'. It no longer needs
4106 to be unique to the TU. */
4107 {"_GLOBAL__N_1", &anon_identifier, cik_normal},
4108 {"auto", &auto_identifier, cik_normal},
4109 {"decltype(auto)", &decltype_auto_identifier, cik_normal},
4110 {"initializer_list", &init_list_identifier, cik_normal},
4111 {"__for_range ", &for_range__identifier, cik_normal},
4112 {"__for_begin ", &for_begin__identifier, cik_normal},
4113 {"__for_end ", &for_end__identifier, cik_normal},
4114 {"__for_range", &for_range_identifier, cik_normal},
4115 {"__for_begin", &for_begin_identifier, cik_normal},
4116 {"__for_end", &for_end_identifier, cik_normal},
4117 {"abi_tag", &abi_tag_identifier, cik_normal},
4118 {"aligned", &aligned_identifier, cik_normal},
4119 {"begin", &begin_identifier, cik_normal},
4120 {"end", &end_identifier, cik_normal},
4121 {"get", &get__identifier, cik_normal},
4122 {"gnu", &gnu_identifier, cik_normal},
4123 {"tuple_element", &tuple_element_identifier, cik_normal},
4124 {"tuple_size", &tuple_size_identifier, cik_normal},
4125 {"type", &type_identifier, cik_normal},
4126 {"value", &value_identifier, cik_normal},
4127 {"_FUN", &fun_identifier, cik_normal},
4128 {"__closure", &closure_identifier, cik_normal},
4129 {NULL, NULL, cik_normal}
4132 for (const predefined_identifier *pid = predefined_identifiers;
4133 pid->name; ++pid)
4135 *pid->node = get_identifier (pid->name);
4136 /* Some of these identifiers already have a special kind. */
4137 if (pid->kind != cik_normal)
4138 set_identifier_kind (*pid->node, pid->kind);
4142 /* Create the predefined scalar types of C,
4143 and some nodes representing standard constants (0, 1, (void *)0).
4144 Initialize the global binding level.
4145 Make definitions for built-in primitive functions. */
4147 void
4148 cxx_init_decl_processing (void)
4150 tree void_ftype;
4151 tree void_ftype_ptr;
4153 /* Create all the identifiers we need. */
4154 initialize_predefined_identifiers ();
4156 /* Create the global variables. */
4157 push_to_top_level ();
4159 current_function_decl = NULL_TREE;
4160 current_binding_level = NULL;
4161 /* Enter the global namespace. */
4162 gcc_assert (global_namespace == NULL_TREE);
4163 global_namespace = build_lang_decl (NAMESPACE_DECL, global_identifier,
4164 void_type_node);
4165 TREE_PUBLIC (global_namespace) = 1;
4166 DECL_CONTEXT (global_namespace)
4167 = build_translation_unit_decl (get_identifier (main_input_filename));
4168 /* Remember whether we want the empty class passing ABI change warning
4169 in this TU. */
4170 TRANSLATION_UNIT_WARN_EMPTY_P (DECL_CONTEXT (global_namespace))
4171 = warn_abi && abi_version_crosses (12);
4172 debug_hooks->register_main_translation_unit
4173 (DECL_CONTEXT (global_namespace));
4174 begin_scope (sk_namespace, global_namespace);
4175 current_namespace = global_namespace;
4177 if (flag_visibility_ms_compat)
4178 default_visibility = VISIBILITY_HIDDEN;
4180 /* Initially, C. */
4181 current_lang_name = lang_name_c;
4183 /* Create the `std' namespace. */
4184 push_namespace (std_identifier);
4185 std_node = current_namespace;
4186 pop_namespace ();
4188 flag_noexcept_type = (cxx_dialect >= cxx17);
4190 c_common_nodes_and_builtins ();
4192 tree bool_ftype = build_function_type_list (boolean_type_node, NULL_TREE);
4193 tree decl
4194 = add_builtin_function ("__builtin_is_constant_evaluated",
4195 bool_ftype, CP_BUILT_IN_IS_CONSTANT_EVALUATED,
4196 BUILT_IN_FRONTEND, NULL, NULL_TREE);
4197 set_call_expr_flags (decl, ECF_CONST | ECF_NOTHROW | ECF_LEAF);
4199 integer_two_node = build_int_cst (NULL_TREE, 2);
4201 /* Guess at the initial static decls size. */
4202 vec_alloc (static_decls, 500);
4204 /* ... and keyed classes. */
4205 vec_alloc (keyed_classes, 100);
4207 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
4208 truthvalue_type_node = boolean_type_node;
4209 truthvalue_false_node = boolean_false_node;
4210 truthvalue_true_node = boolean_true_node;
4212 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
4213 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
4214 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
4215 noexcept_deferred_spec = build_tree_list (make_node (DEFERRED_NOEXCEPT),
4216 NULL_TREE);
4218 #if 0
4219 record_builtin_type (RID_MAX, NULL, string_type_node);
4220 #endif
4222 delta_type_node = ptrdiff_type_node;
4223 vtable_index_type = ptrdiff_type_node;
4225 vtt_parm_type = build_pointer_type (const_ptr_type_node);
4226 void_ftype = build_function_type_list (void_type_node, NULL_TREE);
4227 void_ftype_ptr = build_function_type_list (void_type_node,
4228 ptr_type_node, NULL_TREE);
4229 void_ftype_ptr
4230 = build_exception_variant (void_ftype_ptr, empty_except_spec);
4232 /* Create the conversion operator marker. This operator's DECL_NAME
4233 is in the identifier table, so we can use identifier equality to
4234 find it. */
4235 conv_op_marker = build_lang_decl (FUNCTION_DECL, conv_op_identifier,
4236 void_ftype);
4238 /* C++ extensions */
4240 unknown_type_node = make_node (LANG_TYPE);
4241 record_unknown_type (unknown_type_node, "unknown type");
4243 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
4244 TREE_TYPE (unknown_type_node) = unknown_type_node;
4246 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
4247 result. */
4248 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
4249 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
4251 init_list_type_node = make_node (LANG_TYPE);
4252 record_unknown_type (init_list_type_node, "init list");
4255 /* Make sure we get a unique function type, so we can give
4256 its pointer type a name. (This wins for gdb.) */
4257 tree vfunc_type = make_node (FUNCTION_TYPE);
4258 TREE_TYPE (vfunc_type) = integer_type_node;
4259 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
4260 layout_type (vfunc_type);
4262 vtable_entry_type = build_pointer_type (vfunc_type);
4264 record_builtin_type (RID_MAX, "__vtbl_ptr_type", vtable_entry_type);
4266 vtbl_type_node
4267 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
4268 layout_type (vtbl_type_node);
4269 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
4270 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
4271 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
4272 layout_type (vtbl_ptr_type_node);
4273 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
4275 push_namespace (get_identifier ("__cxxabiv1"));
4276 abi_node = current_namespace;
4277 pop_namespace ();
4279 global_type_node = make_node (LANG_TYPE);
4280 record_unknown_type (global_type_node, "global type");
4282 any_targ_node = make_node (LANG_TYPE);
4283 record_unknown_type (any_targ_node, "any type");
4285 /* Now, C++. */
4286 current_lang_name = lang_name_cplusplus;
4288 if (aligned_new_threshold > 1
4289 && !pow2p_hwi (aligned_new_threshold))
4291 error ("-faligned-new=%d is not a power of two", aligned_new_threshold);
4292 aligned_new_threshold = 1;
4294 if (aligned_new_threshold == -1)
4295 aligned_new_threshold = (cxx_dialect >= cxx17) ? 1 : 0;
4296 if (aligned_new_threshold == 1)
4297 aligned_new_threshold = malloc_alignment () / BITS_PER_UNIT;
4300 tree newattrs, extvisattr;
4301 tree newtype, deltype;
4302 tree ptr_ftype_sizetype;
4303 tree new_eh_spec;
4305 ptr_ftype_sizetype
4306 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
4307 if (cxx_dialect == cxx98)
4309 tree bad_alloc_id;
4310 tree bad_alloc_type_node;
4311 tree bad_alloc_decl;
4313 push_namespace (std_identifier);
4314 bad_alloc_id = get_identifier ("bad_alloc");
4315 bad_alloc_type_node = make_class_type (RECORD_TYPE);
4316 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
4317 bad_alloc_decl
4318 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
4319 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
4320 pop_namespace ();
4322 new_eh_spec
4323 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
4325 else
4326 new_eh_spec = noexcept_false_spec;
4328 /* Ensure attribs.c is initialized. */
4329 init_attributes ();
4331 /* Ensure constraint.cc is initialized. */
4332 init_constraint_processing ();
4334 extvisattr = build_tree_list (get_identifier ("externally_visible"),
4335 NULL_TREE);
4336 newattrs = tree_cons (get_identifier ("alloc_size"),
4337 build_tree_list (NULL_TREE, integer_one_node),
4338 extvisattr);
4339 newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
4340 newtype = build_exception_variant (newtype, new_eh_spec);
4341 deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
4342 deltype = build_exception_variant (deltype, empty_except_spec);
4343 tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4344 DECL_IS_MALLOC (opnew) = 1;
4345 DECL_IS_OPERATOR_NEW (opnew) = 1;
4346 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4347 DECL_IS_MALLOC (opnew) = 1;
4348 DECL_IS_OPERATOR_NEW (opnew) = 1;
4349 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4350 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4351 if (flag_sized_deallocation)
4353 /* Also push the sized deallocation variants:
4354 void operator delete(void*, std::size_t) throw();
4355 void operator delete[](void*, std::size_t) throw(); */
4356 tree void_ftype_ptr_size
4357 = build_function_type_list (void_type_node, ptr_type_node,
4358 size_type_node, NULL_TREE);
4359 deltype = cp_build_type_attribute_variant (void_ftype_ptr_size,
4360 extvisattr);
4361 deltype = build_exception_variant (deltype, empty_except_spec);
4362 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4363 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4366 if (aligned_new_threshold)
4368 push_namespace (std_identifier);
4369 tree align_id = get_identifier ("align_val_t");
4370 align_type_node = start_enum (align_id, NULL_TREE, size_type_node,
4371 NULL_TREE, /*scoped*/true, NULL);
4372 pop_namespace ();
4374 /* operator new (size_t, align_val_t); */
4375 newtype = build_function_type_list (ptr_type_node, size_type_node,
4376 align_type_node, NULL_TREE);
4377 newtype = cp_build_type_attribute_variant (newtype, newattrs);
4378 newtype = build_exception_variant (newtype, new_eh_spec);
4379 opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4380 DECL_IS_MALLOC (opnew) = 1;
4381 DECL_IS_OPERATOR_NEW (opnew) = 1;
4382 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4383 DECL_IS_MALLOC (opnew) = 1;
4384 DECL_IS_OPERATOR_NEW (opnew) = 1;
4386 /* operator delete (void *, align_val_t); */
4387 deltype = build_function_type_list (void_type_node, ptr_type_node,
4388 align_type_node, NULL_TREE);
4389 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4390 deltype = build_exception_variant (deltype, empty_except_spec);
4391 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4392 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4394 if (flag_sized_deallocation)
4396 /* operator delete (void *, size_t, align_val_t); */
4397 deltype = build_function_type_list (void_type_node, ptr_type_node,
4398 size_type_node, align_type_node,
4399 NULL_TREE);
4400 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4401 deltype = build_exception_variant (deltype, empty_except_spec);
4402 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4403 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4407 nullptr_type_node = make_node (NULLPTR_TYPE);
4408 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
4409 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
4410 TYPE_UNSIGNED (nullptr_type_node) = 1;
4411 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
4412 if (abi_version_at_least (9))
4413 SET_TYPE_ALIGN (nullptr_type_node, GET_MODE_ALIGNMENT (ptr_mode));
4414 SET_TYPE_MODE (nullptr_type_node, ptr_mode);
4415 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
4416 nullptr_node = build_int_cst (nullptr_type_node, 0);
4419 abort_fndecl
4420 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
4421 ECF_NORETURN | ECF_NOTHROW | ECF_COLD);
4423 /* Perform other language dependent initializations. */
4424 init_class_processing ();
4425 init_rtti_processing ();
4426 init_template_processing ();
4428 if (flag_exceptions)
4429 init_exception_processing ();
4431 if (! supports_one_only ())
4432 flag_weak = 0;
4434 make_fname_decl = cp_make_fname_decl;
4435 start_fname_decls ();
4437 /* Show we use EH for cleanups. */
4438 if (flag_exceptions)
4439 using_eh_for_cleanups ();
4442 /* Generate an initializer for a function naming variable from
4443 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
4444 filled in with the type of the init. */
4446 tree
4447 cp_fname_init (const char* name, tree *type_p)
4449 tree domain = NULL_TREE;
4450 tree type;
4451 tree init = NULL_TREE;
4452 size_t length = 0;
4454 if (name)
4456 length = strlen (name);
4457 domain = build_index_type (size_int (length));
4458 init = build_string (length + 1, name);
4461 type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
4462 type = build_cplus_array_type (type, domain);
4464 *type_p = type;
4466 if (init)
4467 TREE_TYPE (init) = type;
4468 else
4469 init = error_mark_node;
4471 return init;
4474 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
4475 the decl, LOC is the location to give the decl, NAME is the
4476 initialization string and TYPE_DEP indicates whether NAME depended
4477 on the type of the function. We make use of that to detect
4478 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
4479 at the point of first use, so we mustn't push the decl now. */
4481 static tree
4482 cp_make_fname_decl (location_t loc, tree id, int type_dep)
4484 const char *const name = (type_dep && processing_template_decl
4485 ? NULL : fname_as_string (type_dep));
4486 tree type;
4487 tree init = cp_fname_init (name, &type);
4488 tree decl = build_decl (loc, VAR_DECL, id, type);
4490 if (name)
4491 free (CONST_CAST (char *, name));
4493 TREE_STATIC (decl) = 1;
4494 TREE_READONLY (decl) = 1;
4495 DECL_ARTIFICIAL (decl) = 1;
4497 TREE_USED (decl) = 1;
4499 if (current_function_decl)
4501 DECL_CONTEXT (decl) = current_function_decl;
4502 decl = pushdecl_outermost_localscope (decl);
4503 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
4504 LOOKUP_ONLYCONVERTING);
4506 else
4508 DECL_THIS_STATIC (decl) = true;
4509 pushdecl_top_level_and_finish (decl, init);
4512 return decl;
4515 static tree
4516 builtin_function_1 (tree decl, tree context, bool is_global)
4518 tree id = DECL_NAME (decl);
4519 const char *name = IDENTIFIER_POINTER (id);
4521 retrofit_lang_decl (decl);
4523 DECL_ARTIFICIAL (decl) = 1;
4524 SET_DECL_LANGUAGE (decl, lang_c);
4525 /* Runtime library routines are, by definition, available in an
4526 external shared object. */
4527 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4528 DECL_VISIBILITY_SPECIFIED (decl) = 1;
4530 DECL_CONTEXT (decl) = context;
4532 /* A function in the user's namespace should have an explicit
4533 declaration before it is used. Mark the built-in function as
4534 anticipated but not actually declared. */
4535 if (name[0] != '_' || name[1] != '_')
4536 DECL_ANTICIPATED (decl) = 1;
4537 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4539 size_t len = strlen (name);
4541 /* Treat __*_chk fortification functions as anticipated as well,
4542 unless they are __builtin_*. */
4543 if (len > strlen ("___chk")
4544 && memcmp (name + len - strlen ("_chk"),
4545 "_chk", strlen ("_chk") + 1) == 0)
4546 DECL_ANTICIPATED (decl) = 1;
4549 if (is_global)
4550 pushdecl_top_level (decl);
4551 else
4552 pushdecl (decl);
4554 return decl;
4557 tree
4558 cxx_builtin_function (tree decl)
4560 tree id = DECL_NAME (decl);
4561 const char *name = IDENTIFIER_POINTER (id);
4562 /* All builtins that don't begin with an '_' should additionally
4563 go in the 'std' namespace. */
4564 if (name[0] != '_')
4566 tree decl2 = copy_node(decl);
4567 push_namespace (std_identifier);
4568 builtin_function_1 (decl2, std_node, false);
4569 pop_namespace ();
4572 return builtin_function_1 (decl, NULL_TREE, false);
4575 /* Like cxx_builtin_function, but guarantee the function is added to the global
4576 scope. This is to allow function specific options to add new machine
4577 dependent builtins when the target ISA changes via attribute((target(...)))
4578 which saves space on program startup if the program does not use non-generic
4579 ISAs. */
4581 tree
4582 cxx_builtin_function_ext_scope (tree decl)
4585 tree id = DECL_NAME (decl);
4586 const char *name = IDENTIFIER_POINTER (id);
4587 /* All builtins that don't begin with an '_' should additionally
4588 go in the 'std' namespace. */
4589 if (name[0] != '_')
4591 tree decl2 = copy_node(decl);
4592 push_namespace (std_identifier);
4593 builtin_function_1 (decl2, std_node, true);
4594 pop_namespace ();
4597 return builtin_function_1 (decl, NULL_TREE, true);
4600 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4601 function. Not called directly. */
4603 static tree
4604 build_library_fn (tree name, enum tree_code operator_code, tree type,
4605 int ecf_flags)
4607 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4608 DECL_EXTERNAL (fn) = 1;
4609 TREE_PUBLIC (fn) = 1;
4610 DECL_ARTIFICIAL (fn) = 1;
4611 DECL_OVERLOADED_OPERATOR_CODE_RAW (fn)
4612 = OVL_OP_INFO (false, operator_code)->ovl_op_code;
4613 SET_DECL_LANGUAGE (fn, lang_c);
4614 /* Runtime library routines are, by definition, available in an
4615 external shared object. */
4616 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4617 DECL_VISIBILITY_SPECIFIED (fn) = 1;
4618 set_call_expr_flags (fn, ecf_flags);
4619 return fn;
4622 /* Returns the _DECL for a library function with C++ linkage. */
4624 static tree
4625 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4626 int ecf_flags)
4628 tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4629 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4630 SET_DECL_LANGUAGE (fn, lang_cplusplus);
4631 return fn;
4634 /* Like build_library_fn, but takes a C string instead of an
4635 IDENTIFIER_NODE. */
4637 tree
4638 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4640 return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4643 /* Like build_cp_library_fn, but takes a C string instead of an
4644 IDENTIFIER_NODE. */
4646 tree
4647 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4649 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4650 ecf_flags);
4653 /* Like build_library_fn, but also pushes the function so that we will
4654 be able to find it via get_global_binding. Also, the function
4655 may throw exceptions listed in RAISES. */
4657 tree
4658 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4660 tree fn;
4662 if (raises)
4663 type = build_exception_variant (type, raises);
4665 fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4666 pushdecl_top_level (fn);
4667 return fn;
4670 /* Like build_cp_library_fn, but also pushes the function so that it
4671 will be found by normal lookup. */
4673 static tree
4674 push_cp_library_fn (enum tree_code operator_code, tree type,
4675 int ecf_flags)
4677 tree fn = build_cp_library_fn (ovl_op_identifier (false, operator_code),
4678 operator_code, type, ecf_flags);
4679 pushdecl (fn);
4680 if (flag_tm)
4681 apply_tm_attr (fn, get_identifier ("transaction_safe"));
4682 return fn;
4685 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4686 a FUNCTION_TYPE. */
4688 tree
4689 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4691 tree type = build_function_type (void_type_node, parmtypes);
4692 return push_library_fn (name, type, NULL_TREE, ecf_flags);
4695 /* Like push_library_fn, but also note that this function throws
4696 and does not return. Used for __throw_foo and the like. */
4698 tree
4699 push_throw_library_fn (tree name, tree type)
4701 tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN | ECF_COLD);
4702 return fn;
4705 /* When we call finish_struct for an anonymous union, we create
4706 default copy constructors and such. But, an anonymous union
4707 shouldn't have such things; this function undoes the damage to the
4708 anonymous union type T.
4710 (The reason that we create the synthesized methods is that we don't
4711 distinguish `union { int i; }' from `typedef union { int i; } U'.
4712 The first is an anonymous union; the second is just an ordinary
4713 union type.) */
4715 void
4716 fixup_anonymous_aggr (tree t)
4718 /* Wipe out memory of synthesized methods. */
4719 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4720 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4721 TYPE_HAS_COPY_CTOR (t) = 0;
4722 TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4723 TYPE_HAS_COPY_ASSIGN (t) = 0;
4724 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4726 /* Splice the implicitly generated functions out of TYPE_FIELDS. */
4727 for (tree probe, *prev_p = &TYPE_FIELDS (t); (probe = *prev_p);)
4728 if (TREE_CODE (probe) == FUNCTION_DECL && DECL_ARTIFICIAL (probe))
4729 *prev_p = DECL_CHAIN (probe);
4730 else
4731 prev_p = &DECL_CHAIN (probe);
4733 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4734 assignment operators (because they cannot have these methods themselves).
4735 For anonymous unions this is already checked because they are not allowed
4736 in any union, otherwise we have to check it. */
4737 if (TREE_CODE (t) != UNION_TYPE)
4739 tree field, type;
4741 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4742 if (TREE_CODE (field) == FIELD_DECL)
4744 type = TREE_TYPE (field);
4745 if (CLASS_TYPE_P (type))
4747 if (TYPE_NEEDS_CONSTRUCTING (type))
4748 error ("member %q+#D with constructor not allowed "
4749 "in anonymous aggregate", field);
4750 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4751 error ("member %q+#D with destructor not allowed "
4752 "in anonymous aggregate", field);
4753 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4754 error ("member %q+#D with copy assignment operator "
4755 "not allowed in anonymous aggregate", field);
4761 /* Warn for an attribute located at LOCATION that appertains to the
4762 class type CLASS_TYPE that has not been properly placed after its
4763 class-key, in it class-specifier. */
4765 void
4766 warn_misplaced_attr_for_class_type (source_location location,
4767 tree class_type)
4769 gcc_assert (OVERLOAD_TYPE_P (class_type));
4771 auto_diagnostic_group d;
4772 if (warning_at (location, OPT_Wattributes,
4773 "attribute ignored in declaration "
4774 "of %q#T", class_type))
4775 inform (location,
4776 "attribute for %q#T must follow the %qs keyword",
4777 class_type, class_key_or_enum_as_string (class_type));
4780 /* Make sure that a declaration with no declarator is well-formed, i.e.
4781 just declares a tagged type or anonymous union.
4783 Returns the type declared; or NULL_TREE if none. */
4785 tree
4786 check_tag_decl (cp_decl_specifier_seq *declspecs,
4787 bool explicit_type_instantiation_p)
4789 int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4790 int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4791 /* If a class, struct, or enum type is declared by the DECLSPECS
4792 (i.e, if a class-specifier, enum-specifier, or non-typename
4793 elaborated-type-specifier appears in the DECLSPECS),
4794 DECLARED_TYPE is set to the corresponding type. */
4795 tree declared_type = NULL_TREE;
4796 bool error_p = false;
4798 if (declspecs->multiple_types_p)
4799 error ("multiple types in one declaration");
4800 else if (declspecs->redefined_builtin_type)
4802 if (!in_system_header_at (input_location))
4803 permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4804 "redeclaration of C++ built-in type %qT",
4805 declspecs->redefined_builtin_type);
4806 return NULL_TREE;
4809 if (declspecs->type
4810 && TYPE_P (declspecs->type)
4811 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4812 && MAYBE_CLASS_TYPE_P (declspecs->type))
4813 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4814 declared_type = declspecs->type;
4815 else if (declspecs->type == error_mark_node)
4816 error_p = true;
4817 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4818 permerror (input_location, "declaration does not declare anything");
4819 else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4821 error_at (declspecs->locations[ds_type_spec],
4822 "%<auto%> can only be specified for variables "
4823 "or function declarations");
4824 return error_mark_node;
4826 /* Check for an anonymous union. */
4827 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4828 && TYPE_UNNAMED_P (declared_type))
4830 /* 7/3 In a simple-declaration, the optional init-declarator-list
4831 can be omitted only when declaring a class (clause 9) or
4832 enumeration (7.2), that is, when the decl-specifier-seq contains
4833 either a class-specifier, an elaborated-type-specifier with
4834 a class-key (9.1), or an enum-specifier. In these cases and
4835 whenever a class-specifier or enum-specifier is present in the
4836 decl-specifier-seq, the identifiers in these specifiers are among
4837 the names being declared by the declaration (as class-name,
4838 enum-names, or enumerators, depending on the syntax). In such
4839 cases, and except for the declaration of an unnamed bit-field (9.6),
4840 the decl-specifier-seq shall introduce one or more names into the
4841 program, or shall redeclare a name introduced by a previous
4842 declaration. [Example:
4843 enum { }; // ill-formed
4844 typedef class { }; // ill-formed
4845 --end example] */
4846 if (saw_typedef)
4848 error ("missing type-name in typedef-declaration");
4849 return NULL_TREE;
4851 /* Anonymous unions are objects, so they can have specifiers. */;
4852 SET_ANON_AGGR_TYPE_P (declared_type);
4854 if (TREE_CODE (declared_type) != UNION_TYPE
4855 && !in_system_header_at (input_location))
4856 pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4859 else
4861 if (decl_spec_seq_has_spec_p (declspecs, ds_inline))
4862 error_at (declspecs->locations[ds_inline],
4863 "%<inline%> can only be specified for functions");
4864 else if (decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4865 error_at (declspecs->locations[ds_virtual],
4866 "%<virtual%> can only be specified for functions");
4867 else if (saw_friend
4868 && (!current_class_type
4869 || current_scope () != current_class_type))
4870 error_at (declspecs->locations[ds_friend],
4871 "%<friend%> can only be specified inside a class");
4872 else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4873 error_at (declspecs->locations[ds_explicit],
4874 "%<explicit%> can only be specified for constructors");
4875 else if (declspecs->storage_class)
4876 error_at (declspecs->locations[ds_storage_class],
4877 "a storage class can only be specified for objects "
4878 "and functions");
4879 else if (decl_spec_seq_has_spec_p (declspecs, ds_const))
4880 error_at (declspecs->locations[ds_const],
4881 "%<const%> can only be specified for objects and "
4882 "functions");
4883 else if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
4884 error_at (declspecs->locations[ds_volatile],
4885 "%<volatile%> can only be specified for objects and "
4886 "functions");
4887 else if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
4888 error_at (declspecs->locations[ds_restrict],
4889 "%<__restrict%> can only be specified for objects and "
4890 "functions");
4891 else if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
4892 error_at (declspecs->locations[ds_thread],
4893 "%<__thread%> can only be specified for objects "
4894 "and functions");
4895 else if (saw_typedef)
4896 warning_at (declspecs->locations[ds_typedef], 0,
4897 "%<typedef%> was ignored in this declaration");
4898 else if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr))
4899 error_at (declspecs->locations[ds_constexpr],
4900 "%<constexpr%> cannot be used for type declarations");
4903 if (declspecs->attributes && warn_attributes && declared_type)
4905 location_t loc;
4906 if (!CLASS_TYPE_P (declared_type)
4907 || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4908 /* For a non-template class, use the name location. */
4909 loc = location_of (declared_type);
4910 else
4911 /* For a template class (an explicit instantiation), use the
4912 current location. */
4913 loc = input_location;
4915 if (explicit_type_instantiation_p)
4916 /* [dcl.attr.grammar]/4:
4918 No attribute-specifier-seq shall appertain to an explicit
4919 instantiation. */
4921 if (warning_at (loc, OPT_Wattributes,
4922 "attribute ignored in explicit instantiation %q#T",
4923 declared_type))
4924 inform (loc,
4925 "no attribute can be applied to "
4926 "an explicit instantiation");
4928 else
4929 warn_misplaced_attr_for_class_type (loc, declared_type);
4932 return declared_type;
4935 /* Called when a declaration is seen that contains no names to declare.
4936 If its type is a reference to a structure, union or enum inherited
4937 from a containing scope, shadow that tag name for the current scope
4938 with a forward reference.
4939 If its type defines a new named structure or union
4940 or defines an enum, it is valid but we need not do anything here.
4941 Otherwise, it is an error.
4943 C++: may have to grok the declspecs to learn about static,
4944 complain for anonymous unions.
4946 Returns the TYPE declared -- or NULL_TREE if none. */
4948 tree
4949 shadow_tag (cp_decl_specifier_seq *declspecs)
4951 tree t = check_tag_decl (declspecs,
4952 /*explicit_type_instantiation_p=*/false);
4954 if (!t)
4955 return NULL_TREE;
4957 if (maybe_process_partial_specialization (t) == error_mark_node)
4958 return NULL_TREE;
4960 /* This is where the variables in an anonymous union are
4961 declared. An anonymous union declaration looks like:
4962 union { ... } ;
4963 because there is no declarator after the union, the parser
4964 sends that declaration here. */
4965 if (ANON_AGGR_TYPE_P (t))
4967 fixup_anonymous_aggr (t);
4969 if (TYPE_FIELDS (t))
4971 tree decl = grokdeclarator (/*declarator=*/NULL,
4972 declspecs, NORMAL, 0, NULL);
4973 finish_anon_union (decl);
4977 return t;
4980 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4982 tree
4983 groktypename (cp_decl_specifier_seq *type_specifiers,
4984 const cp_declarator *declarator,
4985 bool is_template_arg)
4987 tree attrs;
4988 tree type;
4989 enum decl_context context
4990 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4991 attrs = type_specifiers->attributes;
4992 type_specifiers->attributes = NULL_TREE;
4993 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4994 if (attrs && type != error_mark_node)
4996 if (CLASS_TYPE_P (type))
4997 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4998 "outside of definition", type);
4999 else if (MAYBE_CLASS_TYPE_P (type))
5000 /* A template type parameter or other dependent type. */
5001 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
5002 "type %qT without an associated declaration", type);
5003 else
5004 cplus_decl_attributes (&type, attrs, 0);
5006 return type;
5009 /* Process a DECLARATOR for a function-scope variable declaration,
5010 namespace-scope variable declaration, or function declaration.
5011 (Function definitions go through start_function; class member
5012 declarations appearing in the body of the class go through
5013 grokfield.) The DECL corresponding to the DECLARATOR is returned.
5014 If an error occurs, the error_mark_node is returned instead.
5016 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
5017 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
5018 for an explicitly defaulted function, or SD_DELETED for an explicitly
5019 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
5020 implicitly initialized via a default constructor. ATTRIBUTES and
5021 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
5023 The scope represented by the context of the returned DECL is pushed
5024 (if it is not the global namespace) and is assigned to
5025 *PUSHED_SCOPE_P. The caller is then responsible for calling
5026 pop_scope on *PUSHED_SCOPE_P if it is set. */
5028 tree
5029 start_decl (const cp_declarator *declarator,
5030 cp_decl_specifier_seq *declspecs,
5031 int initialized,
5032 tree attributes,
5033 tree prefix_attributes,
5034 tree *pushed_scope_p)
5036 tree decl;
5037 tree context;
5038 bool was_public;
5039 int flags;
5040 bool alias;
5042 *pushed_scope_p = NULL_TREE;
5044 /* An object declared as __attribute__((deprecated)) suppresses
5045 warnings of uses of other deprecated items. */
5046 if (lookup_attribute ("deprecated", attributes))
5047 deprecated_state = DEPRECATED_SUPPRESS;
5049 attributes = chainon (attributes, prefix_attributes);
5051 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
5052 &attributes);
5054 deprecated_state = DEPRECATED_NORMAL;
5056 if (decl == NULL_TREE || VOID_TYPE_P (decl)
5057 || decl == error_mark_node)
5058 return error_mark_node;
5060 context = CP_DECL_CONTEXT (decl);
5061 if (context != global_namespace)
5062 *pushed_scope_p = push_scope (context);
5064 /* Is it valid for this decl to have an initializer at all?
5065 If not, set INITIALIZED to zero, which will indirectly
5066 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
5067 if (initialized
5068 && TREE_CODE (decl) == TYPE_DECL)
5070 error ("typedef %qD is initialized (use decltype instead)", decl);
5071 return error_mark_node;
5074 if (initialized)
5076 if (! toplevel_bindings_p ()
5077 && DECL_EXTERNAL (decl))
5078 warning (0, "declaration of %q#D has %<extern%> and is initialized",
5079 decl);
5080 DECL_EXTERNAL (decl) = 0;
5081 if (toplevel_bindings_p ())
5082 TREE_STATIC (decl) = 1;
5084 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
5086 if (alias && TREE_CODE (decl) == FUNCTION_DECL)
5087 record_key_method_defined (decl);
5089 /* If this is a typedef that names the class for linkage purposes
5090 (7.1.3p8), apply any attributes directly to the type. */
5091 if (TREE_CODE (decl) == TYPE_DECL
5092 && OVERLOAD_TYPE_P (TREE_TYPE (decl))
5093 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
5094 flags = ATTR_FLAG_TYPE_IN_PLACE;
5095 else
5096 flags = 0;
5098 /* Set attributes here so if duplicate decl, will have proper attributes. */
5099 cplus_decl_attributes (&decl, attributes, flags);
5101 /* Dllimported symbols cannot be defined. Static data members (which
5102 can be initialized in-class and dllimported) go through grokfield,
5103 not here, so we don't need to exclude those decls when checking for
5104 a definition. */
5105 if (initialized && DECL_DLLIMPORT_P (decl))
5107 error ("definition of %q#D is marked %<dllimport%>", decl);
5108 DECL_DLLIMPORT_P (decl) = 0;
5111 /* If #pragma weak was used, mark the decl weak now. */
5112 if (!processing_template_decl && !DECL_DECOMPOSITION_P (decl))
5113 maybe_apply_pragma_weak (decl);
5115 if (TREE_CODE (decl) == FUNCTION_DECL
5116 && DECL_DECLARED_INLINE_P (decl)
5117 && DECL_UNINLINABLE (decl)
5118 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
5119 warning_at (DECL_SOURCE_LOCATION (decl), 0,
5120 "inline function %qD given attribute noinline", decl);
5122 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
5124 bool this_tmpl = (processing_template_decl
5125 > template_class_depth (context));
5126 if (VAR_P (decl))
5128 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
5129 if (field == NULL_TREE
5130 || !(VAR_P (field) || variable_template_p (field)))
5131 error ("%q+#D is not a static data member of %q#T", decl, context);
5132 else if (variable_template_p (field)
5133 && (DECL_LANG_SPECIFIC (decl)
5134 && DECL_TEMPLATE_SPECIALIZATION (decl)))
5135 /* OK, specialization was already checked. */;
5136 else if (variable_template_p (field) && !this_tmpl)
5138 error_at (DECL_SOURCE_LOCATION (decl),
5139 "non-member-template declaration of %qD", decl);
5140 inform (DECL_SOURCE_LOCATION (field), "does not match "
5141 "member template declaration here");
5142 return error_mark_node;
5144 else
5146 if (variable_template_p (field))
5147 field = DECL_TEMPLATE_RESULT (field);
5149 if (DECL_CONTEXT (field) != context)
5151 if (!same_type_p (DECL_CONTEXT (field), context))
5152 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
5153 "to be defined as %<%T::%D%>",
5154 DECL_CONTEXT (field), DECL_NAME (decl),
5155 context, DECL_NAME (decl));
5156 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
5158 /* Static data member are tricky; an in-class initialization
5159 still doesn't provide a definition, so the in-class
5160 declaration will have DECL_EXTERNAL set, but will have an
5161 initialization. Thus, duplicate_decls won't warn
5162 about this situation, and so we check here. */
5163 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
5164 error ("duplicate initialization of %qD", decl);
5165 field = duplicate_decls (decl, field,
5166 /*newdecl_is_friend=*/false);
5167 if (field == error_mark_node)
5168 return error_mark_node;
5169 else if (field)
5170 decl = field;
5173 else
5175 tree field = check_classfn (context, decl,
5176 this_tmpl
5177 ? current_template_parms
5178 : NULL_TREE);
5179 if (field && field != error_mark_node
5180 && duplicate_decls (decl, field,
5181 /*newdecl_is_friend=*/false))
5182 decl = field;
5185 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
5186 DECL_IN_AGGR_P (decl) = 0;
5187 /* Do not mark DECL as an explicit specialization if it was not
5188 already marked as an instantiation; a declaration should
5189 never be marked as a specialization unless we know what
5190 template is being specialized. */
5191 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
5193 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
5194 if (TREE_CODE (decl) == FUNCTION_DECL)
5195 DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
5196 && DECL_DECLARED_INLINE_P (decl));
5197 else
5198 DECL_COMDAT (decl) = false;
5200 /* [temp.expl.spec] An explicit specialization of a static data
5201 member of a template is a definition if the declaration
5202 includes an initializer; otherwise, it is a declaration.
5204 We check for processing_specialization so this only applies
5205 to the new specialization syntax. */
5206 if (!initialized && processing_specialization)
5207 DECL_EXTERNAL (decl) = 1;
5210 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
5211 /* Aliases are definitions. */
5212 && !alias)
5213 permerror (input_location, "declaration of %q#D outside of class is not definition",
5214 decl);
5217 was_public = TREE_PUBLIC (decl);
5219 /* Enter this declaration into the symbol table. Don't push the plain
5220 VAR_DECL for a variable template. */
5221 if (!template_parm_scope_p ()
5222 || !VAR_P (decl))
5223 decl = maybe_push_decl (decl);
5225 if (processing_template_decl)
5226 decl = push_template_decl (decl);
5227 if (decl == error_mark_node)
5228 return error_mark_node;
5230 if (VAR_P (decl)
5231 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
5232 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
5234 /* This is a const variable with implicit 'static'. Set
5235 DECL_THIS_STATIC so we can tell it from variables that are
5236 !TREE_PUBLIC because of the anonymous namespace. */
5237 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
5238 DECL_THIS_STATIC (decl) = 1;
5241 if (current_function_decl && VAR_P (decl)
5242 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
5244 bool ok = false;
5245 if (CP_DECL_THREAD_LOCAL_P (decl))
5246 error ("%qD declared %<thread_local%> in %<constexpr%> function",
5247 decl);
5248 else if (TREE_STATIC (decl))
5249 error ("%qD declared %<static%> in %<constexpr%> function", decl);
5250 else
5251 ok = true;
5252 if (!ok)
5253 cp_function_chain->invalid_constexpr = true;
5256 if (!processing_template_decl && VAR_P (decl))
5257 start_decl_1 (decl, initialized);
5259 return decl;
5262 /* Process the declaration of a variable DECL. INITIALIZED is true
5263 iff DECL is explicitly initialized. (INITIALIZED is false if the
5264 variable is initialized via an implicitly-called constructor.)
5265 This function must be called for ordinary variables (including, for
5266 example, implicit instantiations of templates), but must not be
5267 called for template declarations. */
5269 void
5270 start_decl_1 (tree decl, bool initialized)
5272 tree type;
5273 bool complete_p;
5274 bool aggregate_definition_p;
5276 gcc_assert (!processing_template_decl);
5278 if (error_operand_p (decl))
5279 return;
5281 gcc_assert (VAR_P (decl));
5283 type = TREE_TYPE (decl);
5284 complete_p = COMPLETE_TYPE_P (type);
5285 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
5287 /* If an explicit initializer is present, or if this is a definition
5288 of an aggregate, then we need a complete type at this point.
5289 (Scalars are always complete types, so there is nothing to
5290 check.) This code just sets COMPLETE_P; errors (if necessary)
5291 are issued below. */
5292 if ((initialized || aggregate_definition_p)
5293 && !complete_p
5294 && COMPLETE_TYPE_P (complete_type (type)))
5296 complete_p = true;
5297 /* We will not yet have set TREE_READONLY on DECL if the type
5298 was "const", but incomplete, before this point. But, now, we
5299 have a complete type, so we can try again. */
5300 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
5303 if (initialized)
5304 /* Is it valid for this decl to have an initializer at all? */
5306 /* Don't allow initializations for incomplete types except for
5307 arrays which might be completed by the initialization. */
5308 if (complete_p)
5309 ; /* A complete type is ok. */
5310 else if (type_uses_auto (type))
5311 ; /* An auto type is ok. */
5312 else if (TREE_CODE (type) != ARRAY_TYPE)
5314 error ("variable %q#D has initializer but incomplete type", decl);
5315 type = TREE_TYPE (decl) = error_mark_node;
5317 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5319 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
5320 error ("elements of array %q#D have incomplete type", decl);
5321 /* else we already gave an error in start_decl. */
5324 else if (aggregate_definition_p && !complete_p)
5326 if (type_uses_auto (type))
5327 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (type));
5328 else
5330 error ("aggregate %q#D has incomplete type and cannot be defined",
5331 decl);
5332 /* Change the type so that assemble_variable will give
5333 DECL an rtl we can live with: (mem (const_int 0)). */
5334 type = TREE_TYPE (decl) = error_mark_node;
5338 /* Create a new scope to hold this declaration if necessary.
5339 Whether or not a new scope is necessary cannot be determined
5340 until after the type has been completed; if the type is a
5341 specialization of a class template it is not until after
5342 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
5343 will be set correctly. */
5344 maybe_push_cleanup_level (type);
5347 /* Handle initialization of references. DECL, TYPE, and INIT have the
5348 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
5349 but will be set to a new CLEANUP_STMT if a temporary is created
5350 that must be destroyed subsequently.
5352 Returns an initializer expression to use to initialize DECL, or
5353 NULL if the initialization can be performed statically.
5355 Quotes on semantics can be found in ARM 8.4.3. */
5357 static tree
5358 grok_reference_init (tree decl, tree type, tree init, int flags)
5360 if (init == NULL_TREE)
5362 if ((DECL_LANG_SPECIFIC (decl) == 0
5363 || DECL_IN_AGGR_P (decl) == 0)
5364 && ! DECL_THIS_EXTERN (decl))
5365 error ("%qD declared as reference but not initialized", decl);
5366 return NULL_TREE;
5369 if (TREE_CODE (init) == TREE_LIST)
5370 init = build_x_compound_expr_from_list (init, ELK_INIT,
5371 tf_warning_or_error);
5373 tree ttype = TREE_TYPE (type);
5374 if (TREE_CODE (ttype) != ARRAY_TYPE
5375 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
5376 /* Note: default conversion is only called in very special cases. */
5377 init = decay_conversion (init, tf_warning_or_error);
5379 /* check_initializer handles this for non-reference variables, but for
5380 references we need to do it here or the initializer will get the
5381 incomplete array type and confuse later calls to
5382 cp_complete_array_type. */
5383 if (TREE_CODE (ttype) == ARRAY_TYPE
5384 && TYPE_DOMAIN (ttype) == NULL_TREE
5385 && (BRACE_ENCLOSED_INITIALIZER_P (init)
5386 || TREE_CODE (init) == STRING_CST))
5388 cp_complete_array_type (&ttype, init, false);
5389 if (ttype != TREE_TYPE (type))
5390 type = cp_build_reference_type (ttype, TYPE_REF_IS_RVALUE (type));
5393 /* Convert INIT to the reference type TYPE. This may involve the
5394 creation of a temporary, whose lifetime must be the same as that
5395 of the reference. If so, a DECL_EXPR for the temporary will be
5396 added just after the DECL_EXPR for DECL. That's why we don't set
5397 DECL_INITIAL for local references (instead assigning to them
5398 explicitly); we need to allow the temporary to be initialized
5399 first. */
5400 return initialize_reference (type, init, flags,
5401 tf_warning_or_error);
5404 /* Designated initializers in arrays are not supported in GNU C++.
5405 The parser cannot detect this error since it does not know whether
5406 a given brace-enclosed initializer is for a class type or for an
5407 array. This function checks that CE does not use a designated
5408 initializer. If it does, an error is issued. Returns true if CE
5409 is valid, i.e., does not have a designated initializer. */
5411 bool
5412 check_array_designated_initializer (constructor_elt *ce,
5413 unsigned HOST_WIDE_INT index)
5415 /* Designated initializers for array elements are not supported. */
5416 if (ce->index)
5418 /* The parser only allows identifiers as designated
5419 initializers. */
5420 if (ce->index == error_mark_node)
5422 error ("name used in a GNU-style designated "
5423 "initializer for an array");
5424 return false;
5426 else if (identifier_p (ce->index))
5428 error ("name %qD used in a GNU-style designated "
5429 "initializer for an array", ce->index);
5430 return false;
5433 tree ce_index = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5434 ce->index, true);
5435 if (ce_index
5436 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index))
5437 && (TREE_CODE (ce_index = fold_non_dependent_expr (ce_index))
5438 == INTEGER_CST))
5440 /* A C99 designator is OK if it matches the current index. */
5441 if (wi::to_wide (ce_index) == index)
5443 ce->index = ce_index;
5444 return true;
5446 else
5447 sorry ("non-trivial designated initializers not supported");
5449 else
5450 error ("C99 designator %qE is not an integral constant-expression",
5451 ce->index);
5453 return false;
5456 return true;
5459 /* When parsing `int a[] = {1, 2};' we don't know the size of the
5460 array until we finish parsing the initializer. If that's the
5461 situation we're in, update DECL accordingly. */
5463 static void
5464 maybe_deduce_size_from_array_init (tree decl, tree init)
5466 tree type = TREE_TYPE (decl);
5468 if (TREE_CODE (type) == ARRAY_TYPE
5469 && TYPE_DOMAIN (type) == NULL_TREE
5470 && TREE_CODE (decl) != TYPE_DECL)
5472 /* do_default is really a C-ism to deal with tentative definitions.
5473 But let's leave it here to ease the eventual merge. */
5474 int do_default = !DECL_EXTERNAL (decl);
5475 tree initializer = init ? init : DECL_INITIAL (decl);
5476 int failure = 0;
5478 /* Check that there are no designated initializers in INIT, as
5479 those are not supported in GNU C++, and as the middle-end
5480 will crash if presented with a non-numeric designated
5481 initializer. */
5482 if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
5484 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
5485 constructor_elt *ce;
5486 HOST_WIDE_INT i;
5487 FOR_EACH_VEC_SAFE_ELT (v, i, ce)
5489 if (instantiation_dependent_expression_p (ce->index))
5490 return;
5491 if (!check_array_designated_initializer (ce, i))
5492 failure = 1;
5496 if (failure)
5497 TREE_TYPE (decl) = error_mark_node;
5498 else
5500 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
5501 do_default);
5502 if (failure == 1)
5504 error_at (cp_expr_loc_or_loc (initializer,
5505 DECL_SOURCE_LOCATION (decl)),
5506 "initializer fails to determine size of %qD", decl);
5508 else if (failure == 2)
5510 if (do_default)
5512 error_at (DECL_SOURCE_LOCATION (decl),
5513 "array size missing in %qD", decl);
5515 /* If a `static' var's size isn't known, make it extern as
5516 well as static, so it does not get allocated. If it's not
5517 `static', then don't mark it extern; finish_incomplete_decl
5518 will give it a default size and it will get allocated. */
5519 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
5520 DECL_EXTERNAL (decl) = 1;
5522 else if (failure == 3)
5524 error_at (DECL_SOURCE_LOCATION (decl),
5525 "zero-size array %qD", decl);
5529 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
5531 relayout_decl (decl);
5535 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
5536 any appropriate error messages regarding the layout. */
5538 static void
5539 layout_var_decl (tree decl)
5541 tree type;
5543 type = TREE_TYPE (decl);
5544 if (type == error_mark_node)
5545 return;
5547 /* If we haven't already laid out this declaration, do so now.
5548 Note that we must not call complete type for an external object
5549 because it's type might involve templates that we are not
5550 supposed to instantiate yet. (And it's perfectly valid to say
5551 `extern X x' for some incomplete type `X'.) */
5552 if (!DECL_EXTERNAL (decl))
5553 complete_type (type);
5554 if (!DECL_SIZE (decl)
5555 && TREE_TYPE (decl) != error_mark_node
5556 && complete_or_array_type_p (type))
5557 layout_decl (decl, 0);
5559 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
5561 /* An automatic variable with an incomplete type: that is an error.
5562 Don't talk about array types here, since we took care of that
5563 message in grokdeclarator. */
5564 error_at (DECL_SOURCE_LOCATION (decl),
5565 "storage size of %qD isn%'t known", decl);
5566 TREE_TYPE (decl) = error_mark_node;
5568 #if 0
5569 /* Keep this code around in case we later want to control debug info
5570 based on whether a type is "used". (jason 1999-11-11) */
5572 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
5573 /* Let debugger know it should output info for this type. */
5574 note_debug_info_needed (ttype);
5576 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
5577 note_debug_info_needed (DECL_CONTEXT (decl));
5578 #endif
5580 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
5581 && DECL_SIZE (decl) != NULL_TREE
5582 && ! TREE_CONSTANT (DECL_SIZE (decl)))
5584 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
5585 constant_expression_warning (DECL_SIZE (decl));
5586 else
5588 error_at (DECL_SOURCE_LOCATION (decl),
5589 "storage size of %qD isn%'t constant", decl);
5590 TREE_TYPE (decl) = error_mark_node;
5595 /* If a local static variable is declared in an inline function, or if
5596 we have a weak definition, we must endeavor to create only one
5597 instance of the variable at link-time. */
5599 void
5600 maybe_commonize_var (tree decl)
5602 /* Static data in a function with comdat linkage also has comdat
5603 linkage. */
5604 if ((TREE_STATIC (decl)
5605 /* Don't mess with __FUNCTION__. */
5606 && ! DECL_ARTIFICIAL (decl)
5607 && DECL_FUNCTION_SCOPE_P (decl)
5608 && vague_linkage_p (DECL_CONTEXT (decl)))
5609 || (TREE_PUBLIC (decl) && DECL_INLINE_VAR_P (decl)))
5611 if (flag_weak)
5613 /* With weak symbols, we simply make the variable COMDAT;
5614 that will cause copies in multiple translations units to
5615 be merged. */
5616 comdat_linkage (decl);
5618 else
5620 if (DECL_INITIAL (decl) == NULL_TREE
5621 || DECL_INITIAL (decl) == error_mark_node)
5623 /* Without weak symbols, we can use COMMON to merge
5624 uninitialized variables. */
5625 TREE_PUBLIC (decl) = 1;
5626 DECL_COMMON (decl) = 1;
5628 else
5630 /* While for initialized variables, we must use internal
5631 linkage -- which means that multiple copies will not
5632 be merged. */
5633 TREE_PUBLIC (decl) = 0;
5634 DECL_COMMON (decl) = 0;
5635 const char *msg;
5636 if (DECL_INLINE_VAR_P (decl))
5637 msg = G_("sorry: semantics of inline variable "
5638 "%q#D are wrong (you%'ll wind up with "
5639 "multiple copies)");
5640 else
5641 msg = G_("sorry: semantics of inline function "
5642 "static data %q#D are wrong (you%'ll wind "
5643 "up with multiple copies)");
5644 if (warning_at (DECL_SOURCE_LOCATION (decl), 0,
5645 msg, decl))
5646 inform (DECL_SOURCE_LOCATION (decl),
5647 "you can work around this by removing the initializer");
5653 /* Issue an error message if DECL is an uninitialized const variable.
5654 CONSTEXPR_CONTEXT_P is true when the function is called in a constexpr
5655 context from potential_constant_expression. Returns true if all is well,
5656 false otherwise. */
5658 bool
5659 check_for_uninitialized_const_var (tree decl, bool constexpr_context_p,
5660 tsubst_flags_t complain)
5662 tree type = strip_array_types (TREE_TYPE (decl));
5664 /* ``Unless explicitly declared extern, a const object does not have
5665 external linkage and must be initialized. ($8.4; $12.1)'' ARM
5666 7.1.6 */
5667 if (VAR_P (decl)
5668 && !TYPE_REF_P (type)
5669 && (constexpr_context_p
5670 || CP_TYPE_CONST_P (type) || var_in_constexpr_fn (decl))
5671 && !DECL_NONTRIVIALLY_INITIALIZED_P (decl))
5673 tree field = default_init_uninitialized_part (type);
5674 if (!field)
5675 return true;
5677 if (!constexpr_context_p)
5679 if (CP_TYPE_CONST_P (type))
5681 if (complain & tf_error)
5682 permerror (DECL_SOURCE_LOCATION (decl),
5683 "uninitialized const %qD", decl);
5685 else
5687 if (!is_instantiation_of_constexpr (current_function_decl)
5688 && (complain & tf_error))
5689 error_at (DECL_SOURCE_LOCATION (decl),
5690 "uninitialized variable %qD in %<constexpr%> "
5691 "function", decl);
5692 cp_function_chain->invalid_constexpr = true;
5695 else if (complain & tf_error)
5696 error_at (DECL_SOURCE_LOCATION (decl),
5697 "uninitialized variable %qD in %<constexpr%> context",
5698 decl);
5700 if (CLASS_TYPE_P (type) && (complain & tf_error))
5702 tree defaulted_ctor;
5704 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5705 "%q#T has no user-provided default constructor", type);
5706 defaulted_ctor = in_class_defaulted_default_constructor (type);
5707 if (defaulted_ctor)
5708 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5709 "constructor is not user-provided because it is "
5710 "explicitly defaulted in the class body");
5711 inform (DECL_SOURCE_LOCATION (field),
5712 "and the implicitly-defined constructor does not "
5713 "initialize %q#D", field);
5716 return false;
5719 return true;
5722 /* Structure holding the current initializer being processed by reshape_init.
5723 CUR is a pointer to the current element being processed, END is a pointer
5724 after the last element present in the initializer. */
5725 struct reshape_iter
5727 constructor_elt *cur;
5728 constructor_elt *end;
5731 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5733 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
5734 returned is the next FIELD_DECL (possibly FIELD itself) that can be
5735 initialized. If there are no more such fields, the return value
5736 will be NULL. */
5738 tree
5739 next_initializable_field (tree field)
5741 while (field
5742 && (TREE_CODE (field) != FIELD_DECL
5743 || DECL_UNNAMED_BIT_FIELD (field)
5744 || (DECL_ARTIFICIAL (field)
5745 && !(cxx_dialect >= cxx17 && DECL_FIELD_IS_BASE (field)))))
5746 field = DECL_CHAIN (field);
5748 return field;
5751 /* Return true for [dcl.init.list] direct-list-initialization from
5752 single element of enumeration with a fixed underlying type. */
5754 bool
5755 is_direct_enum_init (tree type, tree init)
5757 if (cxx_dialect >= cxx17
5758 && TREE_CODE (type) == ENUMERAL_TYPE
5759 && ENUM_FIXED_UNDERLYING_TYPE_P (type)
5760 && TREE_CODE (init) == CONSTRUCTOR
5761 && CONSTRUCTOR_IS_DIRECT_INIT (init)
5762 && CONSTRUCTOR_NELTS (init) == 1)
5763 return true;
5764 return false;
5767 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5768 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5769 INTEGER_CST representing the size of the array minus one (the maximum index),
5770 or NULL_TREE if the array was declared without specifying the size. D is
5771 the iterator within the constructor. */
5773 static tree
5774 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5775 tsubst_flags_t complain)
5777 tree new_init;
5778 bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5779 unsigned HOST_WIDE_INT max_index_cst = 0;
5780 unsigned HOST_WIDE_INT index;
5782 /* The initializer for an array is always a CONSTRUCTOR. */
5783 new_init = build_constructor (init_list_type_node, NULL);
5785 if (sized_array_p)
5787 /* Minus 1 is used for zero sized arrays. */
5788 if (integer_all_onesp (max_index))
5789 return new_init;
5791 if (tree_fits_uhwi_p (max_index))
5792 max_index_cst = tree_to_uhwi (max_index);
5793 /* sizetype is sign extended, not zero extended. */
5794 else
5795 max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
5798 /* Loop until there are no more initializers. */
5799 for (index = 0;
5800 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5801 ++index)
5803 tree elt_init;
5804 constructor_elt *old_cur = d->cur;
5806 check_array_designated_initializer (d->cur, index);
5807 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5808 complain);
5809 if (elt_init == error_mark_node)
5810 return error_mark_node;
5811 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5812 size_int (index), elt_init);
5813 if (!TREE_CONSTANT (elt_init))
5814 TREE_CONSTANT (new_init) = false;
5816 /* This can happen with an invalid initializer (c++/54501). */
5817 if (d->cur == old_cur && !sized_array_p)
5818 break;
5821 return new_init;
5824 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5825 Parameters are the same of reshape_init_r. */
5827 static tree
5828 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5830 tree max_index = NULL_TREE;
5832 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5834 if (TYPE_DOMAIN (type))
5835 max_index = array_type_nelts (type);
5837 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5840 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5841 Parameters are the same of reshape_init_r. */
5843 static tree
5844 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5846 tree max_index = NULL_TREE;
5848 gcc_assert (VECTOR_TYPE_P (type));
5850 if (COMPOUND_LITERAL_P (d->cur->value))
5852 tree value = d->cur->value;
5853 if (!same_type_p (TREE_TYPE (value), type))
5855 if (complain & tf_error)
5856 error ("invalid type %qT as initializer for a vector of type %qT",
5857 TREE_TYPE (d->cur->value), type);
5858 value = error_mark_node;
5860 ++d->cur;
5861 return value;
5864 /* For a vector, we initialize it as an array of the appropriate size. */
5865 if (VECTOR_TYPE_P (type))
5866 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5868 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5871 /* Subroutine of reshape_init_r, processes the initializers for classes
5872 or union. Parameters are the same of reshape_init_r. */
5874 static tree
5875 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5876 tsubst_flags_t complain)
5878 tree field;
5879 tree new_init;
5881 gcc_assert (CLASS_TYPE_P (type));
5883 /* The initializer for a class is always a CONSTRUCTOR. */
5884 new_init = build_constructor (init_list_type_node, NULL);
5885 field = next_initializable_field (TYPE_FIELDS (type));
5887 if (!field)
5889 /* [dcl.init.aggr]
5891 An initializer for an aggregate member that is an
5892 empty class shall have the form of an empty
5893 initializer-list {}. */
5894 if (!first_initializer_p)
5896 if (complain & tf_error)
5897 error ("initializer for %qT must be brace-enclosed", type);
5898 return error_mark_node;
5900 return new_init;
5903 /* Loop through the initializable fields, gathering initializers. */
5904 while (d->cur != d->end)
5906 tree field_init;
5907 constructor_elt *old_cur = d->cur;
5909 /* Handle designated initializers, as an extension. */
5910 if (d->cur->index)
5912 if (d->cur->index == error_mark_node)
5913 return error_mark_node;
5915 if (TREE_CODE (d->cur->index) == FIELD_DECL)
5917 /* We already reshaped this. */
5918 if (field != d->cur->index)
5920 tree id = DECL_NAME (d->cur->index);
5921 gcc_assert (id);
5922 gcc_checking_assert (d->cur->index
5923 == get_class_binding (type, id, false));
5924 field = d->cur->index;
5927 else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
5928 field = get_class_binding (type, d->cur->index, false);
5929 else
5931 if (complain & tf_error)
5932 error ("%<[%E] =%> used in a GNU-style designated initializer"
5933 " for class %qT", d->cur->index, type);
5934 return error_mark_node;
5937 if (!field || TREE_CODE (field) != FIELD_DECL)
5939 if (complain & tf_error)
5940 error ("%qT has no non-static data member named %qD", type,
5941 d->cur->index);
5942 return error_mark_node;
5946 /* If we processed all the member of the class, we are done. */
5947 if (!field)
5948 break;
5950 field_init = reshape_init_r (TREE_TYPE (field), d,
5951 /*first_initializer_p=*/false, complain);
5952 if (field_init == error_mark_node)
5953 return error_mark_node;
5955 if (d->cur == old_cur && d->cur->index)
5957 /* This can happen with an invalid initializer for a flexible
5958 array member (c++/54441). */
5959 if (complain & tf_error)
5960 error ("invalid initializer for %q#D", field);
5961 return error_mark_node;
5964 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5966 /* [dcl.init.aggr]
5968 When a union is initialized with a brace-enclosed
5969 initializer, the braces shall only contain an
5970 initializer for the first member of the union. */
5971 if (TREE_CODE (type) == UNION_TYPE)
5972 break;
5974 field = next_initializable_field (DECL_CHAIN (field));
5977 return new_init;
5980 /* Subroutine of reshape_init_r. We're in a context where C99 initializer
5981 designators are not valid; either complain or return true to indicate
5982 that reshape_init_r should return error_mark_node. */
5984 static bool
5985 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5987 if (d->cur->index)
5989 if (complain & tf_error)
5990 error ("C99 designator %qE outside aggregate initializer",
5991 d->cur->index);
5992 else
5993 return true;
5995 return false;
5998 /* Subroutine of reshape_init, which processes a single initializer (part of
5999 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
6000 iterator within the CONSTRUCTOR which points to the initializer to process.
6001 FIRST_INITIALIZER_P is true if this is the first initializer of the
6002 outermost CONSTRUCTOR node. */
6004 static tree
6005 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
6006 tsubst_flags_t complain)
6008 tree init = d->cur->value;
6010 if (error_operand_p (init))
6011 return error_mark_node;
6013 if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
6014 && has_designator_problem (d, complain))
6015 return error_mark_node;
6017 if (TREE_CODE (type) == COMPLEX_TYPE)
6019 /* A complex type can be initialized from one or two initializers,
6020 but braces are not elided. */
6021 d->cur++;
6022 if (BRACE_ENCLOSED_INITIALIZER_P (init))
6024 if (CONSTRUCTOR_NELTS (init) > 2)
6026 if (complain & tf_error)
6027 error ("too many initializers for %qT", type);
6028 else
6029 return error_mark_node;
6032 else if (first_initializer_p && d->cur != d->end)
6034 vec<constructor_elt, va_gc> *v = 0;
6035 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
6036 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
6037 if (has_designator_problem (d, complain))
6038 return error_mark_node;
6039 d->cur++;
6040 init = build_constructor (init_list_type_node, v);
6042 return init;
6045 /* A non-aggregate type is always initialized with a single
6046 initializer. */
6047 if (!CP_AGGREGATE_TYPE_P (type))
6049 /* It is invalid to initialize a non-aggregate type with a
6050 brace-enclosed initializer before C++0x.
6051 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
6052 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
6053 a CONSTRUCTOR (with a record type). */
6054 if (TREE_CODE (init) == CONSTRUCTOR
6055 /* Don't complain about a capture-init. */
6056 && !CONSTRUCTOR_IS_DIRECT_INIT (init)
6057 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
6059 if (SCALAR_TYPE_P (type))
6061 if (cxx_dialect < cxx11
6062 /* Isn't value-initialization. */
6063 || CONSTRUCTOR_NELTS (init) > 0)
6065 if (complain & tf_error)
6066 error ("braces around scalar initializer for type %qT",
6067 type);
6068 init = error_mark_node;
6071 else
6072 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6075 d->cur++;
6076 return init;
6079 /* "If T is a class type and the initializer list has a single element of
6080 type cv U, where U is T or a class derived from T, the object is
6081 initialized from that element." Even if T is an aggregate. */
6082 if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
6083 && first_initializer_p
6084 && d->end - d->cur == 1
6085 && reference_related_p (type, TREE_TYPE (init)))
6087 d->cur++;
6088 return init;
6091 /* [dcl.init.aggr]
6093 All implicit type conversions (clause _conv_) are considered when
6094 initializing the aggregate member with an initializer from an
6095 initializer-list. If the initializer can initialize a member,
6096 the member is initialized. Otherwise, if the member is itself a
6097 non-empty subaggregate, brace elision is assumed and the
6098 initializer is considered for the initialization of the first
6099 member of the subaggregate. */
6100 if (TREE_CODE (init) != CONSTRUCTOR
6101 /* But don't try this for the first initializer, since that would be
6102 looking through the outermost braces; A a2 = { a1 }; is not a
6103 valid aggregate initialization. */
6104 && !first_initializer_p
6105 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
6106 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
6107 complain)))
6109 d->cur++;
6110 return init;
6113 /* [dcl.init.string]
6115 A char array (whether plain char, signed char, or unsigned char)
6116 can be initialized by a string-literal (optionally enclosed in
6117 braces); a wchar_t array can be initialized by a wide
6118 string-literal (optionally enclosed in braces). */
6119 if (TREE_CODE (type) == ARRAY_TYPE
6120 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
6122 tree str_init = init;
6124 /* Strip one level of braces if and only if they enclose a single
6125 element (as allowed by [dcl.init.string]). */
6126 if (!first_initializer_p
6127 && TREE_CODE (str_init) == CONSTRUCTOR
6128 && CONSTRUCTOR_NELTS (str_init) == 1)
6130 str_init = (*CONSTRUCTOR_ELTS (str_init))[0].value;
6133 /* If it's a string literal, then it's the initializer for the array
6134 as a whole. Otherwise, continue with normal initialization for
6135 array types (one value per array element). */
6136 if (TREE_CODE (str_init) == STRING_CST)
6138 if (has_designator_problem (d, complain))
6139 return error_mark_node;
6140 d->cur++;
6141 return str_init;
6145 /* The following cases are about aggregates. If we are not within a full
6146 initializer already, and there is not a CONSTRUCTOR, it means that there
6147 is a missing set of braces (that is, we are processing the case for
6148 which reshape_init exists). */
6149 if (!first_initializer_p)
6151 if (TREE_CODE (init) == CONSTRUCTOR)
6153 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
6154 /* There is no need to reshape pointer-to-member function
6155 initializers, as they are always constructed correctly
6156 by the front end. */
6158 else if (COMPOUND_LITERAL_P (init))
6159 /* For a nested compound literal, there is no need to reshape since
6160 brace elision is not allowed. Even if we decided to allow it,
6161 we should add a call to reshape_init in finish_compound_literal,
6162 before calling digest_init, so changing this code would still
6163 not be necessary. */
6164 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
6165 else
6167 ++d->cur;
6168 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6169 return reshape_init (type, init, complain);
6173 if (complain & tf_warning)
6174 warning (OPT_Wmissing_braces,
6175 "missing braces around initializer for %qT",
6176 type);
6179 /* Dispatch to specialized routines. */
6180 if (CLASS_TYPE_P (type))
6181 return reshape_init_class (type, d, first_initializer_p, complain);
6182 else if (TREE_CODE (type) == ARRAY_TYPE)
6183 return reshape_init_array (type, d, complain);
6184 else if (VECTOR_TYPE_P (type))
6185 return reshape_init_vector (type, d, complain);
6186 else
6187 gcc_unreachable();
6190 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
6191 brace-enclosed aggregate initializer.
6193 INIT is the CONSTRUCTOR containing the list of initializers describing
6194 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
6195 It may not presently match the shape of the TYPE; for example:
6197 struct S { int a; int b; };
6198 struct S a[] = { 1, 2, 3, 4 };
6200 Here INIT will hold a vector of four elements, rather than a
6201 vector of two elements, each itself a vector of two elements. This
6202 routine transforms INIT from the former form into the latter. The
6203 revised CONSTRUCTOR node is returned. */
6205 tree
6206 reshape_init (tree type, tree init, tsubst_flags_t complain)
6208 vec<constructor_elt, va_gc> *v;
6209 reshape_iter d;
6210 tree new_init;
6212 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6214 v = CONSTRUCTOR_ELTS (init);
6216 /* An empty constructor does not need reshaping, and it is always a valid
6217 initializer. */
6218 if (vec_safe_is_empty (v))
6219 return init;
6221 /* Handle [dcl.init.list] direct-list-initialization from
6222 single element of enumeration with a fixed underlying type. */
6223 if (is_direct_enum_init (type, init))
6225 tree elt = CONSTRUCTOR_ELT (init, 0)->value;
6226 type = cv_unqualified (type);
6227 if (check_narrowing (ENUM_UNDERLYING_TYPE (type), elt, complain))
6229 warning_sentinel w (warn_useless_cast);
6230 warning_sentinel w2 (warn_ignored_qualifiers);
6231 return cp_build_c_cast (type, elt, tf_warning_or_error);
6233 else
6234 return error_mark_node;
6237 /* Recurse on this CONSTRUCTOR. */
6238 d.cur = &(*v)[0];
6239 d.end = d.cur + v->length ();
6241 new_init = reshape_init_r (type, &d, true, complain);
6242 if (new_init == error_mark_node)
6243 return error_mark_node;
6245 /* Make sure all the element of the constructor were used. Otherwise,
6246 issue an error about exceeding initializers. */
6247 if (d.cur != d.end)
6249 if (complain & tf_error)
6250 error ("too many initializers for %qT", type);
6251 return error_mark_node;
6254 if (CONSTRUCTOR_IS_DIRECT_INIT (init)
6255 && BRACE_ENCLOSED_INITIALIZER_P (new_init))
6256 CONSTRUCTOR_IS_DIRECT_INIT (new_init) = true;
6258 return new_init;
6261 /* Verify array initializer. Returns true if errors have been reported. */
6263 bool
6264 check_array_initializer (tree decl, tree type, tree init)
6266 tree element_type = TREE_TYPE (type);
6268 /* The array type itself need not be complete, because the
6269 initializer may tell us how many elements are in the array.
6270 But, the elements of the array must be complete. */
6271 if (!COMPLETE_TYPE_P (complete_type (element_type)))
6273 if (decl)
6274 error_at (DECL_SOURCE_LOCATION (decl),
6275 "elements of array %q#D have incomplete type", decl);
6276 else
6277 error ("elements of array %q#T have incomplete type", type);
6278 return true;
6280 /* A compound literal can't have variable size. */
6281 if (init && !decl
6282 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
6283 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
6285 error ("variable-sized compound literal");
6286 return true;
6288 return false;
6291 /* Subroutine of check_initializer; args are passed down from that function.
6292 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
6294 static tree
6295 build_aggr_init_full_exprs (tree decl, tree init, int flags)
6298 gcc_assert (stmts_are_full_exprs_p ());
6299 return build_aggr_init (decl, init, flags, tf_warning_or_error);
6302 /* Attempt to determine the constant VALUE of integral type and convert
6303 it to TYPE, issuing narrowing warnings/errors as necessary. Return
6304 the constant result or null on failure. Callback for
6305 braced_list_to_string. */
6307 static tree
6308 eval_check_narrowing (tree type, tree value)
6310 if (tree valtype = TREE_TYPE (value))
6312 if (TREE_CODE (valtype) != INTEGER_TYPE)
6313 return NULL_TREE;
6315 else
6316 return NULL_TREE;
6318 value = scalar_constant_value (value);
6319 if (!value)
6320 return NULL_TREE;
6322 check_narrowing (type, value, tf_warning_or_error);
6323 return value;
6326 /* Verify INIT (the initializer for DECL), and record the
6327 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
6328 grok_reference_init.
6330 If the return value is non-NULL, it is an expression that must be
6331 evaluated dynamically to initialize DECL. */
6333 static tree
6334 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
6336 tree type = TREE_TYPE (decl);
6337 tree init_code = NULL;
6338 tree core_type;
6340 /* Things that are going to be initialized need to have complete
6341 type. */
6342 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
6344 if (DECL_HAS_VALUE_EXPR_P (decl))
6346 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
6347 it doesn't have storage to be initialized. */
6348 gcc_assert (init == NULL_TREE);
6349 return NULL_TREE;
6352 if (type == error_mark_node)
6353 /* We will have already complained. */
6354 return NULL_TREE;
6356 if (TREE_CODE (type) == ARRAY_TYPE)
6358 if (check_array_initializer (decl, type, init))
6359 return NULL_TREE;
6361 else if (!COMPLETE_TYPE_P (type))
6363 error_at (DECL_SOURCE_LOCATION (decl),
6364 "%q#D has incomplete type", decl);
6365 TREE_TYPE (decl) = error_mark_node;
6366 return NULL_TREE;
6368 else
6369 /* There is no way to make a variable-sized class type in GNU C++. */
6370 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
6372 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
6374 int init_len = CONSTRUCTOR_NELTS (init);
6375 if (SCALAR_TYPE_P (type))
6377 if (init_len == 0)
6379 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6380 init = build_zero_init (type, NULL_TREE, false);
6382 else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
6384 error_at (cp_expr_loc_or_loc (init, DECL_SOURCE_LOCATION (decl)),
6385 "scalar object %qD requires one element in "
6386 "initializer", decl);
6387 TREE_TYPE (decl) = error_mark_node;
6388 return NULL_TREE;
6393 if (TREE_CODE (decl) == CONST_DECL)
6395 gcc_assert (!TYPE_REF_P (type));
6397 DECL_INITIAL (decl) = init;
6399 gcc_assert (init != NULL_TREE);
6400 init = NULL_TREE;
6402 else if (!init && DECL_REALLY_EXTERN (decl))
6404 else if (init || type_build_ctor_call (type)
6405 || TYPE_REF_P (type))
6407 if (TYPE_REF_P (type))
6409 init = grok_reference_init (decl, type, init, flags);
6410 flags |= LOOKUP_ALREADY_DIGESTED;
6412 else if (!init)
6413 check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
6414 tf_warning_or_error);
6415 /* Do not reshape constructors of vectors (they don't need to be
6416 reshaped. */
6417 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
6419 if (is_std_init_list (type))
6421 init = perform_implicit_conversion (type, init,
6422 tf_warning_or_error);
6423 flags |= LOOKUP_ALREADY_DIGESTED;
6425 else if (TYPE_NON_AGGREGATE_CLASS (type))
6427 /* Don't reshape if the class has constructors. */
6428 if (cxx_dialect == cxx98)
6429 error_at (cp_expr_loc_or_loc (init, DECL_SOURCE_LOCATION (decl)),
6430 "in C++98 %qD must be initialized by "
6431 "constructor, not by %<{...}%>",
6432 decl);
6434 else if (VECTOR_TYPE_P (type) && TYPE_VECTOR_OPAQUE (type))
6436 error ("opaque vector types cannot be initialized");
6437 init = error_mark_node;
6439 else
6441 /* Try to convert a string CONSTRUCTOR into a STRING_CST. */
6442 tree valtype = TREE_TYPE (decl);
6443 if (TREE_CODE (valtype) == ARRAY_TYPE
6444 && TYPE_STRING_FLAG (TREE_TYPE (valtype))
6445 && BRACE_ENCLOSED_INITIALIZER_P (init))
6446 if (tree str = braced_list_to_string (valtype, init,
6447 eval_check_narrowing))
6448 init = str;
6450 if (TREE_CODE (init) != STRING_CST)
6451 init = reshape_init (type, init, tf_warning_or_error);
6452 flags |= LOOKUP_NO_NARROWING;
6455 else if (TREE_CODE (init) == TREE_LIST
6456 && TREE_TYPE (init) != unknown_type_node
6457 && !MAYBE_CLASS_TYPE_P (type))
6459 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6461 /* We get here with code like `int a (2);' */
6462 init = build_x_compound_expr_from_list (init, ELK_INIT,
6463 tf_warning_or_error);
6466 /* If DECL has an array type without a specific bound, deduce the
6467 array size from the initializer. */
6468 maybe_deduce_size_from_array_init (decl, init);
6469 type = TREE_TYPE (decl);
6470 if (type == error_mark_node)
6471 return NULL_TREE;
6473 if (((type_build_ctor_call (type) || CLASS_TYPE_P (type))
6474 && !(flags & LOOKUP_ALREADY_DIGESTED)
6475 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
6476 && CP_AGGREGATE_TYPE_P (type)
6477 && (CLASS_TYPE_P (type)
6478 || !TYPE_NEEDS_CONSTRUCTING (type)
6479 || type_has_extended_temps (type))))
6480 || (DECL_DECOMPOSITION_P (decl) && TREE_CODE (type) == ARRAY_TYPE))
6482 init_code = build_aggr_init_full_exprs (decl, init, flags);
6484 /* A constructor call is a non-trivial initializer even if
6485 it isn't explicitly written. */
6486 if (TREE_SIDE_EFFECTS (init_code))
6487 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
6489 /* If this is a constexpr initializer, expand_default_init will
6490 have returned an INIT_EXPR rather than a CALL_EXPR. In that
6491 case, pull the initializer back out and pass it down into
6492 store_init_value. */
6493 while (TREE_CODE (init_code) == EXPR_STMT
6494 || TREE_CODE (init_code) == CONVERT_EXPR)
6495 init_code = TREE_OPERAND (init_code, 0);
6496 if (TREE_CODE (init_code) == INIT_EXPR)
6498 init = TREE_OPERAND (init_code, 1);
6499 init_code = NULL_TREE;
6500 /* Don't call digest_init; it's unnecessary and will complain
6501 about aggregate initialization of non-aggregate classes. */
6502 flags |= LOOKUP_ALREADY_DIGESTED;
6504 else if (DECL_DECLARED_CONSTEXPR_P (decl))
6506 /* Declared constexpr, but no suitable initializer; massage
6507 init appropriately so we can pass it into store_init_value
6508 for the error. */
6509 if (CLASS_TYPE_P (type)
6510 && (!init || TREE_CODE (init) == TREE_LIST))
6512 init = build_functional_cast (type, init, tf_none);
6513 if (TREE_CODE (init) == TARGET_EXPR)
6514 TARGET_EXPR_DIRECT_INIT_P (init) = true;
6516 init_code = NULL_TREE;
6518 else
6519 init = NULL_TREE;
6522 if (init && TREE_CODE (init) != TREE_VEC)
6524 /* In aggregate initialization of a variable, each element
6525 initialization is a full-expression because there is no
6526 enclosing expression. */
6527 gcc_assert (stmts_are_full_exprs_p ());
6529 init_code = store_init_value (decl, init, cleanups, flags);
6531 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
6532 && DECL_INITIAL (decl)
6533 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
6534 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
6535 warning_at (cp_expr_loc_or_loc (DECL_INITIAL (decl),
6536 DECL_SOURCE_LOCATION (decl)),
6537 0, "array %qD initialized by parenthesized "
6538 "string literal %qE",
6539 decl, DECL_INITIAL (decl));
6540 init = NULL;
6543 else
6545 if (CLASS_TYPE_P (core_type = strip_array_types (type))
6546 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
6547 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
6548 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
6549 /*complain=*/true);
6551 check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
6552 tf_warning_or_error);
6555 if (init && init != error_mark_node)
6556 init_code = build2 (INIT_EXPR, type, decl, init);
6558 if (init_code)
6560 /* We might have set these in cp_finish_decl. */
6561 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
6562 TREE_CONSTANT (decl) = false;
6565 if (init_code
6566 && (DECL_IN_AGGR_P (decl)
6567 && DECL_INITIALIZED_IN_CLASS_P (decl)
6568 && !DECL_VAR_DECLARED_INLINE_P (decl)))
6570 static int explained = 0;
6572 if (cxx_dialect < cxx11)
6573 error ("initializer invalid for static member with constructor");
6574 else if (cxx_dialect < cxx17)
6575 error ("non-constant in-class initialization invalid for static "
6576 "member %qD", decl);
6577 else
6578 error ("non-constant in-class initialization invalid for non-inline "
6579 "static member %qD", decl);
6580 if (!explained)
6582 inform (input_location,
6583 "(an out of class initialization is required)");
6584 explained = 1;
6586 return NULL_TREE;
6589 return init_code;
6592 /* If DECL is not a local variable, give it RTL. */
6594 static void
6595 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
6597 int toplev = toplevel_bindings_p ();
6598 int defer_p;
6600 /* Set the DECL_ASSEMBLER_NAME for the object. */
6601 if (asmspec)
6603 /* The `register' keyword, when used together with an
6604 asm-specification, indicates that the variable should be
6605 placed in a particular register. */
6606 if (VAR_P (decl) && DECL_REGISTER (decl))
6608 set_user_assembler_name (decl, asmspec);
6609 DECL_HARD_REGISTER (decl) = 1;
6611 else
6613 if (TREE_CODE (decl) == FUNCTION_DECL
6614 && fndecl_built_in_p (decl, BUILT_IN_NORMAL))
6615 set_builtin_user_assembler_name (decl, asmspec);
6616 set_user_assembler_name (decl, asmspec);
6620 /* Handle non-variables up front. */
6621 if (!VAR_P (decl))
6623 rest_of_decl_compilation (decl, toplev, at_eof);
6624 return;
6627 /* If we see a class member here, it should be a static data
6628 member. */
6629 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
6631 gcc_assert (TREE_STATIC (decl));
6632 /* An in-class declaration of a static data member should be
6633 external; it is only a declaration, and not a definition. */
6634 if (init == NULL_TREE)
6635 gcc_assert (DECL_EXTERNAL (decl)
6636 || !TREE_PUBLIC (decl)
6637 || DECL_INLINE_VAR_P (decl));
6640 /* We don't create any RTL for local variables. */
6641 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6642 return;
6644 /* We defer emission of local statics until the corresponding
6645 DECL_EXPR is expanded. But with constexpr its function might never
6646 be expanded, so go ahead and tell cgraph about the variable now. */
6647 defer_p = ((DECL_FUNCTION_SCOPE_P (decl)
6648 && !var_in_maybe_constexpr_fn (decl))
6649 || DECL_VIRTUAL_P (decl));
6651 /* Defer template instantiations. */
6652 if (DECL_LANG_SPECIFIC (decl)
6653 && DECL_IMPLICIT_INSTANTIATION (decl))
6654 defer_p = 1;
6656 /* If we're not deferring, go ahead and assemble the variable. */
6657 if (!defer_p)
6658 rest_of_decl_compilation (decl, toplev, at_eof);
6661 /* walk_tree helper for wrap_temporary_cleanups, below. */
6663 static tree
6664 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
6666 /* Stop at types or full-expression boundaries. */
6667 if (TYPE_P (*stmt_p)
6668 || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
6670 *walk_subtrees = 0;
6671 return NULL_TREE;
6674 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
6676 tree guard = (tree)data;
6677 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
6679 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
6680 /* Tell honor_protect_cleanup_actions to handle this as a separate
6681 cleanup. */
6682 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
6684 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
6687 return NULL_TREE;
6690 /* We're initializing a local variable which has a cleanup GUARD. If there
6691 are any temporaries used in the initializer INIT of this variable, we
6692 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6693 variable will be cleaned up properly if one of them throws.
6695 Unfortunately, there's no way to express this properly in terms of
6696 nesting, as the regions for the temporaries overlap the region for the
6697 variable itself; if there are two temporaries, the variable needs to be
6698 the first thing destroyed if either of them throws. However, we only
6699 want to run the variable's cleanup if it actually got constructed. So
6700 we need to guard the temporary cleanups with the variable's cleanup if
6701 they are run on the normal path, but not if they are run on the
6702 exceptional path. We implement this by telling
6703 honor_protect_cleanup_actions to strip the variable cleanup from the
6704 exceptional path. */
6706 static void
6707 wrap_temporary_cleanups (tree init, tree guard)
6709 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6712 /* Generate code to initialize DECL (a local variable). */
6714 static void
6715 initialize_local_var (tree decl, tree init)
6717 tree type = TREE_TYPE (decl);
6718 tree cleanup;
6719 int already_used;
6721 gcc_assert (VAR_P (decl)
6722 || TREE_CODE (decl) == RESULT_DECL);
6723 gcc_assert (!TREE_STATIC (decl));
6725 if (DECL_SIZE (decl) == NULL_TREE)
6727 /* If we used it already as memory, it must stay in memory. */
6728 DECL_INITIAL (decl) = NULL_TREE;
6729 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6730 return;
6733 if (type == error_mark_node)
6734 return;
6736 /* Compute and store the initial value. */
6737 already_used = TREE_USED (decl) || TREE_USED (type);
6738 if (TREE_USED (type))
6739 DECL_READ_P (decl) = 1;
6741 /* Generate a cleanup, if necessary. */
6742 cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6744 /* Perform the initialization. */
6745 if (init)
6747 tree rinit = (TREE_CODE (init) == INIT_EXPR
6748 ? TREE_OPERAND (init, 1) : NULL_TREE);
6749 if (rinit && !TREE_SIDE_EFFECTS (rinit))
6751 /* Stick simple initializers in DECL_INITIAL so that
6752 -Wno-init-self works (c++/34772). */
6753 gcc_assert (TREE_OPERAND (init, 0) == decl);
6754 DECL_INITIAL (decl) = rinit;
6756 if (warn_init_self && TYPE_REF_P (type))
6758 STRIP_NOPS (rinit);
6759 if (rinit == decl)
6760 warning_at (DECL_SOURCE_LOCATION (decl),
6761 OPT_Winit_self,
6762 "reference %qD is initialized with itself", decl);
6765 else
6767 int saved_stmts_are_full_exprs_p;
6769 /* If we're only initializing a single object, guard the
6770 destructors of any temporaries used in its initializer with
6771 its destructor. This isn't right for arrays because each
6772 element initialization is a full-expression. */
6773 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6774 wrap_temporary_cleanups (init, cleanup);
6776 gcc_assert (building_stmt_list_p ());
6777 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6778 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6779 finish_expr_stmt (init);
6780 current_stmt_tree ()->stmts_are_full_exprs_p =
6781 saved_stmts_are_full_exprs_p;
6785 /* Set this to 0 so we can tell whether an aggregate which was
6786 initialized was ever used. Don't do this if it has a
6787 destructor, so we don't complain about the 'resource
6788 allocation is initialization' idiom. Now set
6789 attribute((unused)) on types so decls of that type will be
6790 marked used. (see TREE_USED, above.) */
6791 if (TYPE_NEEDS_CONSTRUCTING (type)
6792 && ! already_used
6793 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6794 && DECL_NAME (decl))
6795 TREE_USED (decl) = 0;
6796 else if (already_used)
6797 TREE_USED (decl) = 1;
6799 if (cleanup)
6800 finish_decl_cleanup (decl, cleanup);
6803 /* DECL is a VAR_DECL for a compiler-generated variable with static
6804 storage duration (like a virtual table) whose initializer is a
6805 compile-time constant. Initialize the variable and provide it to the
6806 back end. */
6808 void
6809 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6811 tree init;
6812 gcc_assert (DECL_ARTIFICIAL (decl));
6813 init = build_constructor (TREE_TYPE (decl), v);
6814 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6815 DECL_INITIAL (decl) = init;
6816 DECL_INITIALIZED_P (decl) = 1;
6817 determine_visibility (decl);
6818 layout_var_decl (decl);
6819 maybe_commonize_var (decl);
6820 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6823 /* INIT is the initializer for a variable, as represented by the
6824 parser. Returns true iff INIT is value-dependent. */
6826 static bool
6827 value_dependent_init_p (tree init)
6829 if (TREE_CODE (init) == TREE_LIST)
6830 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6831 return any_value_dependent_elements_p (init);
6832 else if (TREE_CODE (init) == CONSTRUCTOR)
6833 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6835 if (dependent_type_p (TREE_TYPE (init)))
6836 return true;
6838 vec<constructor_elt, va_gc> *elts;
6839 size_t nelts;
6840 size_t i;
6842 elts = CONSTRUCTOR_ELTS (init);
6843 nelts = vec_safe_length (elts);
6844 for (i = 0; i < nelts; ++i)
6845 if (value_dependent_init_p ((*elts)[i].value))
6846 return true;
6848 else
6849 /* It must be a simple expression, e.g., int i = 3; */
6850 return value_dependent_expression_p (init);
6852 return false;
6855 // Returns true if a DECL is VAR_DECL with the concept specifier.
6856 static inline bool
6857 is_concept_var (tree decl)
6859 return (VAR_P (decl)
6860 // Not all variables have DECL_LANG_SPECIFIC.
6861 && DECL_LANG_SPECIFIC (decl)
6862 && DECL_DECLARED_CONCEPT_P (decl));
6865 /* A helper function to be called via walk_tree. If any label exists
6866 under *TP, it is (going to be) forced. Set has_forced_label_in_static. */
6868 static tree
6869 notice_forced_label_r (tree *tp, int *walk_subtrees, void *)
6871 if (TYPE_P (*tp))
6872 *walk_subtrees = 0;
6873 if (TREE_CODE (*tp) == LABEL_DECL)
6874 cfun->has_forced_label_in_static = 1;
6875 return NULL_TREE;
6878 /* Finish processing of a declaration;
6879 install its line number and initial value.
6880 If the length of an array type is not known before,
6881 it must be determined now, from the initial value, or it is an error.
6883 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
6884 true, then INIT is an integral constant expression.
6886 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6887 if the (init) syntax was used. */
6889 void
6890 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6891 tree asmspec_tree, int flags)
6893 tree type;
6894 vec<tree, va_gc> *cleanups = NULL;
6895 const char *asmspec = NULL;
6896 int was_readonly = 0;
6897 bool var_definition_p = false;
6898 tree auto_node;
6900 if (decl == error_mark_node)
6901 return;
6902 else if (! decl)
6904 if (init)
6905 error ("assignment (not initialization) in declaration");
6906 return;
6909 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6910 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
6911 gcc_assert (TREE_CODE (decl) != PARM_DECL);
6913 type = TREE_TYPE (decl);
6914 if (type == error_mark_node)
6915 return;
6917 /* Warn about register storage specifiers except when in GNU global
6918 or local register variable extension. */
6919 if (VAR_P (decl) && DECL_REGISTER (decl) && asmspec_tree == NULL_TREE)
6921 if (cxx_dialect >= cxx17)
6922 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6923 "ISO C++17 does not allow %<register%> storage "
6924 "class specifier");
6925 else
6926 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6927 "%<register%> storage class specifier used");
6930 /* If a name was specified, get the string. */
6931 if (at_namespace_scope_p ())
6932 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6933 if (asmspec_tree && asmspec_tree != error_mark_node)
6934 asmspec = TREE_STRING_POINTER (asmspec_tree);
6936 if (current_class_type
6937 && CP_DECL_CONTEXT (decl) == current_class_type
6938 && TYPE_BEING_DEFINED (current_class_type)
6939 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6940 && (DECL_INITIAL (decl) || init))
6941 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6943 /* Do auto deduction unless decl is a function or an uninstantiated
6944 template specialization. */
6945 if (TREE_CODE (decl) != FUNCTION_DECL
6946 && !(init == NULL_TREE
6947 && DECL_LANG_SPECIFIC (decl)
6948 && DECL_TEMPLATE_INSTANTIATION (decl)
6949 && !DECL_TEMPLATE_INSTANTIATED (decl))
6950 && (auto_node = type_uses_auto (type)))
6952 tree d_init;
6953 if (init == NULL_TREE)
6954 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (auto_node));
6955 d_init = init;
6956 if (d_init)
6958 if (TREE_CODE (d_init) == TREE_LIST
6959 && !CLASS_PLACEHOLDER_TEMPLATE (auto_node))
6960 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6961 tf_warning_or_error);
6962 d_init = resolve_nondeduced_context (d_init, tf_warning_or_error);
6964 enum auto_deduction_context adc = adc_variable_type;
6965 if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
6966 adc = adc_decomp_type;
6967 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init, auto_node,
6968 tf_warning_or_error, adc,
6969 NULL_TREE, flags);
6970 if (type == error_mark_node)
6971 return;
6972 if (TREE_CODE (type) == FUNCTION_TYPE)
6974 error ("initializer for %<decltype(auto) %D%> has function type "
6975 "(did you forget the %<()%> ?)", decl);
6976 TREE_TYPE (decl) = error_mark_node;
6977 return;
6979 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6982 if (ensure_literal_type_for_constexpr_object (decl) == error_mark_node)
6984 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6985 if (VAR_P (decl) && DECL_CLASS_SCOPE_P (decl))
6987 init = NULL_TREE;
6988 DECL_EXTERNAL (decl) = 1;
6992 if (VAR_P (decl)
6993 && DECL_CLASS_SCOPE_P (decl)
6994 && DECL_INITIALIZED_IN_CLASS_P (decl))
6995 check_static_variable_definition (decl, type);
6997 if (init && TREE_CODE (decl) == FUNCTION_DECL)
6999 tree clone;
7000 if (init == ridpointers[(int)RID_DELETE])
7002 /* FIXME check this is 1st decl. */
7003 DECL_DELETED_FN (decl) = 1;
7004 DECL_DECLARED_INLINE_P (decl) = 1;
7005 DECL_INITIAL (decl) = error_mark_node;
7006 FOR_EACH_CLONE (clone, decl)
7008 DECL_DELETED_FN (clone) = 1;
7009 DECL_DECLARED_INLINE_P (clone) = 1;
7010 DECL_INITIAL (clone) = error_mark_node;
7012 init = NULL_TREE;
7014 else if (init == ridpointers[(int)RID_DEFAULT])
7016 if (defaultable_fn_check (decl))
7017 DECL_DEFAULTED_FN (decl) = 1;
7018 else
7019 DECL_INITIAL (decl) = NULL_TREE;
7023 if (init && VAR_P (decl))
7025 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
7026 /* If DECL is a reference, then we want to know whether init is a
7027 reference constant; init_const_expr_p as passed tells us whether
7028 it's an rvalue constant. */
7029 if (TYPE_REF_P (type))
7030 init_const_expr_p = potential_constant_expression (init);
7031 if (init_const_expr_p)
7033 /* Set these flags now for templates. We'll update the flags in
7034 store_init_value for instantiations. */
7035 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
7036 if (decl_maybe_constant_var_p (decl)
7037 /* FIXME setting TREE_CONSTANT on refs breaks the back end. */
7038 && !TYPE_REF_P (type))
7039 TREE_CONSTANT (decl) = 1;
7043 if (processing_template_decl)
7045 bool type_dependent_p;
7047 /* Add this declaration to the statement-tree. */
7048 if (at_function_scope_p ())
7049 add_decl_expr (decl);
7051 type_dependent_p = dependent_type_p (type);
7053 if (check_for_bare_parameter_packs (init))
7055 init = NULL_TREE;
7056 DECL_INITIAL (decl) = NULL_TREE;
7059 /* Generally, initializers in templates are expanded when the
7060 template is instantiated. But, if DECL is a variable constant
7061 then it can be used in future constant expressions, so its value
7062 must be available. */
7064 bool dep_init = false;
7066 if (!VAR_P (decl) || type_dependent_p)
7067 /* We can't do anything if the decl has dependent type. */;
7068 else if (!init && is_concept_var (decl))
7070 error ("variable concept has no initializer");
7071 init = boolean_true_node;
7073 else if (init
7074 && init_const_expr_p
7075 && !TYPE_REF_P (type)
7076 && decl_maybe_constant_var_p (decl)
7077 && !(dep_init = value_dependent_init_p (init)))
7079 /* This variable seems to be a non-dependent constant, so process
7080 its initializer. If check_initializer returns non-null the
7081 initialization wasn't constant after all. */
7082 tree init_code;
7083 cleanups = make_tree_vector ();
7084 init_code = check_initializer (decl, init, flags, &cleanups);
7085 if (init_code == NULL_TREE)
7086 init = NULL_TREE;
7087 release_tree_vector (cleanups);
7089 else if (!DECL_PRETTY_FUNCTION_P (decl))
7091 /* Deduce array size even if the initializer is dependent. */
7092 maybe_deduce_size_from_array_init (decl, init);
7093 /* And complain about multiple initializers. */
7094 if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
7095 && !MAYBE_CLASS_TYPE_P (type))
7096 init = build_x_compound_expr_from_list (init, ELK_INIT,
7097 tf_warning_or_error);
7100 if (init)
7101 DECL_INITIAL (decl) = init;
7103 if (dep_init)
7105 retrofit_lang_decl (decl);
7106 SET_DECL_DEPENDENT_INIT_P (decl, true);
7108 return;
7111 /* Just store non-static data member initializers for later. */
7112 if (init && TREE_CODE (decl) == FIELD_DECL)
7113 DECL_INITIAL (decl) = init;
7115 /* Take care of TYPE_DECLs up front. */
7116 if (TREE_CODE (decl) == TYPE_DECL)
7118 if (type != error_mark_node
7119 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
7121 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7122 warning (0, "shadowing previous type declaration of %q#D", decl);
7123 set_identifier_type_value (DECL_NAME (decl), decl);
7126 /* If we have installed this as the canonical typedef for this
7127 type, and that type has not been defined yet, delay emitting
7128 the debug information for it, as we will emit it later. */
7129 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7130 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
7131 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7133 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
7134 at_eof);
7135 return;
7138 /* A reference will be modified here, as it is initialized. */
7139 if (! DECL_EXTERNAL (decl)
7140 && TREE_READONLY (decl)
7141 && TYPE_REF_P (type))
7143 was_readonly = 1;
7144 TREE_READONLY (decl) = 0;
7147 if (VAR_P (decl))
7149 /* If this is a local variable that will need a mangled name,
7150 register it now. We must do this before processing the
7151 initializer for the variable, since the initialization might
7152 require a guard variable, and since the mangled name of the
7153 guard variable will depend on the mangled name of this
7154 variable. */
7155 if (DECL_FUNCTION_SCOPE_P (decl)
7156 && TREE_STATIC (decl)
7157 && !DECL_ARTIFICIAL (decl))
7159 push_local_name (decl);
7160 /* Normally has_forced_label_in_static is set during GIMPLE
7161 lowering, but [cd]tors are never actually compiled directly.
7162 We need to set this early so we can deal with the label
7163 address extension. */
7164 if ((DECL_CONSTRUCTOR_P (current_function_decl)
7165 || DECL_DESTRUCTOR_P (current_function_decl))
7166 && init)
7168 walk_tree (&init, notice_forced_label_r, NULL, NULL);
7169 add_local_decl (cfun, decl);
7171 /* And make sure it's in the symbol table for
7172 c_parse_final_cleanups to find. */
7173 varpool_node::get_create (decl);
7176 /* Convert the initializer to the type of DECL, if we have not
7177 already initialized DECL. */
7178 if (!DECL_INITIALIZED_P (decl)
7179 /* If !DECL_EXTERNAL then DECL is being defined. In the
7180 case of a static data member initialized inside the
7181 class-specifier, there can be an initializer even if DECL
7182 is *not* defined. */
7183 && (!DECL_EXTERNAL (decl) || init))
7185 cleanups = make_tree_vector ();
7186 init = check_initializer (decl, init, flags, &cleanups);
7188 /* Handle:
7190 [dcl.init]
7192 The memory occupied by any object of static storage
7193 duration is zero-initialized at program startup before
7194 any other initialization takes place.
7196 We cannot create an appropriate initializer until after
7197 the type of DECL is finalized. If DECL_INITIAL is set,
7198 then the DECL is statically initialized, and any
7199 necessary zero-initialization has already been performed. */
7200 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
7201 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
7202 /*nelts=*/NULL_TREE,
7203 /*static_storage_p=*/true);
7204 /* Remember that the initialization for this variable has
7205 taken place. */
7206 DECL_INITIALIZED_P (decl) = 1;
7207 /* This declaration is the definition of this variable,
7208 unless we are initializing a static data member within
7209 the class specifier. */
7210 if (!DECL_EXTERNAL (decl))
7211 var_definition_p = true;
7213 /* If the variable has an array type, lay out the type, even if
7214 there is no initializer. It is valid to index through the
7215 array, and we must get TYPE_ALIGN set correctly on the array
7216 type. */
7217 else if (TREE_CODE (type) == ARRAY_TYPE)
7218 layout_type (type);
7220 if (TREE_STATIC (decl)
7221 && !at_function_scope_p ()
7222 && current_function_decl == NULL)
7223 /* So decl is a global variable or a static member of a
7224 non local class. Record the types it uses
7225 so that we can decide later to emit debug info for them. */
7226 record_types_used_by_current_var_decl (decl);
7229 /* Add this declaration to the statement-tree. This needs to happen
7230 after the call to check_initializer so that the DECL_EXPR for a
7231 reference temp is added before the DECL_EXPR for the reference itself. */
7232 if (DECL_FUNCTION_SCOPE_P (decl))
7234 /* If we're building a variable sized type, and we might be
7235 reachable other than via the top of the current binding
7236 level, then create a new BIND_EXPR so that we deallocate
7237 the object at the right time. */
7238 if (VAR_P (decl)
7239 && DECL_SIZE (decl)
7240 && !TREE_CONSTANT (DECL_SIZE (decl))
7241 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
7243 tree bind;
7244 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
7245 TREE_SIDE_EFFECTS (bind) = 1;
7246 add_stmt (bind);
7247 BIND_EXPR_BODY (bind) = push_stmt_list ();
7249 add_decl_expr (decl);
7252 /* Let the middle end know about variables and functions -- but not
7253 static data members in uninstantiated class templates. */
7254 if (VAR_OR_FUNCTION_DECL_P (decl))
7256 if (VAR_P (decl))
7258 layout_var_decl (decl);
7259 maybe_commonize_var (decl);
7262 /* This needs to happen after the linkage is set. */
7263 determine_visibility (decl);
7265 if (var_definition_p && TREE_STATIC (decl))
7267 /* If a TREE_READONLY variable needs initialization
7268 at runtime, it is no longer readonly and we need to
7269 avoid MEM_READONLY_P being set on RTL created for it. */
7270 if (init)
7272 if (TREE_READONLY (decl))
7273 TREE_READONLY (decl) = 0;
7274 was_readonly = 0;
7276 else if (was_readonly)
7277 TREE_READONLY (decl) = 1;
7279 /* Likewise if it needs destruction. */
7280 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7281 TREE_READONLY (decl) = 0;
7284 make_rtl_for_nonlocal_decl (decl, init, asmspec);
7286 /* Check for abstractness of the type. Notice that there is no
7287 need to strip array types here since the check for those types
7288 is already done within create_array_type_for_decl. */
7289 abstract_virtuals_error (decl, type);
7291 if (TREE_TYPE (decl) == error_mark_node)
7292 /* No initialization required. */
7294 else if (TREE_CODE (decl) == FUNCTION_DECL)
7296 if (init)
7298 if (init == ridpointers[(int)RID_DEFAULT])
7300 /* An out-of-class default definition is defined at
7301 the point where it is explicitly defaulted. */
7302 if (DECL_DELETED_FN (decl))
7303 maybe_explain_implicit_delete (decl);
7304 else if (DECL_INITIAL (decl) == error_mark_node)
7305 synthesize_method (decl);
7307 else
7308 error ("function %q#D is initialized like a variable", decl);
7310 /* else no initialization required. */
7312 else if (DECL_EXTERNAL (decl)
7313 && ! (DECL_LANG_SPECIFIC (decl)
7314 && DECL_NOT_REALLY_EXTERN (decl)))
7316 if (init)
7317 DECL_INITIAL (decl) = init;
7319 /* A variable definition. */
7320 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
7321 /* Initialize the local variable. */
7322 initialize_local_var (decl, init);
7324 /* If a variable is defined, and then a subsequent
7325 definition with external linkage is encountered, we will
7326 get here twice for the same variable. We want to avoid
7327 calling expand_static_init more than once. For variables
7328 that are not static data members, we can call
7329 expand_static_init only when we actually process the
7330 initializer. It is not legal to redeclare a static data
7331 member, so this issue does not arise in that case. */
7332 else if (var_definition_p && TREE_STATIC (decl))
7333 expand_static_init (decl, init);
7336 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
7337 reference, insert it in the statement-tree now. */
7338 if (cleanups)
7340 unsigned i; tree t;
7341 FOR_EACH_VEC_ELT (*cleanups, i, t)
7342 push_cleanup (decl, t, false);
7343 release_tree_vector (cleanups);
7346 if (was_readonly)
7347 TREE_READONLY (decl) = 1;
7349 if (flag_openmp
7350 && VAR_P (decl)
7351 && lookup_attribute ("omp declare target implicit",
7352 DECL_ATTRIBUTES (decl)))
7354 DECL_ATTRIBUTES (decl)
7355 = remove_attribute ("omp declare target implicit",
7356 DECL_ATTRIBUTES (decl));
7357 complete_type (TREE_TYPE (decl));
7358 if (!cp_omp_mappable_type (TREE_TYPE (decl)))
7359 error ("%q+D in declare target directive does not have mappable type",
7360 decl);
7361 else if (!lookup_attribute ("omp declare target",
7362 DECL_ATTRIBUTES (decl))
7363 && !lookup_attribute ("omp declare target link",
7364 DECL_ATTRIBUTES (decl)))
7365 DECL_ATTRIBUTES (decl)
7366 = tree_cons (get_identifier ("omp declare target"),
7367 NULL_TREE, DECL_ATTRIBUTES (decl));
7370 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
7373 /* For class TYPE return itself or some its bases that contain
7374 any direct non-static data members. Return error_mark_node if an
7375 error has been diagnosed. */
7377 static tree
7378 find_decomp_class_base (location_t loc, tree type, tree ret)
7380 bool member_seen = false;
7381 for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
7382 if (TREE_CODE (field) != FIELD_DECL
7383 || DECL_ARTIFICIAL (field)
7384 || DECL_UNNAMED_BIT_FIELD (field))
7385 continue;
7386 else if (ret)
7387 return type;
7388 else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
7390 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
7391 error_at (loc, "cannot decompose class type %qT because it has an "
7392 "anonymous struct member", type);
7393 else
7394 error_at (loc, "cannot decompose class type %qT because it has an "
7395 "anonymous union member", type);
7396 inform (DECL_SOURCE_LOCATION (field), "declared here");
7397 return error_mark_node;
7399 else if (!accessible_p (type, field, true))
7401 error_at (loc, "cannot decompose inaccessible member %qD of %qT",
7402 field, type);
7403 inform (DECL_SOURCE_LOCATION (field),
7404 TREE_PRIVATE (field)
7405 ? G_("declared private here")
7406 : G_("declared protected here"));
7407 return error_mark_node;
7409 else
7410 member_seen = true;
7412 tree base_binfo, binfo;
7413 tree orig_ret = ret;
7414 int i;
7415 if (member_seen)
7416 ret = type;
7417 for (binfo = TYPE_BINFO (type), i = 0;
7418 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
7420 tree t = find_decomp_class_base (loc, TREE_TYPE (base_binfo), ret);
7421 if (t == error_mark_node)
7422 return error_mark_node;
7423 if (t != NULL_TREE && t != ret)
7425 if (ret == type)
7427 error_at (loc, "cannot decompose class type %qT: both it and "
7428 "its base class %qT have non-static data members",
7429 type, t);
7430 return error_mark_node;
7432 else if (orig_ret != NULL_TREE)
7433 return t;
7434 else if (ret != NULL_TREE)
7436 error_at (loc, "cannot decompose class type %qT: its base "
7437 "classes %qT and %qT have non-static data "
7438 "members", type, ret, t);
7439 return error_mark_node;
7441 else
7442 ret = t;
7445 return ret;
7448 /* Return std::tuple_size<TYPE>::value. */
7450 static tree
7451 get_tuple_size (tree type)
7453 tree args = make_tree_vec (1);
7454 TREE_VEC_ELT (args, 0) = type;
7455 tree inst = lookup_template_class (tuple_size_identifier, args,
7456 /*in_decl*/NULL_TREE,
7457 /*context*/std_node,
7458 /*entering_scope*/false, tf_none);
7459 inst = complete_type (inst);
7460 if (inst == error_mark_node || !COMPLETE_TYPE_P (inst))
7461 return NULL_TREE;
7462 tree val = lookup_qualified_name (inst, value_identifier,
7463 /*type*/false, /*complain*/false);
7464 if (TREE_CODE (val) == VAR_DECL || TREE_CODE (val) == CONST_DECL)
7465 val = maybe_constant_value (val);
7466 if (TREE_CODE (val) == INTEGER_CST)
7467 return val;
7468 else
7469 return error_mark_node;
7472 /* Return std::tuple_element<I,TYPE>::type. */
7474 static tree
7475 get_tuple_element_type (tree type, unsigned i)
7477 tree args = make_tree_vec (2);
7478 TREE_VEC_ELT (args, 0) = build_int_cst (integer_type_node, i);
7479 TREE_VEC_ELT (args, 1) = type;
7480 tree inst = lookup_template_class (tuple_element_identifier, args,
7481 /*in_decl*/NULL_TREE,
7482 /*context*/std_node,
7483 /*entering_scope*/false,
7484 tf_warning_or_error);
7485 return make_typename_type (inst, type_identifier,
7486 none_type, tf_warning_or_error);
7489 /* Return e.get<i>() or get<i>(e). */
7491 static tree
7492 get_tuple_decomp_init (tree decl, unsigned i)
7494 tree targs = make_tree_vec (1);
7495 TREE_VEC_ELT (targs, 0) = build_int_cst (integer_type_node, i);
7497 tree etype = TREE_TYPE (decl);
7498 tree e = convert_from_reference (decl);
7500 /* [The id-expression] e is an lvalue if the type of the entity e is an
7501 lvalue reference and an xvalue otherwise. */
7502 if (!TYPE_REF_P (etype)
7503 || TYPE_REF_IS_RVALUE (etype))
7504 e = move (e);
7506 tree fns = lookup_qualified_name (TREE_TYPE (e), get__identifier,
7507 /*type*/false, /*complain*/false);
7508 bool use_member_get = false;
7510 /* To use a member get, member lookup must find at least one
7511 declaration that is a function template
7512 whose first template parameter is a non-type parameter. */
7513 for (lkp_iterator iter (MAYBE_BASELINK_FUNCTIONS (fns)); iter; ++iter)
7515 tree fn = *iter;
7516 if (TREE_CODE (fn) == TEMPLATE_DECL)
7518 tree tparms = DECL_TEMPLATE_PARMS (fn);
7519 tree parm = TREE_VEC_ELT (INNERMOST_TEMPLATE_PARMS (tparms), 0);
7520 if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
7522 use_member_get = true;
7523 break;
7528 if (use_member_get)
7530 fns = lookup_template_function (fns, targs);
7531 return build_new_method_call (e, fns, /*args*/NULL,
7532 /*path*/NULL_TREE, LOOKUP_NORMAL,
7533 /*fn_p*/NULL, tf_warning_or_error);
7535 else
7537 vec<tree,va_gc> *args = make_tree_vector_single (e);
7538 fns = lookup_template_function (get__identifier, targs);
7539 fns = perform_koenig_lookup (fns, args, tf_warning_or_error);
7540 return finish_call_expr (fns, &args, /*novirt*/false,
7541 /*koenig*/true, tf_warning_or_error);
7545 /* It's impossible to recover the decltype of a tuple decomposition variable
7546 based on the actual type of the variable, so store it in a hash table. */
7548 static GTY((cache)) tree_cache_map *decomp_type_table;
7549 static void
7550 store_decomp_type (tree v, tree t)
7552 if (!decomp_type_table)
7553 decomp_type_table = tree_cache_map::create_ggc (13);
7554 decomp_type_table->put (v, t);
7557 tree
7558 lookup_decomp_type (tree v)
7560 return *decomp_type_table->get (v);
7563 /* Mangle a decomposition declaration if needed. Arguments like
7564 in cp_finish_decomp. */
7566 void
7567 cp_maybe_mangle_decomp (tree decl, tree first, unsigned int count)
7569 if (!processing_template_decl
7570 && !error_operand_p (decl)
7571 && DECL_NAMESPACE_SCOPE_P (decl))
7573 auto_vec<tree, 16> v;
7574 v.safe_grow (count);
7575 tree d = first;
7576 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7577 v[count - i - 1] = d;
7578 SET_DECL_ASSEMBLER_NAME (decl, mangle_decomp (decl, v));
7579 maybe_apply_pragma_weak (decl);
7583 /* Finish a decomposition declaration. DECL is the underlying declaration
7584 "e", FIRST is the head of a chain of decls for the individual identifiers
7585 chained through DECL_CHAIN in reverse order and COUNT is the number of
7586 those decls. */
7588 void
7589 cp_finish_decomp (tree decl, tree first, unsigned int count)
7591 if (error_operand_p (decl))
7593 error_out:
7594 while (count--)
7596 TREE_TYPE (first) = error_mark_node;
7597 if (DECL_HAS_VALUE_EXPR_P (first))
7599 SET_DECL_VALUE_EXPR (first, NULL_TREE);
7600 DECL_HAS_VALUE_EXPR_P (first) = 0;
7602 first = DECL_CHAIN (first);
7604 if (DECL_P (decl) && DECL_NAMESPACE_SCOPE_P (decl))
7605 SET_DECL_ASSEMBLER_NAME (decl, get_identifier ("<decomp>"));
7606 return;
7609 location_t loc = DECL_SOURCE_LOCATION (decl);
7610 if (type_dependent_expression_p (decl)
7611 /* This happens for range for when not in templates.
7612 Still add the DECL_VALUE_EXPRs for later processing. */
7613 || (!processing_template_decl
7614 && type_uses_auto (TREE_TYPE (decl))))
7616 for (unsigned int i = 0; i < count; i++)
7618 if (!DECL_HAS_VALUE_EXPR_P (first))
7620 tree v = build_nt (ARRAY_REF, decl,
7621 size_int (count - i - 1),
7622 NULL_TREE, NULL_TREE);
7623 SET_DECL_VALUE_EXPR (first, v);
7624 DECL_HAS_VALUE_EXPR_P (first) = 1;
7626 if (processing_template_decl)
7627 fit_decomposition_lang_decl (first, decl);
7628 first = DECL_CHAIN (first);
7630 return;
7633 auto_vec<tree, 16> v;
7634 v.safe_grow (count);
7635 tree d = first;
7636 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7638 v[count - i - 1] = d;
7639 fit_decomposition_lang_decl (d, decl);
7642 tree type = TREE_TYPE (decl);
7643 tree dexp = decl;
7645 if (TYPE_REF_P (type))
7647 dexp = convert_from_reference (dexp);
7648 type = complete_type (TREE_TYPE (type));
7649 if (type == error_mark_node)
7650 goto error_out;
7651 if (!COMPLETE_TYPE_P (type))
7653 error_at (loc, "structured binding refers to incomplete type %qT",
7654 type);
7655 goto error_out;
7659 tree eltype = NULL_TREE;
7660 unsigned HOST_WIDE_INT eltscnt = 0;
7661 if (TREE_CODE (type) == ARRAY_TYPE)
7663 tree nelts;
7664 nelts = array_type_nelts_top (type);
7665 if (nelts == error_mark_node)
7666 goto error_out;
7667 if (!tree_fits_uhwi_p (nelts))
7669 error_at (loc, "cannot decompose variable length array %qT", type);
7670 goto error_out;
7672 eltscnt = tree_to_uhwi (nelts);
7673 if (count != eltscnt)
7675 cnt_mismatch:
7676 if (count > eltscnt)
7677 error_n (loc, count,
7678 "%u name provided for structured binding",
7679 "%u names provided for structured binding", count);
7680 else
7681 error_n (loc, count,
7682 "only %u name provided for structured binding",
7683 "only %u names provided for structured binding", count);
7684 inform_n (loc, eltscnt,
7685 "while %qT decomposes into %wu element",
7686 "while %qT decomposes into %wu elements",
7687 type, eltscnt);
7688 goto error_out;
7690 eltype = TREE_TYPE (type);
7691 for (unsigned int i = 0; i < count; i++)
7693 TREE_TYPE (v[i]) = eltype;
7694 layout_decl (v[i], 0);
7695 if (processing_template_decl)
7696 continue;
7697 tree t = unshare_expr (dexp);
7698 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7699 eltype, t, size_int (i), NULL_TREE,
7700 NULL_TREE);
7701 SET_DECL_VALUE_EXPR (v[i], t);
7702 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7705 /* 2 GNU extensions. */
7706 else if (TREE_CODE (type) == COMPLEX_TYPE)
7708 eltscnt = 2;
7709 if (count != eltscnt)
7710 goto cnt_mismatch;
7711 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7712 for (unsigned int i = 0; i < count; i++)
7714 TREE_TYPE (v[i]) = eltype;
7715 layout_decl (v[i], 0);
7716 if (processing_template_decl)
7717 continue;
7718 tree t = unshare_expr (dexp);
7719 t = build1_loc (DECL_SOURCE_LOCATION (v[i]),
7720 i ? IMAGPART_EXPR : REALPART_EXPR, eltype,
7722 SET_DECL_VALUE_EXPR (v[i], t);
7723 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7726 else if (TREE_CODE (type) == VECTOR_TYPE)
7728 if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&eltscnt))
7730 error_at (loc, "cannot decompose variable length vector %qT", type);
7731 goto error_out;
7733 if (count != eltscnt)
7734 goto cnt_mismatch;
7735 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7736 for (unsigned int i = 0; i < count; i++)
7738 TREE_TYPE (v[i]) = eltype;
7739 layout_decl (v[i], 0);
7740 if (processing_template_decl)
7741 continue;
7742 tree t = unshare_expr (dexp);
7743 convert_vector_to_array_for_subscript (DECL_SOURCE_LOCATION (v[i]),
7744 &t, size_int (i));
7745 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7746 eltype, t, size_int (i), NULL_TREE,
7747 NULL_TREE);
7748 SET_DECL_VALUE_EXPR (v[i], t);
7749 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7752 else if (tree tsize = get_tuple_size (type))
7754 if (tsize == error_mark_node)
7756 error_at (loc, "%<std::tuple_size<%T>::value%> is not an integral "
7757 "constant expression", type);
7758 goto error_out;
7760 if (!tree_fits_uhwi_p (tsize))
7762 error_n (loc, count,
7763 "%u name provided for structured binding",
7764 "%u names provided for structured binding", count);
7765 inform (loc, "while %qT decomposes into %E elements",
7766 type, tsize);
7767 goto error_out;
7769 eltscnt = tree_to_uhwi (tsize);
7770 if (count != eltscnt)
7771 goto cnt_mismatch;
7772 int save_read = DECL_READ_P (decl);
7773 for (unsigned i = 0; i < count; ++i)
7775 location_t sloc = input_location;
7776 location_t dloc = DECL_SOURCE_LOCATION (v[i]);
7778 input_location = dloc;
7779 tree init = get_tuple_decomp_init (decl, i);
7780 tree eltype = (init == error_mark_node ? error_mark_node
7781 : get_tuple_element_type (type, i));
7782 input_location = sloc;
7784 if (init == error_mark_node || eltype == error_mark_node)
7786 inform (dloc, "in initialization of structured binding "
7787 "variable %qD", v[i]);
7788 goto error_out;
7790 /* Save the decltype away before reference collapse. */
7791 store_decomp_type (v[i], eltype);
7792 eltype = cp_build_reference_type (eltype, !lvalue_p (init));
7793 TREE_TYPE (v[i]) = eltype;
7794 layout_decl (v[i], 0);
7795 if (DECL_HAS_VALUE_EXPR_P (v[i]))
7797 /* In this case the names are variables, not just proxies. */
7798 SET_DECL_VALUE_EXPR (v[i], NULL_TREE);
7799 DECL_HAS_VALUE_EXPR_P (v[i]) = 0;
7801 if (!processing_template_decl)
7802 cp_finish_decl (v[i], init, /*constexpr*/false,
7803 /*asm*/NULL_TREE, LOOKUP_NORMAL);
7805 /* Ignore reads from the underlying decl performed during initialization
7806 of the individual variables. If those will be read, we'll mark
7807 the underlying decl as read at that point. */
7808 DECL_READ_P (decl) = save_read;
7810 else if (TREE_CODE (type) == UNION_TYPE)
7812 error_at (loc, "cannot decompose union type %qT", type);
7813 goto error_out;
7815 else if (!CLASS_TYPE_P (type))
7817 error_at (loc, "cannot decompose non-array non-class type %qT", type);
7818 goto error_out;
7820 else if (LAMBDA_TYPE_P (type))
7822 error_at (loc, "cannot decompose lambda closure type %qT", type);
7823 goto error_out;
7825 else if (processing_template_decl && !COMPLETE_TYPE_P (type))
7826 pedwarn (loc, 0, "structured binding refers to incomplete class type %qT",
7827 type);
7828 else
7830 tree btype = find_decomp_class_base (loc, type, NULL_TREE);
7831 if (btype == error_mark_node)
7832 goto error_out;
7833 else if (btype == NULL_TREE)
7835 error_at (loc, "cannot decompose class type %qT without non-static "
7836 "data members", type);
7837 goto error_out;
7839 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7840 if (TREE_CODE (field) != FIELD_DECL
7841 || DECL_ARTIFICIAL (field)
7842 || DECL_UNNAMED_BIT_FIELD (field))
7843 continue;
7844 else
7845 eltscnt++;
7846 if (count != eltscnt)
7847 goto cnt_mismatch;
7848 tree t = dexp;
7849 if (type != btype)
7851 t = convert_to_base (t, btype, /*check_access*/true,
7852 /*nonnull*/false, tf_warning_or_error);
7853 type = btype;
7855 unsigned int i = 0;
7856 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7857 if (TREE_CODE (field) != FIELD_DECL
7858 || DECL_ARTIFICIAL (field)
7859 || DECL_UNNAMED_BIT_FIELD (field))
7860 continue;
7861 else
7863 tree tt = finish_non_static_data_member (field, unshare_expr (t),
7864 NULL_TREE);
7865 if (REFERENCE_REF_P (tt))
7866 tt = TREE_OPERAND (tt, 0);
7867 TREE_TYPE (v[i]) = TREE_TYPE (tt);
7868 layout_decl (v[i], 0);
7869 if (!processing_template_decl)
7871 SET_DECL_VALUE_EXPR (v[i], tt);
7872 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7874 i++;
7877 if (processing_template_decl)
7879 for (unsigned int i = 0; i < count; i++)
7880 if (!DECL_HAS_VALUE_EXPR_P (v[i]))
7882 tree a = build_nt (ARRAY_REF, decl, size_int (i),
7883 NULL_TREE, NULL_TREE);
7884 SET_DECL_VALUE_EXPR (v[i], a);
7885 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7890 /* Returns a declaration for a VAR_DECL as if:
7892 extern "C" TYPE NAME;
7894 had been seen. Used to create compiler-generated global
7895 variables. */
7897 static tree
7898 declare_global_var (tree name, tree type)
7900 tree decl;
7902 push_to_top_level ();
7903 decl = build_decl (input_location, VAR_DECL, name, type);
7904 TREE_PUBLIC (decl) = 1;
7905 DECL_EXTERNAL (decl) = 1;
7906 DECL_ARTIFICIAL (decl) = 1;
7907 DECL_CONTEXT (decl) = FROB_CONTEXT (global_namespace);
7908 /* If the user has explicitly declared this variable (perhaps
7909 because the code we are compiling is part of a low-level runtime
7910 library), then it is possible that our declaration will be merged
7911 with theirs by pushdecl. */
7912 decl = pushdecl (decl);
7913 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
7914 pop_from_top_level ();
7916 return decl;
7919 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
7920 if "__cxa_atexit" is not being used) corresponding to the function
7921 to be called when the program exits. */
7923 static tree
7924 get_atexit_fn_ptr_type (void)
7926 tree fn_type;
7928 if (!atexit_fn_ptr_type_node)
7930 tree arg_type;
7931 if (flag_use_cxa_atexit
7932 && !targetm.cxx.use_atexit_for_cxa_atexit ())
7933 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
7934 arg_type = ptr_type_node;
7935 else
7936 /* The parameter to "atexit" is "void (*)(void)". */
7937 arg_type = NULL_TREE;
7939 fn_type = build_function_type_list (void_type_node,
7940 arg_type, NULL_TREE);
7941 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
7944 return atexit_fn_ptr_type_node;
7947 /* Returns a pointer to the `atexit' function. Note that if
7948 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
7949 `__cxa_atexit' function specified in the IA64 C++ ABI. */
7951 static tree
7952 get_atexit_node (void)
7954 tree atexit_fndecl;
7955 tree fn_type;
7956 tree fn_ptr_type;
7957 const char *name;
7958 bool use_aeabi_atexit;
7960 if (atexit_node)
7961 return atexit_node;
7963 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
7965 /* The declaration for `__cxa_atexit' is:
7967 int __cxa_atexit (void (*)(void *), void *, void *)
7969 We build up the argument types and then the function type
7970 itself. */
7971 tree argtype0, argtype1, argtype2;
7973 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
7974 /* First, build the pointer-to-function type for the first
7975 argument. */
7976 fn_ptr_type = get_atexit_fn_ptr_type ();
7977 /* Then, build the rest of the argument types. */
7978 argtype2 = ptr_type_node;
7979 if (use_aeabi_atexit)
7981 argtype1 = fn_ptr_type;
7982 argtype0 = ptr_type_node;
7984 else
7986 argtype1 = ptr_type_node;
7987 argtype0 = fn_ptr_type;
7989 /* And the final __cxa_atexit type. */
7990 fn_type = build_function_type_list (integer_type_node,
7991 argtype0, argtype1, argtype2,
7992 NULL_TREE);
7993 if (use_aeabi_atexit)
7994 name = "__aeabi_atexit";
7995 else
7996 name = "__cxa_atexit";
7998 else
8000 /* The declaration for `atexit' is:
8002 int atexit (void (*)());
8004 We build up the argument types and then the function type
8005 itself. */
8006 fn_ptr_type = get_atexit_fn_ptr_type ();
8007 /* Build the final atexit type. */
8008 fn_type = build_function_type_list (integer_type_node,
8009 fn_ptr_type, NULL_TREE);
8010 name = "atexit";
8013 /* Now, build the function declaration. */
8014 push_lang_context (lang_name_c);
8015 atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
8016 mark_used (atexit_fndecl);
8017 pop_lang_context ();
8018 atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
8020 return atexit_node;
8023 /* Like get_atexit_node, but for thread-local cleanups. */
8025 static tree
8026 get_thread_atexit_node (void)
8028 /* The declaration for `__cxa_thread_atexit' is:
8030 int __cxa_thread_atexit (void (*)(void *), void *, void *) */
8031 tree fn_type = build_function_type_list (integer_type_node,
8032 get_atexit_fn_ptr_type (),
8033 ptr_type_node, ptr_type_node,
8034 NULL_TREE);
8036 /* Now, build the function declaration. */
8037 tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
8038 ECF_LEAF | ECF_NOTHROW);
8039 return decay_conversion (atexit_fndecl, tf_warning_or_error);
8042 /* Returns the __dso_handle VAR_DECL. */
8044 static tree
8045 get_dso_handle_node (void)
8047 if (dso_handle_node)
8048 return dso_handle_node;
8050 /* Declare the variable. */
8051 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
8052 ptr_type_node);
8054 #ifdef HAVE_GAS_HIDDEN
8055 if (dso_handle_node != error_mark_node)
8057 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
8058 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
8060 #endif
8062 return dso_handle_node;
8065 /* Begin a new function with internal linkage whose job will be simply
8066 to destroy some particular variable. */
8068 static GTY(()) int start_cleanup_cnt;
8070 static tree
8071 start_cleanup_fn (void)
8073 char name[32];
8074 tree fntype;
8075 tree fndecl;
8076 bool use_cxa_atexit = flag_use_cxa_atexit
8077 && !targetm.cxx.use_atexit_for_cxa_atexit ();
8079 push_to_top_level ();
8081 /* No need to mangle this. */
8082 push_lang_context (lang_name_c);
8084 /* Build the name of the function. */
8085 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
8086 /* Build the function declaration. */
8087 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
8088 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
8089 /* It's a function with internal linkage, generated by the
8090 compiler. */
8091 TREE_PUBLIC (fndecl) = 0;
8092 DECL_ARTIFICIAL (fndecl) = 1;
8093 /* Make the function `inline' so that it is only emitted if it is
8094 actually needed. It is unlikely that it will be inlined, since
8095 it is only called via a function pointer, but we avoid unnecessary
8096 emissions this way. */
8097 DECL_DECLARED_INLINE_P (fndecl) = 1;
8098 DECL_INTERFACE_KNOWN (fndecl) = 1;
8099 /* Build the parameter. */
8100 if (use_cxa_atexit)
8102 tree parmdecl = cp_build_parm_decl (fndecl, NULL_TREE, ptr_type_node);
8103 TREE_USED (parmdecl) = 1;
8104 DECL_READ_P (parmdecl) = 1;
8105 DECL_ARGUMENTS (fndecl) = parmdecl;
8108 pushdecl (fndecl);
8109 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
8111 pop_lang_context ();
8113 return current_function_decl;
8116 /* Finish the cleanup function begun by start_cleanup_fn. */
8118 static void
8119 end_cleanup_fn (void)
8121 expand_or_defer_fn (finish_function (/*inline_p=*/false));
8123 pop_from_top_level ();
8126 /* Generate code to handle the destruction of DECL, an object with
8127 static storage duration. */
8129 tree
8130 register_dtor_fn (tree decl)
8132 tree cleanup;
8133 tree addr;
8134 tree compound_stmt;
8135 tree fcall;
8136 tree type;
8137 bool ob_parm, dso_parm, use_dtor;
8138 tree arg0, arg1, arg2;
8139 tree atex_node;
8141 type = TREE_TYPE (decl);
8142 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
8143 return void_node;
8145 /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
8146 "__aeabi_atexit"), and DECL is a class object, we can just pass the
8147 destructor to "__cxa_atexit"; we don't have to build a temporary
8148 function to do the cleanup. */
8149 dso_parm = (flag_use_cxa_atexit
8150 && !targetm.cxx.use_atexit_for_cxa_atexit ());
8151 ob_parm = (CP_DECL_THREAD_LOCAL_P (decl) || dso_parm);
8152 use_dtor = ob_parm && CLASS_TYPE_P (type);
8153 if (use_dtor)
8155 cleanup = get_class_binding (type, complete_dtor_identifier);
8157 /* Make sure it is accessible. */
8158 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
8159 tf_warning_or_error);
8161 else
8163 /* Call build_cleanup before we enter the anonymous function so
8164 that any access checks will be done relative to the current
8165 scope, rather than the scope of the anonymous function. */
8166 build_cleanup (decl);
8168 /* Now start the function. */
8169 cleanup = start_cleanup_fn ();
8171 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
8172 to the original function, rather than the anonymous one. That
8173 will make the back end think that nested functions are in use,
8174 which causes confusion. */
8175 push_deferring_access_checks (dk_no_check);
8176 fcall = build_cleanup (decl);
8177 pop_deferring_access_checks ();
8179 /* Create the body of the anonymous function. */
8180 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
8181 finish_expr_stmt (fcall);
8182 finish_compound_stmt (compound_stmt);
8183 end_cleanup_fn ();
8186 /* Call atexit with the cleanup function. */
8187 mark_used (cleanup);
8188 cleanup = build_address (cleanup);
8190 if (CP_DECL_THREAD_LOCAL_P (decl))
8191 atex_node = get_thread_atexit_node ();
8192 else
8193 atex_node = get_atexit_node ();
8195 if (use_dtor)
8197 /* We must convert CLEANUP to the type that "__cxa_atexit"
8198 expects. */
8199 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
8200 /* "__cxa_atexit" will pass the address of DECL to the
8201 cleanup function. */
8202 mark_used (decl);
8203 addr = build_address (decl);
8204 /* The declared type of the parameter to "__cxa_atexit" is
8205 "void *". For plain "T*", we could just let the
8206 machinery in cp_build_function_call convert it -- but if the
8207 type is "cv-qualified T *", then we need to convert it
8208 before passing it in, to avoid spurious errors. */
8209 addr = build_nop (ptr_type_node, addr);
8211 else
8212 /* Since the cleanup functions we build ignore the address
8213 they're given, there's no reason to pass the actual address
8214 in, and, in general, it's cheaper to pass NULL than any
8215 other value. */
8216 addr = null_pointer_node;
8218 if (dso_parm)
8219 arg2 = cp_build_addr_expr (get_dso_handle_node (),
8220 tf_warning_or_error);
8221 else if (ob_parm)
8222 /* Just pass NULL to the dso handle parm if we don't actually
8223 have a DSO handle on this target. */
8224 arg2 = null_pointer_node;
8225 else
8226 arg2 = NULL_TREE;
8228 if (ob_parm)
8230 if (!CP_DECL_THREAD_LOCAL_P (decl)
8231 && targetm.cxx.use_aeabi_atexit ())
8233 arg1 = cleanup;
8234 arg0 = addr;
8236 else
8238 arg1 = addr;
8239 arg0 = cleanup;
8242 else
8244 arg0 = cleanup;
8245 arg1 = NULL_TREE;
8247 return cp_build_function_call_nary (atex_node, tf_warning_or_error,
8248 arg0, arg1, arg2, NULL_TREE);
8251 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
8252 is its initializer. Generate code to handle the construction
8253 and destruction of DECL. */
8255 static void
8256 expand_static_init (tree decl, tree init)
8258 gcc_assert (VAR_P (decl));
8259 gcc_assert (TREE_STATIC (decl));
8261 /* Some variables require no dynamic initialization. */
8262 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
8264 /* Make sure the destructor is callable. */
8265 cxx_maybe_build_cleanup (decl, tf_warning_or_error);
8266 if (!init)
8267 return;
8270 if (CP_DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
8271 && !DECL_FUNCTION_SCOPE_P (decl))
8273 if (init)
8274 error ("non-local variable %qD declared %<__thread%> "
8275 "needs dynamic initialization", decl);
8276 else
8277 error ("non-local variable %qD declared %<__thread%> "
8278 "has a non-trivial destructor", decl);
8279 static bool informed;
8280 if (!informed)
8282 inform (DECL_SOURCE_LOCATION (decl),
8283 "C++11 %<thread_local%> allows dynamic initialization "
8284 "and destruction");
8285 informed = true;
8287 return;
8290 if (DECL_FUNCTION_SCOPE_P (decl))
8292 /* Emit code to perform this initialization but once. */
8293 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
8294 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
8295 tree guard, guard_addr;
8296 tree flag, begin;
8297 /* We don't need thread-safety code for thread-local vars. */
8298 bool thread_guard = (flag_threadsafe_statics
8299 && !CP_DECL_THREAD_LOCAL_P (decl));
8301 /* Emit code to perform this initialization but once. This code
8302 looks like:
8304 static <type> guard;
8305 if (!__atomic_load (guard.first_byte)) {
8306 if (__cxa_guard_acquire (&guard)) {
8307 bool flag = false;
8308 try {
8309 // Do initialization.
8310 flag = true; __cxa_guard_release (&guard);
8311 // Register variable for destruction at end of program.
8312 } catch {
8313 if (!flag) __cxa_guard_abort (&guard);
8318 Note that the `flag' variable is only set to 1 *after* the
8319 initialization is complete. This ensures that an exception,
8320 thrown during the construction, will cause the variable to
8321 reinitialized when we pass through this code again, as per:
8323 [stmt.dcl]
8325 If the initialization exits by throwing an exception, the
8326 initialization is not complete, so it will be tried again
8327 the next time control enters the declaration.
8329 This process should be thread-safe, too; multiple threads
8330 should not be able to initialize the variable more than
8331 once. */
8333 /* Create the guard variable. */
8334 guard = get_guard (decl);
8336 /* Begin the conditional initialization. */
8337 if_stmt = begin_if_stmt ();
8339 finish_if_stmt_cond (get_guard_cond (guard, thread_guard), if_stmt);
8340 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8342 if (thread_guard)
8344 tree vfntype = NULL_TREE;
8345 tree acquire_name, release_name, abort_name;
8346 tree acquire_fn, release_fn, abort_fn;
8347 guard_addr = build_address (guard);
8349 acquire_name = get_identifier ("__cxa_guard_acquire");
8350 release_name = get_identifier ("__cxa_guard_release");
8351 abort_name = get_identifier ("__cxa_guard_abort");
8352 acquire_fn = get_global_binding (acquire_name);
8353 release_fn = get_global_binding (release_name);
8354 abort_fn = get_global_binding (abort_name);
8355 if (!acquire_fn)
8356 acquire_fn = push_library_fn
8357 (acquire_name, build_function_type_list (integer_type_node,
8358 TREE_TYPE (guard_addr),
8359 NULL_TREE),
8360 NULL_TREE, ECF_NOTHROW | ECF_LEAF);
8361 if (!release_fn || !abort_fn)
8362 vfntype = build_function_type_list (void_type_node,
8363 TREE_TYPE (guard_addr),
8364 NULL_TREE);
8365 if (!release_fn)
8366 release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
8367 ECF_NOTHROW | ECF_LEAF);
8368 if (!abort_fn)
8369 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
8370 ECF_NOTHROW | ECF_LEAF);
8372 inner_if_stmt = begin_if_stmt ();
8373 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
8374 inner_if_stmt);
8376 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8377 begin = get_target_expr (boolean_false_node);
8378 flag = TARGET_EXPR_SLOT (begin);
8380 TARGET_EXPR_CLEANUP (begin)
8381 = build3 (COND_EXPR, void_type_node, flag,
8382 void_node,
8383 build_call_n (abort_fn, 1, guard_addr));
8384 CLEANUP_EH_ONLY (begin) = 1;
8386 /* Do the initialization itself. */
8387 init = add_stmt_to_compound (begin, init);
8388 init = add_stmt_to_compound
8389 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
8390 init = add_stmt_to_compound
8391 (init, build_call_n (release_fn, 1, guard_addr));
8393 else
8394 init = add_stmt_to_compound (init, set_guard (guard));
8396 /* Use atexit to register a function for destroying this static
8397 variable. */
8398 init = add_stmt_to_compound (init, register_dtor_fn (decl));
8400 finish_expr_stmt (init);
8402 if (thread_guard)
8404 finish_compound_stmt (inner_then_clause);
8405 finish_then_clause (inner_if_stmt);
8406 finish_if_stmt (inner_if_stmt);
8409 finish_compound_stmt (then_clause);
8410 finish_then_clause (if_stmt);
8411 finish_if_stmt (if_stmt);
8413 else if (CP_DECL_THREAD_LOCAL_P (decl))
8414 tls_aggregates = tree_cons (init, decl, tls_aggregates);
8415 else
8416 static_aggregates = tree_cons (init, decl, static_aggregates);
8420 /* Make TYPE a complete type based on INITIAL_VALUE.
8421 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8422 2 if there was no information (in which case assume 0 if DO_DEFAULT),
8423 3 if the initializer list is empty (in pedantic mode). */
8426 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
8428 int failure;
8429 tree type, elt_type;
8431 /* Don't get confused by a CONSTRUCTOR for some other type. */
8432 if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
8433 && !BRACE_ENCLOSED_INITIALIZER_P (initial_value)
8434 && TREE_CODE (TREE_TYPE (initial_value)) != ARRAY_TYPE)
8435 return 1;
8437 if (initial_value)
8439 unsigned HOST_WIDE_INT i;
8440 tree value;
8442 /* An array of character type can be initialized from a
8443 brace-enclosed string constant.
8445 FIXME: this code is duplicated from reshape_init. Probably
8446 we should just call reshape_init here? */
8447 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
8448 && TREE_CODE (initial_value) == CONSTRUCTOR
8449 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
8451 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
8452 tree value = (*v)[0].value;
8454 if (TREE_CODE (value) == STRING_CST
8455 && v->length () == 1)
8456 initial_value = value;
8459 /* If any of the elements are parameter packs, we can't actually
8460 complete this type now because the array size is dependent. */
8461 if (TREE_CODE (initial_value) == CONSTRUCTOR)
8463 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
8464 i, value)
8466 if (PACK_EXPANSION_P (value))
8467 return 0;
8472 failure = complete_array_type (ptype, initial_value, do_default);
8474 /* We can create the array before the element type is complete, which
8475 means that we didn't have these two bits set in the original type
8476 either. In completing the type, we are expected to propagate these
8477 bits. See also complete_type which does the same thing for arrays
8478 of fixed size. */
8479 type = *ptype;
8480 if (type != error_mark_node && TYPE_DOMAIN (type))
8482 elt_type = TREE_TYPE (type);
8483 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
8484 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
8485 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
8488 return failure;
8491 /* As above, but either give an error or reject zero-size arrays, depending
8492 on COMPLAIN. */
8495 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
8496 bool do_default, tsubst_flags_t complain)
8498 int failure;
8499 bool sfinae = !(complain & tf_error);
8500 /* In SFINAE context we can't be lenient about zero-size arrays. */
8501 if (sfinae)
8502 ++pedantic;
8503 failure = cp_complete_array_type (ptype, initial_value, do_default);
8504 if (sfinae)
8505 --pedantic;
8506 if (failure)
8508 if (sfinae)
8509 /* Not an error. */;
8510 else if (failure == 1)
8511 error ("initializer fails to determine size of %qT", *ptype);
8512 else if (failure == 2)
8514 if (do_default)
8515 error ("array size missing in %qT", *ptype);
8517 else if (failure == 3)
8518 error ("zero-size array %qT", *ptype);
8519 *ptype = error_mark_node;
8521 return failure;
8524 /* Return zero if something is declared to be a member of type
8525 CTYPE when in the context of CUR_TYPE. STRING is the error
8526 message to print in that case. Otherwise, quietly return 1. */
8528 static int
8529 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
8531 if (ctype && ctype != cur_type)
8533 if (flags == DTOR_FLAG)
8534 error ("destructor for alien class %qT cannot be a member", ctype);
8535 else
8536 error ("constructor for alien class %qT cannot be a member", ctype);
8537 return 0;
8539 return 1;
8542 /* Subroutine of `grokdeclarator'. */
8544 /* Generate errors possibly applicable for a given set of specifiers.
8545 This is for ARM $7.1.2. */
8547 static void
8548 bad_specifiers (tree object,
8549 enum bad_spec_place type,
8550 int virtualp,
8551 int quals,
8552 int inlinep,
8553 int friendp,
8554 int raises,
8555 const location_t* locations)
8557 switch (type)
8559 case BSP_VAR:
8560 if (virtualp)
8561 error_at (locations[ds_virtual],
8562 "%qD declared as a %<virtual%> variable", object);
8563 if (quals)
8564 error ("%<const%> and %<volatile%> function specifiers on "
8565 "%qD invalid in variable declaration", object);
8566 break;
8567 case BSP_PARM:
8568 if (virtualp)
8569 error_at (locations[ds_virtual],
8570 "%qD declared as a %<virtual%> parameter", object);
8571 if (inlinep)
8572 error_at (locations[ds_inline],
8573 "%qD declared as an %<inline%> parameter", object);
8574 if (quals)
8575 error ("%<const%> and %<volatile%> function specifiers on "
8576 "%qD invalid in parameter declaration", object);
8577 break;
8578 case BSP_TYPE:
8579 if (virtualp)
8580 error_at (locations[ds_virtual],
8581 "%qD declared as a %<virtual%> type", object);
8582 if (inlinep)
8583 error_at (locations[ds_inline],
8584 "%qD declared as an %<inline%> type", object);
8585 if (quals)
8586 error ("%<const%> and %<volatile%> function specifiers on "
8587 "%qD invalid in type declaration", object);
8588 break;
8589 case BSP_FIELD:
8590 if (virtualp)
8591 error_at (locations[ds_virtual],
8592 "%qD declared as a %<virtual%> field", object);
8593 if (inlinep)
8594 error_at (locations[ds_inline],
8595 "%qD declared as an %<inline%> field", object);
8596 if (quals)
8597 error ("%<const%> and %<volatile%> function specifiers on "
8598 "%qD invalid in field declaration", object);
8599 break;
8600 default:
8601 gcc_unreachable();
8603 if (friendp)
8604 error ("%q+D declared as a friend", object);
8605 if (raises
8606 && !flag_noexcept_type
8607 && (TREE_CODE (object) == TYPE_DECL
8608 || (!TYPE_PTRFN_P (TREE_TYPE (object))
8609 && !TYPE_REFFN_P (TREE_TYPE (object))
8610 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
8611 error ("%q+D declared with an exception specification", object);
8614 /* DECL is a member function or static data member and is presently
8615 being defined. Check that the definition is taking place in a
8616 valid namespace. */
8618 static void
8619 check_class_member_definition_namespace (tree decl)
8621 /* These checks only apply to member functions and static data
8622 members. */
8623 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
8624 /* We check for problems with specializations in pt.c in
8625 check_specialization_namespace, where we can issue better
8626 diagnostics. */
8627 if (processing_specialization)
8628 return;
8629 /* We check this in check_explicit_instantiation_namespace. */
8630 if (processing_explicit_instantiation)
8631 return;
8632 /* [class.mfct]
8634 A member function definition that appears outside of the
8635 class definition shall appear in a namespace scope enclosing
8636 the class definition.
8638 [class.static.data]
8640 The definition for a static data member shall appear in a
8641 namespace scope enclosing the member's class definition. */
8642 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
8643 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
8644 decl, DECL_CONTEXT (decl));
8647 /* Build a PARM_DECL for the "this" parameter of FN. TYPE is the
8648 METHOD_TYPE for a non-static member function; QUALS are the
8649 cv-qualifiers that apply to the function. */
8651 tree
8652 build_this_parm (tree fn, tree type, cp_cv_quals quals)
8654 tree this_type;
8655 tree qual_type;
8656 tree parm;
8657 cp_cv_quals this_quals;
8659 if (CLASS_TYPE_P (type))
8661 this_type
8662 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
8663 this_type = build_pointer_type (this_type);
8665 else
8666 this_type = type_of_this_parm (type);
8667 /* The `this' parameter is implicitly `const'; it cannot be
8668 assigned to. */
8669 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
8670 qual_type = cp_build_qualified_type (this_type, this_quals);
8671 parm = build_artificial_parm (fn, this_identifier, qual_type);
8672 cp_apply_type_quals_to_decl (this_quals, parm);
8673 return parm;
8676 /* DECL is a static member function. Complain if it was declared
8677 with function-cv-quals. */
8679 static void
8680 check_static_quals (tree decl, cp_cv_quals quals)
8682 if (quals != TYPE_UNQUALIFIED)
8683 error ("static member function %q#D declared with type qualifiers",
8684 decl);
8687 // Check that FN takes no arguments and returns bool.
8688 static void
8689 check_concept_fn (tree fn)
8691 // A constraint is nullary.
8692 if (DECL_ARGUMENTS (fn))
8693 error_at (DECL_SOURCE_LOCATION (fn),
8694 "concept %q#D declared with function parameters", fn);
8696 // The declared return type of the concept shall be bool, and
8697 // it shall not be deduced from it definition.
8698 tree type = TREE_TYPE (TREE_TYPE (fn));
8699 if (is_auto (type))
8700 error_at (DECL_SOURCE_LOCATION (fn),
8701 "concept %q#D declared with a deduced return type", fn);
8702 else if (type != boolean_type_node)
8703 error_at (DECL_SOURCE_LOCATION (fn),
8704 "concept %q#D with non-%<bool%> return type %qT", fn, type);
8707 /* Helper function. Replace the temporary this parameter injected
8708 during cp_finish_omp_declare_simd with the real this parameter. */
8710 static tree
8711 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
8713 tree this_parm = (tree) data;
8714 if (TREE_CODE (*tp) == PARM_DECL
8715 && DECL_NAME (*tp) == this_identifier
8716 && *tp != this_parm)
8717 *tp = this_parm;
8718 else if (TYPE_P (*tp))
8719 *walk_subtrees = 0;
8720 return NULL_TREE;
8723 /* CTYPE is class type, or null if non-class.
8724 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8725 or METHOD_TYPE.
8726 DECLARATOR is the function's name.
8727 PARMS is a chain of PARM_DECLs for the function.
8728 VIRTUALP is truthvalue of whether the function is virtual or not.
8729 FLAGS are to be passed through to `grokclassfn'.
8730 QUALS are qualifiers indicating whether the function is `const'
8731 or `volatile'.
8732 RAISES is a list of exceptions that this function can raise.
8733 CHECK is 1 if we must find this method in CTYPE, 0 if we should
8734 not look, and -1 if we should not call `grokclassfn' at all.
8736 SFK is the kind of special function (if any) for the new function.
8738 Returns `NULL_TREE' if something goes wrong, after issuing
8739 applicable error messages. */
8741 static tree
8742 grokfndecl (tree ctype,
8743 tree type,
8744 tree declarator,
8745 tree parms,
8746 tree orig_declarator,
8747 const cp_decl_specifier_seq *declspecs,
8748 tree decl_reqs,
8749 int virtualp,
8750 enum overload_flags flags,
8751 cp_cv_quals quals,
8752 cp_ref_qualifier rqual,
8753 tree raises,
8754 int check,
8755 int friendp,
8756 int publicp,
8757 int inlinep,
8758 bool deletedp,
8759 special_function_kind sfk,
8760 bool funcdef_flag,
8761 bool late_return_type_p,
8762 int template_count,
8763 tree in_namespace,
8764 tree* attrlist,
8765 location_t location)
8767 tree decl;
8768 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8769 tree t;
8771 if (location == UNKNOWN_LOCATION)
8772 location = input_location;
8774 // Was the concept specifier present?
8775 bool concept_p = inlinep & 4;
8777 // Concept declarations must have a corresponding definition.
8778 if (concept_p && !funcdef_flag)
8780 error_at (location, "concept %qD has no definition", declarator);
8781 return NULL_TREE;
8784 type = build_cp_fntype_variant (type, rqual, raises, late_return_type_p);
8786 decl = build_lang_decl_loc (location, FUNCTION_DECL, declarator, type);
8788 /* Set the constraints on the declaration. */
8789 if (flag_concepts)
8791 tree tmpl_reqs = NULL_TREE;
8792 if (processing_template_decl > template_class_depth (ctype))
8793 tmpl_reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
8795 /* Adjust the required expression into a constraint. */
8796 if (decl_reqs)
8797 decl_reqs = normalize_expression (decl_reqs);
8799 tree ci = build_constraints (tmpl_reqs, decl_reqs);
8800 set_constraints (decl, ci);
8803 if (TREE_CODE (type) == METHOD_TYPE)
8805 tree parm = build_this_parm (decl, type, quals);
8806 DECL_CHAIN (parm) = parms;
8807 parms = parm;
8809 /* Allocate space to hold the vptr bit if needed. */
8810 SET_DECL_ALIGN (decl, MINIMUM_METHOD_BOUNDARY);
8813 DECL_ARGUMENTS (decl) = parms;
8814 for (t = parms; t; t = DECL_CHAIN (t))
8815 DECL_CONTEXT (t) = decl;
8817 /* Propagate volatile out from type to decl. */
8818 if (TYPE_VOLATILE (type))
8819 TREE_THIS_VOLATILE (decl) = 1;
8821 /* Setup decl according to sfk. */
8822 switch (sfk)
8824 case sfk_constructor:
8825 case sfk_copy_constructor:
8826 case sfk_move_constructor:
8827 DECL_CXX_CONSTRUCTOR_P (decl) = 1;
8828 DECL_NAME (decl) = ctor_identifier;
8829 break;
8830 case sfk_destructor:
8831 DECL_CXX_DESTRUCTOR_P (decl) = 1;
8832 DECL_NAME (decl) = dtor_identifier;
8833 break;
8834 default:
8835 break;
8838 if (friendp && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8840 if (funcdef_flag)
8841 error_at (location,
8842 "defining explicit specialization %qD in friend declaration",
8843 orig_declarator);
8844 else
8846 tree fns = TREE_OPERAND (orig_declarator, 0);
8847 tree args = TREE_OPERAND (orig_declarator, 1);
8849 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8851 /* Something like `template <class T> friend void f<T>()'. */
8852 error_at (location,
8853 "invalid use of template-id %qD in declaration "
8854 "of primary template",
8855 orig_declarator);
8856 return NULL_TREE;
8860 /* A friend declaration of the form friend void f<>(). Record
8861 the information in the TEMPLATE_ID_EXPR. */
8862 SET_DECL_IMPLICIT_INSTANTIATION (decl);
8864 gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
8865 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
8867 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8868 if (TREE_PURPOSE (t)
8869 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8871 error_at (defarg_location (TREE_PURPOSE (t)),
8872 "default arguments are not allowed in declaration "
8873 "of friend template specialization %qD",
8874 decl);
8875 return NULL_TREE;
8878 if (inlinep & 1)
8880 error_at (declspecs->locations[ds_inline],
8881 "%<inline%> is not allowed in declaration of friend "
8882 "template specialization %qD",
8883 decl);
8884 return NULL_TREE;
8889 /* C++17 11.3.6/4: "If a friend declaration specifies a default argument
8890 expression, that declaration shall be a definition..." */
8891 if (friendp && !funcdef_flag)
8893 for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
8894 t && t != void_list_node; t = TREE_CHAIN (t))
8895 if (TREE_PURPOSE (t))
8897 permerror (DECL_SOURCE_LOCATION (decl),
8898 "friend declaration of %qD specifies default "
8899 "arguments and isn't a definition", decl);
8900 break;
8904 /* If this decl has namespace scope, set that up. */
8905 if (in_namespace)
8906 set_decl_namespace (decl, in_namespace, friendp);
8907 else if (!ctype)
8908 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
8910 /* `main' and builtins have implicit 'C' linkage. */
8911 if (ctype == NULL_TREE
8912 && DECL_FILE_SCOPE_P (decl)
8913 && current_lang_name == lang_name_cplusplus
8914 && (MAIN_NAME_P (declarator)
8915 || (IDENTIFIER_LENGTH (declarator) > 10
8916 && IDENTIFIER_POINTER (declarator)[0] == '_'
8917 && IDENTIFIER_POINTER (declarator)[1] == '_'
8918 && strncmp (IDENTIFIER_POINTER (declarator)+2,
8919 "builtin_", 8) == 0)
8920 || (targetcm.cxx_implicit_extern_c
8921 && (targetcm.cxx_implicit_extern_c
8922 (IDENTIFIER_POINTER (declarator))))))
8923 SET_DECL_LANGUAGE (decl, lang_c);
8925 /* Should probably propagate const out from type to decl I bet (mrs). */
8926 if (staticp)
8928 DECL_STATIC_FUNCTION_P (decl) = 1;
8929 DECL_CONTEXT (decl) = ctype;
8932 if (deletedp)
8933 DECL_DELETED_FN (decl) = 1;
8935 if (ctype)
8937 DECL_CONTEXT (decl) = ctype;
8938 if (funcdef_flag)
8939 check_class_member_definition_namespace (decl);
8942 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8944 if (PROCESSING_REAL_TEMPLATE_DECL_P())
8945 error_at (location, "cannot declare %<::main%> to be a template");
8946 if (inlinep & 1)
8947 error_at (declspecs->locations[ds_inline],
8948 "cannot declare %<::main%> to be inline");
8949 if (inlinep & 2)
8950 error_at (declspecs->locations[ds_constexpr],
8951 "cannot declare %<::main%> to be %<constexpr%>");
8952 if (!publicp)
8953 error_at (location, "cannot declare %<::main%> to be static");
8954 inlinep = 0;
8955 publicp = 1;
8958 /* Members of anonymous types and local classes have no linkage; make
8959 them internal. If a typedef is made later, this will be changed. */
8960 if (ctype && (!TREE_PUBLIC (TYPE_MAIN_DECL (ctype))
8961 || decl_function_context (TYPE_MAIN_DECL (ctype))))
8962 publicp = 0;
8964 if (publicp && cxx_dialect == cxx98)
8966 /* [basic.link]: A name with no linkage (notably, the name of a class
8967 or enumeration declared in a local scope) shall not be used to
8968 declare an entity with linkage.
8970 DR 757 relaxes this restriction for C++0x. */
8971 no_linkage_error (decl);
8974 TREE_PUBLIC (decl) = publicp;
8975 if (! publicp)
8977 DECL_INTERFACE_KNOWN (decl) = 1;
8978 DECL_NOT_REALLY_EXTERN (decl) = 1;
8981 /* If the declaration was declared inline, mark it as such. */
8982 if (inlinep)
8984 DECL_DECLARED_INLINE_P (decl) = 1;
8985 if (publicp)
8986 DECL_COMDAT (decl) = 1;
8988 if (inlinep & 2)
8989 DECL_DECLARED_CONSTEXPR_P (decl) = true;
8991 // If the concept declaration specifier was found, check
8992 // that the declaration satisfies the necessary requirements.
8993 if (concept_p)
8995 DECL_DECLARED_CONCEPT_P (decl) = true;
8996 check_concept_fn (decl);
8999 DECL_EXTERNAL (decl) = 1;
9000 if (TREE_CODE (type) == FUNCTION_TYPE)
9002 if (quals || rqual)
9003 TREE_TYPE (decl) = apply_memfn_quals (TREE_TYPE (decl),
9004 TYPE_UNQUALIFIED,
9005 REF_QUAL_NONE);
9007 if (quals)
9009 error (ctype
9010 ? G_("static member function %qD cannot have cv-qualifier")
9011 : G_("non-member function %qD cannot have cv-qualifier"),
9012 decl);
9013 quals = TYPE_UNQUALIFIED;
9016 if (rqual)
9018 error (ctype
9019 ? G_("static member function %qD cannot have ref-qualifier")
9020 : G_("non-member function %qD cannot have ref-qualifier"),
9021 decl);
9022 rqual = REF_QUAL_NONE;
9026 if (deduction_guide_p (decl))
9028 if (!DECL_NAMESPACE_SCOPE_P (decl))
9030 error_at (location, "deduction guide %qD must be declared at "
9031 "namespace scope", decl);
9032 return NULL_TREE;
9034 if (funcdef_flag)
9035 error_at (location,
9036 "deduction guide %qD must not have a function body", decl);
9038 else if (IDENTIFIER_ANY_OP_P (DECL_NAME (decl))
9039 && !grok_op_properties (decl, /*complain=*/true))
9040 return NULL_TREE;
9041 else if (UDLIT_OPER_P (DECL_NAME (decl)))
9043 bool long_long_unsigned_p;
9044 bool long_double_p;
9045 const char *suffix = NULL;
9046 /* [over.literal]/6: Literal operators shall not have C linkage. */
9047 if (DECL_LANGUAGE (decl) == lang_c)
9049 error_at (location, "literal operator with C linkage");
9050 maybe_show_extern_c_location ();
9051 return NULL_TREE;
9054 if (DECL_NAMESPACE_SCOPE_P (decl))
9056 if (!check_literal_operator_args (decl, &long_long_unsigned_p,
9057 &long_double_p))
9059 error_at (location, "%qD has invalid argument list", decl);
9060 return NULL_TREE;
9063 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
9064 if (long_long_unsigned_p)
9066 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
9067 warning_at (location, 0, "integer suffix %qs"
9068 " shadowed by implementation", suffix);
9070 else if (long_double_p)
9072 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
9073 warning_at (location, 0, "floating point suffix %qs"
9074 " shadowed by implementation", suffix);
9076 /* 17.6.3.3.5 */
9077 if (suffix[0] != '_'
9078 && !in_system_header_at (location)
9079 && !current_function_decl && !(friendp && !funcdef_flag))
9080 warning_at (location, OPT_Wliteral_suffix,
9081 "literal operator suffixes not preceded by %<_%>"
9082 " are reserved for future standardization");
9084 else
9086 error_at (location, "%qD must be a non-member function", decl);
9087 return NULL_TREE;
9091 if (funcdef_flag)
9092 /* Make the init_value nonzero so pushdecl knows this is not
9093 tentative. error_mark_node is replaced later with the BLOCK. */
9094 DECL_INITIAL (decl) = error_mark_node;
9096 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
9097 TREE_NOTHROW (decl) = 1;
9099 if (flag_openmp || flag_openmp_simd)
9101 /* Adjust "omp declare simd" attributes. */
9102 tree ods = lookup_attribute ("omp declare simd", *attrlist);
9103 if (ods)
9105 tree attr;
9106 for (attr = ods; attr;
9107 attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
9109 if (TREE_CODE (type) == METHOD_TYPE)
9110 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
9111 DECL_ARGUMENTS (decl), NULL);
9112 if (TREE_VALUE (attr) != NULL_TREE)
9114 tree cl = TREE_VALUE (TREE_VALUE (attr));
9115 cl = c_omp_declare_simd_clauses_to_numbers
9116 (DECL_ARGUMENTS (decl), cl);
9117 if (cl)
9118 TREE_VALUE (TREE_VALUE (attr)) = cl;
9119 else
9120 TREE_VALUE (attr) = NULL_TREE;
9126 /* Caller will do the rest of this. */
9127 if (check < 0)
9128 return decl;
9130 if (ctype != NULL_TREE)
9131 grokclassfn (ctype, decl, flags);
9133 /* 12.4/3 */
9134 if (cxx_dialect >= cxx11
9135 && DECL_DESTRUCTOR_P (decl)
9136 && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
9137 && !processing_template_decl)
9138 deduce_noexcept_on_destructor (decl);
9140 decl = check_explicit_specialization (orig_declarator, decl,
9141 template_count,
9142 2 * funcdef_flag +
9143 4 * (friendp != 0) +
9144 8 * concept_p,
9145 *attrlist);
9146 if (decl == error_mark_node)
9147 return NULL_TREE;
9149 if (DECL_STATIC_FUNCTION_P (decl))
9150 check_static_quals (decl, quals);
9152 if (attrlist)
9154 cplus_decl_attributes (&decl, *attrlist, 0);
9155 *attrlist = NULL_TREE;
9158 /* Check main's type after attributes have been applied. */
9159 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
9161 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
9162 integer_type_node))
9164 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
9165 tree newtype;
9166 error_at (declspecs->locations[ds_type_spec],
9167 "%<::main%> must return %<int%>");
9168 newtype = build_function_type (integer_type_node, oldtypeargs);
9169 TREE_TYPE (decl) = newtype;
9171 if (warn_main)
9172 check_main_parameter_types (decl);
9175 if (ctype != NULL_TREE && check)
9177 tree old_decl = check_classfn (ctype, decl,
9178 (processing_template_decl
9179 > template_class_depth (ctype))
9180 ? current_template_parms
9181 : NULL_TREE);
9183 if (old_decl == error_mark_node)
9184 return NULL_TREE;
9186 if (old_decl)
9188 tree ok;
9189 tree pushed_scope;
9191 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
9192 /* Because grokfndecl is always supposed to return a
9193 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
9194 here. We depend on our callers to figure out that its
9195 really a template that's being returned. */
9196 old_decl = DECL_TEMPLATE_RESULT (old_decl);
9198 if (DECL_STATIC_FUNCTION_P (old_decl)
9199 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
9201 /* Remove the `this' parm added by grokclassfn. */
9202 revert_static_member_fn (decl);
9203 check_static_quals (decl, quals);
9205 if (DECL_ARTIFICIAL (old_decl))
9207 error ("definition of implicitly-declared %qD", old_decl);
9208 return NULL_TREE;
9210 else if (DECL_DEFAULTED_FN (old_decl))
9212 error ("definition of explicitly-defaulted %q+D", decl);
9213 inform (DECL_SOURCE_LOCATION (old_decl),
9214 "%q#D explicitly defaulted here", old_decl);
9215 return NULL_TREE;
9218 /* Since we've smashed OLD_DECL to its
9219 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
9220 if (TREE_CODE (decl) == TEMPLATE_DECL)
9221 decl = DECL_TEMPLATE_RESULT (decl);
9223 /* Attempt to merge the declarations. This can fail, in
9224 the case of some invalid specialization declarations. */
9225 pushed_scope = push_scope (ctype);
9226 ok = duplicate_decls (decl, old_decl, friendp);
9227 if (pushed_scope)
9228 pop_scope (pushed_scope);
9229 if (!ok)
9231 error ("no %q#D member function declared in class %qT",
9232 decl, ctype);
9233 return NULL_TREE;
9235 if (ok == error_mark_node)
9236 return NULL_TREE;
9237 return old_decl;
9241 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
9242 return NULL_TREE;
9244 if (ctype == NULL_TREE || check)
9245 return decl;
9247 if (virtualp)
9248 DECL_VIRTUAL_P (decl) = 1;
9250 return decl;
9253 /* decl is a FUNCTION_DECL.
9254 specifiers are the parsed virt-specifiers.
9256 Set flags to reflect the virt-specifiers.
9258 Returns decl. */
9260 static tree
9261 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
9263 if (decl == NULL_TREE)
9264 return decl;
9265 if (specifiers & VIRT_SPEC_OVERRIDE)
9266 DECL_OVERRIDE_P (decl) = 1;
9267 if (specifiers & VIRT_SPEC_FINAL)
9268 DECL_FINAL_P (decl) = 1;
9269 return decl;
9272 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
9273 the linkage that DECL will receive in the object file. */
9275 static void
9276 set_linkage_for_static_data_member (tree decl)
9278 /* A static data member always has static storage duration and
9279 external linkage. Note that static data members are forbidden in
9280 local classes -- the only situation in which a class has
9281 non-external linkage. */
9282 TREE_PUBLIC (decl) = 1;
9283 TREE_STATIC (decl) = 1;
9284 /* For non-template classes, static data members are always put
9285 out in exactly those files where they are defined, just as
9286 with ordinary namespace-scope variables. */
9287 if (!processing_template_decl)
9288 DECL_INTERFACE_KNOWN (decl) = 1;
9291 /* Create a VAR_DECL named NAME with the indicated TYPE.
9293 If SCOPE is non-NULL, it is the class type or namespace containing
9294 the variable. If SCOPE is NULL, the variable should is created in
9295 the innermost enclosing scope. */
9297 static tree
9298 grokvardecl (tree type,
9299 tree name,
9300 tree orig_declarator,
9301 const cp_decl_specifier_seq *declspecs,
9302 int initialized,
9303 int type_quals,
9304 int inlinep,
9305 bool conceptp,
9306 int template_count,
9307 tree scope)
9309 tree decl;
9310 tree explicit_scope;
9312 gcc_assert (!name || identifier_p (name));
9314 bool constp = (type_quals & TYPE_QUAL_CONST) != 0;
9315 bool volatilep = (type_quals & TYPE_QUAL_VOLATILE) != 0;
9317 /* Compute the scope in which to place the variable, but remember
9318 whether or not that scope was explicitly specified by the user. */
9319 explicit_scope = scope;
9320 if (!scope)
9322 /* An explicit "extern" specifier indicates a namespace-scope
9323 variable. */
9324 if (declspecs->storage_class == sc_extern)
9325 scope = current_decl_namespace ();
9326 else if (!at_function_scope_p ())
9327 scope = current_scope ();
9330 if (scope
9331 && (/* If the variable is a namespace-scope variable declared in a
9332 template, we need DECL_LANG_SPECIFIC. */
9333 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
9334 /* Similarly for namespace-scope variables with language linkage
9335 other than C++. */
9336 || (TREE_CODE (scope) == NAMESPACE_DECL
9337 && current_lang_name != lang_name_cplusplus)
9338 /* Similarly for static data members. */
9339 || TYPE_P (scope)
9340 /* Similarly for explicit specializations. */
9341 || (orig_declarator
9342 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
9343 decl = build_lang_decl (VAR_DECL, name, type);
9344 else
9345 decl = build_decl (input_location, VAR_DECL, name, type);
9347 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
9348 set_decl_namespace (decl, explicit_scope, 0);
9349 else
9350 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
9352 if (declspecs->storage_class == sc_extern)
9354 DECL_THIS_EXTERN (decl) = 1;
9355 DECL_EXTERNAL (decl) = !initialized;
9358 if (DECL_CLASS_SCOPE_P (decl))
9360 set_linkage_for_static_data_member (decl);
9361 /* This function is only called with out-of-class definitions. */
9362 DECL_EXTERNAL (decl) = 0;
9363 check_class_member_definition_namespace (decl);
9365 /* At top level, either `static' or no s.c. makes a definition
9366 (perhaps tentative), and absence of `static' makes it public. */
9367 else if (toplevel_bindings_p ())
9369 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
9370 && (DECL_THIS_EXTERN (decl)
9371 || ! constp
9372 || volatilep
9373 || inlinep));
9374 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9376 /* Not at top level, only `static' makes a static definition. */
9377 else
9379 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
9380 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9383 if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
9385 if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
9387 CP_DECL_THREAD_LOCAL_P (decl) = true;
9388 if (!processing_template_decl)
9389 set_decl_tls_model (decl, decl_default_tls_model (decl));
9391 if (declspecs->gnu_thread_keyword_p)
9392 SET_DECL_GNU_TLS_P (decl);
9395 /* If the type of the decl has no linkage, make sure that we'll
9396 notice that in mark_used. */
9397 if (cxx_dialect > cxx98
9398 && decl_linkage (decl) != lk_none
9399 && DECL_LANG_SPECIFIC (decl) == NULL
9400 && !DECL_EXTERN_C_P (decl)
9401 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
9402 retrofit_lang_decl (decl);
9404 if (TREE_PUBLIC (decl))
9406 /* [basic.link]: A name with no linkage (notably, the name of a class
9407 or enumeration declared in a local scope) shall not be used to
9408 declare an entity with linkage.
9410 DR 757 relaxes this restriction for C++0x. */
9411 if (cxx_dialect < cxx11)
9412 no_linkage_error (decl);
9414 else
9415 DECL_INTERFACE_KNOWN (decl) = 1;
9417 if (DECL_NAME (decl)
9418 && MAIN_NAME_P (DECL_NAME (decl))
9419 && scope == global_namespace)
9420 error ("cannot declare %<::main%> to be a global variable");
9422 /* Check that the variable can be safely declared as a concept.
9423 Note that this also forbids explicit specializations. */
9424 if (conceptp)
9426 if (!processing_template_decl)
9428 error_at (declspecs->locations[ds_concept],
9429 "a non-template variable cannot be %<concept%>");
9430 return NULL_TREE;
9432 else
9433 DECL_DECLARED_CONCEPT_P (decl) = true;
9434 if (!same_type_ignoring_top_level_qualifiers_p (type, boolean_type_node))
9435 error_at (declspecs->locations[ds_type_spec],
9436 "concept must have type %<bool%>");
9438 else if (flag_concepts
9439 && processing_template_decl > template_class_depth (scope))
9441 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
9442 tree ci = build_constraints (reqs, NULL_TREE);
9443 set_constraints (decl, ci);
9446 // Handle explicit specializations and instantiations of variable templates.
9447 if (orig_declarator)
9448 decl = check_explicit_specialization (orig_declarator, decl,
9449 template_count, conceptp * 8);
9451 return decl != error_mark_node ? decl : NULL_TREE;
9454 /* Create and return a canonical pointer to member function type, for
9455 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
9457 tree
9458 build_ptrmemfunc_type (tree type)
9460 tree field, fields;
9461 tree t;
9463 if (type == error_mark_node)
9464 return type;
9466 /* Make sure that we always have the unqualified pointer-to-member
9467 type first. */
9468 if (cp_cv_quals quals = cp_type_quals (type))
9470 tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9471 return cp_build_qualified_type (unqual, quals);
9474 /* If a canonical type already exists for this type, use it. We use
9475 this method instead of type_hash_canon, because it only does a
9476 simple equality check on the list of field members. */
9478 t = TYPE_PTRMEMFUNC_TYPE (type);
9479 if (t)
9480 return t;
9482 t = make_node (RECORD_TYPE);
9484 /* Let the front end know this is a pointer to member function. */
9485 TYPE_PTRMEMFUNC_FLAG (t) = 1;
9487 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
9488 fields = field;
9490 field = build_decl (input_location, FIELD_DECL, delta_identifier,
9491 delta_type_node);
9492 DECL_CHAIN (field) = fields;
9493 fields = field;
9495 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
9497 /* Zap out the name so that the back end will give us the debugging
9498 information for this anonymous RECORD_TYPE. */
9499 TYPE_NAME (t) = NULL_TREE;
9501 /* Cache this pointer-to-member type so that we can find it again
9502 later. */
9503 TYPE_PTRMEMFUNC_TYPE (type) = t;
9505 if (TYPE_STRUCTURAL_EQUALITY_P (type))
9506 SET_TYPE_STRUCTURAL_EQUALITY (t);
9507 else if (TYPE_CANONICAL (type) != type)
9508 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
9510 return t;
9513 /* Create and return a pointer to data member type. */
9515 tree
9516 build_ptrmem_type (tree class_type, tree member_type)
9518 if (TREE_CODE (member_type) == METHOD_TYPE)
9520 cp_cv_quals quals = type_memfn_quals (member_type);
9521 cp_ref_qualifier rqual = type_memfn_rqual (member_type);
9522 member_type = build_memfn_type (member_type, class_type, quals, rqual);
9523 return build_ptrmemfunc_type (build_pointer_type (member_type));
9525 else
9527 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
9528 return build_offset_type (class_type, member_type);
9532 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9533 Check to see that the definition is valid. Issue appropriate error
9534 messages. */
9536 static void
9537 check_static_variable_definition (tree decl, tree type)
9539 /* Avoid redundant diagnostics on out-of-class definitions. */
9540 if (!current_class_type || !TYPE_BEING_DEFINED (current_class_type))
9542 /* Can't check yet if we don't know the type. */
9543 else if (dependent_type_p (type))
9545 /* If DECL is declared constexpr, we'll do the appropriate checks
9546 in check_initializer. Similarly for inline static data members. */
9547 else if (DECL_P (decl)
9548 && (DECL_DECLARED_CONSTEXPR_P (decl)
9549 || undeduced_auto_decl (decl)
9550 || DECL_VAR_DECLARED_INLINE_P (decl)))
9552 else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9554 if (!COMPLETE_TYPE_P (type))
9555 error_at (DECL_SOURCE_LOCATION (decl),
9556 "in-class initialization of static data member %q#D of "
9557 "incomplete type", decl);
9558 else if (literal_type_p (type))
9559 permerror (DECL_SOURCE_LOCATION (decl),
9560 "%<constexpr%> needed for in-class initialization of "
9561 "static data member %q#D of non-integral type", decl);
9562 else
9563 error_at (DECL_SOURCE_LOCATION (decl),
9564 "in-class initialization of static data member %q#D of "
9565 "non-literal type", decl);
9567 /* Motion 10 at San Diego: If a static const integral data member is
9568 initialized with an integral constant expression, the initializer
9569 may appear either in the declaration (within the class), or in
9570 the definition, but not both. If it appears in the class, the
9571 member is a member constant. The file-scope definition is always
9572 required. */
9573 else if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
9574 error_at (DECL_SOURCE_LOCATION (decl),
9575 "invalid in-class initialization of static data member "
9576 "of non-integral type %qT",
9577 type);
9578 else if (!CP_TYPE_CONST_P (type))
9579 error_at (DECL_SOURCE_LOCATION (decl),
9580 "ISO C++ forbids in-class initialization of non-const "
9581 "static member %qD",
9582 decl);
9583 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9584 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
9585 "ISO C++ forbids initialization of member constant "
9586 "%qD of non-integral type %qT", decl, type);
9589 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
9590 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
9591 expressions out into temporary variables so that walk_tree doesn't
9592 step into them (c++/15764). */
9594 static tree
9595 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
9597 hash_set<tree> *pset = (hash_set<tree> *)data;
9598 tree expr = *expr_p;
9599 if (TREE_CODE (expr) == SAVE_EXPR)
9601 tree op = TREE_OPERAND (expr, 0);
9602 cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
9603 if (TREE_SIDE_EFFECTS (op))
9604 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
9605 *walk_subtrees = 0;
9607 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
9608 *walk_subtrees = 0;
9609 return NULL;
9612 /* Entry point for the above. */
9614 static void
9615 stabilize_vla_size (tree size)
9617 hash_set<tree> pset;
9618 /* Break out any function calls into temporary variables. */
9619 cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
9622 /* Reduce a SIZEOF_EXPR to its value. */
9624 tree
9625 fold_sizeof_expr (tree t)
9627 tree r;
9628 if (SIZEOF_EXPR_TYPE_P (t))
9629 r = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (t, 0)),
9630 SIZEOF_EXPR, false, false);
9631 else if (TYPE_P (TREE_OPERAND (t, 0)))
9632 r = cxx_sizeof_or_alignof_type (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9633 false, false);
9634 else
9635 r = cxx_sizeof_or_alignof_expr (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9636 false);
9637 if (r == error_mark_node)
9638 r = size_one_node;
9639 return r;
9642 /* Given the SIZE (i.e., number of elements) in an array, compute
9643 an appropriate index type for the array. If non-NULL, NAME is
9644 the name of the entity being declared. */
9646 tree
9647 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
9649 tree itype;
9650 tree osize = size;
9652 if (error_operand_p (size))
9653 return error_mark_node;
9655 if (!type_dependent_expression_p (size))
9657 osize = size = mark_rvalue_use (size);
9659 if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
9660 && TREE_SIDE_EFFECTS (size))
9661 /* In C++98, we mark a non-constant array bound with a magic
9662 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
9663 else
9665 size = instantiate_non_dependent_expr_sfinae (size, complain);
9666 size = build_converted_constant_expr (size_type_node, size, complain);
9667 size = maybe_constant_value (size);
9669 if (!TREE_CONSTANT (size))
9670 size = osize;
9673 if (error_operand_p (size))
9674 return error_mark_node;
9676 /* The array bound must be an integer type. */
9677 tree type = TREE_TYPE (size);
9678 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
9680 if (!(complain & tf_error))
9681 return error_mark_node;
9682 if (name)
9683 error ("size of array %qD has non-integral type %qT", name, type);
9684 else
9685 error ("size of array has non-integral type %qT", type);
9686 size = integer_one_node;
9690 /* A type is dependent if it is...an array type constructed from any
9691 dependent type or whose size is specified by a constant expression
9692 that is value-dependent. */
9693 /* We can only call value_dependent_expression_p on integral constant
9694 expressions; treat non-constant expressions as dependent, too. */
9695 if (processing_template_decl
9696 && (type_dependent_expression_p (size)
9697 || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
9699 /* We cannot do any checking for a SIZE that isn't known to be
9700 constant. Just build the index type and mark that it requires
9701 structural equality checks. */
9702 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
9703 size, size_one_node));
9704 TYPE_DEPENDENT_P (itype) = 1;
9705 TYPE_DEPENDENT_P_VALID (itype) = 1;
9706 SET_TYPE_STRUCTURAL_EQUALITY (itype);
9707 return itype;
9710 if (TREE_CODE (size) != INTEGER_CST)
9712 tree folded = cp_fully_fold (size);
9713 if (TREE_CODE (folded) == INTEGER_CST)
9714 pedwarn (input_location, OPT_Wpedantic,
9715 "size of array is not an integral constant-expression");
9716 /* Use the folded result for VLAs, too; it will have resolved
9717 SIZEOF_EXPR. */
9718 size = folded;
9721 /* Normally, the array-bound will be a constant. */
9722 if (TREE_CODE (size) == INTEGER_CST)
9724 /* An array must have a positive number of elements. */
9725 if (!valid_constant_size_p (size))
9727 if (!(complain & tf_error))
9728 return error_mark_node;
9730 if (name)
9731 error ("size of array %qD is negative", name);
9732 else
9733 error ("size of array is negative");
9734 size = integer_one_node;
9736 /* As an extension we allow zero-sized arrays. */
9737 else if (integer_zerop (size))
9739 if (!(complain & tf_error))
9740 /* We must fail if performing argument deduction (as
9741 indicated by the state of complain), so that
9742 another substitution can be found. */
9743 return error_mark_node;
9744 else if (in_system_header_at (input_location))
9745 /* Allow them in system headers because glibc uses them. */;
9746 else if (name)
9747 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
9748 else
9749 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
9752 else if (TREE_CONSTANT (size)
9753 /* We don't allow VLAs at non-function scopes, or during
9754 tentative template substitution. */
9755 || !at_function_scope_p ()
9756 || !(complain & tf_error))
9758 if (!(complain & tf_error))
9759 return error_mark_node;
9760 /* `(int) &fn' is not a valid array bound. */
9761 if (name)
9762 error ("size of array %qD is not an integral constant-expression",
9763 name);
9764 else
9765 error ("size of array is not an integral constant-expression");
9766 size = integer_one_node;
9768 else if (pedantic && warn_vla != 0)
9770 if (name)
9771 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
9772 else
9773 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
9775 else if (warn_vla > 0)
9777 if (name)
9778 warning (OPT_Wvla,
9779 "variable length array %qD is used", name);
9780 else
9781 warning (OPT_Wvla,
9782 "variable length array is used");
9785 if (processing_template_decl && !TREE_CONSTANT (size))
9786 /* A variable sized array. */
9787 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
9788 else
9790 /* Compute the index of the largest element in the array. It is
9791 one less than the number of elements in the array. We save
9792 and restore PROCESSING_TEMPLATE_DECL so that computations in
9793 cp_build_binary_op will be appropriately folded. */
9795 processing_template_decl_sentinel s;
9796 itype = cp_build_binary_op (input_location,
9797 MINUS_EXPR,
9798 cp_convert (ssizetype, size, complain),
9799 cp_convert (ssizetype, integer_one_node,
9800 complain),
9801 complain);
9802 itype = maybe_constant_value (itype);
9805 if (!TREE_CONSTANT (itype))
9807 /* A variable sized array. */
9808 itype = variable_size (itype);
9810 stabilize_vla_size (itype);
9812 if (sanitize_flags_p (SANITIZE_VLA)
9813 && current_function_decl != NULL_TREE)
9815 /* We have to add 1 -- in the ubsan routine we generate
9816 LE_EXPR rather than LT_EXPR. */
9817 tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
9818 build_one_cst (TREE_TYPE (itype)));
9819 t = ubsan_instrument_vla (input_location, t);
9820 finish_expr_stmt (t);
9823 /* Make sure that there was no overflow when creating to a signed
9824 index type. (For example, on a 32-bit machine, an array with
9825 size 2^32 - 1 is too big.) */
9826 else if (TREE_CODE (itype) == INTEGER_CST
9827 && TREE_OVERFLOW (itype))
9829 if (!(complain & tf_error))
9830 return error_mark_node;
9831 error ("overflow in array dimension");
9832 TREE_OVERFLOW (itype) = 0;
9836 /* Create and return the appropriate index type. */
9837 itype = build_index_type (itype);
9839 /* If the index type were dependent, we would have returned early, so
9840 remember that it isn't. */
9841 TYPE_DEPENDENT_P (itype) = 0;
9842 TYPE_DEPENDENT_P_VALID (itype) = 1;
9843 return itype;
9846 /* Returns the scope (if any) in which the entity declared by
9847 DECLARATOR will be located. If the entity was declared with an
9848 unqualified name, NULL_TREE is returned. */
9850 tree
9851 get_scope_of_declarator (const cp_declarator *declarator)
9853 while (declarator && declarator->kind != cdk_id)
9854 declarator = declarator->declarator;
9856 /* If the declarator-id is a SCOPE_REF, the scope in which the
9857 declaration occurs is the first operand. */
9858 if (declarator
9859 && declarator->u.id.qualifying_scope)
9860 return declarator->u.id.qualifying_scope;
9862 /* Otherwise, the declarator is not a qualified name; the entity will
9863 be declared in the current scope. */
9864 return NULL_TREE;
9867 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
9868 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9869 with this type. */
9871 static tree
9872 create_array_type_for_decl (tree name, tree type, tree size)
9874 tree itype = NULL_TREE;
9876 /* If things have already gone awry, bail now. */
9877 if (type == error_mark_node || size == error_mark_node)
9878 return error_mark_node;
9880 /* 8.3.4/1: If the type of the identifier of D contains the auto
9881 type-specifier, the program is ill-formed. */
9882 if (type_uses_auto (type))
9884 if (name)
9885 error ("%qD declared as array of %qT", name, type);
9886 else
9887 error ("creating array of %qT", type);
9888 return error_mark_node;
9891 /* If there are some types which cannot be array elements,
9892 issue an error-message and return. */
9893 switch (TREE_CODE (type))
9895 case VOID_TYPE:
9896 if (name)
9897 error ("declaration of %qD as array of void", name);
9898 else
9899 error ("creating array of void");
9900 return error_mark_node;
9902 case FUNCTION_TYPE:
9903 if (name)
9904 error ("declaration of %qD as array of functions", name);
9905 else
9906 error ("creating array of functions");
9907 return error_mark_node;
9909 case REFERENCE_TYPE:
9910 if (name)
9911 error ("declaration of %qD as array of references", name);
9912 else
9913 error ("creating array of references");
9914 return error_mark_node;
9916 case METHOD_TYPE:
9917 if (name)
9918 error ("declaration of %qD as array of function members", name);
9919 else
9920 error ("creating array of function members");
9921 return error_mark_node;
9923 default:
9924 break;
9927 /* [dcl.array]
9929 The constant expressions that specify the bounds of the arrays
9930 can be omitted only for the first member of the sequence. */
9931 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9933 if (name)
9934 error ("declaration of %qD as multidimensional array must "
9935 "have bounds for all dimensions except the first",
9936 name);
9937 else
9938 error ("multidimensional array must have bounds for all "
9939 "dimensions except the first");
9941 return error_mark_node;
9944 /* Figure out the index type for the array. */
9945 if (size)
9946 itype = compute_array_index_type (name, size, tf_warning_or_error);
9948 /* [dcl.array]
9949 T is called the array element type; this type shall not be [...] an
9950 abstract class type. */
9951 abstract_virtuals_error (name, type);
9953 return build_cplus_array_type (type, itype);
9956 /* Returns the smallest location that is not UNKNOWN_LOCATION. */
9958 static location_t
9959 min_location (location_t loca, location_t locb)
9961 if (loca == UNKNOWN_LOCATION
9962 || (locb != UNKNOWN_LOCATION
9963 && linemap_location_before_p (line_table, locb, loca)))
9964 return locb;
9965 return loca;
9968 /* Returns the smallest location != UNKNOWN_LOCATION among the
9969 three stored in LOCATIONS[ds_const], LOCATIONS[ds_volatile],
9970 and LOCATIONS[ds_restrict]. */
9972 static location_t
9973 smallest_type_quals_location (int type_quals, const location_t* locations)
9975 location_t loc = UNKNOWN_LOCATION;
9977 if (type_quals & TYPE_QUAL_CONST)
9978 loc = locations[ds_const];
9980 if (type_quals & TYPE_QUAL_VOLATILE)
9981 loc = min_location (loc, locations[ds_volatile]);
9983 if (type_quals & TYPE_QUAL_RESTRICT)
9984 loc = min_location (loc, locations[ds_restrict]);
9986 return loc;
9989 /* Check that it's OK to declare a function with the indicated TYPE
9990 and TYPE_QUALS. SFK indicates the kind of special function (if any)
9991 that this function is. OPTYPE is the type given in a conversion
9992 operator declaration, or the class type for a constructor/destructor.
9993 Returns the actual return type of the function; that may be different
9994 than TYPE if an error occurs, or for certain special functions. */
9996 static tree
9997 check_special_function_return_type (special_function_kind sfk,
9998 tree type,
9999 tree optype,
10000 int type_quals,
10001 const location_t* locations)
10003 switch (sfk)
10005 case sfk_constructor:
10006 if (type)
10007 error ("return type specification for constructor invalid");
10008 else if (type_quals != TYPE_UNQUALIFIED)
10009 error_at (smallest_type_quals_location (type_quals, locations),
10010 "qualifiers are not allowed on constructor declaration");
10012 if (targetm.cxx.cdtor_returns_this ())
10013 type = build_pointer_type (optype);
10014 else
10015 type = void_type_node;
10016 break;
10018 case sfk_destructor:
10019 if (type)
10020 error ("return type specification for destructor invalid");
10021 else if (type_quals != TYPE_UNQUALIFIED)
10022 error_at (smallest_type_quals_location (type_quals, locations),
10023 "qualifiers are not allowed on destructor declaration");
10025 /* We can't use the proper return type here because we run into
10026 problems with ambiguous bases and covariant returns. */
10027 if (targetm.cxx.cdtor_returns_this ())
10028 type = build_pointer_type (void_type_node);
10029 else
10030 type = void_type_node;
10031 break;
10033 case sfk_conversion:
10034 if (type)
10035 error ("return type specified for %<operator %T%>", optype);
10036 else if (type_quals != TYPE_UNQUALIFIED)
10037 error_at (smallest_type_quals_location (type_quals, locations),
10038 "qualifiers are not allowed on declaration of "
10039 "%<operator %T%>", optype);
10041 type = optype;
10042 break;
10044 case sfk_deduction_guide:
10045 if (type)
10046 error ("return type specified for deduction guide");
10047 else if (type_quals != TYPE_UNQUALIFIED)
10048 error_at (smallest_type_quals_location (type_quals, locations),
10049 "qualifiers are not allowed on declaration of "
10050 "deduction guide");
10051 if (TREE_CODE (optype) == TEMPLATE_TEMPLATE_PARM)
10053 error ("template template parameter %qT in declaration of "
10054 "deduction guide", optype);
10055 type = error_mark_node;
10057 else
10058 type = make_template_placeholder (CLASSTYPE_TI_TEMPLATE (optype));
10059 for (int i = 0; i < ds_last; ++i)
10060 if (i != ds_explicit && locations[i])
10061 error_at (locations[i],
10062 "decl-specifier in declaration of deduction guide");
10063 break;
10065 default:
10066 gcc_unreachable ();
10069 return type;
10072 /* A variable or data member (whose unqualified name is IDENTIFIER)
10073 has been declared with the indicated TYPE. If the TYPE is not
10074 acceptable, issue an error message and return a type to use for
10075 error-recovery purposes. */
10077 tree
10078 check_var_type (tree identifier, tree type)
10080 if (VOID_TYPE_P (type))
10082 if (!identifier)
10083 error ("unnamed variable or field declared void");
10084 else if (identifier_p (identifier))
10086 gcc_assert (!IDENTIFIER_ANY_OP_P (identifier));
10087 error ("variable or field %qE declared void", identifier);
10089 else
10090 error ("variable or field declared void");
10091 type = error_mark_node;
10094 return type;
10097 /* Handle declaring DECL as an inline variable. */
10099 static void
10100 mark_inline_variable (tree decl, location_t loc)
10102 bool inlinep = true;
10103 if (! toplevel_bindings_p ())
10105 error_at (loc, "%<inline%> specifier invalid for variable "
10106 "%qD declared at block scope", decl);
10107 inlinep = false;
10109 else if (cxx_dialect < cxx17)
10110 pedwarn (loc, 0, "inline variables are only available "
10111 "with -std=c++17 or -std=gnu++17");
10112 if (inlinep)
10114 retrofit_lang_decl (decl);
10115 SET_DECL_VAR_DECLARED_INLINE_P (decl);
10120 /* Assign a typedef-given name to a class or enumeration type declared
10121 as anonymous at first. This was split out of grokdeclarator
10122 because it is also used in libcc1. */
10124 void
10125 name_unnamed_type (tree type, tree decl)
10127 gcc_assert (TYPE_UNNAMED_P (type));
10129 /* Replace the anonymous name with the real name everywhere. */
10130 for (tree t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10132 if (anon_aggrname_p (TYPE_IDENTIFIER (t)))
10133 /* We do not rename the debug info representing the
10134 unnamed tagged type because the standard says in
10135 [dcl.typedef] that the naming applies only for
10136 linkage purposes. */
10137 /*debug_hooks->set_name (t, decl);*/
10138 TYPE_NAME (t) = decl;
10141 if (TYPE_LANG_SPECIFIC (type))
10142 TYPE_WAS_UNNAMED (type) = 1;
10144 /* If this is a typedef within a template class, the nested
10145 type is a (non-primary) template. The name for the
10146 template needs updating as well. */
10147 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10148 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10149 = TYPE_IDENTIFIER (type);
10151 /* Adjust linkage now that we aren't unnamed anymore. */
10152 reset_type_linkage (type);
10154 /* FIXME remangle member functions; member functions of a
10155 type with external linkage have external linkage. */
10157 /* Check that our job is done, and that it would fail if we
10158 attempted to do it again. */
10159 gcc_assert (!TYPE_UNNAMED_P (type));
10162 /* Given declspecs and a declarator (abstract or otherwise), determine
10163 the name and type of the object declared and construct a DECL node
10164 for it.
10166 DECLSPECS points to the representation of declaration-specifier
10167 sequence that precedes declarator.
10169 DECL_CONTEXT says which syntactic context this declaration is in:
10170 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
10171 FUNCDEF for a function definition. Like NORMAL but a few different
10172 error messages in each case. Return value may be zero meaning
10173 this definition is too screwy to try to parse.
10174 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
10175 handle member functions (which have FIELD context).
10176 Return value may be zero meaning this definition is too screwy to
10177 try to parse.
10178 PARM for a parameter declaration (either within a function prototype
10179 or before a function body). Make a PARM_DECL, or return void_type_node.
10180 TPARM for a template parameter declaration.
10181 CATCHPARM for a parameter declaration before a catch clause.
10182 TYPENAME if for a typename (in a cast or sizeof).
10183 Don't make a DECL node; just return the ..._TYPE node.
10184 FIELD for a struct or union field; make a FIELD_DECL.
10185 BITFIELD for a field with specified width.
10187 INITIALIZED is as for start_decl.
10189 ATTRLIST is a pointer to the list of attributes, which may be NULL
10190 if there are none; *ATTRLIST may be modified if attributes from inside
10191 the declarator should be applied to the declaration.
10193 When this function is called, scoping variables (such as
10194 CURRENT_CLASS_TYPE) should reflect the scope in which the
10195 declaration occurs, not the scope in which the new declaration will
10196 be placed. For example, on:
10198 void S::f() { ... }
10200 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
10201 should not be `S'.
10203 Returns a DECL (if a declarator is present), a TYPE (if there is no
10204 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
10205 error occurs. */
10207 tree
10208 grokdeclarator (const cp_declarator *declarator,
10209 cp_decl_specifier_seq *declspecs,
10210 enum decl_context decl_context,
10211 int initialized,
10212 tree* attrlist)
10214 tree type = NULL_TREE;
10215 int longlong = 0;
10216 int explicit_intN = 0;
10217 int virtualp, explicitp, friendp, inlinep, staticp;
10218 int explicit_int = 0;
10219 int explicit_char = 0;
10220 int defaulted_int = 0;
10222 tree typedef_decl = NULL_TREE;
10223 const char *name = NULL;
10224 tree typedef_type = NULL_TREE;
10225 /* True if this declarator is a function definition. */
10226 bool funcdef_flag = false;
10227 cp_declarator_kind innermost_code = cdk_error;
10228 int bitfield = 0;
10229 #if 0
10230 /* See the code below that used this. */
10231 tree decl_attr = NULL_TREE;
10232 #endif
10234 /* Keep track of what sort of function is being processed
10235 so that we can warn about default return values, or explicit
10236 return values which do not match prescribed defaults. */
10237 special_function_kind sfk = sfk_none;
10239 tree dname = NULL_TREE;
10240 tree ctor_return_type = NULL_TREE;
10241 enum overload_flags flags = NO_SPECIAL;
10242 /* cv-qualifiers that apply to the declarator, for a declaration of
10243 a member function. */
10244 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
10245 /* virt-specifiers that apply to the declarator, for a declaration of
10246 a member function. */
10247 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
10248 /* ref-qualifier that applies to the declarator, for a declaration of
10249 a member function. */
10250 cp_ref_qualifier rqual = REF_QUAL_NONE;
10251 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
10252 int type_quals = TYPE_UNQUALIFIED;
10253 tree raises = NULL_TREE;
10254 int template_count = 0;
10255 tree returned_attrs = NULL_TREE;
10256 tree parms = NULL_TREE;
10257 const cp_declarator *id_declarator;
10258 /* The unqualified name of the declarator; either an
10259 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
10260 tree unqualified_id;
10261 /* The class type, if any, in which this entity is located,
10262 or NULL_TREE if none. Note that this value may be different from
10263 the current class type; for example if an attempt is made to declare
10264 "A::f" inside "B", this value will be "A". */
10265 tree ctype = current_class_type;
10266 /* The NAMESPACE_DECL for the namespace in which this entity is
10267 located. If an unqualified name is used to declare the entity,
10268 this value will be NULL_TREE, even if the entity is located at
10269 namespace scope. */
10270 tree in_namespace = NULL_TREE;
10271 cp_storage_class storage_class;
10272 bool unsigned_p, signed_p, short_p, long_p, thread_p;
10273 bool type_was_error_mark_node = false;
10274 bool parameter_pack_p = declarator ? declarator->parameter_pack_p : false;
10275 bool template_type_arg = false;
10276 bool template_parm_flag = false;
10277 bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
10278 bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
10279 bool late_return_type_p = false;
10280 bool array_parameter_p = false;
10281 source_location saved_loc = input_location;
10282 tree reqs = NULL_TREE;
10284 signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
10285 unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
10286 short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
10287 long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
10288 longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
10289 explicit_intN = declspecs->explicit_intN_p;
10290 thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
10292 // Was concept_p specified? Note that ds_concept
10293 // implies ds_constexpr!
10294 bool concept_p = decl_spec_seq_has_spec_p (declspecs, ds_concept);
10295 if (concept_p)
10296 constexpr_p = true;
10298 if (decl_spec_seq_has_spec_p (declspecs, ds_const))
10299 type_quals |= TYPE_QUAL_CONST;
10300 if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
10301 type_quals |= TYPE_QUAL_VOLATILE;
10302 if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
10303 type_quals |= TYPE_QUAL_RESTRICT;
10305 if (decl_context == FUNCDEF)
10306 funcdef_flag = true, decl_context = NORMAL;
10307 else if (decl_context == MEMFUNCDEF)
10308 funcdef_flag = true, decl_context = FIELD;
10309 else if (decl_context == BITFIELD)
10310 bitfield = 1, decl_context = FIELD;
10311 else if (decl_context == TEMPLATE_TYPE_ARG)
10312 template_type_arg = true, decl_context = TYPENAME;
10313 else if (decl_context == TPARM)
10314 template_parm_flag = true, decl_context = PARM;
10316 if (initialized > 1)
10317 funcdef_flag = true;
10319 location_t typespec_loc = smallest_type_quals_location (type_quals,
10320 declspecs->locations);
10321 if (typespec_loc == UNKNOWN_LOCATION)
10322 typespec_loc = declspecs->locations[ds_type_spec];
10323 if (typespec_loc == UNKNOWN_LOCATION)
10324 typespec_loc = input_location;
10326 /* Look inside a declarator for the name being declared
10327 and get it as a string, for an error message. */
10328 for (id_declarator = declarator;
10329 id_declarator;
10330 id_declarator = id_declarator->declarator)
10332 if (id_declarator->kind != cdk_id)
10333 innermost_code = id_declarator->kind;
10335 switch (id_declarator->kind)
10337 case cdk_function:
10338 if (id_declarator->declarator
10339 && id_declarator->declarator->kind == cdk_id)
10341 sfk = id_declarator->declarator->u.id.sfk;
10342 if (sfk == sfk_destructor)
10343 flags = DTOR_FLAG;
10345 break;
10347 case cdk_id:
10349 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
10350 tree decl = id_declarator->u.id.unqualified_name;
10351 if (!decl)
10352 break;
10353 if (qualifying_scope)
10355 if (check_for_bare_parameter_packs (qualifying_scope,
10356 id_declarator->id_loc))
10357 return error_mark_node;
10358 if (at_function_scope_p ())
10360 /* [dcl.meaning]
10362 A declarator-id shall not be qualified except
10363 for ...
10365 None of the cases are permitted in block
10366 scope. */
10367 if (qualifying_scope == global_namespace)
10368 error ("invalid use of qualified-name %<::%D%>",
10369 decl);
10370 else if (TYPE_P (qualifying_scope))
10371 error ("invalid use of qualified-name %<%T::%D%>",
10372 qualifying_scope, decl);
10373 else
10374 error ("invalid use of qualified-name %<%D::%D%>",
10375 qualifying_scope, decl);
10376 return error_mark_node;
10378 else if (TYPE_P (qualifying_scope))
10380 ctype = qualifying_scope;
10381 if (!MAYBE_CLASS_TYPE_P (ctype))
10383 error ("%q#T is not a class or a namespace", ctype);
10384 ctype = NULL_TREE;
10386 else if (innermost_code != cdk_function
10387 && current_class_type
10388 && !uniquely_derived_from_p (ctype,
10389 current_class_type))
10391 error ("invalid use of qualified-name %<%T::%D%>",
10392 qualifying_scope, decl);
10393 return error_mark_node;
10396 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
10397 in_namespace = qualifying_scope;
10399 switch (TREE_CODE (decl))
10401 case BIT_NOT_EXPR:
10403 if (innermost_code != cdk_function)
10405 error ("declaration of %qD as non-function", decl);
10406 return error_mark_node;
10408 else if (!qualifying_scope
10409 && !(current_class_type && at_class_scope_p ()))
10411 error ("declaration of %qD as non-member", decl);
10412 return error_mark_node;
10415 tree type = TREE_OPERAND (decl, 0);
10416 if (TYPE_P (type))
10417 type = constructor_name (type);
10418 name = identifier_to_locale (IDENTIFIER_POINTER (type));
10419 dname = decl;
10421 break;
10423 case TEMPLATE_ID_EXPR:
10425 tree fns = TREE_OPERAND (decl, 0);
10427 dname = fns;
10428 if (!identifier_p (dname))
10429 dname = OVL_NAME (dname);
10431 /* Fall through. */
10433 case IDENTIFIER_NODE:
10434 if (identifier_p (decl))
10435 dname = decl;
10437 if (IDENTIFIER_KEYWORD_P (dname))
10439 error ("declarator-id missing; using reserved word %qD",
10440 dname);
10441 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10443 else if (!IDENTIFIER_CONV_OP_P (dname))
10444 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10445 else
10447 gcc_assert (flags == NO_SPECIAL);
10448 flags = TYPENAME_FLAG;
10449 sfk = sfk_conversion;
10450 tree glob = get_global_binding (dname);
10451 if (glob && TREE_CODE (glob) == TYPE_DECL)
10452 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10453 else
10454 name = "<invalid operator>";
10456 break;
10458 default:
10459 gcc_unreachable ();
10461 break;
10464 case cdk_array:
10465 case cdk_pointer:
10466 case cdk_reference:
10467 case cdk_ptrmem:
10468 break;
10470 case cdk_decomp:
10471 name = "structured binding";
10472 break;
10474 case cdk_error:
10475 return error_mark_node;
10477 default:
10478 gcc_unreachable ();
10480 if (id_declarator->kind == cdk_id)
10481 break;
10484 /* [dcl.fct.edf]
10486 The declarator in a function-definition shall have the form
10487 D1 ( parameter-declaration-clause) ... */
10488 if (funcdef_flag && innermost_code != cdk_function)
10490 error ("function definition does not declare parameters");
10491 return error_mark_node;
10494 if (flags == TYPENAME_FLAG
10495 && innermost_code != cdk_function
10496 && ! (ctype && !declspecs->any_specifiers_p))
10498 error ("declaration of %qD as non-function", dname);
10499 return error_mark_node;
10502 if (dname && identifier_p (dname))
10504 if (UDLIT_OPER_P (dname)
10505 && innermost_code != cdk_function)
10507 error ("declaration of %qD as non-function", dname);
10508 return error_mark_node;
10511 if (IDENTIFIER_ANY_OP_P (dname))
10513 if (typedef_p)
10515 error ("declaration of %qD as %<typedef%>", dname);
10516 return error_mark_node;
10518 else if (decl_context == PARM || decl_context == CATCHPARM)
10520 error ("declaration of %qD as parameter", dname);
10521 return error_mark_node;
10526 /* Anything declared one level down from the top level
10527 must be one of the parameters of a function
10528 (because the body is at least two levels down). */
10530 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
10531 by not allowing C++ class definitions to specify their parameters
10532 with xdecls (must be spec.d in the parmlist).
10534 Since we now wait to push a class scope until we are sure that
10535 we are in a legitimate method context, we must set oldcname
10536 explicitly (since current_class_name is not yet alive).
10538 We also want to avoid calling this a PARM if it is in a namespace. */
10540 if (decl_context == NORMAL && !toplevel_bindings_p ())
10542 cp_binding_level *b = current_binding_level;
10543 current_binding_level = b->level_chain;
10544 if (current_binding_level != 0 && toplevel_bindings_p ())
10545 decl_context = PARM;
10546 current_binding_level = b;
10549 if (name == NULL)
10550 name = decl_context == PARM ? "parameter" : "type name";
10552 if (concept_p && typedef_p)
10554 error_at (declspecs->locations[ds_concept],
10555 "%<concept%> cannot appear in a typedef declaration");
10556 return error_mark_node;
10559 if (constexpr_p && typedef_p)
10561 error_at (declspecs->locations[ds_constexpr],
10562 "%<constexpr%> cannot appear in a typedef declaration");
10563 return error_mark_node;
10566 /* If there were multiple types specified in the decl-specifier-seq,
10567 issue an error message. */
10568 if (declspecs->multiple_types_p)
10570 error ("two or more data types in declaration of %qs", name);
10571 return error_mark_node;
10574 if (declspecs->conflicting_specifiers_p)
10576 error ("conflicting specifiers in declaration of %qs", name);
10577 return error_mark_node;
10580 /* Extract the basic type from the decl-specifier-seq. */
10581 type = declspecs->type;
10582 if (type == error_mark_node)
10584 type = NULL_TREE;
10585 type_was_error_mark_node = true;
10587 cp_warn_deprecated_use (type);
10588 if (type && TREE_CODE (type) == TYPE_DECL)
10590 typedef_decl = type;
10591 type = TREE_TYPE (typedef_decl);
10592 if (DECL_ARTIFICIAL (typedef_decl))
10593 cp_warn_deprecated_use (type);
10595 /* No type at all: default to `int', and set DEFAULTED_INT
10596 because it was not a user-defined typedef. */
10597 if (type == NULL_TREE)
10599 if (signed_p || unsigned_p || long_p || short_p)
10601 /* These imply 'int'. */
10602 type = integer_type_node;
10603 defaulted_int = 1;
10605 /* If we just have "complex", it is equivalent to "complex double". */
10606 else if (!longlong && !explicit_intN
10607 && decl_spec_seq_has_spec_p (declspecs, ds_complex))
10609 type = double_type_node;
10610 pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
10611 "ISO C++ does not support plain %<complex%> meaning "
10612 "%<double complex%>");
10615 /* Gather flags. */
10616 explicit_int = declspecs->explicit_int_p;
10617 explicit_char = declspecs->explicit_char_p;
10619 #if 0
10620 /* See the code below that used this. */
10621 if (typedef_decl)
10622 decl_attr = DECL_ATTRIBUTES (typedef_decl);
10623 #endif
10624 typedef_type = type;
10626 if (sfk == sfk_conversion || sfk == sfk_deduction_guide)
10627 ctor_return_type = TREE_TYPE (dname);
10628 else
10629 ctor_return_type = ctype;
10631 if (sfk != sfk_none)
10633 type = check_special_function_return_type (sfk, type,
10634 ctor_return_type,
10635 type_quals,
10636 declspecs->locations);
10637 type_quals = TYPE_UNQUALIFIED;
10639 else if (type == NULL_TREE)
10641 int is_main;
10643 explicit_int = -1;
10645 /* We handle `main' specially here, because 'main () { }' is so
10646 common. With no options, it is allowed. With -Wreturn-type,
10647 it is a warning. It is only an error with -pedantic-errors. */
10648 is_main = (funcdef_flag
10649 && dname && identifier_p (dname)
10650 && MAIN_NAME_P (dname)
10651 && ctype == NULL_TREE
10652 && in_namespace == NULL_TREE
10653 && current_namespace == global_namespace);
10655 if (type_was_error_mark_node)
10656 /* We've already issued an error, don't complain more. */;
10657 else if (in_system_header_at (input_location) || flag_ms_extensions)
10658 /* Allow it, sigh. */;
10659 else if (! is_main)
10660 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
10661 else if (pedantic)
10662 pedwarn (input_location, OPT_Wpedantic,
10663 "ISO C++ forbids declaration of %qs with no type", name);
10664 else
10665 warning (OPT_Wreturn_type,
10666 "ISO C++ forbids declaration of %qs with no type", name);
10668 if (type_was_error_mark_node && template_parm_flag)
10669 /* FIXME we should be able to propagate the error_mark_node as is
10670 for other contexts too. */
10671 type = error_mark_node;
10672 else
10673 type = integer_type_node;
10676 ctype = NULL_TREE;
10678 if (explicit_intN)
10680 if (! int_n_enabled_p[declspecs->int_n_idx])
10682 error ("%<__int%d%> is not supported by this target",
10683 int_n_data[declspecs->int_n_idx].bitsize);
10684 explicit_intN = false;
10686 else if (pedantic && ! in_system_header_at (input_location))
10687 pedwarn (input_location, OPT_Wpedantic,
10688 "ISO C++ does not support %<__int%d%> for %qs",
10689 int_n_data[declspecs->int_n_idx].bitsize, name);
10692 /* Now process the modifiers that were specified
10693 and check for invalid combinations. */
10695 /* Long double is a special combination. */
10696 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
10698 long_p = false;
10699 type = cp_build_qualified_type (long_double_type_node,
10700 cp_type_quals (type));
10703 /* Check all other uses of type modifiers. */
10705 if (unsigned_p || signed_p || long_p || short_p)
10707 location_t loc;
10708 const char *key;
10709 if (unsigned_p)
10711 key = "unsigned";
10712 loc = declspecs->locations[ds_unsigned];
10714 else if (signed_p)
10716 key = "signed";
10717 loc = declspecs->locations[ds_signed];
10719 else if (longlong)
10721 key = "long long";
10722 loc = declspecs->locations[ds_long_long];
10724 else if (long_p)
10726 key = "long";
10727 loc = declspecs->locations[ds_long];
10729 else /* if (short_p) */
10731 key = "short";
10732 loc = declspecs->locations[ds_short];
10735 int ok = 0;
10737 if (signed_p && unsigned_p)
10739 gcc_rich_location richloc (declspecs->locations[ds_signed]);
10740 richloc.add_range (declspecs->locations[ds_unsigned]);
10741 error_at (&richloc,
10742 "%<signed%> and %<unsigned%> specified together");
10744 else if (long_p && short_p)
10746 gcc_rich_location richloc (declspecs->locations[ds_long]);
10747 richloc.add_range (declspecs->locations[ds_short]);
10748 error_at (&richloc, "%<long%> and %<short%> specified together");
10750 else if (TREE_CODE (type) != INTEGER_TYPE
10751 || type == char16_type_node || type == char32_type_node
10752 || ((long_p || short_p)
10753 && (explicit_char || explicit_intN)))
10754 error_at (loc, "%qs specified with %qT", key, type);
10755 else if (!explicit_int && !defaulted_int
10756 && !explicit_char && !explicit_intN)
10758 if (typedef_decl)
10760 pedwarn (loc, OPT_Wpedantic, "%qs specified with %qT",
10761 key, type);
10762 ok = !flag_pedantic_errors;
10764 else if (declspecs->decltype_p)
10765 error_at (loc, "%qs specified with %<decltype%>", key);
10766 else
10767 error_at (loc, "%qs specified with %<typeof%>", key);
10769 else
10770 ok = 1;
10772 /* Discard the type modifiers if they are invalid. */
10773 if (! ok)
10775 unsigned_p = false;
10776 signed_p = false;
10777 long_p = false;
10778 short_p = false;
10779 longlong = 0;
10783 /* Decide whether an integer type is signed or not.
10784 Optionally treat bitfields as signed by default. */
10785 if (unsigned_p
10786 /* [class.bit]
10788 It is implementation-defined whether a plain (neither
10789 explicitly signed or unsigned) char, short, int, or long
10790 bit-field is signed or unsigned.
10792 Naturally, we extend this to long long as well. Note that
10793 this does not include wchar_t. */
10794 || (bitfield && !flag_signed_bitfields
10795 && !signed_p
10796 /* A typedef for plain `int' without `signed' can be
10797 controlled just like plain `int', but a typedef for
10798 `signed int' cannot be so controlled. */
10799 && !(typedef_decl
10800 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
10801 && TREE_CODE (type) == INTEGER_TYPE
10802 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
10804 if (explicit_intN)
10805 type = int_n_trees[declspecs->int_n_idx].unsigned_type;
10806 else if (longlong)
10807 type = long_long_unsigned_type_node;
10808 else if (long_p)
10809 type = long_unsigned_type_node;
10810 else if (short_p)
10811 type = short_unsigned_type_node;
10812 else if (type == char_type_node)
10813 type = unsigned_char_type_node;
10814 else if (typedef_decl)
10815 type = unsigned_type_for (type);
10816 else
10817 type = unsigned_type_node;
10819 else if (signed_p && type == char_type_node)
10820 type = signed_char_type_node;
10821 else if (explicit_intN)
10822 type = int_n_trees[declspecs->int_n_idx].signed_type;
10823 else if (longlong)
10824 type = long_long_integer_type_node;
10825 else if (long_p)
10826 type = long_integer_type_node;
10827 else if (short_p)
10828 type = short_integer_type_node;
10830 if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
10832 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10833 error ("complex invalid for %qs", name);
10834 /* If a modifier is specified, the resulting complex is the complex
10835 form of TYPE. E.g, "complex short" is "complex short int". */
10836 else if (type == integer_type_node)
10837 type = complex_integer_type_node;
10838 else if (type == float_type_node)
10839 type = complex_float_type_node;
10840 else if (type == double_type_node)
10841 type = complex_double_type_node;
10842 else if (type == long_double_type_node)
10843 type = complex_long_double_type_node;
10844 else
10845 type = build_complex_type (type);
10848 /* If we're using the injected-class-name to form a compound type or a
10849 declaration, replace it with the underlying class so we don't get
10850 redundant typedefs in the debug output. But if we are returning the
10851 type unchanged, leave it alone so that it's available to
10852 maybe_get_template_decl_from_type_decl. */
10853 if (CLASS_TYPE_P (type)
10854 && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
10855 && type == TREE_TYPE (TYPE_NAME (type))
10856 && (declarator || type_quals))
10857 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
10859 type_quals |= cp_type_quals (type);
10860 type = cp_build_qualified_type_real
10861 (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
10862 || declspecs->decltype_p)
10863 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
10864 /* We might have ignored or rejected some of the qualifiers. */
10865 type_quals = cp_type_quals (type);
10867 if (cxx_dialect >= cxx17 && type && is_auto (type)
10868 && innermost_code != cdk_function
10869 && id_declarator && declarator != id_declarator)
10870 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (type))
10872 error_at (typespec_loc, "template placeholder type %qT must be followed "
10873 "by a simple declarator-id", type);
10874 inform (DECL_SOURCE_LOCATION (tmpl), "%qD declared here", tmpl);
10877 staticp = 0;
10878 inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
10879 virtualp = decl_spec_seq_has_spec_p (declspecs, ds_virtual);
10880 explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
10882 storage_class = declspecs->storage_class;
10883 if (storage_class == sc_static)
10884 staticp = 1 + (decl_context == FIELD);
10886 if (virtualp)
10888 if (staticp == 2)
10890 gcc_rich_location richloc (declspecs->locations[ds_virtual]);
10891 richloc.add_range (declspecs->locations[ds_storage_class]);
10892 error_at (&richloc, "member %qD cannot be declared both %<virtual%> "
10893 "and %<static%>", dname);
10894 storage_class = sc_none;
10895 staticp = 0;
10897 if (constexpr_p)
10899 gcc_rich_location richloc (declspecs->locations[ds_virtual]);
10900 richloc.add_range (declspecs->locations[ds_constexpr]);
10901 error_at (&richloc, "member %qD cannot be declared both %<virtual%> "
10902 "and %<constexpr%>", dname);
10905 friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
10907 /* Issue errors about use of storage classes for parameters. */
10908 if (decl_context == PARM)
10910 if (typedef_p)
10912 error_at (declspecs->locations[ds_typedef],
10913 "typedef declaration invalid in parameter declaration");
10914 return error_mark_node;
10916 else if (template_parm_flag && storage_class != sc_none)
10918 error_at (min_location (declspecs->locations[ds_thread],
10919 declspecs->locations[ds_storage_class]),
10920 "storage class specified for template parameter %qs",
10921 name);
10922 return error_mark_node;
10924 else if (storage_class == sc_static
10925 || storage_class == sc_extern
10926 || thread_p)
10928 error_at (min_location (declspecs->locations[ds_thread],
10929 declspecs->locations[ds_storage_class]),
10930 "storage class specified for parameter %qs", name);
10931 return error_mark_node;
10934 /* Function parameters cannot be concept. */
10935 if (concept_p)
10936 error_at (declspecs->locations[ds_concept],
10937 "a parameter cannot be declared %<concept%>");
10938 /* Function parameters cannot be constexpr. If we saw one, moan
10939 and pretend it wasn't there. */
10940 else if (constexpr_p)
10942 error_at (declspecs->locations[ds_constexpr],
10943 "a parameter cannot be declared %<constexpr%>");
10944 constexpr_p = 0;
10948 /* Give error if `virtual' is used outside of class declaration. */
10949 if (virtualp
10950 && (current_class_name == NULL_TREE || decl_context != FIELD))
10952 error_at (declspecs->locations[ds_virtual],
10953 "%<virtual%> outside class declaration");
10954 virtualp = 0;
10957 if (innermost_code == cdk_decomp)
10959 location_t loc = (declarator->kind == cdk_reference
10960 ? declarator->declarator->id_loc : declarator->id_loc);
10961 if (inlinep)
10962 error_at (declspecs->locations[ds_inline],
10963 "structured binding declaration cannot be %<inline%>");
10964 if (typedef_p)
10965 error_at (declspecs->locations[ds_typedef],
10966 "structured binding declaration cannot be %<typedef%>");
10967 if (constexpr_p)
10968 error_at (declspecs->locations[ds_constexpr], "structured "
10969 "binding declaration cannot be %<constexpr%>");
10970 if (thread_p)
10971 error_at (declspecs->locations[ds_thread],
10972 "structured binding declaration cannot be %qs",
10973 declspecs->gnu_thread_keyword_p
10974 ? "__thread" : "thread_local");
10975 if (concept_p)
10976 error_at (declspecs->locations[ds_concept],
10977 "structured binding declaration cannot be %<concept%>");
10978 switch (storage_class)
10980 case sc_none:
10981 break;
10982 case sc_register:
10983 error_at (loc, "structured binding declaration cannot be "
10984 "%<register%>");
10985 break;
10986 case sc_static:
10987 error_at (loc, "structured binding declaration cannot be "
10988 "%<static%>");
10989 break;
10990 case sc_extern:
10991 error_at (loc, "structured binding declaration cannot be "
10992 "%<extern%>");
10993 break;
10994 case sc_mutable:
10995 error_at (loc, "structured binding declaration cannot be "
10996 "%<mutable%>");
10997 break;
10998 case sc_auto:
10999 error_at (loc, "structured binding declaration cannot be "
11000 "C++98 %<auto%>");
11001 break;
11002 default:
11003 gcc_unreachable ();
11005 if (TREE_CODE (type) != TEMPLATE_TYPE_PARM
11006 || TYPE_IDENTIFIER (type) != auto_identifier)
11008 if (type != error_mark_node)
11010 error_at (loc, "structured binding declaration cannot have "
11011 "type %qT", type);
11012 inform (loc,
11013 "type must be cv-qualified %<auto%> or reference to "
11014 "cv-qualified %<auto%>");
11016 type = build_qualified_type (make_auto (), type_quals);
11017 declspecs->type = type;
11019 inlinep = 0;
11020 typedef_p = 0;
11021 constexpr_p = 0;
11022 thread_p = 0;
11023 concept_p = 0;
11024 storage_class = sc_none;
11025 staticp = 0;
11026 declspecs->storage_class = sc_none;
11027 declspecs->locations[ds_thread] = UNKNOWN_LOCATION;
11030 /* Static anonymous unions are dealt with here. */
11031 if (staticp && decl_context == TYPENAME
11032 && declspecs->type
11033 && ANON_AGGR_TYPE_P (declspecs->type))
11034 decl_context = FIELD;
11036 /* Warn about storage classes that are invalid for certain
11037 kinds of declarations (parameters, typenames, etc.). */
11038 if (thread_p
11039 && ((storage_class
11040 && storage_class != sc_extern
11041 && storage_class != sc_static)
11042 || typedef_p))
11044 error ("multiple storage classes in declaration of %qs", name);
11045 thread_p = false;
11047 if (decl_context != NORMAL
11048 && ((storage_class != sc_none
11049 && storage_class != sc_mutable)
11050 || thread_p))
11052 if ((decl_context == PARM || decl_context == CATCHPARM)
11053 && (storage_class == sc_register
11054 || storage_class == sc_auto))
11056 else if (typedef_p)
11058 else if (decl_context == FIELD
11059 /* C++ allows static class elements. */
11060 && storage_class == sc_static)
11061 /* C++ also allows inlines and signed and unsigned elements,
11062 but in those cases we don't come in here. */
11064 else
11066 location_t loc
11067 = min_location (declspecs->locations[ds_thread],
11068 declspecs->locations[ds_storage_class]);
11069 if (decl_context == FIELD)
11070 error_at (loc, "storage class specified for %qs", name);
11071 else if (decl_context == PARM || decl_context == CATCHPARM)
11072 error_at (loc, "storage class specified for parameter %qs", name);
11073 else
11074 error_at (loc, "storage class specified for typename");
11075 if (storage_class == sc_register
11076 || storage_class == sc_auto
11077 || storage_class == sc_extern
11078 || thread_p)
11079 storage_class = sc_none;
11082 else if (storage_class == sc_extern && funcdef_flag
11083 && ! toplevel_bindings_p ())
11084 error ("nested function %qs declared %<extern%>", name);
11085 else if (toplevel_bindings_p ())
11087 if (storage_class == sc_auto)
11088 error ("top-level declaration of %qs specifies %<auto%>", name);
11090 else if (thread_p
11091 && storage_class != sc_extern
11092 && storage_class != sc_static)
11094 if (declspecs->gnu_thread_keyword_p)
11095 pedwarn (declspecs->locations[ds_thread],
11096 0, "function-scope %qs implicitly auto and "
11097 "declared %<__thread%>", name);
11099 /* When thread_local is applied to a variable of block scope the
11100 storage-class-specifier static is implied if it does not appear
11101 explicitly. */
11102 storage_class = declspecs->storage_class = sc_static;
11103 staticp = 1;
11106 if (storage_class && friendp)
11108 error_at (min_location (declspecs->locations[ds_thread],
11109 declspecs->locations[ds_storage_class]),
11110 "storage class specifiers invalid in friend function "
11111 "declarations");
11112 storage_class = sc_none;
11113 staticp = 0;
11116 if (!id_declarator)
11117 unqualified_id = NULL_TREE;
11118 else
11120 unqualified_id = id_declarator->u.id.unqualified_name;
11121 switch (TREE_CODE (unqualified_id))
11123 case BIT_NOT_EXPR:
11124 unqualified_id = TREE_OPERAND (unqualified_id, 0);
11125 if (TYPE_P (unqualified_id))
11126 unqualified_id = constructor_name (unqualified_id);
11127 break;
11129 case IDENTIFIER_NODE:
11130 case TEMPLATE_ID_EXPR:
11131 break;
11133 default:
11134 gcc_unreachable ();
11138 if (declspecs->std_attributes)
11140 location_t attr_loc = declspecs->locations[ds_std_attribute];
11141 if (warning_at (attr_loc, OPT_Wattributes, "attribute ignored"))
11142 inform (attr_loc, "an attribute that appertains to a type-specifier "
11143 "is ignored");
11146 /* Determine the type of the entity declared by recurring on the
11147 declarator. */
11148 for (; declarator; declarator = declarator->declarator)
11150 const cp_declarator *inner_declarator;
11151 tree attrs;
11153 if (type == error_mark_node)
11154 return error_mark_node;
11156 attrs = declarator->attributes;
11157 if (attrs)
11159 int attr_flags;
11161 attr_flags = 0;
11162 if (declarator == NULL || declarator->kind == cdk_id)
11163 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
11164 if (declarator->kind == cdk_function)
11165 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
11166 if (declarator->kind == cdk_array)
11167 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
11168 returned_attrs = decl_attributes (&type,
11169 chainon (returned_attrs, attrs),
11170 attr_flags);
11173 inner_declarator = declarator->declarator;
11175 /* We don't want to warn in parameter context because we don't
11176 yet know if the parse will succeed, and this might turn out
11177 to be a constructor call. */
11178 if (decl_context != PARM
11179 && decl_context != TYPENAME
11180 && !typedef_p
11181 && declarator->parenthesized != UNKNOWN_LOCATION
11182 /* If the type is class-like and the inner name used a
11183 global namespace qualifier, we need the parens.
11184 Unfortunately all we can tell is whether a qualified name
11185 was used or not. */
11186 && !(inner_declarator
11187 && inner_declarator->kind == cdk_id
11188 && inner_declarator->u.id.qualifying_scope
11189 && (MAYBE_CLASS_TYPE_P (type)
11190 || TREE_CODE (type) == ENUMERAL_TYPE)))
11191 warning_at (declarator->parenthesized, OPT_Wparentheses,
11192 "unnecessary parentheses in declaration of %qs", name);
11193 if (declarator->kind == cdk_id || declarator->kind == cdk_decomp)
11194 break;
11196 switch (declarator->kind)
11198 case cdk_array:
11199 type = create_array_type_for_decl (dname, type,
11200 declarator->u.array.bounds);
11201 if (!valid_array_size_p (input_location, type, dname))
11202 type = error_mark_node;
11204 if (declarator->std_attributes)
11205 /* [dcl.array]/1:
11207 The optional attribute-specifier-seq appertains to the
11208 array. */
11209 returned_attrs = chainon (returned_attrs,
11210 declarator->std_attributes);
11211 break;
11213 case cdk_function:
11215 tree arg_types;
11216 int funcdecl_p;
11218 /* Declaring a function type. */
11220 input_location = declspecs->locations[ds_type_spec];
11221 abstract_virtuals_error (ACU_RETURN, type);
11222 input_location = saved_loc;
11224 /* Pick up type qualifiers which should be applied to `this'. */
11225 memfn_quals = declarator->u.function.qualifiers;
11226 /* Pick up virt-specifiers. */
11227 virt_specifiers = declarator->u.function.virt_specifiers;
11228 /* And ref-qualifier, too */
11229 rqual = declarator->u.function.ref_qualifier;
11230 /* And tx-qualifier. */
11231 tree tx_qual = declarator->u.function.tx_qualifier;
11232 /* Pick up the exception specifications. */
11233 raises = declarator->u.function.exception_specification;
11234 /* If the exception-specification is ill-formed, let's pretend
11235 there wasn't one. */
11236 if (raises == error_mark_node)
11237 raises = NULL_TREE;
11239 if (reqs)
11240 error_at (location_of (reqs), "requires-clause on return type");
11241 reqs = declarator->u.function.requires_clause;
11243 /* Say it's a definition only for the CALL_EXPR
11244 closest to the identifier. */
11245 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
11247 /* Handle a late-specified return type. */
11248 tree late_return_type = declarator->u.function.late_return_type;
11249 if (funcdecl_p
11250 /* This is the case e.g. for
11251 using T = auto () -> int. */
11252 || inner_declarator == NULL)
11254 if (tree auto_node = type_uses_auto (type))
11256 if (!late_return_type)
11258 if (current_class_type
11259 && LAMBDA_TYPE_P (current_class_type))
11260 /* OK for C++11 lambdas. */;
11261 else if (cxx_dialect < cxx14)
11263 error ("%qs function uses "
11264 "%<auto%> type specifier without trailing "
11265 "return type", name);
11266 inform (input_location, "deduced return type "
11267 "only available with -std=c++14 or "
11268 "-std=gnu++14");
11270 else if (virtualp)
11272 error ("virtual function cannot "
11273 "have deduced return type");
11274 virtualp = false;
11277 else if (!is_auto (type) && sfk != sfk_conversion)
11279 error ("%qs function with trailing return type has"
11280 " %qT as its type rather than plain %<auto%>",
11281 name, type);
11282 return error_mark_node;
11284 else if (is_auto (type) && AUTO_IS_DECLTYPE (type))
11286 if (funcdecl_p)
11287 error ("%qs function with trailing return type has "
11288 "%<decltype(auto)%> as its type rather than "
11289 "plain %<auto%>", name);
11290 else
11291 error ("invalid use of %<decltype(auto)%>");
11292 return error_mark_node;
11294 tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node);
11295 if (!tmpl)
11296 if (tree late_auto = type_uses_auto (late_return_type))
11297 tmpl = CLASS_PLACEHOLDER_TEMPLATE (late_auto);
11298 if (tmpl)
11300 if (!dguide_name_p (unqualified_id))
11302 error_at (declarator->id_loc, "deduced class "
11303 "type %qD in function return type",
11304 DECL_NAME (tmpl));
11305 inform (DECL_SOURCE_LOCATION (tmpl),
11306 "%qD declared here", tmpl);
11307 return error_mark_node;
11309 else if (!late_return_type)
11311 error_at (declarator->id_loc, "deduction guide "
11312 "for %qT must have trailing return "
11313 "type", TREE_TYPE (tmpl));
11314 inform (DECL_SOURCE_LOCATION (tmpl),
11315 "%qD declared here", tmpl);
11316 return error_mark_node;
11318 else if (CLASS_TYPE_P (late_return_type)
11319 && CLASSTYPE_TEMPLATE_INFO (late_return_type)
11320 && (CLASSTYPE_TI_TEMPLATE (late_return_type)
11321 == tmpl))
11322 /* OK */;
11323 else
11324 error ("trailing return type %qT of deduction guide "
11325 "is not a specialization of %qT",
11326 late_return_type, TREE_TYPE (tmpl));
11329 else if (late_return_type
11330 && sfk != sfk_conversion)
11332 if (cxx_dialect < cxx11)
11333 /* Not using maybe_warn_cpp0x because this should
11334 always be an error. */
11335 error ("trailing return type only available with "
11336 "-std=c++11 or -std=gnu++11");
11337 else
11338 error ("%qs function with trailing return type not "
11339 "declared with %<auto%> type specifier", name);
11340 return error_mark_node;
11343 type = splice_late_return_type (type, late_return_type);
11344 if (type == error_mark_node)
11345 return error_mark_node;
11347 if (late_return_type)
11349 late_return_type_p = true;
11350 type_quals = cp_type_quals (type);
11353 if (type_quals != TYPE_UNQUALIFIED)
11355 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
11356 warning_at (typespec_loc, OPT_Wignored_qualifiers, "type "
11357 "qualifiers ignored on function return type");
11358 /* We now know that the TYPE_QUALS don't apply to the
11359 decl, but to its return type. */
11360 type_quals = TYPE_UNQUALIFIED;
11363 /* Error about some types functions can't return. */
11365 if (TREE_CODE (type) == FUNCTION_TYPE)
11367 error_at (typespec_loc, "%qs declared as function returning "
11368 "a function", name);
11369 return error_mark_node;
11371 if (TREE_CODE (type) == ARRAY_TYPE)
11373 error_at (typespec_loc, "%qs declared as function returning "
11374 "an array", name);
11375 return error_mark_node;
11378 if (ctype == NULL_TREE
11379 && decl_context == FIELD
11380 && funcdecl_p
11381 && friendp == 0)
11382 ctype = current_class_type;
11384 if (ctype && (sfk == sfk_constructor
11385 || sfk == sfk_destructor))
11387 /* We are within a class's scope. If our declarator name
11388 is the same as the class name, and we are defining
11389 a function, then it is a constructor/destructor, and
11390 therefore returns a void type. */
11392 /* ISO C++ 12.4/2. A destructor may not be declared
11393 const or volatile. A destructor may not be static.
11394 A destructor may not be declared with ref-qualifier.
11396 ISO C++ 12.1. A constructor may not be declared
11397 const or volatile. A constructor may not be
11398 virtual. A constructor may not be static.
11399 A constructor may not be declared with ref-qualifier. */
11400 if (staticp == 2)
11401 error ((flags == DTOR_FLAG)
11402 ? G_("destructor cannot be static member function")
11403 : G_("constructor cannot be static member function"));
11404 if (memfn_quals)
11406 error ((flags == DTOR_FLAG)
11407 ? G_("destructors may not be cv-qualified")
11408 : G_("constructors may not be cv-qualified"));
11409 memfn_quals = TYPE_UNQUALIFIED;
11412 if (rqual)
11414 maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
11415 error ((flags == DTOR_FLAG)
11416 ? G_("destructors may not be ref-qualified")
11417 : G_("constructors may not be ref-qualified"));
11418 rqual = REF_QUAL_NONE;
11421 if (decl_context == FIELD
11422 && !member_function_or_else (ctype,
11423 current_class_type,
11424 flags))
11425 return error_mark_node;
11427 if (flags != DTOR_FLAG)
11429 /* It's a constructor. */
11430 if (explicitp == 1)
11431 explicitp = 2;
11432 if (virtualp)
11434 permerror (declspecs->locations[ds_virtual],
11435 "constructors cannot be declared %<virtual%>");
11436 virtualp = 0;
11438 if (decl_context == FIELD
11439 && sfk != sfk_constructor)
11440 return error_mark_node;
11442 if (decl_context == FIELD)
11443 staticp = 0;
11445 else if (friendp)
11447 if (virtualp)
11449 /* Cannot be both friend and virtual. */
11450 gcc_rich_location richloc (declspecs->locations[ds_virtual]);
11451 richloc.add_range (declspecs->locations[ds_friend]);
11452 error_at (&richloc, "virtual functions cannot be friends");
11453 friendp = 0;
11455 if (decl_context == NORMAL)
11456 error ("friend declaration not in class definition");
11457 if (current_function_decl && funcdef_flag)
11459 error ("can%'t define friend function %qs in a local "
11460 "class definition", name);
11461 friendp = 0;
11464 else if (ctype && sfk == sfk_conversion)
11466 if (explicitp == 1)
11468 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
11469 explicitp = 2;
11471 if (late_return_type_p)
11472 error ("a conversion function cannot have a trailing return type");
11474 else if (sfk == sfk_deduction_guide)
11476 if (explicitp == 1)
11477 explicitp = 2;
11480 tree pushed_scope = NULL_TREE;
11481 if (funcdecl_p
11482 && decl_context != FIELD
11483 && inner_declarator->u.id.qualifying_scope
11484 && CLASS_TYPE_P (inner_declarator->u.id.qualifying_scope))
11485 pushed_scope
11486 = push_scope (inner_declarator->u.id.qualifying_scope);
11488 arg_types = grokparms (declarator->u.function.parameters, &parms);
11490 if (pushed_scope)
11491 pop_scope (pushed_scope);
11493 if (inner_declarator
11494 && inner_declarator->kind == cdk_id
11495 && inner_declarator->u.id.sfk == sfk_destructor
11496 && arg_types != void_list_node)
11498 error ("destructors may not have parameters");
11499 arg_types = void_list_node;
11500 parms = NULL_TREE;
11503 type = build_function_type (type, arg_types);
11505 tree attrs = declarator->std_attributes;
11506 if (tx_qual)
11508 tree att = build_tree_list (tx_qual, NULL_TREE);
11509 /* transaction_safe applies to the type, but
11510 transaction_safe_dynamic applies to the function. */
11511 if (is_attribute_p ("transaction_safe", tx_qual))
11512 attrs = chainon (attrs, att);
11513 else
11514 returned_attrs = chainon (returned_attrs, att);
11516 if (attrs)
11517 /* [dcl.fct]/2:
11519 The optional attribute-specifier-seq appertains to
11520 the function type. */
11521 decl_attributes (&type, attrs, 0);
11523 if (raises)
11524 type = build_exception_variant (type, raises);
11526 break;
11528 case cdk_pointer:
11529 case cdk_reference:
11530 case cdk_ptrmem:
11531 /* Filter out pointers-to-references and references-to-references.
11532 We can get these if a TYPE_DECL is used. */
11534 if (TYPE_REF_P (type))
11536 if (declarator->kind != cdk_reference)
11538 error ("cannot declare pointer to %q#T", type);
11539 type = TREE_TYPE (type);
11542 /* In C++0x, we allow reference to reference declarations
11543 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
11544 and template type arguments [14.3.1/4 temp.arg.type]. The
11545 check for direct reference to reference declarations, which
11546 are still forbidden, occurs below. Reasoning behind the change
11547 can be found in DR106, DR540, and the rvalue reference
11548 proposals. */
11549 else if (cxx_dialect == cxx98)
11551 error ("cannot declare reference to %q#T", type);
11552 type = TREE_TYPE (type);
11555 else if (VOID_TYPE_P (type))
11557 if (declarator->kind == cdk_reference)
11558 error ("cannot declare reference to %q#T", type);
11559 else if (declarator->kind == cdk_ptrmem)
11560 error ("cannot declare pointer to %q#T member", type);
11563 /* We now know that the TYPE_QUALS don't apply to the decl,
11564 but to the target of the pointer. */
11565 type_quals = TYPE_UNQUALIFIED;
11567 /* This code used to handle METHOD_TYPE, but I don't think it's
11568 possible to get it here anymore. */
11569 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11570 if (declarator->kind == cdk_ptrmem
11571 && TREE_CODE (type) == FUNCTION_TYPE)
11573 memfn_quals |= type_memfn_quals (type);
11574 type = build_memfn_type (type,
11575 declarator->u.pointer.class_type,
11576 memfn_quals,
11577 rqual);
11578 if (type == error_mark_node)
11579 return error_mark_node;
11581 rqual = REF_QUAL_NONE;
11582 memfn_quals = TYPE_UNQUALIFIED;
11585 if (TREE_CODE (type) == FUNCTION_TYPE
11586 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
11587 || type_memfn_rqual (type) != REF_QUAL_NONE))
11588 error (declarator->kind == cdk_reference
11589 ? G_("cannot declare reference to qualified function type %qT")
11590 : G_("cannot declare pointer to qualified function type %qT"),
11591 type);
11593 /* When the pointed-to type involves components of variable size,
11594 care must be taken to ensure that the size evaluation code is
11595 emitted early enough to dominate all the possible later uses
11596 and late enough for the variables on which it depends to have
11597 been assigned.
11599 This is expected to happen automatically when the pointed-to
11600 type has a name/declaration of it's own, but special attention
11601 is required if the type is anonymous.
11603 We handle the NORMAL and FIELD contexts here by inserting a
11604 dummy statement that just evaluates the size at a safe point
11605 and ensures it is not deferred until e.g. within a deeper
11606 conditional context (c++/43555).
11608 We expect nothing to be needed here for PARM or TYPENAME.
11609 Evaluating the size at this point for TYPENAME would
11610 actually be incorrect, as we might be in the middle of an
11611 expression with side effects on the pointed-to type size
11612 "arguments" prior to the pointer declaration point and the
11613 size evaluation could end up prior to the side effects. */
11615 if (!TYPE_NAME (type)
11616 && (decl_context == NORMAL || decl_context == FIELD)
11617 && at_function_scope_p ()
11618 && variably_modified_type_p (type, NULL_TREE))
11620 TYPE_NAME (type) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
11621 NULL_TREE, type);
11622 add_decl_expr (TYPE_NAME (type));
11625 if (declarator->kind == cdk_reference)
11627 /* In C++0x, the type we are creating a reference to might be
11628 a typedef which is itself a reference type. In that case,
11629 we follow the reference collapsing rules in
11630 [7.1.3/8 dcl.typedef] to create the final reference type:
11632 "If a typedef TD names a type that is a reference to a type
11633 T, an attempt to create the type 'lvalue reference to cv TD'
11634 creates the type 'lvalue reference to T,' while an attempt
11635 to create the type "rvalue reference to cv TD' creates the
11636 type TD."
11638 if (VOID_TYPE_P (type))
11639 /* We already gave an error. */;
11640 else if (TYPE_REF_P (type))
11642 if (declarator->u.reference.rvalue_ref)
11643 /* Leave type alone. */;
11644 else
11645 type = cp_build_reference_type (TREE_TYPE (type), false);
11647 else
11648 type = cp_build_reference_type
11649 (type, declarator->u.reference.rvalue_ref);
11651 /* In C++0x, we need this check for direct reference to
11652 reference declarations, which are forbidden by
11653 [8.3.2/5 dcl.ref]. Reference to reference declarations
11654 are only allowed indirectly through typedefs and template
11655 type arguments. Example:
11657 void foo(int & &); // invalid ref-to-ref decl
11659 typedef int & int_ref;
11660 void foo(int_ref &); // valid ref-to-ref decl
11662 if (inner_declarator && inner_declarator->kind == cdk_reference)
11663 error ("cannot declare reference to %q#T, which is not "
11664 "a typedef or a template type argument", type);
11666 else if (TREE_CODE (type) == METHOD_TYPE)
11667 type = build_ptrmemfunc_type (build_pointer_type (type));
11668 else if (declarator->kind == cdk_ptrmem)
11670 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
11671 != NAMESPACE_DECL);
11672 if (declarator->u.pointer.class_type == error_mark_node)
11673 /* We will already have complained. */
11674 type = error_mark_node;
11675 else
11676 type = build_ptrmem_type (declarator->u.pointer.class_type,
11677 type);
11679 else
11680 type = build_pointer_type (type);
11682 /* Process a list of type modifier keywords (such as
11683 const or volatile) that were given inside the `*' or `&'. */
11685 if (declarator->u.pointer.qualifiers)
11687 type
11688 = cp_build_qualified_type (type,
11689 declarator->u.pointer.qualifiers);
11690 type_quals = cp_type_quals (type);
11693 /* Apply C++11 attributes to the pointer, and not to the
11694 type pointed to. This is unlike what is done for GNU
11695 attributes above. It is to comply with [dcl.ptr]/1:
11697 [the optional attribute-specifier-seq (7.6.1) appertains
11698 to the pointer and not to the object pointed to]. */
11699 if (declarator->std_attributes)
11700 decl_attributes (&type, declarator->std_attributes,
11703 ctype = NULL_TREE;
11704 break;
11706 case cdk_error:
11707 break;
11709 default:
11710 gcc_unreachable ();
11714 /* A `constexpr' specifier used in an object declaration declares
11715 the object as `const'. */
11716 if (constexpr_p && innermost_code != cdk_function)
11718 /* DR1688 says that a `constexpr' specifier in combination with
11719 `volatile' is valid. */
11721 if (!TYPE_REF_P (type))
11723 type_quals |= TYPE_QUAL_CONST;
11724 type = cp_build_qualified_type (type, type_quals);
11728 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
11729 && TREE_CODE (type) != FUNCTION_TYPE
11730 && TREE_CODE (type) != METHOD_TYPE
11731 && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
11733 error ("template-id %qD used as a declarator",
11734 unqualified_id);
11735 unqualified_id = dname;
11738 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
11739 qualified with a class-name, turn it into a METHOD_TYPE, unless
11740 we know that the function is static. We take advantage of this
11741 opportunity to do other processing that pertains to entities
11742 explicitly declared to be class members. Note that if DECLARATOR
11743 is non-NULL, we know it is a cdk_id declarator; otherwise, we
11744 would not have exited the loop above. */
11745 if (declarator
11746 && declarator->kind == cdk_id
11747 && declarator->u.id.qualifying_scope
11748 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
11750 ctype = declarator->u.id.qualifying_scope;
11751 ctype = TYPE_MAIN_VARIANT (ctype);
11752 template_count = num_template_headers_for_class (ctype);
11754 if (ctype == current_class_type)
11756 if (friendp)
11758 permerror (input_location, "member functions are implicitly "
11759 "friends of their class");
11760 friendp = 0;
11762 else
11763 permerror (declarator->id_loc,
11764 "extra qualification %<%T::%> on member %qs",
11765 ctype, name);
11767 else if (/* If the qualifying type is already complete, then we
11768 can skip the following checks. */
11769 !COMPLETE_TYPE_P (ctype)
11770 && (/* If the function is being defined, then
11771 qualifying type must certainly be complete. */
11772 funcdef_flag
11773 /* A friend declaration of "T::f" is OK, even if
11774 "T" is a template parameter. But, if this
11775 function is not a friend, the qualifying type
11776 must be a class. */
11777 || (!friendp && !CLASS_TYPE_P (ctype))
11778 /* For a declaration, the type need not be
11779 complete, if either it is dependent (since there
11780 is no meaningful definition of complete in that
11781 case) or the qualifying class is currently being
11782 defined. */
11783 || !(dependent_type_p (ctype)
11784 || currently_open_class (ctype)))
11785 /* Check that the qualifying type is complete. */
11786 && !complete_type_or_else (ctype, NULL_TREE))
11787 return error_mark_node;
11788 else if (TREE_CODE (type) == FUNCTION_TYPE)
11790 if (current_class_type
11791 && (!friendp || funcdef_flag || initialized))
11793 error (funcdef_flag || initialized
11794 ? G_("cannot define member function %<%T::%s%> "
11795 "within %qT")
11796 : G_("cannot declare member function %<%T::%s%> "
11797 "within %qT"),
11798 ctype, name, current_class_type);
11799 return error_mark_node;
11802 else if (typedef_p && current_class_type)
11804 error ("cannot declare member %<%T::%s%> within %qT",
11805 ctype, name, current_class_type);
11806 return error_mark_node;
11810 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
11811 ctype = current_class_type;
11813 /* Now TYPE has the actual type. */
11815 if (returned_attrs)
11817 if (attrlist)
11818 *attrlist = chainon (returned_attrs, *attrlist);
11819 else
11820 attrlist = &returned_attrs;
11823 if (declarator
11824 && declarator->kind == cdk_id
11825 && declarator->std_attributes
11826 && attrlist != NULL)
11828 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
11829 a declarator-id appertains to the entity that is declared. */
11830 if (declarator->std_attributes != error_mark_node)
11831 *attrlist = chainon (*attrlist, declarator->std_attributes);
11832 else
11833 /* We should have already diagnosed the issue (c++/78344). */
11834 gcc_assert (seen_error ());
11837 /* Handle parameter packs. */
11838 if (parameter_pack_p)
11840 if (decl_context == PARM)
11841 /* Turn the type into a pack expansion.*/
11842 type = make_pack_expansion (type);
11843 else
11844 error ("non-parameter %qs cannot be a parameter pack", name);
11847 if ((decl_context == FIELD || decl_context == PARM)
11848 && !processing_template_decl
11849 && variably_modified_type_p (type, NULL_TREE))
11851 if (decl_context == FIELD)
11852 error ("data member may not have variably modified type %qT", type);
11853 else
11854 error ("parameter may not have variably modified type %qT", type);
11855 type = error_mark_node;
11858 if (explicitp == 1 || (explicitp && friendp))
11860 /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
11861 in the declaration of a constructor or conversion function within
11862 a class definition. */
11863 if (!current_class_type)
11864 error_at (declspecs->locations[ds_explicit],
11865 "%<explicit%> outside class declaration");
11866 else if (friendp)
11867 error_at (declspecs->locations[ds_explicit],
11868 "%<explicit%> in friend declaration");
11869 else
11870 error_at (declspecs->locations[ds_explicit],
11871 "only declarations of constructors and conversion operators "
11872 "can be %<explicit%>");
11873 explicitp = 0;
11876 if (storage_class == sc_mutable)
11878 if (decl_context != FIELD || friendp)
11880 error ("non-member %qs cannot be declared %<mutable%>", name);
11881 storage_class = sc_none;
11883 else if (decl_context == TYPENAME || typedef_p)
11885 error ("non-object member %qs cannot be declared %<mutable%>", name);
11886 storage_class = sc_none;
11888 else if (TREE_CODE (type) == FUNCTION_TYPE
11889 || TREE_CODE (type) == METHOD_TYPE)
11891 error ("function %qs cannot be declared %<mutable%>", name);
11892 storage_class = sc_none;
11894 else if (staticp)
11896 error ("static %qs cannot be declared %<mutable%>", name);
11897 storage_class = sc_none;
11899 else if (type_quals & TYPE_QUAL_CONST)
11901 error ("const %qs cannot be declared %<mutable%>", name);
11902 storage_class = sc_none;
11904 else if (TYPE_REF_P (type))
11906 permerror (input_location, "reference %qs cannot be declared "
11907 "%<mutable%>", name);
11908 storage_class = sc_none;
11912 /* If this is declaring a typedef name, return a TYPE_DECL. */
11913 if (typedef_p && decl_context != TYPENAME)
11915 tree decl;
11917 /* This declaration:
11919 typedef void f(int) const;
11921 declares a function type which is not a member of any
11922 particular class, but which is cv-qualified; for
11923 example "f S::*" declares a pointer to a const-qualified
11924 member function of S. We record the cv-qualification in the
11925 function type. */
11926 if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
11928 type = apply_memfn_quals (type, memfn_quals, rqual);
11930 /* We have now dealt with these qualifiers. */
11931 memfn_quals = TYPE_UNQUALIFIED;
11932 rqual = REF_QUAL_NONE;
11935 if (type_uses_auto (type))
11937 error ("typedef declared %<auto%>");
11938 type = error_mark_node;
11941 if (reqs)
11942 error_at (location_of (reqs), "requires-clause on typedef");
11944 if (id_declarator && declarator->u.id.qualifying_scope)
11946 error ("typedef name may not be a nested-name-specifier");
11947 type = error_mark_node;
11950 if (decl_context == FIELD)
11951 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
11952 else
11953 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
11955 if (decl_context != FIELD)
11957 if (!current_function_decl)
11958 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
11959 else if (DECL_MAYBE_IN_CHARGE_CDTOR_P (current_function_decl))
11960 /* The TYPE_DECL is "abstract" because there will be
11961 clones of this constructor/destructor, and there will
11962 be copies of this TYPE_DECL generated in those
11963 clones. The decloning optimization (for space) may
11964 revert this subsequently if it determines that
11965 the clones should share a common implementation. */
11966 DECL_ABSTRACT_P (decl) = true;
11968 else if (current_class_type
11969 && constructor_name_p (unqualified_id, current_class_type))
11970 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
11971 "as enclosing class",
11972 unqualified_id);
11974 /* If the user declares "typedef struct {...} foo" then the
11975 struct will have an anonymous name. Fill that name in now.
11976 Nothing can refer to it, so nothing needs know about the name
11977 change. */
11978 if (type != error_mark_node
11979 && unqualified_id
11980 && TYPE_NAME (type)
11981 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11982 && TYPE_UNNAMED_P (type)
11983 && declspecs->type_definition_p
11984 && attributes_naming_typedef_ok (*attrlist)
11985 && cp_type_quals (type) == TYPE_UNQUALIFIED)
11986 name_unnamed_type (type, decl);
11988 if (signed_p
11989 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11990 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11992 bad_specifiers (decl, BSP_TYPE, virtualp,
11993 memfn_quals != TYPE_UNQUALIFIED,
11994 inlinep, friendp, raises != NULL_TREE,
11995 declspecs->locations);
11997 if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
11998 /* Acknowledge that this was written:
11999 `using analias = atype;'. */
12000 TYPE_DECL_ALIAS_P (decl) = 1;
12002 return decl;
12005 /* Detect the case of an array type of unspecified size
12006 which came, as such, direct from a typedef name.
12007 We must copy the type, so that the array's domain can be
12008 individually set by the object's initializer. */
12010 if (type && typedef_type
12011 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
12012 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
12013 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
12015 /* Detect where we're using a typedef of function type to declare a
12016 function. PARMS will not be set, so we must create it now. */
12018 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
12020 tree decls = NULL_TREE;
12021 tree args;
12023 for (args = TYPE_ARG_TYPES (type);
12024 args && args != void_list_node;
12025 args = TREE_CHAIN (args))
12027 tree decl = cp_build_parm_decl (NULL_TREE, NULL_TREE,
12028 TREE_VALUE (args));
12030 DECL_CHAIN (decl) = decls;
12031 decls = decl;
12034 parms = nreverse (decls);
12036 if (decl_context != TYPENAME)
12038 /* The qualifiers on the function type become the qualifiers on
12039 the non-static member function. */
12040 memfn_quals |= type_memfn_quals (type);
12041 rqual = type_memfn_rqual (type);
12042 type_quals = TYPE_UNQUALIFIED;
12046 /* If this is a type name (such as, in a cast or sizeof),
12047 compute the type and return it now. */
12049 if (decl_context == TYPENAME)
12051 /* Note that here we don't care about type_quals. */
12053 /* Special case: "friend class foo" looks like a TYPENAME context. */
12054 if (friendp)
12056 if (inlinep)
12058 error ("%<inline%> specified for friend class declaration");
12059 inlinep = 0;
12062 if (!current_aggr)
12064 /* Don't allow friend declaration without a class-key. */
12065 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
12066 permerror (input_location, "template parameters cannot be friends");
12067 else if (TREE_CODE (type) == TYPENAME_TYPE)
12068 permerror (input_location, "friend declaration requires class-key, "
12069 "i.e. %<friend class %T::%D%>",
12070 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
12071 else
12072 permerror (input_location, "friend declaration requires class-key, "
12073 "i.e. %<friend %#T%>",
12074 type);
12077 /* Only try to do this stuff if we didn't already give up. */
12078 if (type != integer_type_node)
12080 /* A friendly class? */
12081 if (current_class_type)
12082 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
12083 /*complain=*/true);
12084 else
12085 error ("trying to make class %qT a friend of global scope",
12086 type);
12088 type = void_type_node;
12091 else if (memfn_quals || rqual)
12093 if (ctype == NULL_TREE
12094 && TREE_CODE (type) == METHOD_TYPE)
12095 ctype = TYPE_METHOD_BASETYPE (type);
12097 if (ctype)
12098 type = build_memfn_type (type, ctype, memfn_quals, rqual);
12099 /* Core issue #547: need to allow this in template type args.
12100 Allow it in general in C++11 for alias-declarations. */
12101 else if ((template_type_arg || cxx_dialect >= cxx11)
12102 && TREE_CODE (type) == FUNCTION_TYPE)
12103 type = apply_memfn_quals (type, memfn_quals, rqual);
12104 else
12105 error ("invalid qualifiers on non-member function type");
12108 if (reqs)
12109 error_at (location_of (reqs), "requires-clause on type-id");
12111 return type;
12113 else if (unqualified_id == NULL_TREE && decl_context != PARM
12114 && decl_context != CATCHPARM
12115 && TREE_CODE (type) != UNION_TYPE
12116 && ! bitfield
12117 && innermost_code != cdk_decomp)
12119 error ("abstract declarator %qT used as declaration", type);
12120 return error_mark_node;
12123 if (!FUNC_OR_METHOD_TYPE_P (type))
12125 /* Only functions may be declared using an operator-function-id. */
12126 if (dname && IDENTIFIER_ANY_OP_P (dname))
12128 error ("declaration of %qD as non-function", dname);
12129 return error_mark_node;
12132 if (reqs)
12133 error_at (location_of (reqs),
12134 "requires-clause on declaration of non-function type %qT",
12135 type);
12138 /* We don't check parameter types here because we can emit a better
12139 error message later. */
12140 if (decl_context != PARM)
12142 type = check_var_type (unqualified_id, type);
12143 if (type == error_mark_node)
12144 return error_mark_node;
12147 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
12148 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
12150 if (decl_context == PARM || decl_context == CATCHPARM)
12152 if (ctype || in_namespace)
12153 error ("cannot use %<::%> in parameter declaration");
12155 if (type_uses_auto (type)
12156 && !(cxx_dialect >= cxx17 && template_parm_flag))
12158 if (cxx_dialect >= cxx14)
12159 error ("%<auto%> parameter not permitted in this context");
12160 else
12161 error ("parameter declared %<auto%>");
12162 type = error_mark_node;
12165 /* A parameter declared as an array of T is really a pointer to T.
12166 One declared as a function is really a pointer to a function.
12167 One declared as a member is really a pointer to member. */
12169 if (TREE_CODE (type) == ARRAY_TYPE)
12171 /* Transfer const-ness of array into that of type pointed to. */
12172 type = build_pointer_type (TREE_TYPE (type));
12173 type_quals = TYPE_UNQUALIFIED;
12174 array_parameter_p = true;
12176 else if (TREE_CODE (type) == FUNCTION_TYPE)
12177 type = build_pointer_type (type);
12180 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
12181 && !(identifier_p (unqualified_id)
12182 && IDENTIFIER_NEWDEL_OP_P (unqualified_id)))
12184 cp_cv_quals real_quals = memfn_quals;
12185 if (cxx_dialect < cxx14 && constexpr_p
12186 && sfk != sfk_constructor && sfk != sfk_destructor)
12187 real_quals |= TYPE_QUAL_CONST;
12188 type = build_memfn_type (type, ctype, real_quals, rqual);
12192 tree decl = NULL_TREE;
12194 if (decl_context == PARM)
12196 decl = cp_build_parm_decl (NULL_TREE, unqualified_id, type);
12197 DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
12199 bad_specifiers (decl, BSP_PARM, virtualp,
12200 memfn_quals != TYPE_UNQUALIFIED,
12201 inlinep, friendp, raises != NULL_TREE,
12202 declspecs->locations);
12204 else if (decl_context == FIELD)
12206 if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE)
12207 if (tree auto_node = type_uses_auto (type))
12209 location_t loc = declspecs->locations[ds_type_spec];
12210 if (CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12211 error_at (loc, "invalid use of template-name %qE without an "
12212 "argument list",
12213 CLASS_PLACEHOLDER_TEMPLATE (auto_node));
12214 else
12215 error_at (loc, "non-static data member declared with "
12216 "placeholder %qT", auto_node);
12217 type = error_mark_node;
12220 /* The C99 flexible array extension. */
12221 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
12222 && TYPE_DOMAIN (type) == NULL_TREE)
12224 if (ctype
12225 && (TREE_CODE (ctype) == UNION_TYPE
12226 || TREE_CODE (ctype) == QUAL_UNION_TYPE))
12228 error ("flexible array member in union");
12229 type = error_mark_node;
12231 else
12233 /* Array is a flexible member. */
12234 if (in_system_header_at (input_location))
12235 /* Do not warn on flexible array members in system
12236 headers because glibc uses them. */;
12237 else if (name)
12238 pedwarn (input_location, OPT_Wpedantic,
12239 "ISO C++ forbids flexible array member %qs", name);
12240 else
12241 pedwarn (input_location, OPT_Wpedantic,
12242 "ISO C++ forbids flexible array members");
12244 /* Flexible array member has a null domain. */
12245 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
12249 if (type == error_mark_node)
12251 /* Happens when declaring arrays of sizes which
12252 are error_mark_node, for example. */
12253 decl = NULL_TREE;
12255 else if (in_namespace && !friendp)
12257 /* Something like struct S { int N::j; }; */
12258 error ("invalid use of %<::%>");
12259 return error_mark_node;
12261 else if (TREE_CODE (type) == FUNCTION_TYPE
12262 || TREE_CODE (type) == METHOD_TYPE)
12264 int publicp = 0;
12265 tree function_context;
12267 if (friendp == 0)
12269 /* This should never happen in pure C++ (the check
12270 could be an assert). It could happen in
12271 Objective-C++ if someone writes invalid code that
12272 uses a function declaration for an instance
12273 variable or property (instance variables and
12274 properties are parsed as FIELD_DECLs, but they are
12275 part of an Objective-C class, not a C++ class).
12276 That code is invalid and is caught by this
12277 check. */
12278 if (!ctype)
12280 error ("declaration of function %qD in invalid context",
12281 unqualified_id);
12282 return error_mark_node;
12285 /* ``A union may [ ... ] not [ have ] virtual functions.''
12286 ARM 9.5 */
12287 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
12289 error_at (declspecs->locations[ds_virtual],
12290 "function %qD declared %<virtual%> inside a union",
12291 unqualified_id);
12292 return error_mark_node;
12295 if (virtualp
12296 && identifier_p (unqualified_id)
12297 && IDENTIFIER_NEWDEL_OP_P (unqualified_id))
12299 error_at (declspecs->locations[ds_virtual],
12300 "%qD cannot be declared %<virtual%>, since it "
12301 "is always static", unqualified_id);
12302 virtualp = 0;
12306 /* Check that the name used for a destructor makes sense. */
12307 if (sfk == sfk_destructor)
12309 tree uqname = id_declarator->u.id.unqualified_name;
12311 if (!ctype)
12313 gcc_assert (friendp);
12314 error ("expected qualified name in friend declaration "
12315 "for destructor %qD", uqname);
12316 return error_mark_node;
12319 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
12321 error ("declaration of %qD as member of %qT",
12322 uqname, ctype);
12323 return error_mark_node;
12325 if (concept_p)
12327 error_at (declspecs->locations[ds_concept],
12328 "a destructor cannot be %<concept%>");
12329 return error_mark_node;
12331 if (constexpr_p)
12333 error_at (declspecs->locations[ds_constexpr],
12334 "a destructor cannot be %<constexpr%>");
12335 return error_mark_node;
12338 else if (sfk == sfk_constructor && friendp && !ctype)
12340 error ("expected qualified name in friend declaration "
12341 "for constructor %qD",
12342 id_declarator->u.id.unqualified_name);
12343 return error_mark_node;
12345 if (sfk == sfk_constructor)
12346 if (concept_p)
12348 error_at (declspecs->locations[ds_concept],
12349 "a constructor cannot be %<concept%>");
12350 return error_mark_node;
12352 if (concept_p)
12354 error_at (declspecs->locations[ds_concept],
12355 "a concept cannot be a member function");
12356 concept_p = false;
12359 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12361 tree tmpl = TREE_OPERAND (unqualified_id, 0);
12362 if (variable_template_p (tmpl))
12364 error ("specialization of variable template %qD "
12365 "declared as function", tmpl);
12366 inform (DECL_SOURCE_LOCATION (tmpl),
12367 "variable template declared here");
12368 return error_mark_node;
12372 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
12373 function_context = (ctype != NULL_TREE) ?
12374 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
12375 publicp = (! friendp || ! staticp)
12376 && function_context == NULL_TREE;
12378 decl = grokfndecl (ctype, type,
12379 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
12380 ? unqualified_id : dname,
12381 parms,
12382 unqualified_id,
12383 declspecs,
12384 reqs,
12385 virtualp, flags, memfn_quals, rqual, raises,
12386 friendp ? -1 : 0, friendp, publicp,
12387 inlinep | (2 * constexpr_p) | (4 * concept_p),
12388 initialized == SD_DELETED, sfk,
12389 funcdef_flag, late_return_type_p,
12390 template_count, in_namespace,
12391 attrlist, declarator->id_loc);
12392 decl = set_virt_specifiers (decl, virt_specifiers);
12393 if (decl == NULL_TREE)
12394 return error_mark_node;
12395 #if 0
12396 /* This clobbers the attrs stored in `decl' from `attrlist'. */
12397 /* The decl and setting of decl_attr is also turned off. */
12398 decl = build_decl_attribute_variant (decl, decl_attr);
12399 #endif
12401 /* [class.conv.ctor]
12403 A constructor declared without the function-specifier
12404 explicit that can be called with a single parameter
12405 specifies a conversion from the type of its first
12406 parameter to the type of its class. Such a constructor
12407 is called a converting constructor. */
12408 if (explicitp == 2)
12409 DECL_NONCONVERTING_P (decl) = 1;
12411 else if (!staticp && !dependent_type_p (type)
12412 && !COMPLETE_TYPE_P (complete_type (type))
12413 && (!complete_or_array_type_p (type)
12414 || initialized == 0))
12416 if (TREE_CODE (type) != ARRAY_TYPE
12417 || !COMPLETE_TYPE_P (TREE_TYPE (type)))
12419 if (unqualified_id)
12421 error ("field %qD has incomplete type %qT",
12422 unqualified_id, type);
12423 cxx_incomplete_type_inform (strip_array_types (type));
12425 else
12426 error ("name %qT has incomplete type", type);
12428 type = error_mark_node;
12429 decl = NULL_TREE;
12432 else
12434 if (friendp)
12436 error ("%qE is neither function nor member function; "
12437 "cannot be declared friend", unqualified_id);
12438 return error_mark_node;
12440 decl = NULL_TREE;
12443 if (friendp)
12445 /* Friends are treated specially. */
12446 if (ctype == current_class_type)
12447 ; /* We already issued a permerror. */
12448 else if (decl && DECL_NAME (decl))
12450 if (template_class_depth (current_class_type) == 0)
12452 decl = check_explicit_specialization
12453 (unqualified_id, decl, template_count,
12454 2 * funcdef_flag + 4);
12455 if (decl == error_mark_node)
12456 return error_mark_node;
12459 decl = do_friend (ctype, unqualified_id, decl,
12460 *attrlist, flags,
12461 funcdef_flag);
12462 return decl;
12464 else
12465 return error_mark_node;
12468 /* Structure field. It may not be a function, except for C++. */
12470 if (decl == NULL_TREE)
12472 if (staticp)
12474 /* C++ allows static class members. All other work
12475 for this is done by grokfield. */
12476 decl = build_lang_decl_loc (declarator
12477 ? declarator->id_loc
12478 : input_location,
12479 VAR_DECL, unqualified_id, type);
12480 set_linkage_for_static_data_member (decl);
12481 if (concept_p)
12482 error_at (declspecs->locations[ds_concept],
12483 "static data member %qE declared %<concept%>",
12484 unqualified_id);
12485 else if (constexpr_p && !initialized)
12487 error ("%<constexpr%> static data member %qD must have an "
12488 "initializer", decl);
12489 constexpr_p = false;
12492 if (inlinep)
12493 mark_inline_variable (decl, declspecs->locations[ds_inline]);
12495 if (!DECL_VAR_DECLARED_INLINE_P (decl)
12496 && !(cxx_dialect >= cxx17 && constexpr_p))
12497 /* Even if there is an in-class initialization, DECL
12498 is considered undefined until an out-of-class
12499 definition is provided, unless this is an inline
12500 variable. */
12501 DECL_EXTERNAL (decl) = 1;
12503 if (thread_p)
12505 CP_DECL_THREAD_LOCAL_P (decl) = true;
12506 if (!processing_template_decl)
12507 set_decl_tls_model (decl, decl_default_tls_model (decl));
12508 if (declspecs->gnu_thread_keyword_p)
12509 SET_DECL_GNU_TLS_P (decl);
12512 else
12514 if (concept_p)
12515 error_at (declspecs->locations[ds_concept],
12516 "non-static data member %qE declared %<concept%>",
12517 unqualified_id);
12518 else if (constexpr_p)
12520 error_at (declspecs->locations[ds_constexpr],
12521 "non-static data member %qE declared %<constexpr%>",
12522 unqualified_id);
12523 constexpr_p = false;
12525 decl = build_decl (input_location,
12526 FIELD_DECL, unqualified_id, type);
12527 DECL_NONADDRESSABLE_P (decl) = bitfield;
12528 if (bitfield && !unqualified_id)
12530 TREE_NO_WARNING (decl) = 1;
12531 DECL_PADDING_P (decl) = 1;
12534 if (storage_class == sc_mutable)
12536 DECL_MUTABLE_P (decl) = 1;
12537 storage_class = sc_none;
12540 if (initialized)
12542 /* An attempt is being made to initialize a non-static
12543 member. This is new in C++11. */
12544 maybe_warn_cpp0x (CPP0X_NSDMI);
12546 /* If this has been parsed with static storage class, but
12547 errors forced staticp to be cleared, ensure NSDMI is
12548 not present. */
12549 if (declspecs->storage_class == sc_static)
12550 DECL_INITIAL (decl) = error_mark_node;
12554 bad_specifiers (decl, BSP_FIELD, virtualp,
12555 memfn_quals != TYPE_UNQUALIFIED,
12556 staticp ? false : inlinep, friendp,
12557 raises != NULL_TREE,
12558 declspecs->locations);
12561 else if (TREE_CODE (type) == FUNCTION_TYPE
12562 || TREE_CODE (type) == METHOD_TYPE)
12564 tree original_name;
12565 int publicp = 0;
12567 if (!unqualified_id)
12568 return error_mark_node;
12570 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12571 original_name = dname;
12572 else
12573 original_name = unqualified_id;
12574 // FIXME:gcc_assert (original_name == dname);
12576 if (storage_class == sc_auto)
12577 error ("storage class %<auto%> invalid for function %qs", name);
12578 else if (storage_class == sc_register)
12579 error ("storage class %<register%> invalid for function %qs", name);
12580 else if (thread_p)
12582 if (declspecs->gnu_thread_keyword_p)
12583 error_at (declspecs->locations[ds_thread],
12584 "storage class %<__thread%> invalid for function %qs",
12585 name);
12586 else
12587 error_at (declspecs->locations[ds_thread],
12588 "storage class %<thread_local%> invalid for "
12589 "function %qs", name);
12592 if (virt_specifiers)
12593 error ("virt-specifiers in %qs not allowed outside a class "
12594 "definition", name);
12595 /* Function declaration not at top level.
12596 Storage classes other than `extern' are not allowed
12597 and `extern' makes no difference. */
12598 if (! toplevel_bindings_p ()
12599 && (storage_class == sc_static
12600 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
12601 && pedantic)
12603 if (storage_class == sc_static)
12604 pedwarn (declspecs->locations[ds_storage_class], OPT_Wpedantic,
12605 "%<static%> specifier invalid for function %qs "
12606 "declared out of global scope", name);
12607 else
12608 pedwarn (declspecs->locations[ds_inline], OPT_Wpedantic,
12609 "%<inline%> specifier invalid for function %qs "
12610 "declared out of global scope", name);
12613 if (ctype == NULL_TREE)
12615 if (virtualp)
12617 error ("virtual non-class function %qs", name);
12618 virtualp = 0;
12620 else if (sfk == sfk_constructor
12621 || sfk == sfk_destructor)
12623 error (funcdef_flag
12624 ? G_("%qs defined in a non-class scope")
12625 : G_("%qs declared in a non-class scope"), name);
12626 sfk = sfk_none;
12630 /* Record whether the function is public. */
12631 publicp = (ctype != NULL_TREE
12632 || storage_class != sc_static);
12634 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
12635 declspecs,
12636 reqs, virtualp, flags, memfn_quals, rqual, raises,
12637 1, friendp,
12638 publicp,
12639 inlinep | (2 * constexpr_p) | (4 * concept_p),
12640 initialized == SD_DELETED,
12641 sfk,
12642 funcdef_flag,
12643 late_return_type_p,
12644 template_count, in_namespace, attrlist,
12645 declarator->id_loc);
12646 if (decl == NULL_TREE)
12647 return error_mark_node;
12649 if (explicitp == 2)
12650 DECL_NONCONVERTING_P (decl) = 1;
12651 if (staticp == 1)
12653 int invalid_static = 0;
12655 /* Don't allow a static member function in a class, and forbid
12656 declaring main to be static. */
12657 if (TREE_CODE (type) == METHOD_TYPE)
12659 permerror (input_location, "cannot declare member function %qD to have "
12660 "static linkage", decl);
12661 invalid_static = 1;
12663 else if (current_function_decl)
12665 /* 7.1.1: There can be no static function declarations within a
12666 block. */
12667 error_at (declspecs->locations[ds_storage_class],
12668 "cannot declare static function inside another function");
12669 invalid_static = 1;
12672 if (invalid_static)
12674 staticp = 0;
12675 storage_class = sc_none;
12679 else
12681 /* It's a variable. */
12683 /* An uninitialized decl with `extern' is a reference. */
12684 decl = grokvardecl (type, dname, unqualified_id,
12685 declspecs,
12686 initialized,
12687 type_quals,
12688 inlinep,
12689 concept_p,
12690 template_count,
12691 ctype ? ctype : in_namespace);
12692 if (decl == NULL_TREE)
12693 return error_mark_node;
12695 bad_specifiers (decl, BSP_VAR, virtualp,
12696 memfn_quals != TYPE_UNQUALIFIED,
12697 inlinep, friendp, raises != NULL_TREE,
12698 declspecs->locations);
12700 if (ctype)
12702 DECL_CONTEXT (decl) = ctype;
12703 if (staticp == 1)
12705 permerror (input_location, "%<static%> may not be used when defining "
12706 "(as opposed to declaring) a static data member");
12707 staticp = 0;
12708 storage_class = sc_none;
12710 if (storage_class == sc_register && TREE_STATIC (decl))
12712 error ("static member %qD declared %<register%>", decl);
12713 storage_class = sc_none;
12715 if (storage_class == sc_extern && pedantic)
12717 pedwarn (input_location, OPT_Wpedantic,
12718 "cannot explicitly declare member %q#D to have "
12719 "extern linkage", decl);
12720 storage_class = sc_none;
12723 else if (constexpr_p && DECL_EXTERNAL (decl))
12725 error ("declaration of %<constexpr%> variable %qD "
12726 "is not a definition", decl);
12727 constexpr_p = false;
12730 if (inlinep)
12731 mark_inline_variable (decl, declspecs->locations[ds_inline]);
12732 if (innermost_code == cdk_decomp)
12734 gcc_assert (declarator && declarator->kind == cdk_decomp);
12735 DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
12736 DECL_ARTIFICIAL (decl) = 1;
12737 fit_decomposition_lang_decl (decl, NULL_TREE);
12741 if (VAR_P (decl) && !initialized)
12742 if (tree auto_node = type_uses_auto (type))
12743 if (!CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12745 location_t loc = declspecs->locations[ds_type_spec];
12746 error_at (loc, "declaration of %q#D has no initializer", decl);
12747 TREE_TYPE (decl) = error_mark_node;
12750 if (storage_class == sc_extern && initialized && !funcdef_flag)
12752 if (toplevel_bindings_p ())
12754 /* It's common practice (and completely valid) to have a const
12755 be initialized and declared extern. */
12756 if (!(type_quals & TYPE_QUAL_CONST))
12757 warning (0, "%qs initialized and declared %<extern%>", name);
12759 else
12761 error ("%qs has both %<extern%> and initializer", name);
12762 return error_mark_node;
12766 /* Record `register' declaration for warnings on &
12767 and in case doing stupid register allocation. */
12769 if (storage_class == sc_register)
12771 DECL_REGISTER (decl) = 1;
12772 /* Warn about register storage specifiers on PARM_DECLs. */
12773 if (TREE_CODE (decl) == PARM_DECL)
12775 if (cxx_dialect >= cxx17)
12776 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12777 "ISO C++17 does not allow %<register%> storage "
12778 "class specifier");
12779 else
12780 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12781 "%<register%> storage class specifier used");
12784 else if (storage_class == sc_extern)
12785 DECL_THIS_EXTERN (decl) = 1;
12786 else if (storage_class == sc_static)
12787 DECL_THIS_STATIC (decl) = 1;
12789 /* Set constexpr flag on vars (functions got it in grokfndecl). */
12790 if (constexpr_p && VAR_P (decl))
12791 DECL_DECLARED_CONSTEXPR_P (decl) = true;
12793 /* Record constancy and volatility on the DECL itself . There's
12794 no need to do this when processing a template; we'll do this
12795 for the instantiated declaration based on the type of DECL. */
12796 if (!processing_template_decl)
12797 cp_apply_type_quals_to_decl (type_quals, decl);
12799 return decl;
12803 /* Subroutine of start_function. Ensure that each of the parameter
12804 types (as listed in PARMS) is complete, as is required for a
12805 function definition. */
12807 static void
12808 require_complete_types_for_parms (tree parms)
12810 for (; parms; parms = DECL_CHAIN (parms))
12812 if (dependent_type_p (TREE_TYPE (parms)))
12813 continue;
12814 if (!VOID_TYPE_P (TREE_TYPE (parms))
12815 && complete_type_or_else (TREE_TYPE (parms), parms))
12817 relayout_decl (parms);
12818 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
12820 maybe_warn_parm_abi (TREE_TYPE (parms),
12821 DECL_SOURCE_LOCATION (parms));
12823 else
12824 /* grokparms or complete_type_or_else will have already issued
12825 an error. */
12826 TREE_TYPE (parms) = error_mark_node;
12830 /* Returns nonzero if T is a local variable. */
12833 local_variable_p (const_tree t)
12835 if ((VAR_P (t)
12836 /* A VAR_DECL with a context that is a _TYPE is a static data
12837 member. */
12838 && !TYPE_P (CP_DECL_CONTEXT (t))
12839 /* Any other non-local variable must be at namespace scope. */
12840 && !DECL_NAMESPACE_SCOPE_P (t))
12841 || (TREE_CODE (t) == PARM_DECL))
12842 return 1;
12844 return 0;
12847 /* Like local_variable_p, but suitable for use as a tree-walking
12848 function. */
12850 static tree
12851 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
12852 void * /*data*/)
12854 if (local_variable_p (*tp)
12855 && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
12856 return *tp;
12857 else if (TYPE_P (*tp))
12858 *walk_subtrees = 0;
12860 return NULL_TREE;
12863 /* Check that ARG, which is a default-argument expression for a
12864 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
12865 something goes wrong. DECL may also be a _TYPE node, rather than a
12866 DECL, if there is no DECL available. */
12868 tree
12869 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
12871 tree var;
12872 tree decl_type;
12874 if (TREE_CODE (arg) == DEFAULT_ARG)
12875 /* We get a DEFAULT_ARG when looking at an in-class declaration
12876 with a default argument. Ignore the argument for now; we'll
12877 deal with it after the class is complete. */
12878 return arg;
12880 if (TYPE_P (decl))
12882 decl_type = decl;
12883 decl = NULL_TREE;
12885 else
12886 decl_type = TREE_TYPE (decl);
12888 if (arg == error_mark_node
12889 || decl == error_mark_node
12890 || TREE_TYPE (arg) == error_mark_node
12891 || decl_type == error_mark_node)
12892 /* Something already went wrong. There's no need to check
12893 further. */
12894 return error_mark_node;
12896 /* [dcl.fct.default]
12898 A default argument expression is implicitly converted to the
12899 parameter type. */
12900 ++cp_unevaluated_operand;
12901 /* Avoid digest_init clobbering the initializer. */
12902 tree carg = BRACE_ENCLOSED_INITIALIZER_P (arg) ? unshare_expr (arg): arg;
12903 perform_implicit_conversion_flags (decl_type, carg, complain,
12904 LOOKUP_IMPLICIT);
12905 --cp_unevaluated_operand;
12907 /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
12908 the call sites. */
12909 if (TYPE_PTR_OR_PTRMEM_P (decl_type)
12910 && null_ptr_cst_p (arg))
12911 return nullptr_node;
12913 /* [dcl.fct.default]
12915 Local variables shall not be used in default argument
12916 expressions.
12918 The keyword `this' shall not be used in a default argument of a
12919 member function. */
12920 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
12921 if (var)
12923 if (complain & tf_warning_or_error)
12925 if (DECL_NAME (var) == this_identifier)
12926 permerror (input_location, "default argument %qE uses %qD",
12927 arg, var);
12928 else
12929 error ("default argument %qE uses local variable %qD", arg, var);
12931 return error_mark_node;
12934 /* All is well. */
12935 return arg;
12938 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
12940 static tree
12941 type_is_deprecated (tree type)
12943 enum tree_code code;
12944 if (TREE_DEPRECATED (type))
12945 return type;
12946 if (TYPE_NAME (type))
12948 if (TREE_DEPRECATED (TYPE_NAME (type)))
12949 return type;
12950 else
12951 return NULL_TREE;
12954 /* Do warn about using typedefs to a deprecated class. */
12955 if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
12956 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
12958 code = TREE_CODE (type);
12960 if (code == POINTER_TYPE || code == REFERENCE_TYPE
12961 || code == OFFSET_TYPE || code == FUNCTION_TYPE
12962 || code == METHOD_TYPE || code == ARRAY_TYPE)
12963 return type_is_deprecated (TREE_TYPE (type));
12965 if (TYPE_PTRMEMFUNC_P (type))
12966 return type_is_deprecated
12967 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
12969 return NULL_TREE;
12972 /* Decode the list of parameter types for a function type.
12973 Given the list of things declared inside the parens,
12974 return a list of types.
12976 If this parameter does not end with an ellipsis, we append
12977 void_list_node.
12979 *PARMS is set to the chain of PARM_DECLs created. */
12981 tree
12982 grokparms (tree parmlist, tree *parms)
12984 tree result = NULL_TREE;
12985 tree decls = NULL_TREE;
12986 tree parm;
12987 int any_error = 0;
12989 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
12991 tree type = NULL_TREE;
12992 tree init = TREE_PURPOSE (parm);
12993 tree decl = TREE_VALUE (parm);
12995 if (parm == void_list_node)
12996 break;
12998 if (! decl || TREE_TYPE (decl) == error_mark_node)
12999 continue;
13001 type = TREE_TYPE (decl);
13002 if (VOID_TYPE_P (type))
13004 if (same_type_p (type, void_type_node)
13005 && !init
13006 && !DECL_NAME (decl) && !result
13007 && TREE_CHAIN (parm) == void_list_node)
13008 /* DR 577: A parameter list consisting of a single
13009 unnamed parameter of non-dependent type 'void'. */
13010 break;
13011 else if (cv_qualified_p (type))
13012 error_at (DECL_SOURCE_LOCATION (decl),
13013 "invalid use of cv-qualified type %qT in "
13014 "parameter declaration", type);
13015 else
13016 error_at (DECL_SOURCE_LOCATION (decl),
13017 "invalid use of type %<void%> in parameter "
13018 "declaration");
13019 /* It's not a good idea to actually create parameters of
13020 type `void'; other parts of the compiler assume that a
13021 void type terminates the parameter list. */
13022 type = error_mark_node;
13023 TREE_TYPE (decl) = error_mark_node;
13026 if (type != error_mark_node)
13028 if (deprecated_state != DEPRECATED_SUPPRESS)
13030 tree deptype = type_is_deprecated (type);
13031 if (deptype)
13032 cp_warn_deprecated_use (deptype);
13035 /* Top-level qualifiers on the parameters are
13036 ignored for function types. */
13037 type = cp_build_qualified_type (type, 0);
13038 if (TREE_CODE (type) == METHOD_TYPE)
13040 error ("parameter %qD invalidly declared method type", decl);
13041 type = build_pointer_type (type);
13042 TREE_TYPE (decl) = type;
13044 else if (abstract_virtuals_error (decl, type))
13045 any_error = 1; /* Seems like a good idea. */
13046 else if (cxx_dialect < cxx17 && INDIRECT_TYPE_P (type))
13048 /* Before C++17 DR 393:
13049 [dcl.fct]/6, parameter types cannot contain pointers
13050 (references) to arrays of unknown bound. */
13051 tree t = TREE_TYPE (type);
13052 int ptr = TYPE_PTR_P (type);
13054 while (1)
13056 if (TYPE_PTR_P (t))
13057 ptr = 1;
13058 else if (TREE_CODE (t) != ARRAY_TYPE)
13059 break;
13060 else if (!TYPE_DOMAIN (t))
13061 break;
13062 t = TREE_TYPE (t);
13064 if (TREE_CODE (t) == ARRAY_TYPE)
13065 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
13067 ? G_("parameter %qD includes pointer to array of "
13068 "unknown bound %qT")
13069 : G_("parameter %qD includes reference to array of "
13070 "unknown bound %qT"),
13071 decl, t);
13074 if (any_error)
13075 init = NULL_TREE;
13076 else if (init && !processing_template_decl)
13077 init = check_default_argument (decl, init, tf_warning_or_error);
13080 DECL_CHAIN (decl) = decls;
13081 decls = decl;
13082 result = tree_cons (init, type, result);
13084 decls = nreverse (decls);
13085 result = nreverse (result);
13086 if (parm)
13087 result = chainon (result, void_list_node);
13088 *parms = decls;
13090 return result;
13094 /* D is a constructor or overloaded `operator='.
13096 Let T be the class in which D is declared. Then, this function
13097 returns:
13099 -1 if D's is an ill-formed constructor or copy assignment operator
13100 whose first parameter is of type `T'.
13101 0 if D is not a copy constructor or copy assignment
13102 operator.
13103 1 if D is a copy constructor or copy assignment operator whose
13104 first parameter is a reference to non-const qualified T.
13105 2 if D is a copy constructor or copy assignment operator whose
13106 first parameter is a reference to const qualified T.
13108 This function can be used as a predicate. Positive values indicate
13109 a copy constructor and nonzero values indicate a copy assignment
13110 operator. */
13113 copy_fn_p (const_tree d)
13115 tree args;
13116 tree arg_type;
13117 int result = 1;
13119 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
13121 if (TREE_CODE (d) == TEMPLATE_DECL
13122 || (DECL_TEMPLATE_INFO (d)
13123 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
13124 /* Instantiations of template member functions are never copy
13125 functions. Note that member functions of templated classes are
13126 represented as template functions internally, and we must
13127 accept those as copy functions. */
13128 return 0;
13130 args = FUNCTION_FIRST_USER_PARMTYPE (d);
13131 if (!args)
13132 return 0;
13134 arg_type = TREE_VALUE (args);
13135 if (arg_type == error_mark_node)
13136 return 0;
13138 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
13140 /* Pass by value copy assignment operator. */
13141 result = -1;
13143 else if (TYPE_REF_P (arg_type)
13144 && !TYPE_REF_IS_RVALUE (arg_type)
13145 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
13147 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
13148 result = 2;
13150 else
13151 return 0;
13153 args = TREE_CHAIN (args);
13155 if (args && args != void_list_node && !TREE_PURPOSE (args))
13156 /* There are more non-optional args. */
13157 return 0;
13159 return result;
13162 /* D is a constructor or overloaded `operator='.
13164 Let T be the class in which D is declared. Then, this function
13165 returns true when D is a move constructor or move assignment
13166 operator, false otherwise. */
13168 bool
13169 move_fn_p (const_tree d)
13171 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
13173 if (cxx_dialect == cxx98)
13174 /* There are no move constructors if we are in C++98 mode. */
13175 return false;
13177 if (TREE_CODE (d) == TEMPLATE_DECL
13178 || (DECL_TEMPLATE_INFO (d)
13179 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
13180 /* Instantiations of template member functions are never move
13181 functions. Note that member functions of templated classes are
13182 represented as template functions internally, and we must
13183 accept those as move functions. */
13184 return 0;
13186 return move_signature_fn_p (d);
13189 /* D is a constructor or overloaded `operator='.
13191 Then, this function returns true when D has the same signature as a move
13192 constructor or move assignment operator (because either it is such a
13193 ctor/op= or it is a template specialization with the same signature),
13194 false otherwise. */
13196 bool
13197 move_signature_fn_p (const_tree d)
13199 tree args;
13200 tree arg_type;
13201 bool result = false;
13203 args = FUNCTION_FIRST_USER_PARMTYPE (d);
13204 if (!args)
13205 return 0;
13207 arg_type = TREE_VALUE (args);
13208 if (arg_type == error_mark_node)
13209 return 0;
13211 if (TYPE_REF_P (arg_type)
13212 && TYPE_REF_IS_RVALUE (arg_type)
13213 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
13214 DECL_CONTEXT (d)))
13215 result = true;
13217 args = TREE_CHAIN (args);
13219 if (args && args != void_list_node && !TREE_PURPOSE (args))
13220 /* There are more non-optional args. */
13221 return false;
13223 return result;
13226 /* Remember any special properties of member function DECL. */
13228 void
13229 grok_special_member_properties (tree decl)
13231 tree class_type;
13233 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
13234 return;
13236 class_type = DECL_CONTEXT (decl);
13237 if (IDENTIFIER_CTOR_P (DECL_NAME (decl)))
13239 int ctor = copy_fn_p (decl);
13241 if (!DECL_ARTIFICIAL (decl))
13242 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
13244 if (ctor > 0)
13246 /* [class.copy]
13248 A non-template constructor for class X is a copy
13249 constructor if its first parameter is of type X&, const
13250 X&, volatile X& or const volatile X&, and either there
13251 are no other parameters or else all other parameters have
13252 default arguments. */
13253 TYPE_HAS_COPY_CTOR (class_type) = 1;
13254 if (user_provided_p (decl))
13255 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
13256 if (ctor > 1)
13257 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
13259 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
13260 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
13261 else if (move_fn_p (decl) && user_provided_p (decl))
13262 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
13263 else if (is_list_ctor (decl))
13264 TYPE_HAS_LIST_CTOR (class_type) = 1;
13266 if (DECL_DECLARED_CONSTEXPR_P (decl)
13267 && !ctor && !move_fn_p (decl))
13268 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
13270 else if (DECL_NAME (decl) == assign_op_identifier)
13272 /* [class.copy]
13274 A non-template assignment operator for class X is a copy
13275 assignment operator if its parameter is of type X, X&, const
13276 X&, volatile X& or const volatile X&. */
13278 int assop = copy_fn_p (decl);
13280 if (assop)
13282 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
13283 if (user_provided_p (decl))
13284 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
13285 if (assop != 1)
13286 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
13288 else if (move_fn_p (decl) && user_provided_p (decl))
13289 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
13291 else if (IDENTIFIER_CONV_OP_P (DECL_NAME (decl)))
13292 TYPE_HAS_CONVERSION (class_type) = true;
13294 /* Destructors are handled in check_methods. */
13297 /* Check a constructor DECL has the correct form. Complains
13298 if the class has a constructor of the form X(X). */
13300 bool
13301 grok_ctor_properties (const_tree ctype, const_tree decl)
13303 int ctor_parm = copy_fn_p (decl);
13305 if (ctor_parm < 0)
13307 /* [class.copy]
13309 A declaration of a constructor for a class X is ill-formed if
13310 its first parameter is of type (optionally cv-qualified) X
13311 and either there are no other parameters or else all other
13312 parameters have default arguments.
13314 We *don't* complain about member template instantiations that
13315 have this form, though; they can occur as we try to decide
13316 what constructor to use during overload resolution. Since
13317 overload resolution will never prefer such a constructor to
13318 the non-template copy constructor (which is either explicitly
13319 or implicitly defined), there's no need to worry about their
13320 existence. Theoretically, they should never even be
13321 instantiated, but that's hard to forestall. */
13322 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
13323 ctype, ctype);
13324 return false;
13327 return true;
13330 /* DECL is a declaration for an overloaded or conversion operator. If
13331 COMPLAIN is true, errors are issued for invalid declarations. */
13333 bool
13334 grok_op_properties (tree decl, bool complain)
13336 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
13337 bool methodp = TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE;
13338 tree name = DECL_NAME (decl);
13339 location_t loc = DECL_SOURCE_LOCATION (decl);
13341 tree class_type = DECL_CONTEXT (decl);
13342 if (class_type && !CLASS_TYPE_P (class_type))
13343 class_type = NULL_TREE;
13345 tree_code operator_code;
13346 unsigned op_flags;
13347 if (IDENTIFIER_CONV_OP_P (name))
13349 /* Conversion operators are TYPE_EXPR for the purposes of this
13350 function. */
13351 operator_code = TYPE_EXPR;
13352 op_flags = OVL_OP_FLAG_UNARY;
13354 else
13356 const ovl_op_info_t *ovl_op = IDENTIFIER_OVL_OP_INFO (name);
13358 operator_code = ovl_op->tree_code;
13359 op_flags = ovl_op->flags;
13360 gcc_checking_assert (operator_code != ERROR_MARK);
13361 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13364 if (op_flags & OVL_OP_FLAG_ALLOC)
13366 /* operator new and operator delete are quite special. */
13367 if (class_type)
13368 switch (op_flags)
13370 case OVL_OP_FLAG_ALLOC:
13371 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
13372 break;
13374 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE:
13375 TYPE_GETS_DELETE (class_type) |= 1;
13376 break;
13378 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_VEC:
13379 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
13380 break;
13382 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE | OVL_OP_FLAG_VEC:
13383 TYPE_GETS_DELETE (class_type) |= 2;
13384 break;
13386 default:
13387 gcc_unreachable ();
13390 /* [basic.std.dynamic.allocation]/1:
13392 A program is ill-formed if an allocation function is declared
13393 in a namespace scope other than global scope or declared
13394 static in global scope.
13396 The same also holds true for deallocation functions. */
13397 if (DECL_NAMESPACE_SCOPE_P (decl))
13399 if (CP_DECL_CONTEXT (decl) != global_namespace)
13401 error_at (loc, "%qD may not be declared within a namespace",
13402 decl);
13403 return false;
13406 if (!TREE_PUBLIC (decl))
13408 error_at (loc, "%qD may not be declared as static", decl);
13409 return false;
13413 if (op_flags & OVL_OP_FLAG_DELETE)
13414 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl), loc);
13415 else
13417 DECL_IS_OPERATOR_NEW (decl) = 1;
13418 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl), loc);
13421 return true;
13424 /* An operator function must either be a non-static member function
13425 or have at least one parameter of a class, a reference to a class,
13426 an enumeration, or a reference to an enumeration. 13.4.0.6 */
13427 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
13429 if (operator_code == TYPE_EXPR
13430 || operator_code == CALL_EXPR
13431 || operator_code == COMPONENT_REF
13432 || operator_code == ARRAY_REF
13433 || operator_code == NOP_EXPR)
13435 error_at (loc, "%qD must be a nonstatic member function", decl);
13436 return false;
13439 if (DECL_STATIC_FUNCTION_P (decl))
13441 error_at (loc, "%qD must be either a non-static member "
13442 "function or a non-member function", decl);
13443 return false;
13446 for (tree arg = argtypes; ; arg = TREE_CHAIN (arg))
13448 if (!arg || arg == void_list_node)
13450 if (complain)
13451 error_at(loc, "%qD must have an argument of class or "
13452 "enumerated type", decl);
13453 return false;
13456 tree type = non_reference (TREE_VALUE (arg));
13457 if (type == error_mark_node)
13458 return false;
13460 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
13461 because these checks are performed even on template
13462 functions. */
13463 if (MAYBE_CLASS_TYPE_P (type)
13464 || TREE_CODE (type) == ENUMERAL_TYPE)
13465 break;
13469 if (operator_code == CALL_EXPR)
13470 /* There are no further restrictions on the arguments to an overloaded
13471 "operator ()". */
13472 return true;
13474 if (operator_code == COND_EXPR)
13476 /* 13.4.0.3 */
13477 error_at (loc, "ISO C++ prohibits overloading operator ?:");
13478 return false;
13481 /* Count the number of arguments and check for ellipsis. */
13482 int arity = 0;
13483 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13485 if (!arg)
13487 /* Variadic. */
13488 error_at (loc, "%qD must not have variable number of arguments",
13489 decl);
13490 return false;
13492 ++arity;
13495 /* Verify correct number of arguments. */
13496 switch (op_flags)
13498 case OVL_OP_FLAG_AMBIARY:
13499 if (arity == 1)
13501 /* We have a unary instance of an ambi-ary op. Remap to the
13502 unary one. */
13503 unsigned alt = ovl_op_alternate[ovl_op_mapping [operator_code]];
13504 const ovl_op_info_t *ovl_op = &ovl_op_info[false][alt];
13505 gcc_checking_assert (ovl_op->flags == OVL_OP_FLAG_UNARY);
13506 operator_code = ovl_op->tree_code;
13507 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13509 else if (arity != 2)
13511 /* This was an ambiguous operator but is invalid. */
13512 error_at (loc,
13513 methodp
13514 ? G_("%qD must have either zero or one argument")
13515 : G_("%qD must have either one or two arguments"), decl);
13516 return false;
13518 else if ((operator_code == POSTINCREMENT_EXPR
13519 || operator_code == POSTDECREMENT_EXPR)
13520 && ! processing_template_decl
13521 /* x++ and x--'s second argument must be an int. */
13522 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)),
13523 integer_type_node))
13525 error_at (loc,
13526 methodp
13527 ? G_("postfix %qD must have %<int%> as its argument")
13528 : G_("postfix %qD must have %<int%> as its second argument"),
13529 decl);
13530 return false;
13532 break;
13534 case OVL_OP_FLAG_UNARY:
13535 if (arity != 1)
13537 error_at (loc,
13538 methodp
13539 ? G_("%qD must have no arguments")
13540 : G_("%qD must have exactly one argument"), decl);
13541 return false;
13543 break;
13545 case OVL_OP_FLAG_BINARY:
13546 if (arity != 2)
13548 error_at (loc,
13549 methodp
13550 ? G_("%qD must have exactly one argument")
13551 : G_("%qD must have exactly two arguments"), decl);
13552 return false;
13554 break;
13556 default:
13557 gcc_unreachable ();
13560 /* There can be no default arguments. */
13561 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13562 if (TREE_PURPOSE (arg))
13564 TREE_PURPOSE (arg) = NULL_TREE;
13565 error_at (loc, "%qD cannot have default arguments", decl);
13566 return false;
13569 /* At this point the declaration is well-formed. It may not be
13570 sensible though. */
13572 /* Check member function warnings only on the in-class declaration.
13573 There's no point warning on an out-of-class definition. */
13574 if (class_type && class_type != current_class_type)
13575 return true;
13577 /* Warn about conversion operators that will never be used. */
13578 if (IDENTIFIER_CONV_OP_P (name)
13579 && ! DECL_TEMPLATE_INFO (decl)
13580 && warn_conversion)
13582 tree t = TREE_TYPE (name);
13583 int ref = TYPE_REF_P (t);
13585 if (ref)
13586 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
13588 if (VOID_TYPE_P (t))
13589 warning_at (loc, OPT_Wconversion,
13591 ? G_("conversion to a reference to void "
13592 "will never use a type conversion operator")
13593 : G_("conversion to void "
13594 "will never use a type conversion operator"));
13595 else if (class_type)
13597 if (t == class_type)
13598 warning_at (loc, OPT_Wconversion,
13600 ? G_("conversion to a reference to the same type "
13601 "will never use a type conversion operator")
13602 : G_("conversion to the same type "
13603 "will never use a type conversion operator"));
13604 /* Don't force t to be complete here. */
13605 else if (MAYBE_CLASS_TYPE_P (t)
13606 && COMPLETE_TYPE_P (t)
13607 && DERIVED_FROM_P (t, class_type))
13608 warning_at (loc, OPT_Wconversion,
13610 ? G_("conversion to a reference to a base class "
13611 "will never use a type conversion operator")
13612 : G_("conversion to a base class "
13613 "will never use a type conversion operator"));
13617 if (!warn_ecpp)
13618 return true;
13620 /* Effective C++ rules below. */
13622 /* More Effective C++ rule 7. */
13623 if (operator_code == TRUTH_ANDIF_EXPR
13624 || operator_code == TRUTH_ORIF_EXPR
13625 || operator_code == COMPOUND_EXPR)
13626 warning_at (loc, OPT_Weffc__,
13627 "user-defined %qD always evaluates both arguments", decl);
13629 /* More Effective C++ rule 6. */
13630 if (operator_code == POSTINCREMENT_EXPR
13631 || operator_code == POSTDECREMENT_EXPR
13632 || operator_code == PREINCREMENT_EXPR
13633 || operator_code == PREDECREMENT_EXPR)
13635 tree arg = TREE_VALUE (argtypes);
13636 tree ret = TREE_TYPE (TREE_TYPE (decl));
13637 if (methodp || TYPE_REF_P (arg))
13638 arg = TREE_TYPE (arg);
13639 arg = TYPE_MAIN_VARIANT (arg);
13641 if (operator_code == PREINCREMENT_EXPR
13642 || operator_code == PREDECREMENT_EXPR)
13644 if (!TYPE_REF_P (ret)
13645 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)), arg))
13646 warning_at (loc, OPT_Weffc__, "prefix %qD should return %qT", decl,
13647 build_reference_type (arg));
13649 else
13651 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
13652 warning_at (loc, OPT_Weffc__,
13653 "postfix %qD should return %qT", decl, arg);
13657 /* Effective C++ rule 23. */
13658 if (!DECL_ASSIGNMENT_OPERATOR_P (decl)
13659 && (operator_code == PLUS_EXPR
13660 || operator_code == MINUS_EXPR
13661 || operator_code == TRUNC_DIV_EXPR
13662 || operator_code == MULT_EXPR
13663 || operator_code == TRUNC_MOD_EXPR)
13664 && TYPE_REF_P (TREE_TYPE (TREE_TYPE (decl))))
13665 warning_at (loc, OPT_Weffc__, "%qD should return by value", decl);
13667 return true;
13670 /* Return a string giving the keyword associate with CODE. */
13672 static const char *
13673 tag_name (enum tag_types code)
13675 switch (code)
13677 case record_type:
13678 return "struct";
13679 case class_type:
13680 return "class";
13681 case union_type:
13682 return "union";
13683 case enum_type:
13684 return "enum";
13685 case typename_type:
13686 return "typename";
13687 default:
13688 gcc_unreachable ();
13692 /* Name lookup in an elaborated-type-specifier (after the keyword
13693 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
13694 elaborated-type-specifier is invalid, issue a diagnostic and return
13695 error_mark_node; otherwise, return the *_TYPE to which it referred.
13696 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
13698 tree
13699 check_elaborated_type_specifier (enum tag_types tag_code,
13700 tree decl,
13701 bool allow_template_p)
13703 tree type;
13705 /* In the case of:
13707 struct S { struct S *p; };
13709 name lookup will find the TYPE_DECL for the implicit "S::S"
13710 typedef. Adjust for that here. */
13711 if (DECL_SELF_REFERENCE_P (decl))
13712 decl = TYPE_NAME (TREE_TYPE (decl));
13714 type = TREE_TYPE (decl);
13716 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
13717 is false for this case as well. */
13718 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
13720 error ("using template type parameter %qT after %qs",
13721 type, tag_name (tag_code));
13722 return error_mark_node;
13724 /* Accept template template parameters. */
13725 else if (allow_template_p
13726 && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
13727 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
13729 /* [dcl.type.elab]
13731 If the identifier resolves to a typedef-name or the
13732 simple-template-id resolves to an alias template
13733 specialization, the elaborated-type-specifier is ill-formed.
13735 In other words, the only legitimate declaration to use in the
13736 elaborated type specifier is the implicit typedef created when
13737 the type is declared. */
13738 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
13739 && !DECL_SELF_REFERENCE_P (decl)
13740 && tag_code != typename_type)
13742 if (alias_template_specialization_p (type))
13743 error ("using alias template specialization %qT after %qs",
13744 type, tag_name (tag_code));
13745 else
13746 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
13747 inform (DECL_SOURCE_LOCATION (decl),
13748 "%qD has a previous declaration here", decl);
13749 return error_mark_node;
13751 else if (TREE_CODE (type) != RECORD_TYPE
13752 && TREE_CODE (type) != UNION_TYPE
13753 && tag_code != enum_type
13754 && tag_code != typename_type)
13756 error ("%qT referred to as %qs", type, tag_name (tag_code));
13757 inform (location_of (type), "%qT has a previous declaration here", type);
13758 return error_mark_node;
13760 else if (TREE_CODE (type) != ENUMERAL_TYPE
13761 && tag_code == enum_type)
13763 error ("%qT referred to as enum", type);
13764 inform (location_of (type), "%qT has a previous declaration here", type);
13765 return error_mark_node;
13767 else if (!allow_template_p
13768 && TREE_CODE (type) == RECORD_TYPE
13769 && CLASSTYPE_IS_TEMPLATE (type))
13771 /* If a class template appears as elaborated type specifier
13772 without a template header such as:
13774 template <class T> class C {};
13775 void f(class C); // No template header here
13777 then the required template argument is missing. */
13778 error ("template argument required for %<%s %T%>",
13779 tag_name (tag_code),
13780 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
13781 return error_mark_node;
13784 return type;
13787 /* Lookup NAME in elaborate type specifier in scope according to
13788 SCOPE and issue diagnostics if necessary.
13789 Return *_TYPE node upon success, NULL_TREE when the NAME is not
13790 found, and ERROR_MARK_NODE for type error. */
13792 static tree
13793 lookup_and_check_tag (enum tag_types tag_code, tree name,
13794 tag_scope scope, bool template_header_p)
13796 tree t;
13797 tree decl;
13798 if (scope == ts_global)
13800 /* First try ordinary name lookup, ignoring hidden class name
13801 injected via friend declaration. */
13802 decl = lookup_name_prefer_type (name, 2);
13803 decl = strip_using_decl (decl);
13804 /* If that fails, the name will be placed in the smallest
13805 non-class, non-function-prototype scope according to 3.3.1/5.
13806 We may already have a hidden name declared as friend in this
13807 scope. So lookup again but not ignoring hidden names.
13808 If we find one, that name will be made visible rather than
13809 creating a new tag. */
13810 if (!decl)
13811 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
13813 else
13814 decl = lookup_type_scope (name, scope);
13816 if (decl
13817 && (DECL_CLASS_TEMPLATE_P (decl)
13818 /* If scope is ts_current we're defining a class, so ignore a
13819 template template parameter. */
13820 || (scope != ts_current
13821 && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
13822 decl = DECL_TEMPLATE_RESULT (decl);
13824 if (decl && TREE_CODE (decl) == TYPE_DECL)
13826 /* Look for invalid nested type:
13827 class C {
13828 class C {};
13829 }; */
13830 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
13832 error ("%qD has the same name as the class in which it is "
13833 "declared",
13834 decl);
13835 return error_mark_node;
13838 /* Two cases we need to consider when deciding if a class
13839 template is allowed as an elaborated type specifier:
13840 1. It is a self reference to its own class.
13841 2. It comes with a template header.
13843 For example:
13845 template <class T> class C {
13846 class C *c1; // DECL_SELF_REFERENCE_P is true
13847 class D;
13849 template <class U> class C; // template_header_p is true
13850 template <class T> class C<T>::D {
13851 class C *c2; // DECL_SELF_REFERENCE_P is true
13852 }; */
13854 t = check_elaborated_type_specifier (tag_code,
13855 decl,
13856 template_header_p
13857 | DECL_SELF_REFERENCE_P (decl));
13858 if (template_header_p && t && CLASS_TYPE_P (t)
13859 && (!CLASSTYPE_TEMPLATE_INFO (t)
13860 || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))))
13862 error ("%qT is not a template", t);
13863 inform (location_of (t), "previous declaration here");
13864 if (TYPE_CLASS_SCOPE_P (t)
13865 && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t)))
13866 inform (input_location,
13867 "perhaps you want to explicitly add %<%T::%>",
13868 TYPE_CONTEXT (t));
13869 t = error_mark_node;
13872 return t;
13874 else if (decl && TREE_CODE (decl) == TREE_LIST)
13876 error ("reference to %qD is ambiguous", name);
13877 print_candidates (decl);
13878 return error_mark_node;
13880 else
13881 return NULL_TREE;
13884 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
13885 Define the tag as a forward-reference if it is not defined.
13887 If a declaration is given, process it here, and report an error if
13888 multiple declarations are not identical.
13890 SCOPE is TS_CURRENT when this is also a definition. Only look in
13891 the current frame for the name (since C++ allows new names in any
13892 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
13893 declaration. Only look beginning from the current scope outward up
13894 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
13896 TEMPLATE_HEADER_P is true when this declaration is preceded by
13897 a set of template parameters. */
13899 static tree
13900 xref_tag_1 (enum tag_types tag_code, tree name,
13901 tag_scope scope, bool template_header_p)
13903 enum tree_code code;
13904 tree context = NULL_TREE;
13906 gcc_assert (identifier_p (name));
13908 switch (tag_code)
13910 case record_type:
13911 case class_type:
13912 code = RECORD_TYPE;
13913 break;
13914 case union_type:
13915 code = UNION_TYPE;
13916 break;
13917 case enum_type:
13918 code = ENUMERAL_TYPE;
13919 break;
13920 default:
13921 gcc_unreachable ();
13924 /* In case of anonymous name, xref_tag is only called to
13925 make type node and push name. Name lookup is not required. */
13926 tree t = NULL_TREE;
13927 if (scope != ts_lambda && !anon_aggrname_p (name))
13928 t = lookup_and_check_tag (tag_code, name, scope, template_header_p);
13930 if (t == error_mark_node)
13931 return error_mark_node;
13933 if (scope != ts_current && t && current_class_type
13934 && template_class_depth (current_class_type)
13935 && template_header_p)
13937 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
13938 return t;
13940 /* Since SCOPE is not TS_CURRENT, we are not looking at a
13941 definition of this tag. Since, in addition, we are currently
13942 processing a (member) template declaration of a template
13943 class, we must be very careful; consider:
13945 template <class X> struct S1
13947 template <class U> struct S2
13949 template <class V> friend struct S1;
13952 Here, the S2::S1 declaration should not be confused with the
13953 outer declaration. In particular, the inner version should
13954 have a template parameter of level 2, not level 1.
13956 On the other hand, when presented with:
13958 template <class T> struct S1
13960 template <class U> struct S2 {};
13961 template <class U> friend struct S2;
13964 the friend must find S1::S2 eventually. We accomplish this
13965 by making sure that the new type we create to represent this
13966 declaration has the right TYPE_CONTEXT. */
13967 context = TYPE_CONTEXT (t);
13968 t = NULL_TREE;
13971 if (! t)
13973 /* If no such tag is yet defined, create a forward-reference node
13974 and record it as the "definition".
13975 When a real declaration of this type is found,
13976 the forward-reference will be altered into a real type. */
13977 if (code == ENUMERAL_TYPE)
13979 error ("use of enum %q#D without previous declaration", name);
13980 return error_mark_node;
13982 else
13984 t = make_class_type (code);
13985 TYPE_CONTEXT (t) = context;
13986 if (scope == ts_lambda)
13988 /* Mark it as a lambda type. */
13989 CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
13990 /* And push it into current scope. */
13991 scope = ts_current;
13993 t = pushtag (name, t, scope);
13996 else
13998 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
14000 /* Check that we aren't trying to overload a class with different
14001 constraints. */
14002 tree constr = NULL_TREE;
14003 if (current_template_parms)
14005 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
14006 constr = build_constraints (reqs, NULL_TREE);
14008 if (!redeclare_class_template (t, current_template_parms, constr))
14009 return error_mark_node;
14011 else if (!processing_template_decl
14012 && CLASS_TYPE_P (t)
14013 && CLASSTYPE_IS_TEMPLATE (t))
14015 error ("redeclaration of %qT as a non-template", t);
14016 inform (location_of (t), "previous declaration %qD", t);
14017 return error_mark_node;
14020 if (scope != ts_within_enclosing_non_class && TYPE_HIDDEN_P (t))
14022 /* This is no longer an invisible friend. Make it
14023 visible. */
14024 tree decl = TYPE_NAME (t);
14026 DECL_ANTICIPATED (decl) = false;
14027 DECL_FRIEND_P (decl) = false;
14029 if (TYPE_TEMPLATE_INFO (t))
14031 tree tmpl = TYPE_TI_TEMPLATE (t);
14032 DECL_ANTICIPATED (tmpl) = false;
14033 DECL_FRIEND_P (tmpl) = false;
14038 return t;
14041 /* Wrapper for xref_tag_1. */
14043 tree
14044 xref_tag (enum tag_types tag_code, tree name,
14045 tag_scope scope, bool template_header_p)
14047 tree ret;
14048 bool subtime;
14049 subtime = timevar_cond_start (TV_NAME_LOOKUP);
14050 ret = xref_tag_1 (tag_code, name, scope, template_header_p);
14051 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
14052 return ret;
14056 tree
14057 xref_tag_from_type (tree old, tree id, tag_scope scope)
14059 enum tag_types tag_kind;
14061 if (TREE_CODE (old) == RECORD_TYPE)
14062 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
14063 else
14064 tag_kind = union_type;
14066 if (id == NULL_TREE)
14067 id = TYPE_IDENTIFIER (old);
14069 return xref_tag (tag_kind, id, scope, false);
14072 /* Create the binfo hierarchy for REF with (possibly NULL) base list
14073 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
14074 access_* node, and the TREE_VALUE is the type of the base-class.
14075 Non-NULL TREE_TYPE indicates virtual inheritance. */
14077 void
14078 xref_basetypes (tree ref, tree base_list)
14080 tree *basep;
14081 tree binfo, base_binfo;
14082 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
14083 unsigned max_bases = 0; /* Maximum direct bases. */
14084 unsigned max_dvbases = 0; /* Maximum direct virtual bases. */
14085 int i;
14086 tree default_access;
14087 tree igo_prev; /* Track Inheritance Graph Order. */
14089 if (ref == error_mark_node)
14090 return;
14092 /* The base of a derived class is private by default, all others are
14093 public. */
14094 default_access = (TREE_CODE (ref) == RECORD_TYPE
14095 && CLASSTYPE_DECLARED_CLASS (ref)
14096 ? access_private_node : access_public_node);
14098 /* First, make sure that any templates in base-classes are
14099 instantiated. This ensures that if we call ourselves recursively
14100 we do not get confused about which classes are marked and which
14101 are not. */
14102 basep = &base_list;
14103 while (*basep)
14105 tree basetype = TREE_VALUE (*basep);
14107 /* The dependent_type_p call below should really be dependent_scope_p
14108 so that we give a hard error about using an incomplete type as a
14109 base, but we allow it with a pedwarn for backward
14110 compatibility. */
14111 if (processing_template_decl
14112 && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
14113 cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
14114 if (!dependent_type_p (basetype)
14115 && !complete_type_or_else (basetype, NULL))
14116 /* An incomplete type. Remove it from the list. */
14117 *basep = TREE_CHAIN (*basep);
14118 else
14120 max_bases++;
14121 if (TREE_TYPE (*basep))
14122 max_dvbases++;
14123 if (CLASS_TYPE_P (basetype))
14124 max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
14125 basep = &TREE_CHAIN (*basep);
14128 max_vbases += max_dvbases;
14130 TYPE_MARKED_P (ref) = 1;
14132 /* The binfo slot should be empty, unless this is an (ill-formed)
14133 redefinition. */
14134 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
14136 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
14138 binfo = make_tree_binfo (max_bases);
14140 TYPE_BINFO (ref) = binfo;
14141 BINFO_OFFSET (binfo) = size_zero_node;
14142 BINFO_TYPE (binfo) = ref;
14144 /* Apply base-class info set up to the variants of this type. */
14145 fixup_type_variants (ref);
14147 if (max_bases)
14149 vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
14150 /* A C++98 POD cannot have base classes. */
14151 CLASSTYPE_NON_LAYOUT_POD_P (ref) = true;
14153 if (TREE_CODE (ref) == UNION_TYPE)
14155 error ("derived union %qT invalid", ref);
14156 return;
14160 if (max_bases > 1)
14161 warning (OPT_Wmultiple_inheritance,
14162 "%qT defined with multiple direct bases", ref);
14164 if (max_vbases)
14166 /* An aggregate can't have virtual base classes. */
14167 CLASSTYPE_NON_AGGREGATE (ref) = true;
14169 vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
14171 if (max_dvbases)
14172 warning (OPT_Wvirtual_inheritance,
14173 "%qT defined with direct virtual base", ref);
14176 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
14178 tree access = TREE_PURPOSE (base_list);
14179 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
14180 tree basetype = TREE_VALUE (base_list);
14182 if (access == access_default_node)
14183 access = default_access;
14185 /* Before C++17, an aggregate cannot have base classes. In C++17, an
14186 aggregate can't have virtual, private, or protected base classes. */
14187 if (cxx_dialect < cxx17
14188 || access != access_public_node
14189 || via_virtual)
14190 CLASSTYPE_NON_AGGREGATE (ref) = true;
14192 if (PACK_EXPANSION_P (basetype))
14193 basetype = PACK_EXPANSION_PATTERN (basetype);
14194 if (TREE_CODE (basetype) == TYPE_DECL)
14195 basetype = TREE_TYPE (basetype);
14196 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
14198 error ("base type %qT fails to be a struct or class type",
14199 basetype);
14200 goto dropped_base;
14203 base_binfo = NULL_TREE;
14204 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
14206 base_binfo = TYPE_BINFO (basetype);
14207 /* The original basetype could have been a typedef'd type. */
14208 basetype = BINFO_TYPE (base_binfo);
14210 /* Inherit flags from the base. */
14211 TYPE_HAS_NEW_OPERATOR (ref)
14212 |= TYPE_HAS_NEW_OPERATOR (basetype);
14213 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
14214 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
14215 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
14216 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
14217 CLASSTYPE_DIAMOND_SHAPED_P (ref)
14218 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
14219 CLASSTYPE_REPEATED_BASE_P (ref)
14220 |= CLASSTYPE_REPEATED_BASE_P (basetype);
14223 /* We must do this test after we've seen through a typedef
14224 type. */
14225 if (TYPE_MARKED_P (basetype))
14227 if (basetype == ref)
14228 error ("recursive type %qT undefined", basetype);
14229 else
14230 error ("duplicate base type %qT invalid", basetype);
14231 goto dropped_base;
14234 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
14235 /* Regenerate the pack expansion for the bases. */
14236 basetype = make_pack_expansion (basetype);
14238 TYPE_MARKED_P (basetype) = 1;
14240 base_binfo = copy_binfo (base_binfo, basetype, ref,
14241 &igo_prev, via_virtual);
14242 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
14243 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
14245 BINFO_BASE_APPEND (binfo, base_binfo);
14246 BINFO_BASE_ACCESS_APPEND (binfo, access);
14247 continue;
14249 dropped_base:
14250 /* Update max_vbases to reflect the reality that we are dropping
14251 this base: if it reaches zero we want to undo the vec_alloc
14252 above to avoid inconsistencies during error-recovery: eg, in
14253 build_special_member_call, CLASSTYPE_VBASECLASSES non null
14254 and vtt null (c++/27952). */
14255 if (via_virtual)
14256 max_vbases--;
14257 if (CLASS_TYPE_P (basetype))
14258 max_vbases
14259 -= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
14262 if (CLASSTYPE_VBASECLASSES (ref)
14263 && max_vbases == 0)
14264 vec_free (CLASSTYPE_VBASECLASSES (ref));
14266 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
14267 /* If we didn't get max_vbases vbases, we must have shared at
14268 least one of them, and are therefore diamond shaped. */
14269 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
14271 /* Unmark all the types. */
14272 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
14273 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
14274 TYPE_MARKED_P (ref) = 0;
14276 /* Now see if we have a repeated base type. */
14277 if (!CLASSTYPE_REPEATED_BASE_P (ref))
14279 for (base_binfo = binfo; base_binfo;
14280 base_binfo = TREE_CHAIN (base_binfo))
14282 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
14284 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
14285 break;
14287 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
14289 for (base_binfo = binfo; base_binfo;
14290 base_binfo = TREE_CHAIN (base_binfo))
14291 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
14292 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
14293 else
14294 break;
14299 /* Copies the enum-related properties from type SRC to type DST.
14300 Used with the underlying type of an enum and the enum itself. */
14301 static void
14302 copy_type_enum (tree dst, tree src)
14304 tree t;
14305 for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
14307 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
14308 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
14309 TYPE_SIZE (t) = TYPE_SIZE (src);
14310 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
14311 SET_TYPE_MODE (dst, TYPE_MODE (src));
14312 TYPE_PRECISION (t) = TYPE_PRECISION (src);
14313 unsigned valign = TYPE_ALIGN (src);
14314 if (TYPE_USER_ALIGN (t))
14315 valign = MAX (valign, TYPE_ALIGN (t));
14316 else
14317 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
14318 SET_TYPE_ALIGN (t, valign);
14319 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
14323 /* Begin compiling the definition of an enumeration type.
14324 NAME is its name,
14326 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
14328 UNDERLYING_TYPE is the type that will be used as the storage for
14329 the enumeration type. This should be NULL_TREE if no storage type
14330 was specified.
14332 ATTRIBUTES are any attributes specified after the enum-key.
14334 SCOPED_ENUM_P is true if this is a scoped enumeration type.
14336 if IS_NEW is not NULL, gets TRUE iff a new type is created.
14338 Returns the type object, as yet incomplete.
14339 Also records info about it so that build_enumerator
14340 may be used to declare the individual values as they are read. */
14342 tree
14343 start_enum (tree name, tree enumtype, tree underlying_type,
14344 tree attributes, bool scoped_enum_p, bool *is_new)
14346 tree prevtype = NULL_TREE;
14347 gcc_assert (identifier_p (name));
14349 if (is_new)
14350 *is_new = false;
14351 /* [C++0x dcl.enum]p5:
14353 If not explicitly specified, the underlying type of a scoped
14354 enumeration type is int. */
14355 if (!underlying_type && scoped_enum_p)
14356 underlying_type = integer_type_node;
14358 if (underlying_type)
14359 underlying_type = cv_unqualified (underlying_type);
14361 /* If this is the real definition for a previous forward reference,
14362 fill in the contents in the same object that used to be the
14363 forward reference. */
14364 if (!enumtype)
14365 enumtype = lookup_and_check_tag (enum_type, name,
14366 /*tag_scope=*/ts_current,
14367 /*template_header_p=*/false);
14369 /* In case of a template_decl, the only check that should be deferred
14370 to instantiation time is the comparison of underlying types. */
14371 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
14373 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
14375 error_at (input_location, "scoped/unscoped mismatch "
14376 "in enum %q#T", enumtype);
14377 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14378 "previous definition here");
14379 enumtype = error_mark_node;
14381 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
14383 error_at (input_location, "underlying type mismatch "
14384 "in enum %q#T", enumtype);
14385 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14386 "previous definition here");
14387 enumtype = error_mark_node;
14389 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
14390 && !same_type_p (underlying_type,
14391 ENUM_UNDERLYING_TYPE (enumtype)))
14393 error_at (input_location, "different underlying type "
14394 "in enum %q#T", enumtype);
14395 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14396 "previous definition here");
14397 underlying_type = NULL_TREE;
14401 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
14402 || processing_template_decl)
14404 /* In case of error, make a dummy enum to allow parsing to
14405 continue. */
14406 if (enumtype == error_mark_node)
14408 name = make_anon_name ();
14409 enumtype = NULL_TREE;
14412 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
14413 of an opaque enum, or an opaque enum of an already defined
14414 enumeration (C++11).
14415 In any other case, it'll be NULL_TREE. */
14416 if (!enumtype)
14418 if (is_new)
14419 *is_new = true;
14421 prevtype = enumtype;
14423 /* Do not push the decl more than once. */
14424 if (!enumtype
14425 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
14427 enumtype = cxx_make_type (ENUMERAL_TYPE);
14428 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
14430 /* std::byte aliases anything. */
14431 if (enumtype != error_mark_node
14432 && TYPE_CONTEXT (enumtype) == std_node
14433 && !strcmp ("byte", TYPE_NAME_STRING (enumtype)))
14434 TYPE_ALIAS_SET (enumtype) = 0;
14436 else
14437 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
14438 false);
14440 if (enumtype == error_mark_node)
14441 return error_mark_node;
14443 /* The enum is considered opaque until the opening '{' of the
14444 enumerator list. */
14445 SET_OPAQUE_ENUM_P (enumtype, true);
14446 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
14449 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
14451 cplus_decl_attributes (&enumtype, attributes, (int)ATTR_FLAG_TYPE_IN_PLACE);
14453 if (underlying_type)
14455 if (ENUM_UNDERLYING_TYPE (enumtype))
14456 /* We already checked that it matches, don't change it to a different
14457 typedef variant. */;
14458 else if (CP_INTEGRAL_TYPE_P (underlying_type))
14460 copy_type_enum (enumtype, underlying_type);
14461 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14463 else if (dependent_type_p (underlying_type))
14464 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14465 else
14466 error ("underlying type %qT of %qT must be an integral type",
14467 underlying_type, enumtype);
14470 /* If into a template class, the returned enum is always the first
14471 declaration (opaque or not) seen. This way all the references to
14472 this type will be to the same declaration. The following ones are used
14473 only to check for definition errors. */
14474 if (prevtype && processing_template_decl)
14475 return prevtype;
14476 else
14477 return enumtype;
14480 /* After processing and defining all the values of an enumeration type,
14481 install their decls in the enumeration type.
14482 ENUMTYPE is the type object. */
14484 void
14485 finish_enum_value_list (tree enumtype)
14487 tree values;
14488 tree underlying_type;
14489 tree decl;
14490 tree value;
14491 tree minnode, maxnode;
14492 tree t;
14494 bool fixed_underlying_type_p
14495 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
14497 /* We built up the VALUES in reverse order. */
14498 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
14500 /* For an enum defined in a template, just set the type of the values;
14501 all further processing is postponed until the template is
14502 instantiated. We need to set the type so that tsubst of a CONST_DECL
14503 works. */
14504 if (processing_template_decl)
14506 for (values = TYPE_VALUES (enumtype);
14507 values;
14508 values = TREE_CHAIN (values))
14509 TREE_TYPE (TREE_VALUE (values)) = enumtype;
14510 return;
14513 /* Determine the minimum and maximum values of the enumerators. */
14514 if (TYPE_VALUES (enumtype))
14516 minnode = maxnode = NULL_TREE;
14518 for (values = TYPE_VALUES (enumtype);
14519 values;
14520 values = TREE_CHAIN (values))
14522 decl = TREE_VALUE (values);
14524 /* [dcl.enum]: Following the closing brace of an enum-specifier,
14525 each enumerator has the type of its enumeration. Prior to the
14526 closing brace, the type of each enumerator is the type of its
14527 initializing value. */
14528 TREE_TYPE (decl) = enumtype;
14530 /* Update the minimum and maximum values, if appropriate. */
14531 value = DECL_INITIAL (decl);
14532 if (value == error_mark_node)
14533 value = integer_zero_node;
14534 /* Figure out what the minimum and maximum values of the
14535 enumerators are. */
14536 if (!minnode)
14537 minnode = maxnode = value;
14538 else if (tree_int_cst_lt (maxnode, value))
14539 maxnode = value;
14540 else if (tree_int_cst_lt (value, minnode))
14541 minnode = value;
14544 else
14545 /* [dcl.enum]
14547 If the enumerator-list is empty, the underlying type is as if
14548 the enumeration had a single enumerator with value 0. */
14549 minnode = maxnode = integer_zero_node;
14551 if (!fixed_underlying_type_p)
14553 /* Compute the number of bits require to represent all values of the
14554 enumeration. We must do this before the type of MINNODE and
14555 MAXNODE are transformed, since tree_int_cst_min_precision relies
14556 on the TREE_TYPE of the value it is passed. */
14557 signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
14558 int lowprec = tree_int_cst_min_precision (minnode, sgn);
14559 int highprec = tree_int_cst_min_precision (maxnode, sgn);
14560 int precision = MAX (lowprec, highprec);
14561 unsigned int itk;
14562 bool use_short_enum;
14564 /* Determine the underlying type of the enumeration.
14566 [dcl.enum]
14568 The underlying type of an enumeration is an integral type that
14569 can represent all the enumerator values defined in the
14570 enumeration. It is implementation-defined which integral type is
14571 used as the underlying type for an enumeration except that the
14572 underlying type shall not be larger than int unless the value of
14573 an enumerator cannot fit in an int or unsigned int.
14575 We use "int" or an "unsigned int" as the underlying type, even if
14576 a smaller integral type would work, unless the user has
14577 explicitly requested that we use the smallest possible type. The
14578 user can request that for all enumerations with a command line
14579 flag, or for just one enumeration with an attribute. */
14581 use_short_enum = flag_short_enums
14582 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
14584 /* If the precision of the type was specified with an attribute and it
14585 was too small, give an error. Otherwise, use it. */
14586 if (TYPE_PRECISION (enumtype))
14588 if (precision > TYPE_PRECISION (enumtype))
14589 error ("specified mode too small for enumeral values");
14590 else
14592 use_short_enum = true;
14593 precision = TYPE_PRECISION (enumtype);
14597 for (itk = (use_short_enum ? itk_char : itk_int);
14598 itk != itk_none;
14599 itk++)
14601 underlying_type = integer_types[itk];
14602 if (underlying_type != NULL_TREE
14603 && TYPE_PRECISION (underlying_type) >= precision
14604 && TYPE_SIGN (underlying_type) == sgn)
14605 break;
14607 if (itk == itk_none)
14609 /* DR 377
14611 IF no integral type can represent all the enumerator values, the
14612 enumeration is ill-formed. */
14613 error ("no integral type can represent all of the enumerator values "
14614 "for %qT", enumtype);
14615 precision = TYPE_PRECISION (long_long_integer_type_node);
14616 underlying_type = integer_types[itk_unsigned_long_long];
14619 /* [dcl.enum]
14621 The value of sizeof() applied to an enumeration type, an object
14622 of an enumeration type, or an enumerator, is the value of sizeof()
14623 applied to the underlying type. */
14624 copy_type_enum (enumtype, underlying_type);
14626 /* Compute the minimum and maximum values for the type.
14628 [dcl.enum]
14630 For an enumeration where emin is the smallest enumerator and emax
14631 is the largest, the values of the enumeration are the values of the
14632 underlying type in the range bmin to bmax, where bmin and bmax are,
14633 respectively, the smallest and largest values of the smallest bit-
14634 field that can store emin and emax. */
14636 /* The middle-end currently assumes that types with TYPE_PRECISION
14637 narrower than their underlying type are suitably zero or sign
14638 extended to fill their mode. Similarly, it assumes that the front
14639 end assures that a value of a particular type must be within
14640 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
14642 We used to set these fields based on bmin and bmax, but that led
14643 to invalid assumptions like optimizing away bounds checking. So
14644 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
14645 TYPE_MAX_VALUE to the values for the mode above and only restrict
14646 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
14647 ENUM_UNDERLYING_TYPE (enumtype)
14648 = build_distinct_type_copy (underlying_type);
14649 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
14650 set_min_and_max_values_for_integral_type
14651 (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
14653 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
14654 if (flag_strict_enums)
14655 set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
14657 else
14658 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
14660 /* Convert each of the enumerators to the type of the underlying
14661 type of the enumeration. */
14662 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
14664 location_t saved_location;
14666 decl = TREE_VALUE (values);
14667 saved_location = input_location;
14668 input_location = DECL_SOURCE_LOCATION (decl);
14669 if (fixed_underlying_type_p)
14670 /* If the enumeration type has a fixed underlying type, we
14671 already checked all of the enumerator values. */
14672 value = DECL_INITIAL (decl);
14673 else
14674 value = perform_implicit_conversion (underlying_type,
14675 DECL_INITIAL (decl),
14676 tf_warning_or_error);
14677 input_location = saved_location;
14679 /* Do not clobber shared ints. */
14680 if (value != error_mark_node)
14682 value = copy_node (value);
14684 TREE_TYPE (value) = enumtype;
14686 DECL_INITIAL (decl) = value;
14689 /* Fix up all variant types of this enum type. */
14690 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
14691 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
14693 if (at_class_scope_p ()
14694 && COMPLETE_TYPE_P (current_class_type)
14695 && UNSCOPED_ENUM_P (enumtype))
14697 insert_late_enum_def_bindings (current_class_type, enumtype);
14698 /* TYPE_FIELDS needs fixup. */
14699 fixup_type_variants (current_class_type);
14702 /* Finish debugging output for this type. */
14703 rest_of_type_compilation (enumtype, namespace_bindings_p ());
14705 /* Each enumerator now has the type of its enumeration. Clear the cache
14706 so that this change in types doesn't confuse us later on. */
14707 clear_cv_and_fold_caches ();
14710 /* Finishes the enum type. This is called only the first time an
14711 enumeration is seen, be it opaque or odinary.
14712 ENUMTYPE is the type object. */
14714 void
14715 finish_enum (tree enumtype)
14717 if (processing_template_decl)
14719 if (at_function_scope_p ())
14720 add_stmt (build_min (TAG_DEFN, enumtype));
14721 return;
14724 /* If this is a forward declaration, there should not be any variants,
14725 though we can get a variant in the middle of an enum-specifier with
14726 wacky code like 'enum E { e = sizeof(const E*) };' */
14727 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
14728 && (TYPE_VALUES (enumtype)
14729 || !TYPE_NEXT_VARIANT (enumtype)));
14732 /* Build and install a CONST_DECL for an enumeration constant of the
14733 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
14734 Apply ATTRIBUTES if available. LOC is the location of NAME.
14735 Assignment of sequential values by default is handled here. */
14737 void
14738 build_enumerator (tree name, tree value, tree enumtype, tree attributes,
14739 location_t loc)
14741 tree decl;
14742 tree context;
14743 tree type;
14745 /* scalar_constant_value will pull out this expression, so make sure
14746 it's folded as appropriate. */
14747 if (processing_template_decl)
14748 value = fold_non_dependent_expr (value);
14750 /* If the VALUE was erroneous, pretend it wasn't there; that will
14751 result in the enum being assigned the next value in sequence. */
14752 if (value == error_mark_node)
14753 value = NULL_TREE;
14755 /* Remove no-op casts from the value. */
14756 if (value)
14757 STRIP_TYPE_NOPS (value);
14759 if (! processing_template_decl)
14761 /* Validate and default VALUE. */
14762 if (value != NULL_TREE)
14764 if (!ENUM_UNDERLYING_TYPE (enumtype))
14766 tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
14767 value, true);
14768 if (tmp_value)
14769 value = tmp_value;
14771 else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14772 (TREE_TYPE (value)))
14773 value = perform_implicit_conversion_flags
14774 (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
14775 LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
14777 if (value == error_mark_node)
14778 value = NULL_TREE;
14780 if (value != NULL_TREE)
14782 if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14783 (TREE_TYPE (value)))
14785 error ("enumerator value for %qD must have integral or "
14786 "unscoped enumeration type", name);
14787 value = NULL_TREE;
14789 else
14791 value = cxx_constant_value (value);
14793 if (TREE_CODE (value) != INTEGER_CST)
14795 error ("enumerator value for %qD is not an integer "
14796 "constant", name);
14797 value = NULL_TREE;
14803 /* Default based on previous value. */
14804 if (value == NULL_TREE)
14806 if (TYPE_VALUES (enumtype))
14808 tree prev_value;
14810 /* C++03 7.2/4: If no initializer is specified for the first
14811 enumerator, the type is an unspecified integral
14812 type. Otherwise the type is the same as the type of the
14813 initializing value of the preceding enumerator unless the
14814 incremented value is not representable in that type, in
14815 which case the type is an unspecified integral type
14816 sufficient to contain the incremented value. */
14817 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
14818 if (error_operand_p (prev_value))
14819 value = error_mark_node;
14820 else
14822 wi::overflow_type overflowed;
14823 tree type = TREE_TYPE (prev_value);
14824 signop sgn = TYPE_SIGN (type);
14825 widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
14826 &overflowed);
14827 if (!overflowed)
14829 bool pos = !wi::neg_p (wi, sgn);
14830 if (!wi::fits_to_tree_p (wi, type))
14832 unsigned int itk;
14833 for (itk = itk_int; itk != itk_none; itk++)
14835 type = integer_types[itk];
14836 if (type != NULL_TREE
14837 && (pos || !TYPE_UNSIGNED (type))
14838 && wi::fits_to_tree_p (wi, type))
14839 break;
14841 if (type && cxx_dialect < cxx11
14842 && itk > itk_unsigned_long)
14843 pedwarn (input_location, OPT_Wlong_long,
14844 pos ? G_("\
14845 incremented enumerator value is too large for %<unsigned long%>") : G_("\
14846 incremented enumerator value is too large for %<long%>"));
14848 if (type == NULL_TREE)
14849 overflowed = wi::OVF_UNKNOWN;
14850 else
14851 value = wide_int_to_tree (type, wi);
14854 if (overflowed)
14856 error ("overflow in enumeration values at %qD", name);
14857 value = error_mark_node;
14861 else
14862 value = integer_zero_node;
14865 /* Remove no-op casts from the value. */
14866 STRIP_TYPE_NOPS (value);
14868 /* If the underlying type of the enum is fixed, check whether
14869 the enumerator values fits in the underlying type. If it
14870 does not fit, the program is ill-formed [C++0x dcl.enum]. */
14871 if (ENUM_UNDERLYING_TYPE (enumtype)
14872 && value
14873 && TREE_CODE (value) == INTEGER_CST)
14875 if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
14876 error ("enumerator value %qE is outside the range of underlying "
14877 "type %qT", value, ENUM_UNDERLYING_TYPE (enumtype));
14879 /* Convert the value to the appropriate type. */
14880 value = fold_convert (ENUM_UNDERLYING_TYPE (enumtype), value);
14884 /* C++ associates enums with global, function, or class declarations. */
14885 context = current_scope ();
14887 /* Build the actual enumeration constant. Note that the enumeration
14888 constants have the underlying type of the enum (if it is fixed)
14889 or the type of their initializer (if the underlying type of the
14890 enum is not fixed):
14892 [ C++0x dcl.enum ]
14894 If the underlying type is fixed, the type of each enumerator
14895 prior to the closing brace is the underlying type; if the
14896 initializing value of an enumerator cannot be represented by
14897 the underlying type, the program is ill-formed. If the
14898 underlying type is not fixed, the type of each enumerator is
14899 the type of its initializing value.
14901 If the underlying type is not fixed, it will be computed by
14902 finish_enum and we will reset the type of this enumerator. Of
14903 course, if we're processing a template, there may be no value. */
14904 type = value ? TREE_TYPE (value) : NULL_TREE;
14906 decl = build_decl (loc, CONST_DECL, name, type);
14908 DECL_CONTEXT (decl) = enumtype;
14909 TREE_CONSTANT (decl) = 1;
14910 TREE_READONLY (decl) = 1;
14911 DECL_INITIAL (decl) = value;
14913 if (attributes)
14914 cplus_decl_attributes (&decl, attributes, 0);
14916 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
14918 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
14919 on the TYPE_FIELDS list for `S'. (That's so that you can say
14920 things like `S::i' later.) */
14922 /* The enumerator may be getting declared outside of its enclosing
14923 class, like so:
14925 class S { public: enum E : int; }; enum S::E : int { i = 7; };
14927 For which case we need to make sure that the access of `S::i'
14928 matches the access of `S::E'. */
14929 tree saved_cas = current_access_specifier;
14930 if (TREE_PRIVATE (TYPE_NAME (enumtype)))
14931 current_access_specifier = access_private_node;
14932 else if (TREE_PROTECTED (TYPE_NAME (enumtype)))
14933 current_access_specifier = access_protected_node;
14934 else
14935 current_access_specifier = access_public_node;
14937 finish_member_declaration (decl);
14939 current_access_specifier = saved_cas;
14941 else
14942 pushdecl (decl);
14944 /* Add this enumeration constant to the list for this type. */
14945 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
14948 /* Look for an enumerator with the given NAME within the enumeration
14949 type ENUMTYPE. This routine is used primarily for qualified name
14950 lookup into an enumerator in C++0x, e.g.,
14952 enum class Color { Red, Green, Blue };
14954 Color color = Color::Red;
14956 Returns the value corresponding to the enumerator, or
14957 NULL_TREE if no such enumerator was found. */
14958 tree
14959 lookup_enumerator (tree enumtype, tree name)
14961 tree e;
14962 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
14964 e = purpose_member (name, TYPE_VALUES (enumtype));
14965 return e? TREE_VALUE (e) : NULL_TREE;
14969 /* We're defining DECL. Make sure that its type is OK. */
14971 static void
14972 check_function_type (tree decl, tree current_function_parms)
14974 tree fntype = TREE_TYPE (decl);
14975 tree return_type = complete_type (TREE_TYPE (fntype));
14977 /* In a function definition, arg types must be complete. */
14978 require_complete_types_for_parms (current_function_parms);
14980 if (dependent_type_p (return_type)
14981 || type_uses_auto (return_type))
14982 return;
14983 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
14985 tree args = TYPE_ARG_TYPES (fntype);
14987 error ("return type %q#T is incomplete", return_type);
14989 /* Make it return void instead. */
14990 if (TREE_CODE (fntype) == METHOD_TYPE)
14991 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
14992 void_type_node,
14993 TREE_CHAIN (args));
14994 else
14995 fntype = build_function_type (void_type_node, args);
14996 fntype = (cp_build_type_attribute_variant
14997 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
14998 fntype = cxx_copy_lang_qualifiers (fntype, TREE_TYPE (decl));
14999 TREE_TYPE (decl) = fntype;
15001 else
15003 abstract_virtuals_error (decl, TREE_TYPE (fntype));
15004 maybe_warn_parm_abi (TREE_TYPE (fntype),
15005 DECL_SOURCE_LOCATION (decl));
15009 /* True iff FN is an implicitly-defined default constructor. */
15011 static bool
15012 implicit_default_ctor_p (tree fn)
15014 return (DECL_CONSTRUCTOR_P (fn)
15015 && !user_provided_p (fn)
15016 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)));
15019 /* Clobber the contents of *this to let the back end know that the object
15020 storage is dead when we enter the constructor or leave the destructor. */
15022 static tree
15023 build_clobber_this ()
15025 /* Clobbering an empty base is pointless, and harmful if its one byte
15026 TYPE_SIZE overlays real data. */
15027 if (is_empty_class (current_class_type))
15028 return void_node;
15030 /* If we have virtual bases, clobber the whole object, but only if we're in
15031 charge. If we don't have virtual bases, clobber the as-base type so we
15032 don't mess with tail padding. */
15033 bool vbases = CLASSTYPE_VBASECLASSES (current_class_type);
15035 tree ctype = current_class_type;
15036 if (!vbases)
15037 ctype = CLASSTYPE_AS_BASE (ctype);
15039 tree clobber = build_clobber (ctype);
15041 tree thisref = current_class_ref;
15042 if (ctype != current_class_type)
15044 thisref = build_nop (build_reference_type (ctype), current_class_ptr);
15045 thisref = convert_from_reference (thisref);
15048 tree exprstmt = build2 (MODIFY_EXPR, void_type_node, thisref, clobber);
15049 if (vbases)
15050 exprstmt = build_if_in_charge (exprstmt);
15052 return exprstmt;
15055 /* Create the FUNCTION_DECL for a function definition.
15056 DECLSPECS and DECLARATOR are the parts of the declaration;
15057 they describe the function's name and the type it returns,
15058 but twisted together in a fashion that parallels the syntax of C.
15060 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
15061 DECLARATOR is really the DECL for the function we are about to
15062 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
15063 indicating that the function is an inline defined in-class.
15065 This function creates a binding context for the function body
15066 as well as setting up the FUNCTION_DECL in current_function_decl.
15068 For C++, we must first check whether that datum makes any sense.
15069 For example, "class A local_a(1,2);" means that variable local_a
15070 is an aggregate of type A, which should have a constructor
15071 applied to it with the argument list [1, 2].
15073 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
15074 or may be a BLOCK if the function has been defined previously
15075 in this translation unit. On exit, DECL_INITIAL (decl1) will be
15076 error_mark_node if the function has never been defined, or
15077 a BLOCK if the function has been defined somewhere. */
15079 bool
15080 start_preparsed_function (tree decl1, tree attrs, int flags)
15082 tree ctype = NULL_TREE;
15083 tree fntype;
15084 tree restype;
15085 int doing_friend = 0;
15086 cp_binding_level *bl;
15087 tree current_function_parms;
15088 struct c_fileinfo *finfo
15089 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
15090 bool honor_interface;
15092 /* Sanity check. */
15093 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
15094 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
15096 fntype = TREE_TYPE (decl1);
15097 if (TREE_CODE (fntype) == METHOD_TYPE)
15098 ctype = TYPE_METHOD_BASETYPE (fntype);
15100 /* ISO C++ 11.4/5. A friend function defined in a class is in
15101 the (lexical) scope of the class in which it is defined. */
15102 if (!ctype && DECL_FRIEND_P (decl1))
15104 ctype = DECL_FRIEND_CONTEXT (decl1);
15106 /* CTYPE could be null here if we're dealing with a template;
15107 for example, `inline friend float foo()' inside a template
15108 will have no CTYPE set. */
15109 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
15110 ctype = NULL_TREE;
15111 else
15112 doing_friend = 1;
15115 if (DECL_DECLARED_INLINE_P (decl1)
15116 && lookup_attribute ("noinline", attrs))
15117 warning_at (DECL_SOURCE_LOCATION (decl1), 0,
15118 "inline function %qD given attribute noinline", decl1);
15120 /* Handle gnu_inline attribute. */
15121 if (GNU_INLINE_P (decl1))
15123 DECL_EXTERNAL (decl1) = 1;
15124 DECL_NOT_REALLY_EXTERN (decl1) = 0;
15125 DECL_INTERFACE_KNOWN (decl1) = 1;
15126 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
15129 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
15130 /* This is a constructor, we must ensure that any default args
15131 introduced by this definition are propagated to the clones
15132 now. The clones are used directly in overload resolution. */
15133 adjust_clone_args (decl1);
15135 /* Sometimes we don't notice that a function is a static member, and
15136 build a METHOD_TYPE for it. Fix that up now. */
15137 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
15138 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
15140 /* Set up current_class_type, and enter the scope of the class, if
15141 appropriate. */
15142 if (ctype)
15143 push_nested_class (ctype);
15144 else if (DECL_STATIC_FUNCTION_P (decl1))
15145 push_nested_class (DECL_CONTEXT (decl1));
15147 /* Now that we have entered the scope of the class, we must restore
15148 the bindings for any template parameters surrounding DECL1, if it
15149 is an inline member template. (Order is important; consider the
15150 case where a template parameter has the same name as a field of
15151 the class.) It is not until after this point that
15152 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
15153 if (flags & SF_INCLASS_INLINE)
15154 maybe_begin_member_template_processing (decl1);
15156 /* Effective C++ rule 15. */
15157 if (warn_ecpp
15158 && DECL_ASSIGNMENT_OPERATOR_P (decl1)
15159 && DECL_OVERLOADED_OPERATOR_IS (decl1, NOP_EXPR)
15160 && VOID_TYPE_P (TREE_TYPE (fntype)))
15161 warning (OPT_Weffc__,
15162 "%<operator=%> should return a reference to %<*this%>");
15164 /* Make the init_value nonzero so pushdecl knows this is not tentative.
15165 error_mark_node is replaced below (in poplevel) with the BLOCK. */
15166 if (!DECL_INITIAL (decl1))
15167 DECL_INITIAL (decl1) = error_mark_node;
15169 /* This function exists in static storage.
15170 (This does not mean `static' in the C sense!) */
15171 TREE_STATIC (decl1) = 1;
15173 /* We must call push_template_decl after current_class_type is set
15174 up. (If we are processing inline definitions after exiting a
15175 class scope, current_class_type will be NULL_TREE until set above
15176 by push_nested_class.) */
15177 if (processing_template_decl)
15179 tree newdecl1 = push_template_decl (decl1);
15180 if (newdecl1 == error_mark_node)
15182 if (ctype || DECL_STATIC_FUNCTION_P (decl1))
15183 pop_nested_class ();
15184 return false;
15186 decl1 = newdecl1;
15189 /* Make sure the parameter and return types are reasonable. When
15190 you declare a function, these types can be incomplete, but they
15191 must be complete when you define the function. */
15192 check_function_type (decl1, DECL_ARGUMENTS (decl1));
15194 /* Build the return declaration for the function. */
15195 restype = TREE_TYPE (fntype);
15197 if (DECL_RESULT (decl1) == NULL_TREE)
15199 tree resdecl;
15201 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
15202 DECL_ARTIFICIAL (resdecl) = 1;
15203 DECL_IGNORED_P (resdecl) = 1;
15204 DECL_RESULT (decl1) = resdecl;
15206 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
15209 /* Record the decl so that the function name is defined.
15210 If we already have a decl for this name, and it is a FUNCTION_DECL,
15211 use the old decl. */
15212 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
15214 /* A specialization is not used to guide overload resolution. */
15215 if (!DECL_FUNCTION_MEMBER_P (decl1)
15216 && !(DECL_USE_TEMPLATE (decl1) &&
15217 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
15219 tree olddecl = pushdecl (decl1);
15221 if (olddecl == error_mark_node)
15222 /* If something went wrong when registering the declaration,
15223 use DECL1; we have to have a FUNCTION_DECL to use when
15224 parsing the body of the function. */
15226 else
15228 /* Otherwise, OLDDECL is either a previous declaration
15229 of the same function or DECL1 itself. */
15231 if (warn_missing_declarations
15232 && olddecl == decl1
15233 && !DECL_MAIN_P (decl1)
15234 && TREE_PUBLIC (decl1)
15235 && !DECL_DECLARED_INLINE_P (decl1))
15237 tree context;
15239 /* Check whether DECL1 is in an anonymous
15240 namespace. */
15241 for (context = DECL_CONTEXT (decl1);
15242 context;
15243 context = DECL_CONTEXT (context))
15245 if (TREE_CODE (context) == NAMESPACE_DECL
15246 && DECL_NAME (context) == NULL_TREE)
15247 break;
15250 if (context == NULL)
15251 warning_at (DECL_SOURCE_LOCATION (decl1),
15252 OPT_Wmissing_declarations,
15253 "no previous declaration for %qD", decl1);
15256 decl1 = olddecl;
15259 else
15261 /* We need to set the DECL_CONTEXT. */
15262 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
15263 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
15265 fntype = TREE_TYPE (decl1);
15266 restype = TREE_TYPE (fntype);
15268 /* If #pragma weak applies, mark the decl appropriately now.
15269 The pragma only applies to global functions. Because
15270 determining whether or not the #pragma applies involves
15271 computing the mangled name for the declaration, we cannot
15272 apply the pragma until after we have merged this declaration
15273 with any previous declarations; if the original declaration
15274 has a linkage specification, that specification applies to
15275 the definition as well, and may affect the mangled name. */
15276 if (DECL_FILE_SCOPE_P (decl1))
15277 maybe_apply_pragma_weak (decl1);
15280 /* We are now in the scope of the function being defined. */
15281 current_function_decl = decl1;
15283 /* Save the parm names or decls from this function's declarator
15284 where store_parm_decls will find them. */
15285 current_function_parms = DECL_ARGUMENTS (decl1);
15287 /* Let the user know we're compiling this function. */
15288 announce_function (decl1);
15290 gcc_assert (DECL_INITIAL (decl1));
15292 /* This function may already have been parsed, in which case just
15293 return; our caller will skip over the body without parsing. */
15294 if (DECL_INITIAL (decl1) != error_mark_node)
15295 return true;
15297 /* Initialize RTL machinery. We cannot do this until
15298 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
15299 even when processing a template; this is how we get
15300 CFUN set up, and our per-function variables initialized.
15301 FIXME factor out the non-RTL stuff. */
15302 bl = current_binding_level;
15303 allocate_struct_function (decl1, processing_template_decl);
15305 /* Initialize the language data structures. Whenever we start
15306 a new function, we destroy temporaries in the usual way. */
15307 cfun->language = ggc_cleared_alloc<language_function> ();
15308 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
15309 current_binding_level = bl;
15311 if (!processing_template_decl && type_uses_auto (restype))
15313 FNDECL_USED_AUTO (decl1) = true;
15314 current_function_auto_return_pattern = restype;
15317 /* Start the statement-tree, start the tree now. */
15318 DECL_SAVED_TREE (decl1) = push_stmt_list ();
15320 /* If we are (erroneously) defining a function that we have already
15321 defined before, wipe out what we knew before. */
15322 if (!DECL_PENDING_INLINE_P (decl1))
15323 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
15325 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
15327 /* We know that this was set up by `grokclassfn'. We do not
15328 wait until `store_parm_decls', since evil parse errors may
15329 never get us to that point. Here we keep the consistency
15330 between `current_class_type' and `current_class_ptr'. */
15331 tree t = DECL_ARGUMENTS (decl1);
15333 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
15334 gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
15336 cp_function_chain->x_current_class_ref
15337 = cp_build_fold_indirect_ref (t);
15338 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
15339 cp_function_chain->x_current_class_ptr = t;
15341 /* Constructors and destructors need to know whether they're "in
15342 charge" of initializing virtual base classes. */
15343 t = DECL_CHAIN (t);
15344 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
15346 current_in_charge_parm = t;
15347 t = DECL_CHAIN (t);
15349 if (DECL_HAS_VTT_PARM_P (decl1))
15351 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
15352 current_vtt_parm = t;
15356 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
15357 /* Implicitly-defined methods (like the
15358 destructor for a class in which no destructor
15359 is explicitly declared) must not be defined
15360 until their definition is needed. So, we
15361 ignore interface specifications for
15362 compiler-generated functions. */
15363 && !DECL_ARTIFICIAL (decl1));
15365 if (processing_template_decl)
15366 /* Don't mess with interface flags. */;
15367 else if (DECL_INTERFACE_KNOWN (decl1))
15369 tree ctx = decl_function_context (decl1);
15371 if (DECL_NOT_REALLY_EXTERN (decl1))
15372 DECL_EXTERNAL (decl1) = 0;
15374 if (ctx != NULL_TREE && vague_linkage_p (ctx))
15375 /* This is a function in a local class in an extern inline
15376 or template function. */
15377 comdat_linkage (decl1);
15379 /* If this function belongs to an interface, it is public.
15380 If it belongs to someone else's interface, it is also external.
15381 This only affects inlines and template instantiations. */
15382 else if (!finfo->interface_unknown && honor_interface)
15384 if (DECL_DECLARED_INLINE_P (decl1)
15385 || DECL_TEMPLATE_INSTANTIATION (decl1))
15387 DECL_EXTERNAL (decl1)
15388 = (finfo->interface_only
15389 || (DECL_DECLARED_INLINE_P (decl1)
15390 && ! flag_implement_inlines
15391 && !DECL_VINDEX (decl1)));
15393 /* For WIN32 we also want to put these in linkonce sections. */
15394 maybe_make_one_only (decl1);
15396 else
15397 DECL_EXTERNAL (decl1) = 0;
15398 DECL_INTERFACE_KNOWN (decl1) = 1;
15399 /* If this function is in an interface implemented in this file,
15400 make sure that the back end knows to emit this function
15401 here. */
15402 if (!DECL_EXTERNAL (decl1))
15403 mark_needed (decl1);
15405 else if (finfo->interface_unknown && finfo->interface_only
15406 && honor_interface)
15408 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
15409 interface, we will have both finfo->interface_unknown and
15410 finfo->interface_only set. In that case, we don't want to
15411 use the normal heuristics because someone will supply a
15412 #pragma implementation elsewhere, and deducing it here would
15413 produce a conflict. */
15414 comdat_linkage (decl1);
15415 DECL_EXTERNAL (decl1) = 0;
15416 DECL_INTERFACE_KNOWN (decl1) = 1;
15417 DECL_DEFER_OUTPUT (decl1) = 1;
15419 else
15421 /* This is a definition, not a reference.
15422 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
15423 if (!GNU_INLINE_P (decl1))
15424 DECL_EXTERNAL (decl1) = 0;
15426 if ((DECL_DECLARED_INLINE_P (decl1)
15427 || DECL_TEMPLATE_INSTANTIATION (decl1))
15428 && ! DECL_INTERFACE_KNOWN (decl1))
15429 DECL_DEFER_OUTPUT (decl1) = 1;
15430 else
15431 DECL_INTERFACE_KNOWN (decl1) = 1;
15434 /* Determine the ELF visibility attribute for the function. We must not
15435 do this before calling "pushdecl", as we must allow "duplicate_decls"
15436 to merge any attributes appropriately. We also need to wait until
15437 linkage is set. */
15438 if (!DECL_CLONED_FUNCTION_P (decl1))
15439 determine_visibility (decl1);
15441 if (!processing_template_decl)
15442 maybe_instantiate_noexcept (decl1);
15444 begin_scope (sk_function_parms, decl1);
15446 ++function_depth;
15448 if (DECL_DESTRUCTOR_P (decl1)
15449 || (DECL_CONSTRUCTOR_P (decl1)
15450 && targetm.cxx.cdtor_returns_this ()))
15452 cdtor_label = create_artificial_label (input_location);
15453 LABEL_DECL_CDTOR (cdtor_label) = true;
15456 start_fname_decls ();
15458 store_parm_decls (current_function_parms);
15460 if (!processing_template_decl
15461 && (flag_lifetime_dse > 1)
15462 && DECL_CONSTRUCTOR_P (decl1)
15463 && !DECL_CLONED_FUNCTION_P (decl1)
15464 /* Clobbering an empty base is harmful if it overlays real data. */
15465 && !is_empty_class (current_class_type)
15466 /* We can't clobber safely for an implicitly-defined default constructor
15467 because part of the initialization might happen before we enter the
15468 constructor, via AGGR_INIT_ZERO_FIRST (c++/68006). */
15469 && !implicit_default_ctor_p (decl1))
15470 finish_expr_stmt (build_clobber_this ());
15472 if (!processing_template_decl
15473 && DECL_CONSTRUCTOR_P (decl1)
15474 && sanitize_flags_p (SANITIZE_VPTR)
15475 && !DECL_CLONED_FUNCTION_P (decl1)
15476 && !implicit_default_ctor_p (decl1))
15477 cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr);
15479 start_lambda_scope (decl1);
15481 return true;
15485 /* Like start_preparsed_function, except that instead of a
15486 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
15488 Returns true on success. If the DECLARATOR is not suitable
15489 for a function, we return false, which tells the parser to
15490 skip the entire function. */
15492 bool
15493 start_function (cp_decl_specifier_seq *declspecs,
15494 const cp_declarator *declarator,
15495 tree attrs)
15497 tree decl1;
15499 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
15500 invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION, decl1);
15501 if (decl1 == error_mark_node)
15502 return false;
15503 /* If the declarator is not suitable for a function definition,
15504 cause a syntax error. */
15505 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
15507 error ("invalid function declaration");
15508 return false;
15511 if (DECL_MAIN_P (decl1))
15512 /* main must return int. grokfndecl should have corrected it
15513 (and issued a diagnostic) if the user got it wrong. */
15514 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
15515 integer_type_node));
15517 return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
15520 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
15521 FN. */
15523 static bool
15524 use_eh_spec_block (tree fn)
15526 return (flag_exceptions && flag_enforce_eh_specs
15527 && !processing_template_decl
15528 && !type_throw_all_p (TREE_TYPE (fn))
15529 /* We insert the EH_SPEC_BLOCK only in the original
15530 function; then, it is copied automatically to the
15531 clones. */
15532 && !DECL_CLONED_FUNCTION_P (fn)
15533 /* Implicitly-generated constructors and destructors have
15534 exception specifications. However, those specifications
15535 are the union of the possible exceptions specified by the
15536 constructors/destructors for bases and members, so no
15537 unallowed exception will ever reach this function. By
15538 not creating the EH_SPEC_BLOCK we save a little memory,
15539 and we avoid spurious warnings about unreachable
15540 code. */
15541 && !DECL_DEFAULTED_FN (fn));
15544 /* Store the parameter declarations into the current function declaration.
15545 This is called after parsing the parameter declarations, before
15546 digesting the body of the function.
15548 Also install to binding contour return value identifier, if any. */
15550 static void
15551 store_parm_decls (tree current_function_parms)
15553 tree fndecl = current_function_decl;
15554 tree parm;
15556 /* This is a chain of any other decls that came in among the parm
15557 declarations. If a parm is declared with enum {foo, bar} x;
15558 then CONST_DECLs for foo and bar are put here. */
15559 tree nonparms = NULL_TREE;
15561 if (current_function_parms)
15563 /* This case is when the function was defined with an ANSI prototype.
15564 The parms already have decls, so we need not do anything here
15565 except record them as in effect
15566 and complain if any redundant old-style parm decls were written. */
15568 tree specparms = current_function_parms;
15569 tree next;
15571 /* Must clear this because it might contain TYPE_DECLs declared
15572 at class level. */
15573 current_binding_level->names = NULL;
15575 /* If we're doing semantic analysis, then we'll call pushdecl
15576 for each of these. We must do them in reverse order so that
15577 they end in the correct forward order. */
15578 specparms = nreverse (specparms);
15580 for (parm = specparms; parm; parm = next)
15582 next = DECL_CHAIN (parm);
15583 if (TREE_CODE (parm) == PARM_DECL)
15584 pushdecl (parm);
15585 else
15587 /* If we find an enum constant or a type tag,
15588 put it aside for the moment. */
15589 TREE_CHAIN (parm) = NULL_TREE;
15590 nonparms = chainon (nonparms, parm);
15594 /* Get the decls in their original chain order and record in the
15595 function. This is all and only the PARM_DECLs that were
15596 pushed into scope by the loop above. */
15597 DECL_ARGUMENTS (fndecl) = get_local_decls ();
15599 else
15600 DECL_ARGUMENTS (fndecl) = NULL_TREE;
15602 /* Now store the final chain of decls for the arguments
15603 as the decl-chain of the current lexical scope.
15604 Put the enumerators in as well, at the front so that
15605 DECL_ARGUMENTS is not modified. */
15606 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
15608 if (use_eh_spec_block (current_function_decl))
15609 current_eh_spec_block = begin_eh_spec_block ();
15613 /* We have finished doing semantic analysis on DECL, but have not yet
15614 generated RTL for its body. Save away our current state, so that
15615 when we want to generate RTL later we know what to do. */
15617 static void
15618 save_function_data (tree decl)
15620 struct language_function *f;
15622 /* Save the language-specific per-function data so that we can
15623 get it back when we really expand this function. */
15624 gcc_assert (!DECL_PENDING_INLINE_P (decl));
15626 /* Make a copy. */
15627 f = ggc_alloc<language_function> ();
15628 memcpy (f, cp_function_chain, sizeof (struct language_function));
15629 DECL_SAVED_FUNCTION_DATA (decl) = f;
15631 /* Clear out the bits we don't need. */
15632 f->base.x_stmt_tree.x_cur_stmt_list = NULL;
15633 f->bindings = NULL;
15634 f->x_local_names = NULL;
15635 f->base.local_typedefs = NULL;
15639 /* Set the return value of the constructor (if present). */
15641 static void
15642 finish_constructor_body (void)
15644 tree val;
15645 tree exprstmt;
15647 if (targetm.cxx.cdtor_returns_this ())
15649 /* Any return from a constructor will end up here. */
15650 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15652 val = DECL_ARGUMENTS (current_function_decl);
15653 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15654 DECL_RESULT (current_function_decl), val);
15655 /* Return the address of the object. */
15656 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15657 add_stmt (exprstmt);
15661 /* Do all the processing for the beginning of a destructor; set up the
15662 vtable pointers and cleanups for bases and members. */
15664 static void
15665 begin_destructor_body (void)
15667 tree compound_stmt;
15669 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
15670 issued an error message. We still want to try to process the
15671 body of the function, but initialize_vtbl_ptrs will crash if
15672 TYPE_BINFO is NULL. */
15673 if (COMPLETE_TYPE_P (current_class_type))
15675 compound_stmt = begin_compound_stmt (0);
15676 /* Make all virtual function table pointers in non-virtual base
15677 classes point to CURRENT_CLASS_TYPE's virtual function
15678 tables. */
15679 initialize_vtbl_ptrs (current_class_ptr);
15680 finish_compound_stmt (compound_stmt);
15682 if (flag_lifetime_dse
15683 /* Clobbering an empty base is harmful if it overlays real data. */
15684 && !is_empty_class (current_class_type))
15686 if (sanitize_flags_p (SANITIZE_VPTR)
15687 && (flag_sanitize_recover & SANITIZE_VPTR) == 0
15688 && TYPE_CONTAINS_VPTR_P (current_class_type))
15690 tree binfo = TYPE_BINFO (current_class_type);
15691 tree ref
15692 = cp_build_fold_indirect_ref (current_class_ptr);
15694 tree vtbl_ptr = build_vfield_ref (ref, TREE_TYPE (binfo));
15695 tree vtbl = build_zero_cst (TREE_TYPE (vtbl_ptr));
15696 tree stmt = cp_build_modify_expr (input_location, vtbl_ptr,
15697 NOP_EXPR, vtbl,
15698 tf_warning_or_error);
15699 finish_decl_cleanup (NULL_TREE, stmt);
15701 else
15702 finish_decl_cleanup (NULL_TREE, build_clobber_this ());
15705 /* And insert cleanups for our bases and members so that they
15706 will be properly destroyed if we throw. */
15707 push_base_cleanups ();
15711 /* At the end of every destructor we generate code to delete the object if
15712 necessary. Do that now. */
15714 static void
15715 finish_destructor_body (void)
15717 tree exprstmt;
15719 /* Any return from a destructor will end up here; that way all base
15720 and member cleanups will be run when the function returns. */
15721 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15723 if (targetm.cxx.cdtor_returns_this ())
15725 tree val;
15727 val = DECL_ARGUMENTS (current_function_decl);
15728 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15729 DECL_RESULT (current_function_decl), val);
15730 /* Return the address of the object. */
15731 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15732 add_stmt (exprstmt);
15736 /* Do the necessary processing for the beginning of a function body, which
15737 in this case includes member-initializers, but not the catch clauses of
15738 a function-try-block. Currently, this means opening a binding level
15739 for the member-initializers (in a ctor), member cleanups (in a dtor),
15740 and capture proxies (in a lambda operator()). */
15742 tree
15743 begin_function_body (void)
15745 tree stmt;
15747 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
15748 return NULL_TREE;
15750 if (processing_template_decl)
15751 /* Do nothing now. */;
15752 else
15753 /* Always keep the BLOCK node associated with the outermost pair of
15754 curly braces of a function. These are needed for correct
15755 operation of dwarfout.c. */
15756 keep_next_level (true);
15758 stmt = begin_compound_stmt (BCS_FN_BODY);
15760 if (processing_template_decl)
15761 /* Do nothing now. */;
15762 else if (DECL_DESTRUCTOR_P (current_function_decl))
15763 begin_destructor_body ();
15765 return stmt;
15768 /* Do the processing for the end of a function body. Currently, this means
15769 closing out the cleanups for fully-constructed bases and members, and in
15770 the case of the destructor, deleting the object if desired. Again, this
15771 is only meaningful for [cd]tors, since they are the only functions where
15772 there is a significant distinction between the main body and any
15773 function catch clauses. Handling, say, main() return semantics here
15774 would be wrong, as flowing off the end of a function catch clause for
15775 main() would also need to return 0. */
15777 void
15778 finish_function_body (tree compstmt)
15780 if (compstmt == NULL_TREE)
15781 return;
15783 /* Close the block. */
15784 finish_compound_stmt (compstmt);
15786 if (processing_template_decl)
15787 /* Do nothing now. */;
15788 else if (DECL_CONSTRUCTOR_P (current_function_decl))
15789 finish_constructor_body ();
15790 else if (DECL_DESTRUCTOR_P (current_function_decl))
15791 finish_destructor_body ();
15794 /* Given a function, returns the BLOCK corresponding to the outermost level
15795 of curly braces, skipping the artificial block created for constructor
15796 initializers. */
15798 tree
15799 outer_curly_brace_block (tree fndecl)
15801 tree block = DECL_INITIAL (fndecl);
15802 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15803 return block;
15804 block = BLOCK_SUBBLOCKS (block);
15805 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15806 return block;
15807 block = BLOCK_SUBBLOCKS (block);
15808 gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
15809 return block;
15812 /* If FNDECL is a class's key method, add the class to the list of
15813 keyed classes that should be emitted. */
15815 static void
15816 record_key_method_defined (tree fndecl)
15818 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
15819 && DECL_VIRTUAL_P (fndecl)
15820 && !processing_template_decl)
15822 tree fnclass = DECL_CONTEXT (fndecl);
15823 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
15824 vec_safe_push (keyed_classes, fnclass);
15828 /* Subroutine of finish_function.
15829 Save the body of constexpr functions for possible
15830 future compile time evaluation. */
15832 static void
15833 maybe_save_function_definition (tree fun)
15835 if (!processing_template_decl
15836 && DECL_DECLARED_CONSTEXPR_P (fun)
15837 && !cp_function_chain->invalid_constexpr
15838 && !DECL_CLONED_FUNCTION_P (fun))
15839 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
15842 /* Attempt to add a fix-it hint to RICHLOC suggesting the insertion
15843 of "return *this;" immediately before its location, using FNDECL's
15844 first statement (if any) to give the indentation, if appropriate. */
15846 static void
15847 add_return_star_this_fixit (gcc_rich_location *richloc, tree fndecl)
15849 location_t indent = UNKNOWN_LOCATION;
15850 tree stmts = expr_first (DECL_SAVED_TREE (fndecl));
15851 if (stmts)
15852 indent = EXPR_LOCATION (stmts);
15853 richloc->add_fixit_insert_formatted ("return *this;",
15854 richloc->get_loc (),
15855 indent);
15858 /* Finish up a function declaration and compile that function
15859 all the way to assembler language output. The free the storage
15860 for the function definition. INLINE_P is TRUE if we just
15861 finished processing the body of an in-class inline function
15862 definition. (This processing will have taken place after the
15863 class definition is complete.) */
15865 tree
15866 finish_function (bool inline_p)
15868 tree fndecl = current_function_decl;
15869 tree fntype, ctype = NULL_TREE;
15871 /* When we get some parse errors, we can end up without a
15872 current_function_decl, so cope. */
15873 if (fndecl == NULL_TREE)
15874 return error_mark_node;
15876 finish_lambda_scope ();
15878 if (c_dialect_objc ())
15879 objc_finish_function ();
15881 record_key_method_defined (fndecl);
15883 fntype = TREE_TYPE (fndecl);
15885 /* TREE_READONLY (fndecl) = 1;
15886 This caused &foo to be of type ptr-to-const-function
15887 which then got a warning when stored in a ptr-to-function variable. */
15889 gcc_assert (building_stmt_list_p ());
15890 /* The current function is being defined, so its DECL_INITIAL should
15891 be set, and unless there's a multiple definition, it should be
15892 error_mark_node. */
15893 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
15895 /* For a cloned function, we've already got all the code we need;
15896 there's no need to add any extra bits. */
15897 if (!DECL_CLONED_FUNCTION_P (fndecl))
15899 /* Make it so that `main' always returns 0 by default. */
15900 if (DECL_MAIN_P (current_function_decl))
15901 finish_return_stmt (integer_zero_node);
15903 if (use_eh_spec_block (current_function_decl))
15904 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
15905 (TREE_TYPE (current_function_decl)),
15906 current_eh_spec_block);
15909 /* If we're saving up tree structure, tie off the function now. */
15910 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
15912 finish_fname_decls ();
15914 /* If this function can't throw any exceptions, remember that. */
15915 if (!processing_template_decl
15916 && !cp_function_chain->can_throw
15917 && !flag_non_call_exceptions
15918 && !decl_replaceable_p (fndecl))
15919 TREE_NOTHROW (fndecl) = 1;
15921 /* This must come after expand_function_end because cleanups might
15922 have declarations (from inline functions) that need to go into
15923 this function's blocks. */
15925 /* If the current binding level isn't the outermost binding level
15926 for this function, either there is a bug, or we have experienced
15927 syntax errors and the statement tree is malformed. */
15928 if (current_binding_level->kind != sk_function_parms)
15930 /* Make sure we have already experienced errors. */
15931 gcc_assert (errorcount);
15933 /* Throw away the broken statement tree and extra binding
15934 levels. */
15935 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
15937 while (current_binding_level->kind != sk_function_parms)
15939 if (current_binding_level->kind == sk_class)
15940 pop_nested_class ();
15941 else
15942 poplevel (0, 0, 0);
15945 poplevel (1, 0, 1);
15947 /* Statements should always be full-expressions at the outermost set
15948 of curly braces for a function. */
15949 gcc_assert (stmts_are_full_exprs_p ());
15951 /* If there are no return statements in a function with auto return type,
15952 the return type is void. But if the declared type is something like
15953 auto*, this is an error. */
15954 if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
15955 && TREE_TYPE (fntype) == current_function_auto_return_pattern)
15957 if (is_auto (current_function_auto_return_pattern))
15959 apply_deduced_return_type (fndecl, void_type_node);
15960 fntype = TREE_TYPE (fndecl);
15962 else if (!current_function_returns_value
15963 && !current_function_returns_null)
15965 error ("no return statements in function returning %qT",
15966 current_function_auto_return_pattern);
15967 inform (input_location, "only plain %<auto%> return type can be "
15968 "deduced to %<void%>");
15972 // If this is a concept, check that the definition is reasonable.
15973 if (DECL_DECLARED_CONCEPT_P (fndecl))
15974 check_function_concept (fndecl);
15976 /* Lambda closure members are implicitly constexpr if possible. */
15977 if (cxx_dialect >= cxx17
15978 && LAMBDA_TYPE_P (CP_DECL_CONTEXT (fndecl)))
15979 DECL_DECLARED_CONSTEXPR_P (fndecl)
15980 = ((processing_template_decl
15981 || is_valid_constexpr_fn (fndecl, /*complain*/false))
15982 && potential_constant_expression (DECL_SAVED_TREE (fndecl)));
15984 /* Save constexpr function body before it gets munged by
15985 the NRV transformation. */
15986 maybe_save_function_definition (fndecl);
15988 /* Invoke the pre-genericize plugin before we start munging things. */
15989 if (!processing_template_decl)
15990 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
15992 /* Perform delayed folding before NRV transformation. */
15993 if (!processing_template_decl)
15994 cp_fold_function (fndecl);
15996 /* Set up the named return value optimization, if we can. Candidate
15997 variables are selected in check_return_expr. */
15998 if (current_function_return_value)
16000 tree r = current_function_return_value;
16001 tree outer;
16003 if (r != error_mark_node
16004 /* This is only worth doing for fns that return in memory--and
16005 simpler, since we don't have to worry about promoted modes. */
16006 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
16007 /* Only allow this for variables declared in the outer scope of
16008 the function so we know that their lifetime always ends with a
16009 return; see g++.dg/opt/nrv6.C. We could be more flexible if
16010 we were to do this optimization in tree-ssa. */
16011 && (outer = outer_curly_brace_block (fndecl))
16012 && chain_member (r, BLOCK_VARS (outer)))
16013 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
16015 current_function_return_value = NULL_TREE;
16018 /* Remember that we were in class scope. */
16019 if (current_class_name)
16020 ctype = current_class_type;
16022 /* Must mark the RESULT_DECL as being in this function. */
16023 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
16025 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
16026 to the FUNCTION_DECL node itself. */
16027 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
16029 /* Save away current state, if appropriate. */
16030 if (!processing_template_decl)
16031 save_function_data (fndecl);
16033 /* Complain if there's just no return statement. */
16034 if (warn_return_type
16035 && !VOID_TYPE_P (TREE_TYPE (fntype))
16036 && !dependent_type_p (TREE_TYPE (fntype))
16037 && !current_function_returns_value && !current_function_returns_null
16038 /* Don't complain if we abort or throw. */
16039 && !current_function_returns_abnormally
16040 /* Don't complain if there's an infinite loop. */
16041 && !current_function_infinite_loop
16042 /* Don't complain if we are declared noreturn. */
16043 && !TREE_THIS_VOLATILE (fndecl)
16044 && !DECL_NAME (DECL_RESULT (fndecl))
16045 && !TREE_NO_WARNING (fndecl)
16046 /* Structor return values (if any) are set by the compiler. */
16047 && !DECL_CONSTRUCTOR_P (fndecl)
16048 && !DECL_DESTRUCTOR_P (fndecl)
16049 && targetm.warn_func_return (fndecl))
16051 gcc_rich_location richloc (input_location);
16052 /* Potentially add a "return *this;" fix-it hint for
16053 assignment operators. */
16054 if (IDENTIFIER_ASSIGN_OP_P (DECL_NAME (fndecl)))
16056 tree valtype = TREE_TYPE (DECL_RESULT (fndecl));
16057 if (TREE_CODE (valtype) == REFERENCE_TYPE
16058 && same_type_ignoring_top_level_qualifiers_p
16059 (TREE_TYPE (valtype), TREE_TYPE (current_class_ref)))
16060 if (global_dc->option_enabled (OPT_Wreturn_type,
16061 global_dc->option_state))
16062 add_return_star_this_fixit (&richloc, fndecl);
16064 warning_at (&richloc, OPT_Wreturn_type,
16065 "no return statement in function returning non-void");
16066 TREE_NO_WARNING (fndecl) = 1;
16069 /* Store the end of the function, so that we get good line number
16070 info for the epilogue. */
16071 cfun->function_end_locus = input_location;
16073 /* Complain about parameters that are only set, but never otherwise used. */
16074 if (warn_unused_but_set_parameter
16075 && !processing_template_decl
16076 && errorcount == unused_but_set_errorcount
16077 && !DECL_CLONED_FUNCTION_P (fndecl))
16079 tree decl;
16081 for (decl = DECL_ARGUMENTS (fndecl);
16082 decl;
16083 decl = DECL_CHAIN (decl))
16084 if (TREE_USED (decl)
16085 && TREE_CODE (decl) == PARM_DECL
16086 && !DECL_READ_P (decl)
16087 && DECL_NAME (decl)
16088 && !DECL_ARTIFICIAL (decl)
16089 && !TREE_NO_WARNING (decl)
16090 && !DECL_IN_SYSTEM_HEADER (decl)
16091 && TREE_TYPE (decl) != error_mark_node
16092 && !TYPE_REF_P (TREE_TYPE (decl))
16093 && (!CLASS_TYPE_P (TREE_TYPE (decl))
16094 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
16095 warning_at (DECL_SOURCE_LOCATION (decl),
16096 OPT_Wunused_but_set_parameter,
16097 "parameter %qD set but not used", decl);
16098 unused_but_set_errorcount = errorcount;
16101 /* Complain about locally defined typedefs that are not used in this
16102 function. */
16103 maybe_warn_unused_local_typedefs ();
16105 /* Possibly warn about unused parameters. */
16106 if (warn_unused_parameter
16107 && !processing_template_decl
16108 && !DECL_CLONED_FUNCTION_P (fndecl))
16109 do_warn_unused_parameter (fndecl);
16111 /* Genericize before inlining. */
16112 if (!processing_template_decl)
16114 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
16115 cp_genericize (fndecl);
16116 /* Clear out the bits we don't need. */
16117 f->x_current_class_ptr = NULL;
16118 f->x_current_class_ref = NULL;
16119 f->x_eh_spec_block = NULL;
16120 f->x_in_charge_parm = NULL;
16121 f->x_vtt_parm = NULL;
16122 f->x_return_value = NULL;
16123 f->bindings = NULL;
16124 f->extern_decl_map = NULL;
16125 f->infinite_loops = NULL;
16127 /* Clear out the bits we don't need. */
16128 local_names = NULL;
16130 /* We're leaving the context of this function, so zap cfun. It's still in
16131 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
16132 set_cfun (NULL);
16133 current_function_decl = NULL;
16135 /* If this is an in-class inline definition, we may have to pop the
16136 bindings for the template parameters that we added in
16137 maybe_begin_member_template_processing when start_function was
16138 called. */
16139 if (inline_p)
16140 maybe_end_member_template_processing ();
16142 /* Leave the scope of the class. */
16143 if (ctype)
16144 pop_nested_class ();
16146 --function_depth;
16148 /* Clean up. */
16149 current_function_decl = NULL_TREE;
16151 invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
16152 return fndecl;
16155 /* Create the FUNCTION_DECL for a function definition.
16156 DECLSPECS and DECLARATOR are the parts of the declaration;
16157 they describe the return type and the name of the function,
16158 but twisted together in a fashion that parallels the syntax of C.
16160 This function creates a binding context for the function body
16161 as well as setting up the FUNCTION_DECL in current_function_decl.
16163 Returns a FUNCTION_DECL on success.
16165 If the DECLARATOR is not suitable for a function (it defines a datum
16166 instead), we return 0, which tells yyparse to report a parse error.
16168 May return void_type_node indicating that this method is actually
16169 a friend. See grokfield for more details.
16171 Came here with a `.pushlevel' .
16173 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
16174 CHANGES TO CODE IN `grokfield'. */
16176 tree
16177 grokmethod (cp_decl_specifier_seq *declspecs,
16178 const cp_declarator *declarator, tree attrlist)
16180 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
16181 &attrlist);
16183 if (fndecl == error_mark_node)
16184 return error_mark_node;
16186 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
16188 error ("invalid member function declaration");
16189 return error_mark_node;
16192 if (attrlist)
16193 cplus_decl_attributes (&fndecl, attrlist, 0);
16195 /* Pass friends other than inline friend functions back. */
16196 if (fndecl == void_type_node)
16197 return fndecl;
16199 if (DECL_IN_AGGR_P (fndecl))
16201 if (DECL_CLASS_SCOPE_P (fndecl))
16202 error ("%qD is already defined in class %qT", fndecl,
16203 DECL_CONTEXT (fndecl));
16204 return error_mark_node;
16207 check_template_shadow (fndecl);
16209 if (TREE_PUBLIC (fndecl))
16210 DECL_COMDAT (fndecl) = 1;
16211 DECL_DECLARED_INLINE_P (fndecl) = 1;
16212 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
16214 /* We process method specializations in finish_struct_1. */
16215 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
16217 fndecl = push_template_decl (fndecl);
16218 if (fndecl == error_mark_node)
16219 return fndecl;
16222 if (! DECL_FRIEND_P (fndecl))
16224 if (DECL_CHAIN (fndecl))
16226 fndecl = copy_node (fndecl);
16227 TREE_CHAIN (fndecl) = NULL_TREE;
16231 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
16233 DECL_IN_AGGR_P (fndecl) = 1;
16234 return fndecl;
16238 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
16239 we can lay it out later, when and if its type becomes complete.
16241 Also handle constexpr variables where the initializer involves
16242 an unlowered PTRMEM_CST because the class isn't complete yet. */
16244 void
16245 maybe_register_incomplete_var (tree var)
16247 gcc_assert (VAR_P (var));
16249 /* Keep track of variables with incomplete types. */
16250 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
16251 && DECL_EXTERNAL (var))
16253 tree inner_type = TREE_TYPE (var);
16255 while (TREE_CODE (inner_type) == ARRAY_TYPE)
16256 inner_type = TREE_TYPE (inner_type);
16257 inner_type = TYPE_MAIN_VARIANT (inner_type);
16259 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
16260 /* RTTI TD entries are created while defining the type_info. */
16261 || (TYPE_LANG_SPECIFIC (inner_type)
16262 && TYPE_BEING_DEFINED (inner_type)))
16264 incomplete_var iv = {var, inner_type};
16265 vec_safe_push (incomplete_vars, iv);
16267 else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
16268 && decl_constant_var_p (var)
16269 && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
16271 /* When the outermost open class is complete we can resolve any
16272 pointers-to-members. */
16273 tree context = outermost_open_class ();
16274 incomplete_var iv = {var, context};
16275 vec_safe_push (incomplete_vars, iv);
16280 /* Called when a class type (given by TYPE) is defined. If there are
16281 any existing VAR_DECLs whose type has been completed by this
16282 declaration, update them now. */
16284 void
16285 complete_vars (tree type)
16287 unsigned ix;
16288 incomplete_var *iv;
16290 for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
16292 if (same_type_p (type, iv->incomplete_type))
16294 tree var = iv->decl;
16295 tree type = TREE_TYPE (var);
16297 if (type != error_mark_node
16298 && (TYPE_MAIN_VARIANT (strip_array_types (type))
16299 == iv->incomplete_type))
16301 /* Complete the type of the variable. The VAR_DECL itself
16302 will be laid out in expand_expr. */
16303 complete_type (type);
16304 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
16307 /* Remove this entry from the list. */
16308 incomplete_vars->unordered_remove (ix);
16310 else
16311 ix++;
16314 /* Check for pending declarations which may have abstract type. */
16315 complete_type_check_abstract (type);
16318 /* If DECL is of a type which needs a cleanup, build and return an
16319 expression to perform that cleanup here. Return NULL_TREE if no
16320 cleanup need be done. DECL can also be a _REF when called from
16321 split_nonconstant_init_1. */
16323 tree
16324 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
16326 tree type;
16327 tree attr;
16328 tree cleanup;
16330 /* Assume no cleanup is required. */
16331 cleanup = NULL_TREE;
16333 if (error_operand_p (decl))
16334 return cleanup;
16336 /* Handle "__attribute__((cleanup))". We run the cleanup function
16337 before the destructor since the destructor is what actually
16338 terminates the lifetime of the object. */
16339 if (DECL_P (decl))
16340 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
16341 else
16342 attr = NULL_TREE;
16343 if (attr)
16345 tree id;
16346 tree fn;
16347 tree arg;
16349 /* Get the name specified by the user for the cleanup function. */
16350 id = TREE_VALUE (TREE_VALUE (attr));
16351 /* Look up the name to find the cleanup function to call. It is
16352 important to use lookup_name here because that is what is
16353 used in c-common.c:handle_cleanup_attribute when performing
16354 initial checks on the attribute. Note that those checks
16355 include ensuring that the function found is not an overloaded
16356 function, or an object with an overloaded call operator,
16357 etc.; we can rely on the fact that the function found is an
16358 ordinary FUNCTION_DECL. */
16359 fn = lookup_name (id);
16360 arg = build_address (decl);
16361 if (!mark_used (decl, complain) && !(complain & tf_error))
16362 return error_mark_node;
16363 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
16364 if (cleanup == error_mark_node)
16365 return error_mark_node;
16367 /* Handle ordinary C++ destructors. */
16368 type = TREE_TYPE (decl);
16369 if (type_build_dtor_call (type))
16371 int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
16372 tree addr;
16373 tree call;
16375 if (TREE_CODE (type) == ARRAY_TYPE)
16376 addr = decl;
16377 else
16378 addr = build_address (decl);
16380 call = build_delete (TREE_TYPE (addr), addr,
16381 sfk_complete_destructor, flags, 0, complain);
16382 if (call == error_mark_node)
16383 cleanup = error_mark_node;
16384 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
16385 /* Discard the call. */;
16386 else if (cleanup)
16387 cleanup = cp_build_compound_expr (cleanup, call, complain);
16388 else
16389 cleanup = call;
16392 /* build_delete sets the location of the destructor call to the
16393 current location, even though the destructor is going to be
16394 called later, at the end of the current scope. This can lead to
16395 a "jumpy" behavior for users of debuggers when they step around
16396 the end of the block. So let's unset the location of the
16397 destructor call instead. */
16398 protected_set_expr_location (cleanup, UNKNOWN_LOCATION);
16400 if (cleanup
16401 && DECL_P (decl)
16402 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl)))
16403 /* Treat objects with destructors as used; the destructor may do
16404 something substantive. */
16405 && !mark_used (decl, complain) && !(complain & tf_error))
16406 return error_mark_node;
16408 return cleanup;
16412 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
16413 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
16414 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
16416 tree
16417 static_fn_type (tree memfntype)
16419 tree fntype;
16420 tree args;
16422 if (TYPE_PTRMEMFUNC_P (memfntype))
16423 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
16424 if (INDIRECT_TYPE_P (memfntype)
16425 || TREE_CODE (memfntype) == FUNCTION_DECL)
16426 memfntype = TREE_TYPE (memfntype);
16427 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
16428 return memfntype;
16429 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
16430 args = TYPE_ARG_TYPES (memfntype);
16431 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
16432 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype));
16433 fntype = (cp_build_type_attribute_variant
16434 (fntype, TYPE_ATTRIBUTES (memfntype)));
16435 fntype = cxx_copy_lang_qualifiers (fntype, memfntype);
16436 return fntype;
16439 /* DECL was originally constructed as a non-static member function,
16440 but turned out to be static. Update it accordingly. */
16442 void
16443 revert_static_member_fn (tree decl)
16445 tree stype = static_fn_type (decl);
16446 cp_cv_quals quals = type_memfn_quals (stype);
16447 cp_ref_qualifier rqual = type_memfn_rqual (stype);
16449 if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
16450 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
16452 TREE_TYPE (decl) = stype;
16454 if (DECL_ARGUMENTS (decl))
16455 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
16456 DECL_STATIC_FUNCTION_P (decl) = 1;
16459 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
16460 one of the language-independent trees. */
16462 enum cp_tree_node_structure_enum
16463 cp_tree_node_structure (union lang_tree_node * t)
16465 switch (TREE_CODE (&t->generic))
16467 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
16468 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
16469 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
16470 case OVERLOAD: return TS_CP_OVERLOAD;
16471 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
16472 case PTRMEM_CST: return TS_CP_PTRMEM;
16473 case BASELINK: return TS_CP_BASELINK;
16474 case TEMPLATE_DECL: return TS_CP_TEMPLATE_DECL;
16475 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
16476 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
16477 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
16478 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
16479 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
16480 case CONSTRAINT_INFO: return TS_CP_CONSTRAINT_INFO;
16481 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
16482 default: return TS_CP_GENERIC;
16486 /* Build the void_list_node (void_type_node having been created). */
16487 tree
16488 build_void_list_node (void)
16490 tree t = build_tree_list (NULL_TREE, void_type_node);
16491 return t;
16494 bool
16495 cp_missing_noreturn_ok_p (tree decl)
16497 /* A missing noreturn is ok for the `main' function. */
16498 return DECL_MAIN_P (decl);
16501 /* Return the decl used to identify the COMDAT group into which DECL should
16502 be placed. */
16504 tree
16505 cxx_comdat_group (tree decl)
16507 /* Virtual tables, construction virtual tables, and virtual table
16508 tables all go in a single COMDAT group, named after the primary
16509 virtual table. */
16510 if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
16511 decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
16512 /* For all other DECLs, the COMDAT group is the mangled name of the
16513 declaration itself. */
16514 else
16516 while (DECL_THUNK_P (decl))
16518 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
16519 into the same section as the target function. In that case
16520 we must return target's name. */
16521 tree target = THUNK_TARGET (decl);
16522 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
16523 && DECL_SECTION_NAME (target) != NULL
16524 && DECL_ONE_ONLY (target))
16525 decl = target;
16526 else
16527 break;
16531 return decl;
16534 /* Returns the return type for FN as written by the user, which may include
16535 a placeholder for a deduced return type. */
16537 tree
16538 fndecl_declared_return_type (tree fn)
16540 fn = STRIP_TEMPLATE (fn);
16541 if (FNDECL_USED_AUTO (fn))
16543 struct language_function *f = NULL;
16544 if (DECL_STRUCT_FUNCTION (fn))
16545 f = DECL_STRUCT_FUNCTION (fn)->language;
16546 if (f == NULL)
16547 f = DECL_SAVED_FUNCTION_DATA (fn);
16548 return f->x_auto_return_pattern;
16550 return TREE_TYPE (TREE_TYPE (fn));
16553 /* Returns true iff DECL is a variable or function declared with an auto type
16554 that has not yet been deduced to a real type. */
16556 bool
16557 undeduced_auto_decl (tree decl)
16559 if (cxx_dialect < cxx11)
16560 return false;
16561 return ((VAR_OR_FUNCTION_DECL_P (decl)
16562 || TREE_CODE (decl) == TEMPLATE_DECL)
16563 && type_uses_auto (TREE_TYPE (decl)));
16566 /* Complain if DECL has an undeduced return type. */
16568 bool
16569 require_deduced_type (tree decl, tsubst_flags_t complain)
16571 if (undeduced_auto_decl (decl))
16573 if (complain & tf_error)
16574 error ("use of %qD before deduction of %<auto%>", decl);
16575 return false;
16577 return true;
16580 #include "gt-cp-decl.h"