PR c++/60336
[official-gcc.git] / gcc / cp / decl.c
blob121b4a4f0dbf5bd2c433fa0b1187c95bdf6a61e5
1 /* Process declarations and variables for C++ compiler.
2 Copyright (C) 1988-2017 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 "cilk.h"
52 #include "builtins.h"
53 #include "gimplify.h"
54 #include "asan.h"
56 /* Possible cases of bad specifiers type used by bad_specifiers. */
57 enum bad_spec_place {
58 BSP_VAR, /* variable */
59 BSP_PARM, /* parameter */
60 BSP_TYPE, /* type */
61 BSP_FIELD /* field */
64 static const char *redeclaration_error_message (tree, tree);
66 static int decl_jump_unsafe (tree);
67 static void require_complete_types_for_parms (tree);
68 static void push_local_name (tree);
69 static tree grok_reference_init (tree, tree, tree, int);
70 static tree grokvardecl (tree, tree, tree, const cp_decl_specifier_seq *,
71 int, int, int, bool, int, tree);
72 static int check_static_variable_definition (tree, tree);
73 static void record_unknown_type (tree, const char *);
74 static tree builtin_function_1 (tree, tree, bool);
75 static int member_function_or_else (tree, tree, enum overload_flags);
76 static void check_for_uninitialized_const_var (tree);
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 int leaving_for_scope;
582 scope_kind kind;
583 unsigned ix;
585 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
586 restart:
588 block = NULL_TREE;
590 gcc_assert (current_binding_level->kind != sk_class
591 && current_binding_level->kind != sk_namespace);
593 if (current_binding_level->kind == sk_cleanup)
594 functionbody = 0;
595 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
597 gcc_assert (!vec_safe_length (current_binding_level->class_shadowed));
599 /* We used to use KEEP == 2 to indicate that the new block should go
600 at the beginning of the list of blocks at this binding level,
601 rather than the end. This hack is no longer used. */
602 gcc_assert (keep == 0 || keep == 1);
604 if (current_binding_level->keep)
605 keep = 1;
607 /* Any uses of undefined labels, and any defined labels, now operate
608 under constraints of next binding contour. */
609 if (cfun && !functionbody && named_labels)
610 named_labels->traverse<cp_binding_level *, poplevel_named_label_1>
611 (current_binding_level);
613 /* Get the decls in the order they were written.
614 Usually current_binding_level->names is in reverse order.
615 But parameter decls were previously put in forward order. */
617 decls = current_binding_level->names;
618 if (reverse)
620 decls = nreverse (decls);
621 current_binding_level->names = decls;
624 /* If there were any declarations or structure tags in that level,
625 or if this level is a function body,
626 create a BLOCK to record them for the life of this function. */
627 block = NULL_TREE;
628 /* Avoid function body block if possible. */
629 if (functionbody && subblocks && BLOCK_CHAIN (subblocks) == NULL_TREE)
630 keep = 0;
631 else if (keep == 1 || functionbody)
632 block = make_node (BLOCK);
633 if (block != NULL_TREE)
635 BLOCK_VARS (block) = decls;
636 BLOCK_SUBBLOCKS (block) = subblocks;
639 /* In each subblock, record that this is its superior. */
640 if (keep >= 0)
641 for (link = subblocks; link; link = BLOCK_CHAIN (link))
642 BLOCK_SUPERCONTEXT (link) = block;
644 /* We still support the old for-scope rules, whereby the variables
645 in a init statement were in scope after the for-statement ended.
646 We only use the new rules if flag_new_for_scope is nonzero. */
647 leaving_for_scope
648 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
650 /* Before we remove the declarations first check for unused variables. */
651 if ((warn_unused_variable || warn_unused_but_set_variable)
652 && current_binding_level->kind != sk_template_parms
653 && !processing_template_decl)
654 for (tree d = get_local_decls (); d; d = TREE_CHAIN (d))
656 /* There are cases where D itself is a TREE_LIST. See in
657 push_local_binding where the list of decls returned by
658 getdecls is built. */
659 decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
661 tree type = TREE_TYPE (decl);
662 if (VAR_P (decl)
663 && (! TREE_USED (decl) || !DECL_READ_P (decl))
664 && ! DECL_IN_SYSTEM_HEADER (decl)
665 /* For structured bindings, consider only real variables, not
666 subobjects. */
667 && (DECL_DECOMPOSITION_P (decl) ? !DECL_DECOMP_BASE (decl)
668 : (DECL_NAME (decl) && !DECL_ARTIFICIAL (decl)))
669 && type != error_mark_node
670 && (!CLASS_TYPE_P (type)
671 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
672 || lookup_attribute ("warn_unused",
673 TYPE_ATTRIBUTES (TREE_TYPE (decl)))))
675 if (! TREE_USED (decl))
677 if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
678 warning_at (DECL_SOURCE_LOCATION (decl),
679 OPT_Wunused_variable,
680 "unused structured binding declaration");
681 else
682 warning_at (DECL_SOURCE_LOCATION (decl),
683 OPT_Wunused_variable, "unused variable %qD", decl);
685 else if (DECL_CONTEXT (decl) == current_function_decl
686 // For -Wunused-but-set-variable leave references alone.
687 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
688 && errorcount == unused_but_set_errorcount)
690 if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
691 warning_at (DECL_SOURCE_LOCATION (decl),
692 OPT_Wunused_but_set_variable, "structured "
693 "binding declaration set but not used");
694 else
695 warning_at (DECL_SOURCE_LOCATION (decl),
696 OPT_Wunused_but_set_variable,
697 "variable %qD set but not used", decl);
698 unused_but_set_errorcount = errorcount;
703 /* Remove declarations for all the DECLs in this level. */
704 for (link = decls; link; link = TREE_CHAIN (link))
706 decl = TREE_CODE (link) == TREE_LIST ? TREE_VALUE (link) : link;
707 tree name = OVL_NAME (decl);
709 if (leaving_for_scope && VAR_P (decl)
710 /* It's hard to make this ARM compatibility hack play nicely with
711 lambdas, and it really isn't necessary in C++11 mode. */
712 && cxx_dialect < cxx11
713 && name)
715 cxx_binding *ob = outer_binding (name,
716 IDENTIFIER_BINDING (name),
717 /*class_p=*/true);
718 tree ns_binding = NULL_TREE;
719 if (!ob)
720 ns_binding = get_namespace_binding (current_namespace, name);
722 if (ob && ob->scope == current_binding_level->level_chain)
723 /* We have something like:
725 int i;
726 for (int i; ;);
728 and we are leaving the `for' scope. There's no reason to
729 keep the binding of the inner `i' in this case. */
731 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
732 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
733 /* Here, we have something like:
735 typedef int I;
737 void f () {
738 for (int I; ;);
741 We must pop the for-scope binding so we know what's a
742 type and what isn't. */
744 else
746 /* Mark this VAR_DECL as dead so that we can tell we left it
747 there only for backward compatibility. */
748 DECL_DEAD_FOR_LOCAL (link) = 1;
750 /* Keep track of what should have happened when we
751 popped the binding. */
752 if (ob && ob->value)
754 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
755 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
758 /* Add it to the list of dead variables in the next
759 outermost binding to that we can remove these when we
760 leave that binding. */
761 vec_safe_push (
762 current_binding_level->level_chain->dead_vars_from_for,
763 link);
765 /* Although we don't pop the cxx_binding, we do clear
766 its SCOPE since the scope is going away now. */
767 IDENTIFIER_BINDING (name)->scope
768 = current_binding_level->level_chain;
770 /* Don't remove the binding. */
771 name = NULL_TREE;
774 /* Remove the binding. */
775 if (TREE_CODE (decl) == LABEL_DECL)
776 pop_local_label (name, decl);
777 else
778 pop_local_binding (name, decl);
781 /* Remove declarations for any `for' variables from inner scopes
782 that we kept around. */
783 FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->dead_vars_from_for,
784 ix, decl)
785 pop_local_binding (DECL_NAME (decl), decl);
787 /* Restore the IDENTIFIER_TYPE_VALUEs. */
788 for (link = current_binding_level->type_shadowed;
789 link; link = TREE_CHAIN (link))
790 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
792 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
793 list if a `using' declaration put them there. The debugging
794 back ends won't understand OVERLOAD, so we remove them here.
795 Because the BLOCK_VARS are (temporarily) shared with
796 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
797 popped all the bindings. Also remove undeduced 'auto' decls,
798 which LTO doesn't understand, and can't have been used by anything. */
799 if (block)
801 tree* d;
803 for (d = &BLOCK_VARS (block); *d; )
805 if (TREE_CODE (*d) == TREE_LIST
806 || (!processing_template_decl
807 && undeduced_auto_decl (*d)))
808 *d = TREE_CHAIN (*d);
809 else
810 d = &DECL_CHAIN (*d);
814 /* If the level being exited is the top level of a function,
815 check over all the labels. */
816 if (functionbody)
818 if (block)
820 /* Since this is the top level block of a function, the vars are
821 the function's parameters. Don't leave them in the BLOCK
822 because they are found in the FUNCTION_DECL instead. */
823 BLOCK_VARS (block) = 0;
824 pop_labels (block);
826 else
827 pop_labels (subblocks);
830 kind = current_binding_level->kind;
831 if (kind == sk_cleanup)
833 tree stmt;
835 /* If this is a temporary binding created for a cleanup, then we'll
836 have pushed a statement list level. Pop that, create a new
837 BIND_EXPR for the block, and insert it into the stream. */
838 stmt = pop_stmt_list (current_binding_level->statement_list);
839 stmt = c_build_bind_expr (input_location, block, stmt);
840 add_stmt (stmt);
843 leave_scope ();
844 if (functionbody)
846 /* The current function is being defined, so its DECL_INITIAL
847 should be error_mark_node. */
848 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
849 DECL_INITIAL (current_function_decl) = block ? block : subblocks;
850 if (subblocks)
852 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
854 if (BLOCK_SUBBLOCKS (subblocks))
855 BLOCK_OUTER_CURLY_BRACE_P (BLOCK_SUBBLOCKS (subblocks)) = 1;
857 else
858 BLOCK_OUTER_CURLY_BRACE_P (subblocks) = 1;
861 else if (block)
862 current_binding_level->blocks
863 = block_chainon (current_binding_level->blocks, block);
865 /* If we did not make a block for the level just exited,
866 any blocks made for inner levels
867 (since they cannot be recorded as subblocks in that level)
868 must be carried forward so they will later become subblocks
869 of something else. */
870 else if (subblocks)
871 current_binding_level->blocks
872 = block_chainon (current_binding_level->blocks, subblocks);
874 /* Each and every BLOCK node created here in `poplevel' is important
875 (e.g. for proper debugging information) so if we created one
876 earlier, mark it as "used". */
877 if (block)
878 TREE_USED (block) = 1;
880 /* All temporary bindings created for cleanups are popped silently. */
881 if (kind == sk_cleanup)
882 goto restart;
884 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
885 return block;
888 /* Call wrapup_globals_declarations for the globals in NAMESPACE. */
889 /* Diagnose odr-used extern inline variables without definitions
890 in the current TU. */
893 wrapup_namespace_globals ()
895 if (vec<tree, va_gc> *statics = static_decls)
897 tree decl;
898 unsigned int i;
899 FOR_EACH_VEC_ELT (*statics, i, decl)
901 if (warn_unused_function
902 && TREE_CODE (decl) == FUNCTION_DECL
903 && DECL_INITIAL (decl) == 0
904 && DECL_EXTERNAL (decl)
905 && !TREE_PUBLIC (decl)
906 && !DECL_ARTIFICIAL (decl)
907 && !DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
908 && !TREE_NO_WARNING (decl))
909 warning_at (DECL_SOURCE_LOCATION (decl),
910 OPT_Wunused_function,
911 "%qF declared %<static%> but never defined", decl);
913 if (VAR_P (decl)
914 && DECL_EXTERNAL (decl)
915 && DECL_INLINE_VAR_P (decl)
916 && DECL_ODR_USED (decl))
917 error_at (DECL_SOURCE_LOCATION (decl),
918 "odr-used inline variable %qD is not defined", decl);
921 /* Clear out the list, so we don't rescan next time. */
922 static_decls = NULL;
924 /* Write out any globals that need to be output. */
925 return wrapup_global_declarations (statics->address (),
926 statics->length ());
928 return 0;
931 /* In C++, you don't have to write `struct S' to refer to `S'; you
932 can just use `S'. We accomplish this by creating a TYPE_DECL as
933 if the user had written `typedef struct S S'. Create and return
934 the TYPE_DECL for TYPE. */
936 tree
937 create_implicit_typedef (tree name, tree type)
939 tree decl;
941 decl = build_decl (input_location, TYPE_DECL, name, type);
942 DECL_ARTIFICIAL (decl) = 1;
943 /* There are other implicit type declarations, like the one *within*
944 a class that allows you to write `S::S'. We must distinguish
945 amongst these. */
946 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
947 TYPE_NAME (type) = decl;
948 TYPE_STUB_DECL (type) = decl;
950 return decl;
953 /* Remember a local name for name-mangling purposes. */
955 static void
956 push_local_name (tree decl)
958 size_t i, nelts;
959 tree t, name;
961 timevar_start (TV_NAME_LOOKUP);
963 name = DECL_NAME (decl);
965 nelts = vec_safe_length (local_names);
966 for (i = 0; i < nelts; i++)
968 t = (*local_names)[i];
969 if (DECL_NAME (t) == name)
971 retrofit_lang_decl (decl);
972 DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
973 if (DECL_DISCRIMINATOR_SET_P (t))
974 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
975 else
976 DECL_DISCRIMINATOR (decl) = 1;
978 (*local_names)[i] = decl;
979 timevar_stop (TV_NAME_LOOKUP);
980 return;
984 vec_safe_push (local_names, decl);
985 timevar_stop (TV_NAME_LOOKUP);
988 /* Subroutine of duplicate_decls: return truthvalue of whether
989 or not types of these decls match.
991 For C++, we must compare the parameter list so that `int' can match
992 `int&' in a parameter position, but `int&' is not confused with
993 `const int&'. */
996 decls_match (tree newdecl, tree olddecl)
998 int types_match;
1000 if (newdecl == olddecl)
1001 return 1;
1003 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
1004 /* If the two DECLs are not even the same kind of thing, we're not
1005 interested in their types. */
1006 return 0;
1008 gcc_assert (DECL_P (newdecl));
1010 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1012 tree f1 = TREE_TYPE (newdecl);
1013 tree f2 = TREE_TYPE (olddecl);
1014 tree p1 = TYPE_ARG_TYPES (f1);
1015 tree p2 = TYPE_ARG_TYPES (f2);
1016 tree r2;
1018 /* Specializations of different templates are different functions
1019 even if they have the same type. */
1020 tree t1 = (DECL_USE_TEMPLATE (newdecl)
1021 ? DECL_TI_TEMPLATE (newdecl)
1022 : NULL_TREE);
1023 tree t2 = (DECL_USE_TEMPLATE (olddecl)
1024 ? DECL_TI_TEMPLATE (olddecl)
1025 : NULL_TREE);
1026 if (t1 != t2)
1027 return 0;
1029 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1030 && ! (DECL_EXTERN_C_P (newdecl)
1031 && DECL_EXTERN_C_P (olddecl)))
1032 return 0;
1034 /* A new declaration doesn't match a built-in one unless it
1035 is also extern "C". */
1036 if (DECL_IS_BUILTIN (olddecl)
1037 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
1038 return 0;
1040 if (TREE_CODE (f1) != TREE_CODE (f2))
1041 return 0;
1043 /* A declaration with deduced return type should use its pre-deduction
1044 type for declaration matching. */
1045 r2 = fndecl_declared_return_type (olddecl);
1047 if (same_type_p (TREE_TYPE (f1), r2))
1049 if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
1050 && (DECL_BUILT_IN (olddecl)
1051 #ifndef NO_IMPLICIT_EXTERN_C
1052 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
1053 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
1054 #endif
1057 types_match = self_promoting_args_p (p1);
1058 if (p1 == void_list_node)
1059 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1061 #ifndef NO_IMPLICIT_EXTERN_C
1062 else if (!prototype_p (f1)
1063 && (DECL_EXTERN_C_P (olddecl)
1064 && DECL_IN_SYSTEM_HEADER (olddecl)
1065 && !DECL_CLASS_SCOPE_P (olddecl))
1066 && (DECL_EXTERN_C_P (newdecl)
1067 && DECL_IN_SYSTEM_HEADER (newdecl)
1068 && !DECL_CLASS_SCOPE_P (newdecl)))
1070 types_match = self_promoting_args_p (p2);
1071 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1073 #endif
1074 else
1075 types_match =
1076 compparms (p1, p2)
1077 && type_memfn_rqual (f1) == type_memfn_rqual (f2)
1078 && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1079 || comp_type_attributes (TREE_TYPE (newdecl),
1080 TREE_TYPE (olddecl)) != 0);
1082 else
1083 types_match = 0;
1085 /* The decls dont match if they correspond to two different versions
1086 of the same function. Disallow extern "C" functions to be
1087 versions for now. */
1088 if (types_match
1089 && !DECL_EXTERN_C_P (newdecl)
1090 && !DECL_EXTERN_C_P (olddecl)
1091 && maybe_version_functions (newdecl, olddecl))
1092 return 0;
1094 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1096 tree oldres = DECL_TEMPLATE_RESULT (olddecl);
1097 tree newres = DECL_TEMPLATE_RESULT (newdecl);
1099 if (TREE_CODE (newres) != TREE_CODE (oldres))
1100 return 0;
1102 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1103 DECL_TEMPLATE_PARMS (olddecl)))
1104 return 0;
1106 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1107 types_match = (same_type_p (TREE_TYPE (oldres), TREE_TYPE (newres))
1108 && equivalently_constrained (olddecl, newdecl));
1109 else
1110 // We don't need to check equivalently_constrained for variable and
1111 // function templates because we check it on the results.
1112 types_match = decls_match (oldres, newres);
1114 else
1116 /* Need to check scope for variable declaration (VAR_DECL).
1117 For typedef (TYPE_DECL), scope is ignored. */
1118 if (VAR_P (newdecl)
1119 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1120 /* [dcl.link]
1121 Two declarations for an object with C language linkage
1122 with the same name (ignoring the namespace that qualify
1123 it) that appear in different namespace scopes refer to
1124 the same object. */
1125 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1126 return 0;
1128 if (TREE_TYPE (newdecl) == error_mark_node)
1129 types_match = TREE_TYPE (olddecl) == error_mark_node;
1130 else if (TREE_TYPE (olddecl) == NULL_TREE)
1131 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1132 else if (TREE_TYPE (newdecl) == NULL_TREE)
1133 types_match = 0;
1134 else
1135 types_match = comptypes (TREE_TYPE (newdecl),
1136 TREE_TYPE (olddecl),
1137 COMPARE_REDECLARATION);
1140 // Normal functions can be constrained, as can variable partial
1141 // specializations.
1142 if (types_match && VAR_OR_FUNCTION_DECL_P (newdecl))
1143 types_match = equivalently_constrained (newdecl, olddecl);
1145 return types_match;
1148 /* NEWDECL and OLDDECL have identical signatures. If they are
1149 different versions adjust them and return true. */
1151 bool
1152 maybe_version_functions (tree newdecl, tree olddecl)
1154 if (!targetm.target_option.function_versions (newdecl, olddecl))
1155 return false;
1157 bool record = false;
1159 if (!DECL_FUNCTION_VERSIONED (olddecl))
1161 record = true;
1162 DECL_FUNCTION_VERSIONED (olddecl) = 1;
1163 if (DECL_ASSEMBLER_NAME_SET_P (olddecl))
1164 mangle_decl (olddecl);
1167 if (!DECL_FUNCTION_VERSIONED (newdecl))
1169 record = true;
1170 DECL_FUNCTION_VERSIONED (newdecl) = 1;
1171 if (DECL_ASSEMBLER_NAME_SET_P (newdecl))
1172 mangle_decl (newdecl);
1175 /* Only record if at least one was not already versions. */
1176 if (record)
1177 cgraph_node::record_function_versions (olddecl, newdecl);
1179 return true;
1182 /* If NEWDECL is `static' and an `extern' was seen previously,
1183 warn about it. OLDDECL is the previous declaration.
1185 Note that this does not apply to the C++ case of declaring
1186 a variable `extern const' and then later `const'.
1188 Don't complain about built-in functions, since they are beyond
1189 the user's control. */
1191 void
1192 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1194 if (TREE_CODE (newdecl) == TYPE_DECL
1195 || TREE_CODE (newdecl) == TEMPLATE_DECL
1196 || TREE_CODE (newdecl) == CONST_DECL
1197 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1198 return;
1200 /* Don't get confused by static member functions; that's a different
1201 use of `static'. */
1202 if (TREE_CODE (newdecl) == FUNCTION_DECL
1203 && DECL_STATIC_FUNCTION_P (newdecl))
1204 return;
1206 /* If the old declaration was `static', or the new one isn't, then
1207 everything is OK. */
1208 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1209 return;
1211 /* It's OK to declare a builtin function as `static'. */
1212 if (TREE_CODE (olddecl) == FUNCTION_DECL
1213 && DECL_ARTIFICIAL (olddecl))
1214 return;
1216 if (permerror (DECL_SOURCE_LOCATION (newdecl),
1217 "%qD was declared %<extern%> and later %<static%>", newdecl))
1218 inform (DECL_SOURCE_LOCATION (olddecl),
1219 "previous declaration of %qD", olddecl);
1222 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1223 function templates. If their exception specifications do not
1224 match, issue a diagnostic. */
1226 static void
1227 check_redeclaration_exception_specification (tree new_decl,
1228 tree old_decl)
1230 tree new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1231 tree old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1233 /* Two default specs are equivalent, don't force evaluation. */
1234 if (UNEVALUATED_NOEXCEPT_SPEC_P (new_exceptions)
1235 && UNEVALUATED_NOEXCEPT_SPEC_P (old_exceptions))
1236 return;
1238 maybe_instantiate_noexcept (new_decl);
1239 maybe_instantiate_noexcept (old_decl);
1240 new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1241 old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1243 /* [except.spec]
1245 If any declaration of a function has an exception-specification,
1246 all declarations, including the definition and an explicit
1247 specialization, of that function shall have an
1248 exception-specification with the same set of type-ids. */
1249 if (! DECL_IS_BUILTIN (old_decl)
1250 && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1252 const char *const msg
1253 = G_("declaration of %qF has a different exception specifier");
1254 bool complained = true;
1255 location_t new_loc = DECL_SOURCE_LOCATION (new_decl);
1256 if (DECL_IN_SYSTEM_HEADER (old_decl))
1257 complained = pedwarn (new_loc, OPT_Wsystem_headers, msg, new_decl);
1258 else if (!flag_exceptions)
1259 /* We used to silently permit mismatched eh specs with
1260 -fno-exceptions, so make them a pedwarn now. */
1261 complained = pedwarn (new_loc, OPT_Wpedantic, msg, new_decl);
1262 else
1263 error_at (new_loc, msg, new_decl);
1264 if (complained)
1265 inform (DECL_SOURCE_LOCATION (old_decl),
1266 "from previous declaration %qF", old_decl);
1270 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1271 Otherwise issue diagnostics. */
1273 static bool
1274 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1276 old_decl = STRIP_TEMPLATE (old_decl);
1277 new_decl = STRIP_TEMPLATE (new_decl);
1278 if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1279 || !VAR_OR_FUNCTION_DECL_P (new_decl))
1280 return true;
1281 if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1282 == DECL_DECLARED_CONSTEXPR_P (new_decl))
1283 return true;
1284 if (TREE_CODE (old_decl) == FUNCTION_DECL)
1286 if (DECL_BUILT_IN (old_decl))
1288 /* Hide a built-in declaration. */
1289 DECL_DECLARED_CONSTEXPR_P (old_decl)
1290 = DECL_DECLARED_CONSTEXPR_P (new_decl);
1291 return true;
1293 /* 7.1.5 [dcl.constexpr]
1294 Note: An explicit specialization can differ from the template
1295 declaration with respect to the constexpr specifier. */
1296 if (! DECL_TEMPLATE_SPECIALIZATION (old_decl)
1297 && DECL_TEMPLATE_SPECIALIZATION (new_decl))
1298 return true;
1300 error_at (DECL_SOURCE_LOCATION (new_decl),
1301 "redeclaration %qD differs in %<constexpr%> "
1302 "from previous declaration", new_decl);
1303 inform (DECL_SOURCE_LOCATION (old_decl),
1304 "previous declaration %qD", old_decl);
1305 return false;
1307 return true;
1310 // If OLDDECL and NEWDECL are concept declarations with the same type
1311 // (i.e., and template parameters), but different requirements,
1312 // emit diagnostics and return true. Otherwise, return false.
1313 static inline bool
1314 check_concept_refinement (tree olddecl, tree newdecl)
1316 if (!DECL_DECLARED_CONCEPT_P (olddecl) || !DECL_DECLARED_CONCEPT_P (newdecl))
1317 return false;
1319 tree d1 = DECL_TEMPLATE_RESULT (olddecl);
1320 tree d2 = DECL_TEMPLATE_RESULT (newdecl);
1321 if (TREE_CODE (d1) != TREE_CODE (d2))
1322 return false;
1324 tree t1 = TREE_TYPE (d1);
1325 tree t2 = TREE_TYPE (d2);
1326 if (TREE_CODE (d1) == FUNCTION_DECL)
1328 if (compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2))
1329 && comp_template_parms (DECL_TEMPLATE_PARMS (olddecl),
1330 DECL_TEMPLATE_PARMS (newdecl))
1331 && !equivalently_constrained (olddecl, newdecl))
1333 error ("cannot specialize concept %q#D", olddecl);
1334 return true;
1337 return false;
1340 /* DECL is a redeclaration of a function or function template. If
1341 it does have default arguments issue a diagnostic. Note: this
1342 function is used to enforce the requirements in C++11 8.3.6 about
1343 no default arguments in redeclarations. */
1345 static void
1346 check_redeclaration_no_default_args (tree decl)
1348 gcc_assert (DECL_DECLARES_FUNCTION_P (decl));
1350 for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
1351 t && t != void_list_node; t = TREE_CHAIN (t))
1352 if (TREE_PURPOSE (t))
1354 permerror (DECL_SOURCE_LOCATION (decl),
1355 "redeclaration of %q#D may not have default "
1356 "arguments", decl);
1357 return;
1361 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1362 && lookup_attribute ("gnu_inline", \
1363 DECL_ATTRIBUTES (fn)))
1365 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1366 If the redeclaration is invalid, a diagnostic is issued, and the
1367 error_mark_node is returned. Otherwise, OLDDECL is returned.
1369 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1370 returned.
1372 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1374 tree
1375 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1377 unsigned olddecl_uid = DECL_UID (olddecl);
1378 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1379 int new_defines_function = 0;
1380 tree new_template_info;
1382 if (newdecl == olddecl)
1383 return olddecl;
1385 types_match = decls_match (newdecl, olddecl);
1387 /* If either the type of the new decl or the type of the old decl is an
1388 error_mark_node, then that implies that we have already issued an
1389 error (earlier) for some bogus type specification, and in that case,
1390 it is rather pointless to harass the user with yet more error message
1391 about the same declaration, so just pretend the types match here. */
1392 if (TREE_TYPE (newdecl) == error_mark_node
1393 || TREE_TYPE (olddecl) == error_mark_node)
1394 return error_mark_node;
1396 if (UDLIT_OPER_P (DECL_NAME (newdecl))
1397 && UDLIT_OPER_P (DECL_NAME (olddecl)))
1399 if (TREE_CODE (newdecl) == TEMPLATE_DECL
1400 && TREE_CODE (olddecl) != TEMPLATE_DECL
1401 && check_raw_literal_operator (olddecl))
1402 error ("literal operator template %q+D conflicts with"
1403 " raw literal operator %qD", newdecl, olddecl);
1404 else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1405 && TREE_CODE (olddecl) == TEMPLATE_DECL
1406 && check_raw_literal_operator (newdecl))
1407 error ("raw literal operator %q+D conflicts with"
1408 " literal operator template %qD", newdecl, olddecl);
1411 if (DECL_P (olddecl)
1412 && TREE_CODE (newdecl) == FUNCTION_DECL
1413 && TREE_CODE (olddecl) == FUNCTION_DECL
1414 && diagnose_mismatched_attributes (olddecl, newdecl))
1416 if (DECL_INITIAL (olddecl))
1417 inform (DECL_SOURCE_LOCATION (olddecl),
1418 "previous definition of %qD was here", olddecl);
1419 else
1420 inform (DECL_SOURCE_LOCATION (olddecl),
1421 "previous declaration of %qD was here", olddecl);
1424 /* Check for redeclaration and other discrepancies. */
1425 if (TREE_CODE (olddecl) == FUNCTION_DECL
1426 && DECL_ARTIFICIAL (olddecl))
1428 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1429 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1431 /* Avoid warnings redeclaring built-ins which have not been
1432 explicitly declared. */
1433 if (DECL_ANTICIPATED (olddecl))
1435 if (TREE_PUBLIC (newdecl)
1436 && CP_DECL_CONTEXT (newdecl) == global_namespace)
1437 warning_at (DECL_SOURCE_LOCATION (newdecl),
1438 OPT_Wbuiltin_declaration_mismatch,
1439 "built-in function %qD declared as non-function",
1440 newdecl);
1441 return NULL_TREE;
1444 /* If you declare a built-in or predefined function name as static,
1445 the old definition is overridden, but optionally warn this was a
1446 bad choice of name. */
1447 if (! TREE_PUBLIC (newdecl))
1449 warning (OPT_Wshadow,
1450 DECL_BUILT_IN (olddecl)
1451 ? G_("shadowing built-in function %q#D")
1452 : G_("shadowing library function %q#D"), olddecl);
1453 /* Discard the old built-in function. */
1454 return NULL_TREE;
1456 /* If the built-in is not ansi, then programs can override
1457 it even globally without an error. */
1458 else if (! DECL_BUILT_IN (olddecl))
1459 warning_at (DECL_SOURCE_LOCATION (newdecl), 0,
1460 "library function %q#D redeclared as non-function %q#D",
1461 olddecl, newdecl);
1462 else
1463 error ("declaration of %q+#D conflicts with built-in "
1464 "declaration %q#D", newdecl, olddecl);
1465 return NULL_TREE;
1467 else if (DECL_OMP_DECLARE_REDUCTION_P (olddecl))
1469 gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (newdecl));
1470 error_at (DECL_SOURCE_LOCATION (newdecl),
1471 "redeclaration of %<pragma omp declare reduction%>");
1472 inform (DECL_SOURCE_LOCATION (olddecl),
1473 "previous %<pragma omp declare reduction%> declaration");
1474 return error_mark_node;
1476 else if (!types_match)
1478 /* Avoid warnings redeclaring built-ins which have not been
1479 explicitly declared. */
1480 if (DECL_ANTICIPATED (olddecl))
1482 tree t1, t2;
1484 /* A new declaration doesn't match a built-in one unless it
1485 is also extern "C". */
1486 gcc_assert (DECL_IS_BUILTIN (olddecl));
1487 gcc_assert (DECL_EXTERN_C_P (olddecl));
1488 if (!DECL_EXTERN_C_P (newdecl))
1489 return NULL_TREE;
1491 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1492 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1493 t1 || t2;
1494 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1496 if (!t1 || !t2)
1497 break;
1498 /* FILE, tm types are not known at the time
1499 we create the builtins. */
1500 for (unsigned i = 0;
1501 i < sizeof (builtin_structptr_types)
1502 / sizeof (builtin_structptr_type);
1503 ++i)
1504 if (TREE_VALUE (t2) == builtin_structptr_types[i].node)
1506 tree t = TREE_VALUE (t1);
1508 if (TYPE_PTR_P (t)
1509 && TYPE_IDENTIFIER (TREE_TYPE (t))
1510 == get_identifier (builtin_structptr_types[i].str)
1511 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1513 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1515 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1516 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1517 types_match = decls_match (newdecl, olddecl);
1518 if (types_match)
1519 return duplicate_decls (newdecl, olddecl,
1520 newdecl_is_friend);
1521 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1523 goto next_arg;
1526 if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1527 break;
1528 next_arg:;
1531 warning_at (DECL_SOURCE_LOCATION (newdecl),
1532 OPT_Wbuiltin_declaration_mismatch,
1533 "declaration of %q#D conflicts with built-in "
1534 "declaration %q#D", newdecl, olddecl);
1536 else if ((DECL_EXTERN_C_P (newdecl)
1537 && DECL_EXTERN_C_P (olddecl))
1538 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1539 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1541 /* A near match; override the builtin. */
1543 if (TREE_PUBLIC (newdecl))
1544 warning_at (DECL_SOURCE_LOCATION (newdecl),
1545 OPT_Wbuiltin_declaration_mismatch,
1546 "new declaration %q#D ambiguates built-in "
1547 "declaration %q#D", newdecl, olddecl);
1548 else
1549 warning (OPT_Wshadow,
1550 DECL_BUILT_IN (olddecl)
1551 ? G_("shadowing built-in function %q#D")
1552 : G_("shadowing library function %q#D"), olddecl);
1554 else
1555 /* Discard the old built-in function. */
1556 return NULL_TREE;
1558 /* Replace the old RTL to avoid problems with inlining. */
1559 COPY_DECL_RTL (newdecl, olddecl);
1561 /* Even if the types match, prefer the new declarations type for
1562 built-ins which have not been explicitly declared, for
1563 exception lists, etc... */
1564 else if (DECL_IS_BUILTIN (olddecl))
1566 tree type = TREE_TYPE (newdecl);
1567 tree attribs = (*targetm.merge_type_attributes)
1568 (TREE_TYPE (olddecl), type);
1570 type = cp_build_type_attribute_variant (type, attribs);
1571 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1574 /* If a function is explicitly declared "throw ()", propagate that to
1575 the corresponding builtin. */
1576 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1577 && DECL_ANTICIPATED (olddecl)
1578 && TREE_NOTHROW (newdecl)
1579 && !TREE_NOTHROW (olddecl))
1581 enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1582 tree tmpdecl = builtin_decl_explicit (fncode);
1583 if (tmpdecl && tmpdecl != olddecl && types_match)
1584 TREE_NOTHROW (tmpdecl) = 1;
1587 /* Whether or not the builtin can throw exceptions has no
1588 bearing on this declarator. */
1589 TREE_NOTHROW (olddecl) = 0;
1591 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1593 /* If a builtin function is redeclared as `static', merge
1594 the declarations, but make the original one static. */
1595 DECL_THIS_STATIC (olddecl) = 1;
1596 TREE_PUBLIC (olddecl) = 0;
1598 /* Make the old declaration consistent with the new one so
1599 that all remnants of the builtin-ness of this function
1600 will be banished. */
1601 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1602 COPY_DECL_RTL (newdecl, olddecl);
1605 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1607 /* C++ Standard, 3.3, clause 4:
1608 "[Note: a namespace name or a class template name must be unique
1609 in its declarative region (7.3.2, clause 14). ]" */
1610 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1611 && TREE_CODE (newdecl) != NAMESPACE_DECL
1612 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1613 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1614 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1615 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1617 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1618 && TREE_CODE (newdecl) != TYPE_DECL)
1619 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1620 && TREE_CODE (olddecl) != TYPE_DECL))
1622 /* We do nothing special here, because C++ does such nasty
1623 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1624 get shadowed, and know that if we need to find a TYPE_DECL
1625 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1626 slot of the identifier. */
1627 return NULL_TREE;
1630 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1631 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1632 || (TREE_CODE (olddecl) == FUNCTION_DECL
1633 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1634 return NULL_TREE;
1637 error ("%q#D redeclared as different kind of symbol", newdecl);
1638 if (TREE_CODE (olddecl) == TREE_LIST)
1639 olddecl = TREE_VALUE (olddecl);
1640 inform (DECL_SOURCE_LOCATION (olddecl),
1641 "previous declaration %q#D", olddecl);
1643 return error_mark_node;
1645 else if (!types_match)
1647 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1648 /* These are certainly not duplicate declarations; they're
1649 from different scopes. */
1650 return NULL_TREE;
1652 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1654 /* The name of a class template may not be declared to refer to
1655 any other template, class, function, object, namespace, value,
1656 or type in the same scope. */
1657 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1658 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1660 error ("conflicting declaration of template %q+#D", newdecl);
1661 inform (DECL_SOURCE_LOCATION (olddecl),
1662 "previous declaration %q#D", olddecl);
1663 return error_mark_node;
1665 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1666 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1667 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1668 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1669 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1670 DECL_TEMPLATE_PARMS (olddecl))
1671 /* Template functions can be disambiguated by
1672 return type. */
1673 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1674 TREE_TYPE (TREE_TYPE (olddecl)))
1675 // Template functions can also be disambiguated by
1676 // constraints.
1677 && equivalently_constrained (olddecl, newdecl))
1679 error ("ambiguating new declaration %q+#D", newdecl);
1680 inform (DECL_SOURCE_LOCATION (olddecl),
1681 "old declaration %q#D", olddecl);
1683 else if (check_concept_refinement (olddecl, newdecl))
1684 return error_mark_node;
1685 return NULL_TREE;
1687 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1689 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1691 error ("conflicting declaration of C function %q+#D",
1692 newdecl);
1693 inform (DECL_SOURCE_LOCATION (olddecl),
1694 "previous declaration %q#D", olddecl);
1695 return NULL_TREE;
1697 /* For function versions, params and types match, but they
1698 are not ambiguous. */
1699 else if ((!DECL_FUNCTION_VERSIONED (newdecl)
1700 && !DECL_FUNCTION_VERSIONED (olddecl))
1701 // The functions have the same parameter types.
1702 && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1703 TYPE_ARG_TYPES (TREE_TYPE (olddecl)))
1704 // And the same constraints.
1705 && equivalently_constrained (newdecl, olddecl))
1707 error ("ambiguating new declaration of %q+#D", newdecl);
1708 inform (DECL_SOURCE_LOCATION (olddecl),
1709 "old declaration %q#D", olddecl);
1710 return error_mark_node;
1712 else
1713 return NULL_TREE;
1715 else
1717 error ("conflicting declaration %q+#D", newdecl);
1718 inform (DECL_SOURCE_LOCATION (olddecl),
1719 "previous declaration as %q#D", olddecl);
1720 return error_mark_node;
1723 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1724 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1725 && (!DECL_TEMPLATE_INFO (newdecl)
1726 || (DECL_TI_TEMPLATE (newdecl)
1727 != DECL_TI_TEMPLATE (olddecl))))
1728 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1729 && (!DECL_TEMPLATE_INFO (olddecl)
1730 || (DECL_TI_TEMPLATE (olddecl)
1731 != DECL_TI_TEMPLATE (newdecl))))))
1732 /* It's OK to have a template specialization and a non-template
1733 with the same type, or to have specializations of two
1734 different templates with the same type. Note that if one is a
1735 specialization, and the other is an instantiation of the same
1736 template, that we do not exit at this point. That situation
1737 can occur if we instantiate a template class, and then
1738 specialize one of its methods. This situation is valid, but
1739 the declarations must be merged in the usual way. */
1740 return NULL_TREE;
1741 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1742 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1743 && !DECL_USE_TEMPLATE (newdecl))
1744 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1745 && !DECL_USE_TEMPLATE (olddecl))))
1746 /* One of the declarations is a template instantiation, and the
1747 other is not a template at all. That's OK. */
1748 return NULL_TREE;
1749 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1751 /* In [namespace.alias] we have:
1753 In a declarative region, a namespace-alias-definition can be
1754 used to redefine a namespace-alias declared in that declarative
1755 region to refer only to the namespace to which it already
1756 refers.
1758 Therefore, if we encounter a second alias directive for the same
1759 alias, we can just ignore the second directive. */
1760 if (DECL_NAMESPACE_ALIAS (newdecl)
1761 && (DECL_NAMESPACE_ALIAS (newdecl)
1762 == DECL_NAMESPACE_ALIAS (olddecl)))
1763 return olddecl;
1765 /* Leave it to update_binding to merge or report error. */
1766 return NULL_TREE;
1768 else
1770 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1771 if (errmsg)
1773 error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1774 if (DECL_NAME (olddecl) != NULL_TREE)
1775 inform (DECL_SOURCE_LOCATION (olddecl),
1776 (DECL_INITIAL (olddecl) && namespace_bindings_p ())
1777 ? G_("%q#D previously defined here")
1778 : G_("%q#D previously declared here"), olddecl);
1779 return error_mark_node;
1781 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1782 && DECL_INITIAL (olddecl) != NULL_TREE
1783 && !prototype_p (TREE_TYPE (olddecl))
1784 && prototype_p (TREE_TYPE (newdecl)))
1786 /* Prototype decl follows defn w/o prototype. */
1787 if (warning_at (DECL_SOURCE_LOCATION (newdecl), 0,
1788 "prototype specified for %q#D", newdecl))
1789 inform (DECL_SOURCE_LOCATION (olddecl),
1790 "previous non-prototype definition here");
1792 else if (VAR_OR_FUNCTION_DECL_P (olddecl)
1793 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1795 /* [dcl.link]
1796 If two declarations of the same function or object
1797 specify different linkage-specifications ..., the program
1798 is ill-formed.... Except for functions with C++ linkage,
1799 a function declaration without a linkage specification
1800 shall not precede the first linkage specification for
1801 that function. A function can be declared without a
1802 linkage specification after an explicit linkage
1803 specification has been seen; the linkage explicitly
1804 specified in the earlier declaration is not affected by
1805 such a function declaration.
1807 DR 563 raises the question why the restrictions on
1808 functions should not also apply to objects. Older
1809 versions of G++ silently ignore the linkage-specification
1810 for this example:
1812 namespace N {
1813 extern int i;
1814 extern "C" int i;
1817 which is clearly wrong. Therefore, we now treat objects
1818 like functions. */
1819 if (current_lang_depth () == 0)
1821 /* There is no explicit linkage-specification, so we use
1822 the linkage from the previous declaration. */
1823 retrofit_lang_decl (newdecl);
1824 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1826 else
1828 error ("conflicting declaration of %q+#D with %qL linkage",
1829 newdecl, DECL_LANGUAGE (newdecl));
1830 inform (DECL_SOURCE_LOCATION (olddecl),
1831 "previous declaration with %qL linkage",
1832 DECL_LANGUAGE (olddecl));
1836 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1838 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1840 /* Note: free functions, as TEMPLATE_DECLs, are handled below. */
1841 if (DECL_FUNCTION_MEMBER_P (olddecl)
1842 && (/* grokfndecl passes member function templates too
1843 as FUNCTION_DECLs. */
1844 DECL_TEMPLATE_INFO (olddecl)
1845 /* C++11 8.3.6/6.
1846 Default arguments for a member function of a class
1847 template shall be specified on the initial declaration
1848 of the member function within the class template. */
1849 || CLASSTYPE_TEMPLATE_INFO (CP_DECL_CONTEXT (olddecl))))
1850 check_redeclaration_no_default_args (newdecl);
1851 else
1853 tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl);
1854 tree t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
1855 int i = 1;
1857 for (; t1 && t1 != void_list_node;
1858 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1859 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1861 if (1 == simple_cst_equal (TREE_PURPOSE (t1),
1862 TREE_PURPOSE (t2)))
1864 if (permerror (input_location,
1865 "default argument given for parameter "
1866 "%d of %q#D", i, newdecl))
1867 inform (DECL_SOURCE_LOCATION (olddecl),
1868 "previous specification in %q#D here",
1869 olddecl);
1871 else
1873 error ("default argument given for parameter %d "
1874 "of %q#D", i, newdecl);
1875 inform (DECL_SOURCE_LOCATION (olddecl),
1876 "previous specification in %q#D here",
1877 olddecl);
1884 /* Do not merge an implicit typedef with an explicit one. In:
1886 class A;
1888 typedef class A A __attribute__ ((foo));
1890 the attribute should apply only to the typedef. */
1891 if (TREE_CODE (olddecl) == TYPE_DECL
1892 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1893 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1894 return NULL_TREE;
1896 /* If new decl is `static' and an `extern' was seen previously,
1897 warn about it. */
1898 warn_extern_redeclared_static (newdecl, olddecl);
1900 if (!validate_constexpr_redeclaration (olddecl, newdecl))
1901 return error_mark_node;
1903 /* We have committed to returning 1 at this point. */
1904 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1906 /* Now that functions must hold information normally held
1907 by field decls, there is extra work to do so that
1908 declaration information does not get destroyed during
1909 definition. */
1910 if (DECL_VINDEX (olddecl))
1911 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1912 if (DECL_CONTEXT (olddecl))
1913 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1914 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1915 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1916 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1917 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1918 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1919 DECL_FINAL_P (newdecl) |= DECL_FINAL_P (olddecl);
1920 DECL_OVERRIDE_P (newdecl) |= DECL_OVERRIDE_P (olddecl);
1921 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1922 if (DECL_OVERLOADED_OPERATOR_P (olddecl))
1923 DECL_OVERLOADED_OPERATOR_CODE_RAW (newdecl)
1924 = DECL_OVERLOADED_OPERATOR_CODE_RAW (olddecl);
1925 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1927 /* Optionally warn about more than one declaration for the same
1928 name, but don't warn about a function declaration followed by a
1929 definition. */
1930 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1931 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1932 /* Don't warn about extern decl followed by definition. */
1933 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1934 /* Don't warn about friends, let add_friend take care of it. */
1935 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1936 /* Don't warn about declaration followed by specialization. */
1937 && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1938 || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1940 if (warning_at (DECL_SOURCE_LOCATION (newdecl),
1941 OPT_Wredundant_decls,
1942 "redundant redeclaration of %qD in same scope",
1943 newdecl))
1944 inform (DECL_SOURCE_LOCATION (olddecl),
1945 "previous declaration of %qD", olddecl);
1948 if (!(DECL_TEMPLATE_INSTANTIATION (olddecl)
1949 && DECL_TEMPLATE_SPECIALIZATION (newdecl)))
1951 if (DECL_DELETED_FN (newdecl))
1953 error ("deleted definition of %q+D", newdecl);
1954 inform (DECL_SOURCE_LOCATION (olddecl),
1955 "previous declaration of %qD", olddecl);
1957 DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1961 /* Deal with C++: must preserve virtual function table size. */
1962 if (TREE_CODE (olddecl) == TYPE_DECL)
1964 tree newtype = TREE_TYPE (newdecl);
1965 tree oldtype = TREE_TYPE (olddecl);
1967 if (newtype != error_mark_node && oldtype != error_mark_node
1968 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1969 CLASSTYPE_FRIEND_CLASSES (newtype)
1970 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1972 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1975 /* Copy all the DECL_... slots specified in the new decl
1976 except for any that we copy here from the old type. */
1977 DECL_ATTRIBUTES (newdecl)
1978 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1980 if (DECL_DECLARES_FUNCTION_P (olddecl) && DECL_DECLARES_FUNCTION_P (newdecl))
1982 olddecl_friend = DECL_FRIEND_P (olddecl);
1983 hidden_friend = (DECL_ANTICIPATED (olddecl)
1984 && DECL_HIDDEN_FRIEND_P (olddecl)
1985 && newdecl_is_friend);
1986 if (!hidden_friend)
1988 DECL_ANTICIPATED (olddecl) = 0;
1989 DECL_HIDDEN_FRIEND_P (olddecl) = 0;
1993 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1995 tree old_result;
1996 tree new_result;
1997 old_result = DECL_TEMPLATE_RESULT (olddecl);
1998 new_result = DECL_TEMPLATE_RESULT (newdecl);
1999 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
2000 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
2001 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
2002 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
2004 DECL_ATTRIBUTES (old_result)
2005 = (*targetm.merge_decl_attributes) (old_result, new_result);
2007 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2009 /* Per C++11 8.3.6/4, default arguments cannot be added in later
2010 declarations of a function template. */
2011 if (DECL_SOURCE_LOCATION (newdecl)
2012 != DECL_SOURCE_LOCATION (olddecl))
2013 check_redeclaration_no_default_args (newdecl);
2015 check_default_args (newdecl);
2017 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
2018 && DECL_INITIAL (new_result))
2020 if (DECL_INITIAL (old_result))
2021 DECL_UNINLINABLE (old_result) = 1;
2022 else
2023 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
2024 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
2025 DECL_NOT_REALLY_EXTERN (old_result)
2026 = DECL_NOT_REALLY_EXTERN (new_result);
2027 DECL_INTERFACE_KNOWN (old_result)
2028 = DECL_INTERFACE_KNOWN (new_result);
2029 DECL_DECLARED_INLINE_P (old_result)
2030 = DECL_DECLARED_INLINE_P (new_result);
2031 DECL_DISREGARD_INLINE_LIMITS (old_result)
2032 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2035 else
2037 DECL_DECLARED_INLINE_P (old_result)
2038 |= DECL_DECLARED_INLINE_P (new_result);
2039 DECL_DISREGARD_INLINE_LIMITS (old_result)
2040 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2041 check_redeclaration_exception_specification (newdecl, olddecl);
2045 /* If the new declaration is a definition, update the file and
2046 line information on the declaration, and also make
2047 the old declaration the same definition. */
2048 if (DECL_INITIAL (new_result) != NULL_TREE)
2050 DECL_SOURCE_LOCATION (olddecl)
2051 = DECL_SOURCE_LOCATION (old_result)
2052 = DECL_SOURCE_LOCATION (newdecl);
2053 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
2054 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2056 tree parm;
2057 DECL_ARGUMENTS (old_result)
2058 = DECL_ARGUMENTS (new_result);
2059 for (parm = DECL_ARGUMENTS (old_result); parm;
2060 parm = DECL_CHAIN (parm))
2061 DECL_CONTEXT (parm) = old_result;
2065 return olddecl;
2068 if (types_match)
2070 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2071 check_redeclaration_exception_specification (newdecl, olddecl);
2073 /* Automatically handles default parameters. */
2074 tree oldtype = TREE_TYPE (olddecl);
2075 tree newtype;
2077 /* For typedefs use the old type, as the new type's DECL_NAME points
2078 at newdecl, which will be ggc_freed. */
2079 if (TREE_CODE (newdecl) == TYPE_DECL)
2081 /* But NEWTYPE might have an attribute, honor that. */
2082 tree tem = TREE_TYPE (newdecl);
2083 newtype = oldtype;
2085 if (TYPE_USER_ALIGN (tem))
2087 if (TYPE_ALIGN (tem) > TYPE_ALIGN (newtype))
2088 SET_TYPE_ALIGN (newtype, TYPE_ALIGN (tem));
2089 TYPE_USER_ALIGN (newtype) = true;
2092 /* And remove the new type from the variants list. */
2093 if (TYPE_NAME (TREE_TYPE (newdecl)) == newdecl)
2095 tree remove = TREE_TYPE (newdecl);
2096 for (tree t = TYPE_MAIN_VARIANT (remove); ;
2097 t = TYPE_NEXT_VARIANT (t))
2098 if (TYPE_NEXT_VARIANT (t) == remove)
2100 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove);
2101 break;
2105 else
2106 /* Merge the data types specified in the two decls. */
2107 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
2109 if (VAR_P (newdecl))
2111 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
2112 /* For already initialized vars, TREE_READONLY could have been
2113 cleared in cp_finish_decl, because the var needs runtime
2114 initialization or destruction. Make sure not to set
2115 TREE_READONLY on it again. */
2116 if (DECL_INITIALIZED_P (olddecl)
2117 && !DECL_EXTERNAL (olddecl)
2118 && !TREE_READONLY (olddecl))
2119 TREE_READONLY (newdecl) = 0;
2120 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
2121 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
2122 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
2123 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
2124 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
2125 if (DECL_CLASS_SCOPE_P (olddecl))
2126 DECL_DECLARED_CONSTEXPR_P (newdecl)
2127 |= DECL_DECLARED_CONSTEXPR_P (olddecl);
2129 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
2130 if (DECL_LANG_SPECIFIC (olddecl)
2131 && CP_DECL_THREADPRIVATE_P (olddecl))
2133 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
2134 retrofit_lang_decl (newdecl);
2135 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
2139 /* An explicit specialization of a function template or of a member
2140 function of a class template can be declared transaction_safe
2141 independently of whether the corresponding template entity is declared
2142 transaction_safe. */
2143 if (flag_tm && TREE_CODE (newdecl) == FUNCTION_DECL
2144 && DECL_TEMPLATE_INSTANTIATION (olddecl)
2145 && DECL_TEMPLATE_SPECIALIZATION (newdecl)
2146 && tx_safe_fn_type_p (newtype)
2147 && !tx_safe_fn_type_p (TREE_TYPE (newdecl)))
2148 newtype = tx_unsafe_fn_variant (newtype);
2150 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
2152 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2153 check_default_args (newdecl);
2155 /* Lay the type out, unless already done. */
2156 if (! same_type_p (newtype, oldtype)
2157 && TREE_TYPE (newdecl) != error_mark_node
2158 && !(processing_template_decl && uses_template_parms (newdecl)))
2159 layout_type (TREE_TYPE (newdecl));
2161 if ((VAR_P (newdecl)
2162 || TREE_CODE (newdecl) == PARM_DECL
2163 || TREE_CODE (newdecl) == RESULT_DECL
2164 || TREE_CODE (newdecl) == FIELD_DECL
2165 || TREE_CODE (newdecl) == TYPE_DECL)
2166 && !(processing_template_decl && uses_template_parms (newdecl)))
2167 layout_decl (newdecl, 0);
2169 /* Merge the type qualifiers. */
2170 if (TREE_READONLY (newdecl))
2171 TREE_READONLY (olddecl) = 1;
2172 if (TREE_THIS_VOLATILE (newdecl))
2173 TREE_THIS_VOLATILE (olddecl) = 1;
2174 if (TREE_NOTHROW (newdecl))
2175 TREE_NOTHROW (olddecl) = 1;
2177 /* Merge deprecatedness. */
2178 if (TREE_DEPRECATED (newdecl))
2179 TREE_DEPRECATED (olddecl) = 1;
2181 /* Preserve function specific target and optimization options */
2182 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2184 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2185 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2186 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2187 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2189 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2190 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2191 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2192 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2195 /* Merge the initialization information. */
2196 if (DECL_INITIAL (newdecl) == NULL_TREE
2197 && DECL_INITIAL (olddecl) != NULL_TREE)
2199 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2200 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2201 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2203 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2204 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2208 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2210 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2211 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2212 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2213 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
2214 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
2215 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
2216 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2217 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
2218 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
2219 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
2220 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2221 /* Keep the old RTL. */
2222 COPY_DECL_RTL (olddecl, newdecl);
2224 else if (VAR_P (newdecl)
2225 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2227 /* Keep the old RTL. We cannot keep the old RTL if the old
2228 declaration was for an incomplete object and the new
2229 declaration is not since many attributes of the RTL will
2230 change. */
2231 COPY_DECL_RTL (olddecl, newdecl);
2234 /* If cannot merge, then use the new type and qualifiers,
2235 and don't preserve the old rtl. */
2236 else
2238 /* Clean out any memory we had of the old declaration. */
2239 tree oldstatic = value_member (olddecl, static_aggregates);
2240 if (oldstatic)
2241 TREE_VALUE (oldstatic) = error_mark_node;
2243 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2244 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2245 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2246 TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2247 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2250 /* Merge the storage class information. */
2251 merge_weak (newdecl, olddecl);
2253 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2254 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2255 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2256 if (! DECL_EXTERNAL (olddecl))
2257 DECL_EXTERNAL (newdecl) = 0;
2258 if (! DECL_COMDAT (olddecl))
2259 DECL_COMDAT (newdecl) = 0;
2261 new_template_info = NULL_TREE;
2262 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2264 bool new_redefines_gnu_inline = false;
2266 if (new_defines_function
2267 && ((DECL_INTERFACE_KNOWN (olddecl)
2268 && TREE_CODE (olddecl) == FUNCTION_DECL)
2269 || (TREE_CODE (olddecl) == TEMPLATE_DECL
2270 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2271 == FUNCTION_DECL))))
2273 tree fn = olddecl;
2275 if (TREE_CODE (fn) == TEMPLATE_DECL)
2276 fn = DECL_TEMPLATE_RESULT (olddecl);
2278 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
2281 if (!new_redefines_gnu_inline)
2283 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2284 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2285 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2287 DECL_TEMPLATE_INSTANTIATED (newdecl)
2288 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
2289 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2291 /* If the OLDDECL is an instantiation and/or specialization,
2292 then the NEWDECL must be too. But, it may not yet be marked
2293 as such if the caller has created NEWDECL, but has not yet
2294 figured out that it is a redeclaration. */
2295 if (!DECL_USE_TEMPLATE (newdecl))
2296 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2298 /* Don't really know how much of the language-specific
2299 values we should copy from old to new. */
2300 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2301 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2302 DECL_INITIALIZED_IN_CLASS_P (newdecl)
2303 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2305 if (LANG_DECL_HAS_MIN (newdecl))
2307 DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2308 DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2309 if (DECL_TEMPLATE_INFO (newdecl))
2311 new_template_info = DECL_TEMPLATE_INFO (newdecl);
2312 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2313 && DECL_TEMPLATE_SPECIALIZATION (newdecl))
2314 /* Remember the presence of explicit specialization args. */
2315 TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (olddecl))
2316 = TINFO_USED_TEMPLATE_ID (new_template_info);
2318 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2320 /* Only functions have these fields. */
2321 if (DECL_DECLARES_FUNCTION_P (newdecl))
2323 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2324 DECL_BEFRIENDING_CLASSES (newdecl)
2325 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2326 DECL_BEFRIENDING_CLASSES (olddecl));
2327 /* DECL_THUNKS is only valid for virtual functions,
2328 otherwise it is a DECL_FRIEND_CONTEXT. */
2329 if (DECL_VIRTUAL_P (newdecl))
2330 SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2332 /* Only variables have this field. */
2333 else if (VAR_P (newdecl)
2334 && VAR_HAD_UNKNOWN_BOUND (olddecl))
2335 SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2338 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2340 tree parm;
2342 /* Merge parameter attributes. */
2343 tree oldarg, newarg;
2344 for (oldarg = DECL_ARGUMENTS(olddecl),
2345 newarg = DECL_ARGUMENTS(newdecl);
2346 oldarg && newarg;
2347 oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2348 DECL_ATTRIBUTES (newarg)
2349 = (*targetm.merge_decl_attributes) (oldarg, newarg);
2350 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2353 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2354 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2356 /* If newdecl is not a specialization, then it is not a
2357 template-related function at all. And that means that we
2358 should have exited above, returning 0. */
2359 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2361 if (DECL_ODR_USED (olddecl))
2362 /* From [temp.expl.spec]:
2364 If a template, a member template or the member of a class
2365 template is explicitly specialized then that
2366 specialization shall be declared before the first use of
2367 that specialization that would cause an implicit
2368 instantiation to take place, in every translation unit in
2369 which such a use occurs. */
2370 error ("explicit specialization of %qD after first use",
2371 olddecl);
2373 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2374 DECL_COMDAT (newdecl) = (TREE_PUBLIC (newdecl)
2375 && DECL_DECLARED_INLINE_P (newdecl));
2377 /* Don't propagate visibility from the template to the
2378 specialization here. We'll do that in determine_visibility if
2379 appropriate. */
2380 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2382 /* [temp.expl.spec/14] We don't inline explicit specialization
2383 just because the primary template says so. */
2385 /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2386 the always_inline attribute. */
2387 if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2388 && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2390 if (DECL_DECLARED_INLINE_P (newdecl))
2391 DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2392 else
2393 DECL_ATTRIBUTES (newdecl)
2394 = remove_attribute ("always_inline",
2395 DECL_ATTRIBUTES (newdecl));
2398 else if (new_defines_function && DECL_INITIAL (olddecl))
2400 /* Never inline re-defined extern inline functions.
2401 FIXME: this could be better handled by keeping both
2402 function as separate declarations. */
2403 DECL_UNINLINABLE (newdecl) = 1;
2405 else
2407 if (DECL_PENDING_INLINE_P (olddecl))
2409 DECL_PENDING_INLINE_P (newdecl) = 1;
2410 DECL_PENDING_INLINE_INFO (newdecl)
2411 = DECL_PENDING_INLINE_INFO (olddecl);
2413 else if (DECL_PENDING_INLINE_P (newdecl))
2415 else if (DECL_SAVED_FUNCTION_DATA (newdecl) == NULL)
2416 DECL_SAVED_FUNCTION_DATA (newdecl)
2417 = DECL_SAVED_FUNCTION_DATA (olddecl);
2419 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2421 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2422 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2424 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2425 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2426 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2427 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2430 /* Preserve abstractness on cloned [cd]tors. */
2431 DECL_ABSTRACT_P (newdecl) = DECL_ABSTRACT_P (olddecl);
2433 /* Update newdecl's parms to point at olddecl. */
2434 for (parm = DECL_ARGUMENTS (newdecl); parm;
2435 parm = DECL_CHAIN (parm))
2436 DECL_CONTEXT (parm) = olddecl;
2438 if (! types_match)
2440 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2441 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2442 COPY_DECL_RTL (newdecl, olddecl);
2444 if (! types_match || new_defines_function)
2446 /* These need to be copied so that the names are available.
2447 Note that if the types do match, we'll preserve inline
2448 info and other bits, but if not, we won't. */
2449 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2450 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2452 /* If redeclaring a builtin function, it stays built in
2453 if newdecl is a gnu_inline definition, or if newdecl is just
2454 a declaration. */
2455 if (DECL_BUILT_IN (olddecl)
2456 && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2458 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2459 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2460 /* If we're keeping the built-in definition, keep the rtl,
2461 regardless of declaration matches. */
2462 COPY_DECL_RTL (olddecl, newdecl);
2463 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2465 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2466 switch (fncode)
2468 /* If a compatible prototype of these builtin functions
2469 is seen, assume the runtime implements it with the
2470 expected semantics. */
2471 case BUILT_IN_STPCPY:
2472 if (builtin_decl_explicit_p (fncode))
2473 set_builtin_decl_implicit_p (fncode, true);
2474 break;
2475 default:
2476 if (builtin_decl_explicit_p (fncode))
2477 set_builtin_decl_declared_p (fncode, true);
2478 break;
2482 copy_attributes_to_builtin (newdecl);
2484 if (new_defines_function)
2485 /* If defining a function declared with other language
2486 linkage, use the previously declared language linkage. */
2487 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2488 else if (types_match)
2490 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2491 /* Don't clear out the arguments if we're just redeclaring a
2492 function. */
2493 if (DECL_ARGUMENTS (olddecl))
2494 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2497 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2498 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2500 /* Now preserve various other info from the definition. */
2501 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2502 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2503 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2504 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2506 /* Warn about conflicting visibility specifications. */
2507 if (DECL_VISIBILITY_SPECIFIED (olddecl)
2508 && DECL_VISIBILITY_SPECIFIED (newdecl)
2509 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2511 if (warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wattributes,
2512 "%qD: visibility attribute ignored because it "
2513 "conflicts with previous declaration", newdecl))
2514 inform (DECL_SOURCE_LOCATION (olddecl),
2515 "previous declaration of %qD", olddecl);
2517 /* Choose the declaration which specified visibility. */
2518 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2520 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2521 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2523 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2524 so keep this behavior. */
2525 if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2527 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2528 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2530 /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED. */
2531 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2533 SET_DECL_ALIGN (newdecl, DECL_ALIGN (olddecl));
2534 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2536 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2537 if (DECL_WARN_IF_NOT_ALIGN (olddecl)
2538 > DECL_WARN_IF_NOT_ALIGN (newdecl))
2539 SET_DECL_WARN_IF_NOT_ALIGN (newdecl,
2540 DECL_WARN_IF_NOT_ALIGN (olddecl));
2541 if (TREE_CODE (newdecl) == FIELD_DECL)
2542 DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2544 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2545 with that from NEWDECL below. */
2546 if (DECL_LANG_SPECIFIC (olddecl))
2548 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2549 != DECL_LANG_SPECIFIC (newdecl));
2550 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2553 /* Merge the USED information. */
2554 if (TREE_USED (olddecl))
2555 TREE_USED (newdecl) = 1;
2556 else if (TREE_USED (newdecl))
2557 TREE_USED (olddecl) = 1;
2558 if (VAR_P (newdecl))
2560 if (DECL_READ_P (olddecl))
2561 DECL_READ_P (newdecl) = 1;
2562 else if (DECL_READ_P (newdecl))
2563 DECL_READ_P (olddecl) = 1;
2565 if (DECL_PRESERVE_P (olddecl))
2566 DECL_PRESERVE_P (newdecl) = 1;
2567 else if (DECL_PRESERVE_P (newdecl))
2568 DECL_PRESERVE_P (olddecl) = 1;
2570 /* Merge the DECL_FUNCTION_VERSIONED information. newdecl will be copied
2571 to olddecl and deleted. */
2572 if (TREE_CODE (newdecl) == FUNCTION_DECL
2573 && DECL_FUNCTION_VERSIONED (olddecl))
2575 /* Set the flag for newdecl so that it gets copied to olddecl. */
2576 DECL_FUNCTION_VERSIONED (newdecl) = 1;
2577 /* newdecl will be purged after copying to olddecl and is no longer
2578 a version. */
2579 cgraph_node::delete_function_version_by_decl (newdecl);
2582 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2584 int function_size;
2585 struct symtab_node *snode = symtab_node::get (olddecl);
2587 function_size = sizeof (struct tree_decl_common);
2589 memcpy ((char *) olddecl + sizeof (struct tree_common),
2590 (char *) newdecl + sizeof (struct tree_common),
2591 function_size - sizeof (struct tree_common));
2593 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2594 (char *) newdecl + sizeof (struct tree_decl_common),
2595 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2597 /* Preserve symtab node mapping. */
2598 olddecl->decl_with_vis.symtab_node = snode;
2600 if (new_template_info)
2601 /* If newdecl is a template instantiation, it is possible that
2602 the following sequence of events has occurred:
2604 o A friend function was declared in a class template. The
2605 class template was instantiated.
2607 o The instantiation of the friend declaration was
2608 recorded on the instantiation list, and is newdecl.
2610 o Later, however, instantiate_class_template called pushdecl
2611 on the newdecl to perform name injection. But, pushdecl in
2612 turn called duplicate_decls when it discovered that another
2613 declaration of a global function with the same name already
2614 existed.
2616 o Here, in duplicate_decls, we decided to clobber newdecl.
2618 If we're going to do that, we'd better make sure that
2619 olddecl, and not newdecl, is on the list of
2620 instantiations so that if we try to do the instantiation
2621 again we won't get the clobbered declaration. */
2622 reregister_specialization (newdecl,
2623 new_template_info,
2624 olddecl);
2626 else
2628 size_t size = tree_code_size (TREE_CODE (newdecl));
2630 memcpy ((char *) olddecl + sizeof (struct tree_common),
2631 (char *) newdecl + sizeof (struct tree_common),
2632 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2633 switch (TREE_CODE (newdecl))
2635 case LABEL_DECL:
2636 case VAR_DECL:
2637 case RESULT_DECL:
2638 case PARM_DECL:
2639 case FIELD_DECL:
2640 case TYPE_DECL:
2641 case CONST_DECL:
2643 struct symtab_node *snode = NULL;
2645 if (VAR_P (newdecl)
2646 && (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl)
2647 || DECL_EXTERNAL (olddecl)))
2648 snode = symtab_node::get (olddecl);
2649 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2650 (char *) newdecl + sizeof (struct tree_decl_common),
2651 size - sizeof (struct tree_decl_common)
2652 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2653 if (VAR_P (newdecl))
2654 olddecl->decl_with_vis.symtab_node = snode;
2656 break;
2657 default:
2658 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2659 (char *) newdecl + sizeof (struct tree_decl_common),
2660 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2661 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2662 break;
2666 if (VAR_OR_FUNCTION_DECL_P (newdecl))
2668 if (DECL_EXTERNAL (olddecl)
2669 || TREE_PUBLIC (olddecl)
2670 || TREE_STATIC (olddecl))
2672 /* Merge the section attribute.
2673 We want to issue an error if the sections conflict but that must be
2674 done later in decl_attributes since we are called before attributes
2675 are assigned. */
2676 if (DECL_SECTION_NAME (newdecl) != NULL)
2677 set_decl_section_name (olddecl, DECL_SECTION_NAME (newdecl));
2679 if (DECL_ONE_ONLY (newdecl))
2681 struct symtab_node *oldsym, *newsym;
2682 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2683 oldsym = cgraph_node::get_create (olddecl);
2684 else
2685 oldsym = varpool_node::get_create (olddecl);
2686 newsym = symtab_node::get (newdecl);
2687 oldsym->set_comdat_group (newsym->get_comdat_group ());
2691 if (VAR_P (newdecl)
2692 && CP_DECL_THREAD_LOCAL_P (newdecl))
2694 CP_DECL_THREAD_LOCAL_P (olddecl) = true;
2695 if (!processing_template_decl)
2696 set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl));
2700 DECL_UID (olddecl) = olddecl_uid;
2701 if (olddecl_friend)
2702 DECL_FRIEND_P (olddecl) = 1;
2703 if (hidden_friend)
2705 DECL_ANTICIPATED (olddecl) = 1;
2706 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2709 /* NEWDECL contains the merged attribute lists.
2710 Update OLDDECL to be the same. */
2711 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2713 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2714 so that encode_section_info has a chance to look at the new decl
2715 flags and attributes. */
2716 if (DECL_RTL_SET_P (olddecl)
2717 && (TREE_CODE (olddecl) == FUNCTION_DECL
2718 || (VAR_P (olddecl)
2719 && TREE_STATIC (olddecl))))
2720 make_decl_rtl (olddecl);
2722 /* The NEWDECL will no longer be needed. Because every out-of-class
2723 declaration of a member results in a call to duplicate_decls,
2724 freeing these nodes represents in a significant savings.
2726 Before releasing the node, be sore to remove function from symbol
2727 table that might have been inserted there to record comdat group.
2728 Be sure to however do not free DECL_STRUCT_FUNCTION because this
2729 structure is shared in between newdecl and oldecl. */
2730 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2731 DECL_STRUCT_FUNCTION (newdecl) = NULL;
2732 if (VAR_OR_FUNCTION_DECL_P (newdecl))
2734 struct symtab_node *snode = symtab_node::get (newdecl);
2735 if (snode)
2736 snode->remove ();
2739 /* Remove the associated constraints for newdecl, if any, before
2740 reclaiming memory. */
2741 if (flag_concepts)
2742 remove_constraints (newdecl);
2744 ggc_free (newdecl);
2746 return olddecl;
2749 /* Return zero if the declaration NEWDECL is valid
2750 when the declaration OLDDECL (assumed to be for the same name)
2751 has already been seen.
2752 Otherwise return an error message format string with a %s
2753 where the identifier should go. */
2755 static const char *
2756 redeclaration_error_message (tree newdecl, tree olddecl)
2758 if (TREE_CODE (newdecl) == TYPE_DECL)
2760 /* Because C++ can put things into name space for free,
2761 constructs like "typedef struct foo { ... } foo"
2762 would look like an erroneous redeclaration. */
2763 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2764 return NULL;
2765 else
2766 return G_("redefinition of %q#D");
2768 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2770 /* If this is a pure function, its olddecl will actually be
2771 the original initialization to `0' (which we force to call
2772 abort()). Don't complain about redefinition in this case. */
2773 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2774 && DECL_INITIAL (olddecl) == NULL_TREE)
2775 return NULL;
2777 /* If both functions come from different namespaces, this is not
2778 a redeclaration - this is a conflict with a used function. */
2779 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2780 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2781 && ! decls_match (olddecl, newdecl))
2782 return G_("%qD conflicts with used function");
2784 /* We'll complain about linkage mismatches in
2785 warn_extern_redeclared_static. */
2787 /* Defining the same name twice is no good. */
2788 if (decl_defined_p (olddecl)
2789 && decl_defined_p (newdecl))
2791 if (DECL_NAME (olddecl) == NULL_TREE)
2792 return G_("%q#D not declared in class");
2793 else if (!GNU_INLINE_P (olddecl)
2794 || GNU_INLINE_P (newdecl))
2795 return G_("redefinition of %q#D");
2798 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2800 bool olda = GNU_INLINE_P (olddecl);
2801 bool newa = GNU_INLINE_P (newdecl);
2803 if (olda != newa)
2805 if (newa)
2806 return G_("%q+D redeclared inline with "
2807 "%<gnu_inline%> attribute");
2808 else
2809 return G_("%q+D redeclared inline without "
2810 "%<gnu_inline%> attribute");
2814 check_abi_tag_redeclaration
2815 (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
2816 lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
2818 return NULL;
2820 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2822 tree nt, ot;
2824 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2826 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2827 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2828 return G_("redefinition of %q#D");
2829 return NULL;
2832 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2833 || (DECL_TEMPLATE_RESULT (newdecl)
2834 == DECL_TEMPLATE_RESULT (olddecl)))
2835 return NULL;
2837 nt = DECL_TEMPLATE_RESULT (newdecl);
2838 if (DECL_TEMPLATE_INFO (nt))
2839 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2840 ot = DECL_TEMPLATE_RESULT (olddecl);
2841 if (DECL_TEMPLATE_INFO (ot))
2842 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2843 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2844 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2845 return G_("redefinition of %q#D");
2847 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2849 bool olda = GNU_INLINE_P (ot);
2850 bool newa = GNU_INLINE_P (nt);
2852 if (olda != newa)
2854 if (newa)
2855 return G_("%q+D redeclared inline with "
2856 "%<gnu_inline%> attribute");
2857 else
2858 return G_("%q+D redeclared inline without "
2859 "%<gnu_inline%> attribute");
2863 /* Core issue #226 (C++0x):
2865 If a friend function template declaration specifies a
2866 default template-argument, that declaration shall be a
2867 definition and shall be the only declaration of the
2868 function template in the translation unit. */
2869 if ((cxx_dialect != cxx98)
2870 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2871 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2872 /*is_primary=*/true,
2873 /*is_partial=*/false,
2874 /*is_friend_decl=*/2))
2875 return G_("redeclaration of friend %q#D "
2876 "may not have default template arguments");
2878 return NULL;
2880 else if (VAR_P (newdecl)
2881 && CP_DECL_THREAD_LOCAL_P (newdecl) != CP_DECL_THREAD_LOCAL_P (olddecl)
2882 && (! DECL_LANG_SPECIFIC (olddecl)
2883 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2884 || CP_DECL_THREAD_LOCAL_P (newdecl)))
2886 /* Only variables can be thread-local, and all declarations must
2887 agree on this property. */
2888 if (CP_DECL_THREAD_LOCAL_P (newdecl))
2889 return G_("thread-local declaration of %q#D follows "
2890 "non-thread-local declaration");
2891 else
2892 return G_("non-thread-local declaration of %q#D follows "
2893 "thread-local declaration");
2895 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2897 /* The objects have been declared at namespace scope. If either
2898 is a member of an anonymous union, then this is an invalid
2899 redeclaration. For example:
2901 int i;
2902 union { int i; };
2904 is invalid. */
2905 if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
2906 || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
2907 return G_("redeclaration of %q#D");
2908 /* If at least one declaration is a reference, there is no
2909 conflict. For example:
2911 int i = 3;
2912 extern int i;
2914 is valid. */
2915 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2916 return NULL;
2918 /* Static data member declared outside a class definition
2919 if the variable is defined within the class with constexpr
2920 specifier is declaration rather than definition (and
2921 deprecated). */
2922 if (cxx_dialect >= cxx17
2923 && DECL_CLASS_SCOPE_P (olddecl)
2924 && DECL_DECLARED_CONSTEXPR_P (olddecl)
2925 && !DECL_INITIAL (newdecl))
2927 DECL_EXTERNAL (newdecl) = 1;
2928 /* For now, only warn with explicit -Wdeprecated. */
2929 if (global_options_set.x_warn_deprecated
2930 && warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wdeprecated,
2931 "redundant redeclaration of %<constexpr%> static "
2932 "data member %qD", newdecl))
2933 inform (DECL_SOURCE_LOCATION (olddecl),
2934 "previous declaration of %qD", olddecl);
2935 return NULL;
2938 /* Reject two definitions. */
2939 return G_("redefinition of %q#D");
2941 else
2943 /* Objects declared with block scope: */
2944 /* Reject two definitions, and reject a definition
2945 together with an external reference. */
2946 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2947 return G_("redeclaration of %q#D");
2948 return NULL;
2953 /* Hash and equality functions for the named_label table. */
2955 hashval_t
2956 named_label_hash::hash (const value_type entry)
2958 return IDENTIFIER_HASH_VALUE (entry->name);
2961 bool
2962 named_label_hash::equal (const value_type entry, compare_type name)
2964 return name == entry->name;
2967 /* Look for a label named ID in the current function. If one cannot
2968 be found, create one. Return the named_label_entry, or NULL on
2969 failure. */
2971 static named_label_entry *
2972 lookup_label_1 (tree id, bool making_local_p)
2974 /* You can't use labels at global scope. */
2975 if (current_function_decl == NULL_TREE)
2977 error ("label %qE referenced outside of any function", id);
2978 return NULL;
2981 if (!named_labels)
2982 named_labels = hash_table<named_label_hash>::create_ggc (13);
2984 hashval_t hash = IDENTIFIER_HASH_VALUE (id);
2985 named_label_entry **slot
2986 = named_labels->find_slot_with_hash (id, hash, INSERT);
2987 named_label_entry *old = *slot;
2989 if (old && old->label_decl)
2991 if (!making_local_p)
2992 return old;
2994 if (old->binding_level == current_binding_level)
2996 error ("local label %qE conflicts with existing label", id);
2997 inform (DECL_SOURCE_LOCATION (old->label_decl), "previous label");
2998 return NULL;
3002 /* We are making a new decl, create or reuse the named_label_entry */
3003 named_label_entry *ent = NULL;
3004 if (old && !old->label_decl)
3005 ent = old;
3006 else
3008 ent = ggc_cleared_alloc<named_label_entry> ();
3009 ent->name = id;
3010 ent->outer = old;
3011 *slot = ent;
3014 /* Now create the LABEL_DECL. */
3015 tree decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
3017 DECL_CONTEXT (decl) = current_function_decl;
3018 SET_DECL_MODE (decl, VOIDmode);
3019 if (making_local_p)
3021 C_DECLARED_LABEL_FLAG (decl) = true;
3022 DECL_CHAIN (decl) = current_binding_level->names;
3023 current_binding_level->names = decl;
3026 ent->label_decl = decl;
3028 return ent;
3031 /* Wrapper for lookup_label_1. */
3033 tree
3034 lookup_label (tree id)
3036 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3037 named_label_entry *ent = lookup_label_1 (id, false);
3038 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3039 return ent ? ent->label_decl : NULL_TREE;
3042 tree
3043 declare_local_label (tree id)
3045 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3046 named_label_entry *ent = lookup_label_1 (id, true);
3047 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3048 return ent ? ent->label_decl : NULL_TREE;
3051 /* Returns nonzero if it is ill-formed to jump past the declaration of
3052 DECL. Returns 2 if it's also a real problem. */
3054 static int
3055 decl_jump_unsafe (tree decl)
3057 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
3058 with automatic storage duration is not in scope to a point where it is
3059 in scope is ill-formed unless the variable has scalar type, class type
3060 with a trivial default constructor and a trivial destructor, a
3061 cv-qualified version of one of these types, or an array of one of the
3062 preceding types and is declared without an initializer (8.5). */
3063 tree type = TREE_TYPE (decl);
3065 if (!VAR_P (decl) || TREE_STATIC (decl)
3066 || type == error_mark_node)
3067 return 0;
3069 if (DECL_NONTRIVIALLY_INITIALIZED_P (decl)
3070 || variably_modified_type_p (type, NULL_TREE))
3071 return 2;
3073 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3074 return 1;
3076 return 0;
3079 /* A subroutine of check_previous_goto_1 and check_goto to identify a branch
3080 to the user. */
3082 static bool
3083 identify_goto (tree decl, location_t loc, const location_t *locus,
3084 diagnostic_t diag_kind)
3086 bool complained
3087 = emit_diagnostic (diag_kind, loc, 0,
3088 decl ? N_("jump to label %qD")
3089 : N_("jump to case label"), decl);
3090 if (complained && locus)
3091 inform (*locus, " from here");
3092 return complained;
3095 /* Check that a single previously seen jump to a newly defined label
3096 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
3097 the jump context; NAMES are the names in scope in LEVEL at the jump
3098 context; LOCUS is the source position of the jump or 0. Returns
3099 true if all is well. */
3101 static bool
3102 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
3103 bool exited_omp, const location_t *locus)
3105 cp_binding_level *b;
3106 bool complained = false;
3107 int identified = 0;
3108 bool saw_eh = false, saw_omp = false, saw_tm = false, saw_cxif = false;
3110 if (exited_omp)
3112 complained = identify_goto (decl, input_location, locus, DK_ERROR);
3113 if (complained)
3114 inform (input_location, " exits OpenMP structured block");
3115 saw_omp = true;
3116 identified = 2;
3119 for (b = current_binding_level; b ; b = b->level_chain)
3121 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
3123 for (new_decls = b->names; new_decls != old_decls;
3124 new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
3125 : TREE_CHAIN (new_decls)))
3127 int problem = decl_jump_unsafe (new_decls);
3128 if (! problem)
3129 continue;
3131 if (!identified)
3133 complained = identify_goto (decl, input_location, locus,
3134 DK_PERMERROR);
3135 identified = 1;
3137 if (complained)
3139 if (problem > 1)
3140 inform (DECL_SOURCE_LOCATION (new_decls),
3141 " crosses initialization of %q#D", new_decls);
3142 else
3143 inform (DECL_SOURCE_LOCATION (new_decls),
3144 " enters scope of %q#D, which has "
3145 "non-trivial destructor", new_decls);
3149 if (b == level)
3150 break;
3152 const char *inf = NULL;
3153 location_t loc = input_location;
3154 switch (b->kind)
3156 case sk_try:
3157 if (!saw_eh)
3158 inf = N_("enters try block");
3159 saw_eh = true;
3160 break;
3162 case sk_catch:
3163 if (!saw_eh)
3164 inf = N_("enters catch block");
3165 saw_eh = true;
3166 break;
3168 case sk_omp:
3169 if (!saw_omp)
3170 inf = N_("enters OpenMP structured block");
3171 saw_omp = true;
3172 break;
3174 case sk_transaction:
3175 if (!saw_tm)
3176 inf = N_("enters synchronized or atomic statement");
3177 saw_tm = true;
3178 break;
3180 case sk_block:
3181 if (!saw_cxif && level_for_constexpr_if (b->level_chain))
3183 inf = N_("enters constexpr if statement");
3184 loc = EXPR_LOCATION (b->level_chain->this_entity);
3185 saw_cxif = true;
3187 break;
3189 default:
3190 break;
3193 if (inf)
3195 if (identified < 2)
3196 complained = identify_goto (decl, input_location, locus, DK_ERROR);
3197 identified = 2;
3198 if (complained)
3199 inform (loc, " %s", inf);
3203 return !identified;
3206 static void
3207 check_previous_goto (tree decl, struct named_label_use_entry *use)
3209 check_previous_goto_1 (decl, use->binding_level,
3210 use->names_in_scope, use->in_omp_scope,
3211 &use->o_goto_locus);
3214 static bool
3215 check_switch_goto (cp_binding_level* level)
3217 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
3220 /* Check that a new jump to a label DECL is OK. Called by
3221 finish_goto_stmt. */
3223 void
3224 check_goto (tree decl)
3226 /* We can't know where a computed goto is jumping.
3227 So we assume that it's OK. */
3228 if (TREE_CODE (decl) != LABEL_DECL)
3229 return;
3231 /* We didn't record any information about this label when we created it,
3232 and there's not much point since it's trivial to analyze as a return. */
3233 if (decl == cdtor_label)
3234 return;
3236 hashval_t hash = IDENTIFIER_HASH_VALUE (DECL_NAME (decl));
3237 named_label_entry **slot
3238 = named_labels->find_slot_with_hash (DECL_NAME (decl), hash, NO_INSERT);
3239 named_label_entry *ent = *slot;
3241 /* If the label hasn't been defined yet, defer checking. */
3242 if (! DECL_INITIAL (decl))
3244 /* Don't bother creating another use if the last goto had the
3245 same data, and will therefore create the same set of errors. */
3246 if (ent->uses
3247 && ent->uses->names_in_scope == current_binding_level->names)
3248 return;
3250 named_label_use_entry *new_use
3251 = ggc_alloc<named_label_use_entry> ();
3252 new_use->binding_level = current_binding_level;
3253 new_use->names_in_scope = current_binding_level->names;
3254 new_use->o_goto_locus = input_location;
3255 new_use->in_omp_scope = false;
3257 new_use->next = ent->uses;
3258 ent->uses = new_use;
3259 return;
3262 bool saw_catch = false, complained = false;
3263 int identified = 0;
3264 tree bad;
3265 unsigned ix;
3267 if (ent->in_try_scope || ent->in_catch_scope || ent->in_transaction_scope
3268 || ent->in_constexpr_if
3269 || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
3271 diagnostic_t diag_kind = DK_PERMERROR;
3272 if (ent->in_try_scope || ent->in_catch_scope || ent->in_constexpr_if
3273 || ent->in_transaction_scope || ent->in_omp_scope)
3274 diag_kind = DK_ERROR;
3275 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3276 &input_location, diag_kind);
3277 identified = 1 + (diag_kind == DK_ERROR);
3280 FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
3282 int u = decl_jump_unsafe (bad);
3284 if (u > 1 && DECL_ARTIFICIAL (bad))
3286 /* Can't skip init of __exception_info. */
3287 if (identified == 1)
3289 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3290 &input_location, DK_ERROR);
3291 identified = 2;
3293 if (complained)
3294 inform (DECL_SOURCE_LOCATION (bad), " enters catch block");
3295 saw_catch = true;
3297 else if (complained)
3299 if (u > 1)
3300 inform (DECL_SOURCE_LOCATION (bad),
3301 " skips initialization of %q#D", bad);
3302 else
3303 inform (DECL_SOURCE_LOCATION (bad),
3304 " enters scope of %q#D which has "
3305 "non-trivial destructor", bad);
3309 if (complained)
3311 if (ent->in_try_scope)
3312 inform (input_location, " enters try block");
3313 else if (ent->in_catch_scope && !saw_catch)
3314 inform (input_location, " enters catch block");
3315 else if (ent->in_transaction_scope)
3316 inform (input_location, " enters synchronized or atomic statement");
3317 else if (ent->in_constexpr_if)
3318 inform (input_location, " enters %<constexpr%> if statement");
3321 if (ent->in_omp_scope)
3323 if (complained)
3324 inform (input_location, " enters OpenMP structured block");
3326 else if (flag_openmp)
3327 for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3329 if (b == ent->binding_level)
3330 break;
3331 if (b->kind == sk_omp)
3333 if (identified < 2)
3335 complained = identify_goto (decl,
3336 DECL_SOURCE_LOCATION (decl),
3337 &input_location, DK_ERROR);
3338 identified = 2;
3340 if (complained)
3341 inform (input_location, " exits OpenMP structured block");
3342 break;
3347 /* Check that a return is ok wrt OpenMP structured blocks.
3348 Called by finish_return_stmt. Returns true if all is well. */
3350 bool
3351 check_omp_return (void)
3353 for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3354 if (b->kind == sk_omp)
3356 error ("invalid exit from OpenMP structured block");
3357 return false;
3359 else if (b->kind == sk_function_parms)
3360 break;
3361 return true;
3364 /* Define a label, specifying the location in the source file.
3365 Return the LABEL_DECL node for the label. */
3367 static tree
3368 define_label_1 (location_t location, tree name)
3370 /* After labels, make any new cleanups in the function go into their
3371 own new (temporary) binding contour. */
3372 for (cp_binding_level *p = current_binding_level;
3373 p->kind != sk_function_parms;
3374 p = p->level_chain)
3375 p->more_cleanups_ok = 0;
3377 named_label_entry *ent = lookup_label_1 (name, false);
3378 tree decl = ent->label_decl;
3380 if (DECL_INITIAL (decl) != NULL_TREE)
3382 error ("duplicate label %qD", decl);
3383 return error_mark_node;
3385 else
3387 /* Mark label as having been defined. */
3388 DECL_INITIAL (decl) = error_mark_node;
3389 /* Say where in the source. */
3390 DECL_SOURCE_LOCATION (decl) = location;
3392 ent->binding_level = current_binding_level;
3393 ent->names_in_scope = current_binding_level->names;
3395 for (named_label_use_entry *use = ent->uses; use; use = use->next)
3396 check_previous_goto (decl, use);
3397 ent->uses = NULL;
3400 return decl;
3403 /* Wrapper for define_label_1. */
3405 tree
3406 define_label (location_t location, tree name)
3408 bool running = timevar_cond_start (TV_NAME_LOOKUP);
3409 tree ret = define_label_1 (location, name);
3410 timevar_cond_stop (TV_NAME_LOOKUP, running);
3411 return ret;
3415 struct cp_switch
3417 cp_binding_level *level;
3418 struct cp_switch *next;
3419 /* The SWITCH_STMT being built. */
3420 tree switch_stmt;
3421 /* A splay-tree mapping the low element of a case range to the high
3422 element, or NULL_TREE if there is no high element. Used to
3423 determine whether or not a new case label duplicates an old case
3424 label. We need a tree, rather than simply a hash table, because
3425 of the GNU case range extension. */
3426 splay_tree cases;
3427 /* Remember whether there was a case value that is outside the
3428 range of the original type of the controlling expression. */
3429 bool outside_range_p;
3432 /* A stack of the currently active switch statements. The innermost
3433 switch statement is on the top of the stack. There is no need to
3434 mark the stack for garbage collection because it is only active
3435 during the processing of the body of a function, and we never
3436 collect at that point. */
3438 static struct cp_switch *switch_stack;
3440 /* Called right after a switch-statement condition is parsed.
3441 SWITCH_STMT is the switch statement being parsed. */
3443 void
3444 push_switch (tree switch_stmt)
3446 struct cp_switch *p = XNEW (struct cp_switch);
3447 p->level = current_binding_level;
3448 p->next = switch_stack;
3449 p->switch_stmt = switch_stmt;
3450 p->cases = splay_tree_new (case_compare, NULL, NULL);
3451 p->outside_range_p = false;
3452 switch_stack = p;
3455 void
3456 pop_switch (void)
3458 struct cp_switch *cs = switch_stack;
3459 location_t switch_location;
3461 /* Emit warnings as needed. */
3462 switch_location = EXPR_LOC_OR_LOC (cs->switch_stmt, input_location);
3463 const bool bool_cond_p
3464 = (SWITCH_STMT_TYPE (cs->switch_stmt)
3465 && TREE_CODE (SWITCH_STMT_TYPE (cs->switch_stmt)) == BOOLEAN_TYPE);
3466 if (!processing_template_decl)
3467 c_do_switch_warnings (cs->cases, switch_location,
3468 SWITCH_STMT_TYPE (cs->switch_stmt),
3469 SWITCH_STMT_COND (cs->switch_stmt),
3470 bool_cond_p, cs->outside_range_p);
3472 splay_tree_delete (cs->cases);
3473 switch_stack = switch_stack->next;
3474 free (cs);
3477 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3478 condition. Note that if TYPE and VALUE are already integral we don't
3479 really do the conversion because the language-independent
3480 warning/optimization code will work better that way. */
3482 static tree
3483 case_conversion (tree type, tree value)
3485 if (value == NULL_TREE)
3486 return value;
3488 if (cxx_dialect >= cxx11
3489 && (SCOPED_ENUM_P (type)
3490 || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3492 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3493 type = type_promotes_to (type);
3494 value = (perform_implicit_conversion_flags
3495 (type, value, tf_warning_or_error,
3496 LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL));
3498 return cxx_constant_value (value);
3501 /* Note that we've seen a definition of a case label, and complain if this
3502 is a bad place for one. */
3504 tree
3505 finish_case_label (location_t loc, tree low_value, tree high_value)
3507 tree cond, r;
3508 cp_binding_level *p;
3509 tree type;
3511 if (processing_template_decl)
3513 tree label;
3515 /* For templates, just add the case label; we'll do semantic
3516 analysis at instantiation-time. */
3517 label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3518 return add_stmt (build_case_label (low_value, high_value, label));
3521 /* Find the condition on which this switch statement depends. */
3522 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3523 if (cond && TREE_CODE (cond) == TREE_LIST)
3524 cond = TREE_VALUE (cond);
3526 if (!check_switch_goto (switch_stack->level))
3527 return error_mark_node;
3529 type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3531 low_value = case_conversion (type, low_value);
3532 high_value = case_conversion (type, high_value);
3534 r = c_add_case_label (loc, switch_stack->cases, cond, type,
3535 low_value, high_value,
3536 &switch_stack->outside_range_p);
3538 /* After labels, make any new cleanups in the function go into their
3539 own new (temporary) binding contour. */
3540 for (p = current_binding_level;
3541 p->kind != sk_function_parms;
3542 p = p->level_chain)
3543 p->more_cleanups_ok = 0;
3545 return r;
3548 struct typename_info {
3549 tree scope;
3550 tree name;
3551 tree template_id;
3552 bool enum_p;
3553 bool class_p;
3556 struct typename_hasher : ggc_ptr_hash<tree_node>
3558 typedef typename_info *compare_type;
3560 /* Hash a TYPENAME_TYPE. */
3562 static hashval_t
3563 hash (tree t)
3565 hashval_t hash;
3567 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3568 ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
3570 return hash;
3573 /* Compare two TYPENAME_TYPEs. */
3575 static bool
3576 equal (tree t1, const typename_info *t2)
3578 return (TYPE_IDENTIFIER (t1) == t2->name
3579 && TYPE_CONTEXT (t1) == t2->scope
3580 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3581 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3582 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3586 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
3587 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3589 Returns the new TYPENAME_TYPE. */
3591 static GTY (()) hash_table<typename_hasher> *typename_htab;
3593 tree
3594 build_typename_type (tree context, tree name, tree fullname,
3595 enum tag_types tag_type)
3597 tree t;
3598 tree d;
3599 typename_info ti;
3600 tree *e;
3601 hashval_t hash;
3603 if (typename_htab == NULL)
3604 typename_htab = hash_table<typename_hasher>::create_ggc (61);
3606 ti.scope = FROB_CONTEXT (context);
3607 ti.name = name;
3608 ti.template_id = fullname;
3609 ti.enum_p = tag_type == enum_type;
3610 ti.class_p = (tag_type == class_type
3611 || tag_type == record_type
3612 || tag_type == union_type);
3613 hash = (htab_hash_pointer (ti.scope)
3614 ^ htab_hash_pointer (ti.name));
3616 /* See if we already have this type. */
3617 e = typename_htab->find_slot_with_hash (&ti, hash, INSERT);
3618 if (*e)
3619 t = *e;
3620 else
3622 /* Build the TYPENAME_TYPE. */
3623 t = cxx_make_type (TYPENAME_TYPE);
3624 TYPE_CONTEXT (t) = ti.scope;
3625 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3626 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3627 TYPENAME_IS_CLASS_P (t) = ti.class_p;
3629 /* Build the corresponding TYPE_DECL. */
3630 d = build_decl (input_location, TYPE_DECL, name, t);
3631 TYPE_NAME (TREE_TYPE (d)) = d;
3632 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3633 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3634 DECL_ARTIFICIAL (d) = 1;
3636 /* Store it in the hash table. */
3637 *e = t;
3639 /* TYPENAME_TYPEs must always be compared structurally, because
3640 they may or may not resolve down to another type depending on
3641 the currently open classes. */
3642 SET_TYPE_STRUCTURAL_EQUALITY (t);
3645 return t;
3648 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
3649 provided to name the type. Returns an appropriate type, unless an
3650 error occurs, in which case error_mark_node is returned. If we
3651 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3652 return that, rather than the _TYPE it corresponds to, in other
3653 cases we look through the type decl. If TF_ERROR is set, complain
3654 about errors, otherwise be quiet. */
3656 tree
3657 make_typename_type (tree context, tree name, enum tag_types tag_type,
3658 tsubst_flags_t complain)
3660 tree fullname;
3661 tree t;
3662 bool want_template;
3664 if (name == error_mark_node
3665 || context == NULL_TREE
3666 || context == error_mark_node)
3667 return error_mark_node;
3669 if (TYPE_P (name))
3671 if (!(TYPE_LANG_SPECIFIC (name)
3672 && (CLASSTYPE_IS_TEMPLATE (name)
3673 || CLASSTYPE_USE_TEMPLATE (name))))
3674 name = TYPE_IDENTIFIER (name);
3675 else
3676 /* Create a TEMPLATE_ID_EXPR for the type. */
3677 name = build_nt (TEMPLATE_ID_EXPR,
3678 CLASSTYPE_TI_TEMPLATE (name),
3679 CLASSTYPE_TI_ARGS (name));
3681 else if (TREE_CODE (name) == TYPE_DECL)
3682 name = DECL_NAME (name);
3684 fullname = name;
3686 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3688 name = TREE_OPERAND (name, 0);
3689 if (DECL_TYPE_TEMPLATE_P (name))
3690 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3691 if (TREE_CODE (name) != IDENTIFIER_NODE)
3693 if (complain & tf_error)
3694 error ("%qD is not a type", name);
3695 return error_mark_node;
3698 if (TREE_CODE (name) == TEMPLATE_DECL)
3700 if (complain & tf_error)
3701 error ("%qD used without template parameters", name);
3702 return error_mark_node;
3704 gcc_assert (identifier_p (name));
3705 gcc_assert (TYPE_P (context));
3707 if (!MAYBE_CLASS_TYPE_P (context))
3709 if (complain & tf_error)
3710 error ("%q#T is not a class", context);
3711 return error_mark_node;
3714 /* When the CONTEXT is a dependent type, NAME could refer to a
3715 dependent base class of CONTEXT. But look inside it anyway
3716 if CONTEXT is a currently open scope, in case it refers to a
3717 member of the current instantiation or a non-dependent base;
3718 lookup will stop when we hit a dependent base. */
3719 if (!dependent_scope_p (context))
3720 /* We should only set WANT_TYPE when we're a nested typename type.
3721 Then we can give better diagnostics if we find a non-type. */
3722 t = lookup_field (context, name, 2, /*want_type=*/true);
3723 else
3724 t = NULL_TREE;
3726 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3727 return build_typename_type (context, name, fullname, tag_type);
3729 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3731 if (!t)
3733 if (complain & tf_error)
3735 if (!COMPLETE_TYPE_P (context))
3736 cxx_incomplete_type_error (NULL_TREE, context);
3737 else
3738 error (want_template ? G_("no class template named %q#T in %q#T")
3739 : G_("no type named %q#T in %q#T"), name, context);
3741 return error_mark_node;
3744 /* Pull out the template from an injected-class-name (or multiple). */
3745 if (want_template)
3746 t = maybe_get_template_decl_from_type_decl (t);
3748 if (TREE_CODE (t) == TREE_LIST)
3750 if (complain & tf_error)
3752 error ("lookup of %qT in %qT is ambiguous", name, context);
3753 print_candidates (t);
3755 return error_mark_node;
3758 if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3760 if (complain & tf_error)
3761 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3762 context, name, t);
3763 return error_mark_node;
3765 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3767 if (complain & tf_error)
3768 error ("%<typename %T::%D%> names %q#T, which is not a type",
3769 context, name, t);
3770 return error_mark_node;
3773 if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3774 return error_mark_node;
3776 /* If we are currently parsing a template and if T is a typedef accessed
3777 through CONTEXT then we need to remember and check access of T at
3778 template instantiation time. */
3779 add_typedef_to_current_template_for_access_check (t, context, input_location);
3781 if (want_template)
3782 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3783 NULL_TREE, context,
3784 /*entering_scope=*/0,
3785 complain | tf_user);
3787 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3788 t = TREE_TYPE (t);
3790 maybe_record_typedef_use (t);
3792 return t;
3795 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3796 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3797 in which case error_mark_node is returned.
3799 If PARM_LIST is non-NULL, also make sure that the template parameter
3800 list of TEMPLATE_DECL matches.
3802 If COMPLAIN zero, don't complain about any errors that occur. */
3804 tree
3805 make_unbound_class_template (tree context, tree name, tree parm_list,
3806 tsubst_flags_t complain)
3808 tree t;
3809 tree d;
3811 if (TYPE_P (name))
3812 name = TYPE_IDENTIFIER (name);
3813 else if (DECL_P (name))
3814 name = DECL_NAME (name);
3815 gcc_assert (identifier_p (name));
3817 if (!dependent_type_p (context)
3818 || currently_open_class (context))
3820 tree tmpl = NULL_TREE;
3822 if (MAYBE_CLASS_TYPE_P (context))
3823 tmpl = lookup_field (context, name, 0, false);
3825 if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3826 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3828 if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3830 if (complain & tf_error)
3831 error ("no class template named %q#T in %q#T", name, context);
3832 return error_mark_node;
3835 if (parm_list
3836 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3838 if (complain & tf_error)
3840 error ("template parameters do not match template %qD", tmpl);
3841 inform (DECL_SOURCE_LOCATION (tmpl),
3842 "%qD declared here", tmpl);
3844 return error_mark_node;
3847 if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3848 complain))
3849 return error_mark_node;
3851 return tmpl;
3854 /* Build the UNBOUND_CLASS_TEMPLATE. */
3855 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3856 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3857 TREE_TYPE (t) = NULL_TREE;
3858 SET_TYPE_STRUCTURAL_EQUALITY (t);
3860 /* Build the corresponding TEMPLATE_DECL. */
3861 d = build_decl (input_location, TEMPLATE_DECL, name, t);
3862 TYPE_NAME (TREE_TYPE (d)) = d;
3863 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3864 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3865 DECL_ARTIFICIAL (d) = 1;
3866 DECL_TEMPLATE_PARMS (d) = parm_list;
3868 return t;
3873 /* Push the declarations of builtin types into the global namespace.
3874 RID_INDEX is the index of the builtin type in the array
3875 RID_POINTERS. NAME is the name used when looking up the builtin
3876 type. TYPE is the _TYPE node for the builtin type.
3878 The calls to set_global_binding below should be
3879 eliminated. Built-in types should not be looked up name; their
3880 names are keywords that the parser can recognize. However, there
3881 is code in c-common.c that uses identifier_global_value to look up
3882 built-in types by name. */
3884 void
3885 record_builtin_type (enum rid rid_index,
3886 const char* name,
3887 tree type)
3889 tree decl = NULL_TREE;
3891 if (name)
3893 tree tname = get_identifier (name);
3894 tree tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3895 DECL_ARTIFICIAL (tdecl) = 1;
3896 set_global_binding (tdecl);
3897 decl = tdecl;
3900 if ((int) rid_index < (int) RID_MAX)
3901 if (tree rname = ridpointers[(int) rid_index])
3902 if (!decl || DECL_NAME (decl) != rname)
3904 tree rdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3905 DECL_ARTIFICIAL (rdecl) = 1;
3906 set_global_binding (rdecl);
3907 if (!decl)
3908 decl = rdecl;
3911 if (decl)
3913 if (!TYPE_NAME (type))
3914 TYPE_NAME (type) = decl;
3915 debug_hooks->type_decl (decl, 0);
3919 /* Push a type into the namespace so that the back ends ignore it. */
3921 static void
3922 record_unknown_type (tree type, const char* name)
3924 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3925 TYPE_DECL, get_identifier (name), type));
3926 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3927 DECL_IGNORED_P (decl) = 1;
3928 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3929 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3930 SET_TYPE_ALIGN (type, 1);
3931 TYPE_USER_ALIGN (type) = 0;
3932 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3935 /* Create all the predefined identifiers. */
3937 static void
3938 initialize_predefined_identifiers (void)
3940 struct predefined_identifier
3942 const char *name; /* Name. */
3943 tree *node; /* Node to store it in. */
3944 cp_identifier_kind kind; /* Kind of identifier. */
3947 /* A table of identifiers to create at startup. */
3948 static const predefined_identifier predefined_identifiers[] = {
3949 {"C++", &lang_name_cplusplus, cik_normal},
3950 {"C", &lang_name_c, cik_normal},
3951 /* Some of these names have a trailing space so that it is
3952 impossible for them to conflict with names written by users. */
3953 {"__ct ", &ctor_identifier, cik_ctor},
3954 {"__ct_base ", &base_ctor_identifier, cik_ctor},
3955 {"__ct_comp ", &complete_ctor_identifier, cik_ctor},
3956 {"__dt ", &dtor_identifier, cik_dtor},
3957 {"__dt_base ", &base_dtor_identifier, cik_dtor},
3958 {"__dt_comp ", &complete_dtor_identifier, cik_dtor},
3959 {"__dt_del ", &deleting_dtor_identifier, cik_dtor},
3960 {"__conv_op ", &conv_op_identifier, cik_conv_op},
3961 {"__in_chrg", &in_charge_identifier, cik_normal},
3962 {"this", &this_identifier, cik_normal},
3963 {"__delta", &delta_identifier, cik_normal},
3964 {"__pfn", &pfn_identifier, cik_normal},
3965 {"_vptr", &vptr_identifier, cik_normal},
3966 {"__vtt_parm", &vtt_parm_identifier, cik_normal},
3967 {"::", &global_identifier, cik_normal},
3968 {"std", &std_identifier, cik_normal},
3969 /* The demangler expects anonymous namespaces to be called
3970 something starting with '_GLOBAL__N_'. It no longer needs
3971 to be unique to the TU. */
3972 {"_GLOBAL__N_1", &anon_identifier, cik_normal},
3973 {"auto", &auto_identifier, cik_normal},
3974 {"decltype(auto)", &decltype_auto_identifier, cik_normal},
3975 {"initializer_list", &init_list_identifier, cik_normal},
3976 {NULL, NULL, cik_normal}
3979 for (const predefined_identifier *pid = predefined_identifiers;
3980 pid->name; ++pid)
3982 *pid->node = get_identifier (pid->name);
3983 /* Some of these identifiers already have a special kind. */
3984 if (pid->kind != cik_normal)
3985 set_identifier_kind (*pid->node, pid->kind);
3989 /* Create the predefined scalar types of C,
3990 and some nodes representing standard constants (0, 1, (void *)0).
3991 Initialize the global binding level.
3992 Make definitions for built-in primitive functions. */
3994 void
3995 cxx_init_decl_processing (void)
3997 tree void_ftype;
3998 tree void_ftype_ptr;
4000 /* Create all the identifiers we need. */
4001 initialize_predefined_identifiers ();
4003 /* Create the global variables. */
4004 push_to_top_level ();
4006 current_function_decl = NULL_TREE;
4007 current_binding_level = NULL;
4008 /* Enter the global namespace. */
4009 gcc_assert (global_namespace == NULL_TREE);
4010 global_namespace = build_lang_decl (NAMESPACE_DECL, global_identifier,
4011 void_type_node);
4012 TREE_PUBLIC (global_namespace) = 1;
4013 DECL_CONTEXT (global_namespace)
4014 = build_translation_unit_decl (get_identifier (main_input_filename));
4015 /* Remember whether we want the empty class passing ABI change warning
4016 in this TU. */
4017 TRANSLATION_UNIT_WARN_EMPTY_P (DECL_CONTEXT (global_namespace))
4018 = warn_abi && abi_version_crosses (12);
4019 debug_hooks->register_main_translation_unit
4020 (DECL_CONTEXT (global_namespace));
4021 begin_scope (sk_namespace, global_namespace);
4022 current_namespace = global_namespace;
4024 if (flag_visibility_ms_compat)
4025 default_visibility = VISIBILITY_HIDDEN;
4027 /* Initially, C. */
4028 current_lang_name = lang_name_c;
4030 /* Create the `std' namespace. */
4031 push_namespace (std_identifier);
4032 std_node = current_namespace;
4033 pop_namespace ();
4035 flag_noexcept_type = (cxx_dialect >= cxx17);
4037 c_common_nodes_and_builtins ();
4039 integer_two_node = build_int_cst (NULL_TREE, 2);
4041 /* Guess at the initial static decls size. */
4042 vec_alloc (static_decls, 500);
4044 /* ... and keyed classes. */
4045 vec_alloc (keyed_classes, 100);
4047 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
4048 truthvalue_type_node = boolean_type_node;
4049 truthvalue_false_node = boolean_false_node;
4050 truthvalue_true_node = boolean_true_node;
4052 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
4053 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
4054 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
4055 noexcept_deferred_spec = build_tree_list (make_node (DEFERRED_NOEXCEPT),
4056 NULL_TREE);
4058 #if 0
4059 record_builtin_type (RID_MAX, NULL, string_type_node);
4060 #endif
4062 delta_type_node = ptrdiff_type_node;
4063 vtable_index_type = ptrdiff_type_node;
4065 vtt_parm_type = build_pointer_type (const_ptr_type_node);
4066 void_ftype = build_function_type_list (void_type_node, NULL_TREE);
4067 void_ftype_ptr = build_function_type_list (void_type_node,
4068 ptr_type_node, NULL_TREE);
4069 void_ftype_ptr
4070 = build_exception_variant (void_ftype_ptr, empty_except_spec);
4072 /* Create the conversion operator marker. This operator's DECL_NAME
4073 is in the identifier table, so we can use identifier equality to
4074 find it. */
4075 conv_op_marker = build_lang_decl (FUNCTION_DECL, conv_op_identifier,
4076 void_ftype);
4078 /* C++ extensions */
4080 unknown_type_node = make_node (LANG_TYPE);
4081 record_unknown_type (unknown_type_node, "unknown type");
4083 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
4084 TREE_TYPE (unknown_type_node) = unknown_type_node;
4086 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
4087 result. */
4088 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
4089 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
4091 init_list_type_node = make_node (LANG_TYPE);
4092 record_unknown_type (init_list_type_node, "init list");
4095 /* Make sure we get a unique function type, so we can give
4096 its pointer type a name. (This wins for gdb.) */
4097 tree vfunc_type = make_node (FUNCTION_TYPE);
4098 TREE_TYPE (vfunc_type) = integer_type_node;
4099 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
4100 layout_type (vfunc_type);
4102 vtable_entry_type = build_pointer_type (vfunc_type);
4104 record_builtin_type (RID_MAX, "__vtbl_ptr_type", vtable_entry_type);
4106 vtbl_type_node
4107 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
4108 layout_type (vtbl_type_node);
4109 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
4110 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
4111 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
4112 layout_type (vtbl_ptr_type_node);
4113 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
4115 push_namespace (get_identifier ("__cxxabiv1"));
4116 abi_node = current_namespace;
4117 pop_namespace ();
4119 global_type_node = make_node (LANG_TYPE);
4120 record_unknown_type (global_type_node, "global type");
4122 any_targ_node = make_node (LANG_TYPE);
4123 record_unknown_type (any_targ_node, "any type");
4125 /* Now, C++. */
4126 current_lang_name = lang_name_cplusplus;
4128 if (aligned_new_threshold > 1
4129 && !pow2p_hwi (aligned_new_threshold))
4131 error ("-faligned-new=%d is not a power of two", aligned_new_threshold);
4132 aligned_new_threshold = 1;
4134 if (aligned_new_threshold == -1)
4135 aligned_new_threshold = (cxx_dialect >= cxx17) ? 1 : 0;
4136 if (aligned_new_threshold == 1)
4137 aligned_new_threshold = malloc_alignment () / BITS_PER_UNIT;
4140 tree newattrs, extvisattr;
4141 tree newtype, deltype;
4142 tree ptr_ftype_sizetype;
4143 tree new_eh_spec;
4145 ptr_ftype_sizetype
4146 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
4147 if (cxx_dialect == cxx98)
4149 tree bad_alloc_id;
4150 tree bad_alloc_type_node;
4151 tree bad_alloc_decl;
4153 push_namespace (std_identifier);
4154 bad_alloc_id = get_identifier ("bad_alloc");
4155 bad_alloc_type_node = make_class_type (RECORD_TYPE);
4156 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
4157 bad_alloc_decl
4158 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
4159 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
4160 pop_namespace ();
4162 new_eh_spec
4163 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
4165 else
4166 new_eh_spec = noexcept_false_spec;
4168 /* Ensure attribs.c is initialized. */
4169 init_attributes ();
4171 /* Ensure constraint.cc is initialized. */
4172 init_constraint_processing ();
4174 extvisattr = build_tree_list (get_identifier ("externally_visible"),
4175 NULL_TREE);
4176 newattrs = tree_cons (get_identifier ("alloc_size"),
4177 build_tree_list (NULL_TREE, integer_one_node),
4178 extvisattr);
4179 newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
4180 newtype = build_exception_variant (newtype, new_eh_spec);
4181 deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
4182 deltype = build_exception_variant (deltype, empty_except_spec);
4183 tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4184 DECL_IS_MALLOC (opnew) = 1;
4185 DECL_IS_OPERATOR_NEW (opnew) = 1;
4186 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4187 DECL_IS_MALLOC (opnew) = 1;
4188 DECL_IS_OPERATOR_NEW (opnew) = 1;
4189 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4190 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4191 if (flag_sized_deallocation)
4193 /* Also push the sized deallocation variants:
4194 void operator delete(void*, std::size_t) throw();
4195 void operator delete[](void*, std::size_t) throw(); */
4196 tree void_ftype_ptr_size
4197 = build_function_type_list (void_type_node, ptr_type_node,
4198 size_type_node, NULL_TREE);
4199 deltype = cp_build_type_attribute_variant (void_ftype_ptr_size,
4200 extvisattr);
4201 deltype = build_exception_variant (deltype, empty_except_spec);
4202 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4203 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4206 if (aligned_new_threshold)
4208 push_namespace (std_identifier);
4209 tree align_id = get_identifier ("align_val_t");
4210 align_type_node = start_enum (align_id, NULL_TREE, size_type_node,
4211 NULL_TREE, /*scoped*/true, NULL);
4212 pop_namespace ();
4214 /* operator new (size_t, align_val_t); */
4215 newtype = build_function_type_list (ptr_type_node, size_type_node,
4216 align_type_node, NULL_TREE);
4217 newtype = cp_build_type_attribute_variant (newtype, newattrs);
4218 newtype = build_exception_variant (newtype, new_eh_spec);
4219 opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4220 DECL_IS_MALLOC (opnew) = 1;
4221 DECL_IS_OPERATOR_NEW (opnew) = 1;
4222 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4223 DECL_IS_MALLOC (opnew) = 1;
4224 DECL_IS_OPERATOR_NEW (opnew) = 1;
4226 /* operator delete (void *, align_val_t); */
4227 deltype = build_function_type_list (void_type_node, ptr_type_node,
4228 align_type_node, NULL_TREE);
4229 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4230 deltype = build_exception_variant (deltype, empty_except_spec);
4231 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4232 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4234 if (flag_sized_deallocation)
4236 /* operator delete (void *, size_t, align_val_t); */
4237 deltype = build_function_type_list (void_type_node, ptr_type_node,
4238 size_type_node, align_type_node,
4239 NULL_TREE);
4240 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4241 deltype = build_exception_variant (deltype, empty_except_spec);
4242 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4243 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4247 nullptr_type_node = make_node (NULLPTR_TYPE);
4248 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
4249 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
4250 TYPE_UNSIGNED (nullptr_type_node) = 1;
4251 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
4252 if (abi_version_at_least (9))
4253 SET_TYPE_ALIGN (nullptr_type_node, GET_MODE_ALIGNMENT (ptr_mode));
4254 SET_TYPE_MODE (nullptr_type_node, ptr_mode);
4255 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
4256 nullptr_node = build_int_cst (nullptr_type_node, 0);
4259 abort_fndecl
4260 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
4261 ECF_NORETURN | ECF_NOTHROW | ECF_COLD);
4263 /* Perform other language dependent initializations. */
4264 init_class_processing ();
4265 init_rtti_processing ();
4266 init_template_processing ();
4268 if (flag_exceptions)
4269 init_exception_processing ();
4271 if (! supports_one_only ())
4272 flag_weak = 0;
4274 make_fname_decl = cp_make_fname_decl;
4275 start_fname_decls ();
4277 /* Show we use EH for cleanups. */
4278 if (flag_exceptions)
4279 using_eh_for_cleanups ();
4282 /* Generate an initializer for a function naming variable from
4283 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
4284 filled in with the type of the init. */
4286 tree
4287 cp_fname_init (const char* name, tree *type_p)
4289 tree domain = NULL_TREE;
4290 tree type;
4291 tree init = NULL_TREE;
4292 size_t length = 0;
4294 if (name)
4296 length = strlen (name);
4297 domain = build_index_type (size_int (length));
4298 init = build_string (length + 1, name);
4301 type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
4302 type = build_cplus_array_type (type, domain);
4304 *type_p = type;
4306 if (init)
4307 TREE_TYPE (init) = type;
4308 else
4309 init = error_mark_node;
4311 return init;
4314 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
4315 the decl, LOC is the location to give the decl, NAME is the
4316 initialization string and TYPE_DEP indicates whether NAME depended
4317 on the type of the function. We make use of that to detect
4318 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
4319 at the point of first use, so we mustn't push the decl now. */
4321 static tree
4322 cp_make_fname_decl (location_t loc, tree id, int type_dep)
4324 const char *const name = (type_dep && processing_template_decl
4325 ? NULL : fname_as_string (type_dep));
4326 tree type;
4327 tree init = cp_fname_init (name, &type);
4328 tree decl = build_decl (loc, VAR_DECL, id, type);
4330 if (name)
4331 free (CONST_CAST (char *, name));
4333 TREE_STATIC (decl) = 1;
4334 TREE_READONLY (decl) = 1;
4335 DECL_ARTIFICIAL (decl) = 1;
4337 TREE_USED (decl) = 1;
4339 if (current_function_decl)
4341 DECL_CONTEXT (decl) = current_function_decl;
4342 decl = pushdecl_outermost_localscope (decl);
4343 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
4344 LOOKUP_ONLYCONVERTING);
4346 else
4348 DECL_THIS_STATIC (decl) = true;
4349 pushdecl_top_level_and_finish (decl, init);
4352 return decl;
4355 static tree
4356 builtin_function_1 (tree decl, tree context, bool is_global)
4358 tree id = DECL_NAME (decl);
4359 const char *name = IDENTIFIER_POINTER (id);
4361 retrofit_lang_decl (decl);
4363 DECL_ARTIFICIAL (decl) = 1;
4364 SET_DECL_LANGUAGE (decl, lang_c);
4365 /* Runtime library routines are, by definition, available in an
4366 external shared object. */
4367 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4368 DECL_VISIBILITY_SPECIFIED (decl) = 1;
4370 DECL_CONTEXT (decl) = context;
4372 /* A function in the user's namespace should have an explicit
4373 declaration before it is used. Mark the built-in function as
4374 anticipated but not actually declared. */
4375 if (name[0] != '_' || name[1] != '_')
4376 DECL_ANTICIPATED (decl) = 1;
4377 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4379 size_t len = strlen (name);
4381 /* Treat __*_chk fortification functions as anticipated as well,
4382 unless they are __builtin_*. */
4383 if (len > strlen ("___chk")
4384 && memcmp (name + len - strlen ("_chk"),
4385 "_chk", strlen ("_chk") + 1) == 0)
4386 DECL_ANTICIPATED (decl) = 1;
4389 if (is_global)
4390 pushdecl_top_level (decl);
4391 else
4392 pushdecl (decl);
4394 return decl;
4397 tree
4398 cxx_builtin_function (tree decl)
4400 tree id = DECL_NAME (decl);
4401 const char *name = IDENTIFIER_POINTER (id);
4402 /* All builtins that don't begin with an '_' should additionally
4403 go in the 'std' namespace. */
4404 if (name[0] != '_')
4406 tree decl2 = copy_node(decl);
4407 push_namespace (std_identifier);
4408 builtin_function_1 (decl2, std_node, false);
4409 pop_namespace ();
4412 return builtin_function_1 (decl, NULL_TREE, false);
4415 /* Like cxx_builtin_function, but guarantee the function is added to the global
4416 scope. This is to allow function specific options to add new machine
4417 dependent builtins when the target ISA changes via attribute((target(...)))
4418 which saves space on program startup if the program does not use non-generic
4419 ISAs. */
4421 tree
4422 cxx_builtin_function_ext_scope (tree decl)
4425 tree id = DECL_NAME (decl);
4426 const char *name = IDENTIFIER_POINTER (id);
4427 /* All builtins that don't begin with an '_' should additionally
4428 go in the 'std' namespace. */
4429 if (name[0] != '_')
4431 tree decl2 = copy_node(decl);
4432 push_namespace (std_identifier);
4433 builtin_function_1 (decl2, std_node, true);
4434 pop_namespace ();
4437 return builtin_function_1 (decl, NULL_TREE, true);
4440 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4441 function. Not called directly. */
4443 static tree
4444 build_library_fn (tree name, enum tree_code operator_code, tree type,
4445 int ecf_flags)
4447 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4448 DECL_EXTERNAL (fn) = 1;
4449 TREE_PUBLIC (fn) = 1;
4450 DECL_ARTIFICIAL (fn) = 1;
4451 DECL_OVERLOADED_OPERATOR_CODE_RAW (fn)
4452 = OVL_OP_INFO (false, operator_code)->ovl_op_code;
4453 SET_DECL_LANGUAGE (fn, lang_c);
4454 /* Runtime library routines are, by definition, available in an
4455 external shared object. */
4456 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4457 DECL_VISIBILITY_SPECIFIED (fn) = 1;
4458 set_call_expr_flags (fn, ecf_flags);
4459 return fn;
4462 /* Returns the _DECL for a library function with C++ linkage. */
4464 static tree
4465 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4466 int ecf_flags)
4468 tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4469 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4470 SET_DECL_LANGUAGE (fn, lang_cplusplus);
4471 return fn;
4474 /* Like build_library_fn, but takes a C string instead of an
4475 IDENTIFIER_NODE. */
4477 tree
4478 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4480 return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4483 /* Like build_cp_library_fn, but takes a C string instead of an
4484 IDENTIFIER_NODE. */
4486 tree
4487 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4489 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4490 ecf_flags);
4493 /* Like build_library_fn, but also pushes the function so that we will
4494 be able to find it via get_global_binding. Also, the function
4495 may throw exceptions listed in RAISES. */
4497 tree
4498 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4500 tree fn;
4502 if (raises)
4503 type = build_exception_variant (type, raises);
4505 fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4506 pushdecl_top_level (fn);
4507 return fn;
4510 /* Like build_cp_library_fn, but also pushes the function so that it
4511 will be found by normal lookup. */
4513 static tree
4514 push_cp_library_fn (enum tree_code operator_code, tree type,
4515 int ecf_flags)
4517 tree fn = build_cp_library_fn (ovl_op_identifier (false, operator_code),
4518 operator_code, type, ecf_flags);
4519 pushdecl (fn);
4520 if (flag_tm)
4521 apply_tm_attr (fn, get_identifier ("transaction_safe"));
4522 return fn;
4525 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4526 a FUNCTION_TYPE. */
4528 tree
4529 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4531 tree type = build_function_type (void_type_node, parmtypes);
4532 return push_library_fn (name, type, NULL_TREE, ecf_flags);
4535 /* Like push_library_fn, but also note that this function throws
4536 and does not return. Used for __throw_foo and the like. */
4538 tree
4539 push_throw_library_fn (tree name, tree type)
4541 tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN | ECF_COLD);
4542 return fn;
4545 /* When we call finish_struct for an anonymous union, we create
4546 default copy constructors and such. But, an anonymous union
4547 shouldn't have such things; this function undoes the damage to the
4548 anonymous union type T.
4550 (The reason that we create the synthesized methods is that we don't
4551 distinguish `union { int i; }' from `typedef union { int i; } U'.
4552 The first is an anonymous union; the second is just an ordinary
4553 union type.) */
4555 void
4556 fixup_anonymous_aggr (tree t)
4558 /* Wipe out memory of synthesized methods. */
4559 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4560 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4561 TYPE_HAS_COPY_CTOR (t) = 0;
4562 TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4563 TYPE_HAS_COPY_ASSIGN (t) = 0;
4564 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4566 /* Splice the implicitly generated functions out of TYPE_FIELDS. */
4567 for (tree probe, *prev_p = &TYPE_FIELDS (t); (probe = *prev_p);)
4568 if (TREE_CODE (probe) == FUNCTION_DECL && DECL_ARTIFICIAL (probe))
4569 *prev_p = DECL_CHAIN (probe);
4570 else
4571 prev_p = &DECL_CHAIN (probe);
4573 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4574 assignment operators (because they cannot have these methods themselves).
4575 For anonymous unions this is already checked because they are not allowed
4576 in any union, otherwise we have to check it. */
4577 if (TREE_CODE (t) != UNION_TYPE)
4579 tree field, type;
4581 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4582 if (TREE_CODE (field) == FIELD_DECL)
4584 type = TREE_TYPE (field);
4585 if (CLASS_TYPE_P (type))
4587 if (TYPE_NEEDS_CONSTRUCTING (type))
4588 error ("member %q+#D with constructor not allowed "
4589 "in anonymous aggregate", field);
4590 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4591 error ("member %q+#D with destructor not allowed "
4592 "in anonymous aggregate", field);
4593 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4594 error ("member %q+#D with copy assignment operator "
4595 "not allowed in anonymous aggregate", field);
4601 /* Warn for an attribute located at LOCATION that appertains to the
4602 class type CLASS_TYPE that has not been properly placed after its
4603 class-key, in it class-specifier. */
4605 void
4606 warn_misplaced_attr_for_class_type (source_location location,
4607 tree class_type)
4609 gcc_assert (OVERLOAD_TYPE_P (class_type));
4611 if (warning_at (location, OPT_Wattributes,
4612 "attribute ignored in declaration "
4613 "of %q#T", class_type))
4614 inform (location,
4615 "attribute for %q#T must follow the %qs keyword",
4616 class_type, class_key_or_enum_as_string (class_type));
4619 /* Make sure that a declaration with no declarator is well-formed, i.e.
4620 just declares a tagged type or anonymous union.
4622 Returns the type declared; or NULL_TREE if none. */
4624 tree
4625 check_tag_decl (cp_decl_specifier_seq *declspecs,
4626 bool explicit_type_instantiation_p)
4628 int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4629 int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4630 /* If a class, struct, or enum type is declared by the DECLSPECS
4631 (i.e, if a class-specifier, enum-specifier, or non-typename
4632 elaborated-type-specifier appears in the DECLSPECS),
4633 DECLARED_TYPE is set to the corresponding type. */
4634 tree declared_type = NULL_TREE;
4635 bool error_p = false;
4637 if (declspecs->multiple_types_p)
4638 error ("multiple types in one declaration");
4639 else if (declspecs->redefined_builtin_type)
4641 if (!in_system_header_at (input_location))
4642 permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4643 "redeclaration of C++ built-in type %qT",
4644 declspecs->redefined_builtin_type);
4645 return NULL_TREE;
4648 if (declspecs->type
4649 && TYPE_P (declspecs->type)
4650 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4651 && MAYBE_CLASS_TYPE_P (declspecs->type))
4652 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4653 declared_type = declspecs->type;
4654 else if (declspecs->type == error_mark_node)
4655 error_p = true;
4656 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4657 permerror (input_location, "declaration does not declare anything");
4658 else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4660 error_at (declspecs->locations[ds_type_spec],
4661 "%<auto%> can only be specified for variables "
4662 "or function declarations");
4663 return error_mark_node;
4665 /* Check for an anonymous union. */
4666 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4667 && TYPE_UNNAMED_P (declared_type))
4669 /* 7/3 In a simple-declaration, the optional init-declarator-list
4670 can be omitted only when declaring a class (clause 9) or
4671 enumeration (7.2), that is, when the decl-specifier-seq contains
4672 either a class-specifier, an elaborated-type-specifier with
4673 a class-key (9.1), or an enum-specifier. In these cases and
4674 whenever a class-specifier or enum-specifier is present in the
4675 decl-specifier-seq, the identifiers in these specifiers are among
4676 the names being declared by the declaration (as class-name,
4677 enum-names, or enumerators, depending on the syntax). In such
4678 cases, and except for the declaration of an unnamed bit-field (9.6),
4679 the decl-specifier-seq shall introduce one or more names into the
4680 program, or shall redeclare a name introduced by a previous
4681 declaration. [Example:
4682 enum { }; // ill-formed
4683 typedef class { }; // ill-formed
4684 --end example] */
4685 if (saw_typedef)
4687 error ("missing type-name in typedef-declaration");
4688 return NULL_TREE;
4690 /* Anonymous unions are objects, so they can have specifiers. */;
4691 SET_ANON_AGGR_TYPE_P (declared_type);
4693 if (TREE_CODE (declared_type) != UNION_TYPE
4694 && !in_system_header_at (input_location))
4695 pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4698 else
4700 if (decl_spec_seq_has_spec_p (declspecs, ds_inline))
4701 error_at (declspecs->locations[ds_inline],
4702 "%<inline%> can only be specified for functions");
4703 else if (decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4704 error_at (declspecs->locations[ds_virtual],
4705 "%<virtual%> can only be specified for functions");
4706 else if (saw_friend
4707 && (!current_class_type
4708 || current_scope () != current_class_type))
4709 error_at (declspecs->locations[ds_friend],
4710 "%<friend%> can only be specified inside a class");
4711 else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4712 error_at (declspecs->locations[ds_explicit],
4713 "%<explicit%> can only be specified for constructors");
4714 else if (declspecs->storage_class)
4715 error_at (declspecs->locations[ds_storage_class],
4716 "a storage class can only be specified for objects "
4717 "and functions");
4718 else if (decl_spec_seq_has_spec_p (declspecs, ds_const))
4719 error_at (declspecs->locations[ds_const],
4720 "%<const%> can only be specified for objects and "
4721 "functions");
4722 else if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
4723 error_at (declspecs->locations[ds_volatile],
4724 "%<volatile%> can only be specified for objects and "
4725 "functions");
4726 else if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
4727 error_at (declspecs->locations[ds_restrict],
4728 "%<__restrict%> can only be specified for objects and "
4729 "functions");
4730 else if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
4731 error_at (declspecs->locations[ds_thread],
4732 "%<__thread%> can only be specified for objects "
4733 "and functions");
4734 else if (saw_typedef)
4735 warning_at (declspecs->locations[ds_typedef], 0,
4736 "%<typedef%> was ignored in this declaration");
4737 else if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr))
4738 error_at (declspecs->locations[ds_constexpr],
4739 "%<constexpr%> cannot be used for type declarations");
4742 if (declspecs->attributes && warn_attributes && declared_type)
4744 location_t loc;
4745 if (!CLASS_TYPE_P (declared_type)
4746 || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4747 /* For a non-template class, use the name location. */
4748 loc = location_of (declared_type);
4749 else
4750 /* For a template class (an explicit instantiation), use the
4751 current location. */
4752 loc = input_location;
4754 if (explicit_type_instantiation_p)
4755 /* [dcl.attr.grammar]/4:
4757 No attribute-specifier-seq shall appertain to an explicit
4758 instantiation. */
4760 if (warning_at (loc, OPT_Wattributes,
4761 "attribute ignored in explicit instantiation %q#T",
4762 declared_type))
4763 inform (loc,
4764 "no attribute can be applied to "
4765 "an explicit instantiation");
4767 else
4768 warn_misplaced_attr_for_class_type (loc, declared_type);
4771 return declared_type;
4774 /* Called when a declaration is seen that contains no names to declare.
4775 If its type is a reference to a structure, union or enum inherited
4776 from a containing scope, shadow that tag name for the current scope
4777 with a forward reference.
4778 If its type defines a new named structure or union
4779 or defines an enum, it is valid but we need not do anything here.
4780 Otherwise, it is an error.
4782 C++: may have to grok the declspecs to learn about static,
4783 complain for anonymous unions.
4785 Returns the TYPE declared -- or NULL_TREE if none. */
4787 tree
4788 shadow_tag (cp_decl_specifier_seq *declspecs)
4790 tree t = check_tag_decl (declspecs,
4791 /*explicit_type_instantiation_p=*/false);
4793 if (!t)
4794 return NULL_TREE;
4796 if (maybe_process_partial_specialization (t) == error_mark_node)
4797 return NULL_TREE;
4799 /* This is where the variables in an anonymous union are
4800 declared. An anonymous union declaration looks like:
4801 union { ... } ;
4802 because there is no declarator after the union, the parser
4803 sends that declaration here. */
4804 if (ANON_AGGR_TYPE_P (t))
4806 fixup_anonymous_aggr (t);
4808 if (TYPE_FIELDS (t))
4810 tree decl = grokdeclarator (/*declarator=*/NULL,
4811 declspecs, NORMAL, 0, NULL);
4812 finish_anon_union (decl);
4816 return t;
4819 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4821 tree
4822 groktypename (cp_decl_specifier_seq *type_specifiers,
4823 const cp_declarator *declarator,
4824 bool is_template_arg)
4826 tree attrs;
4827 tree type;
4828 enum decl_context context
4829 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4830 attrs = type_specifiers->attributes;
4831 type_specifiers->attributes = NULL_TREE;
4832 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4833 if (attrs && type != error_mark_node)
4835 if (CLASS_TYPE_P (type))
4836 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4837 "outside of definition", type);
4838 else if (MAYBE_CLASS_TYPE_P (type))
4839 /* A template type parameter or other dependent type. */
4840 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4841 "type %qT without an associated declaration", type);
4842 else
4843 cplus_decl_attributes (&type, attrs, 0);
4845 return type;
4848 /* Process a DECLARATOR for a function-scope variable declaration,
4849 namespace-scope variable declaration, or function declaration.
4850 (Function definitions go through start_function; class member
4851 declarations appearing in the body of the class go through
4852 grokfield.) The DECL corresponding to the DECLARATOR is returned.
4853 If an error occurs, the error_mark_node is returned instead.
4855 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
4856 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4857 for an explicitly defaulted function, or SD_DELETED for an explicitly
4858 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4859 implicitly initialized via a default constructor. ATTRIBUTES and
4860 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4862 The scope represented by the context of the returned DECL is pushed
4863 (if it is not the global namespace) and is assigned to
4864 *PUSHED_SCOPE_P. The caller is then responsible for calling
4865 pop_scope on *PUSHED_SCOPE_P if it is set. */
4867 tree
4868 start_decl (const cp_declarator *declarator,
4869 cp_decl_specifier_seq *declspecs,
4870 int initialized,
4871 tree attributes,
4872 tree prefix_attributes,
4873 tree *pushed_scope_p)
4875 tree decl;
4876 tree context;
4877 bool was_public;
4878 int flags;
4879 bool alias;
4881 *pushed_scope_p = NULL_TREE;
4883 /* An object declared as __attribute__((deprecated)) suppresses
4884 warnings of uses of other deprecated items. */
4885 if (lookup_attribute ("deprecated", attributes))
4886 deprecated_state = DEPRECATED_SUPPRESS;
4888 attributes = chainon (attributes, prefix_attributes);
4890 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4891 &attributes);
4893 deprecated_state = DEPRECATED_NORMAL;
4895 if (decl == NULL_TREE || VOID_TYPE_P (decl)
4896 || decl == error_mark_node)
4897 return error_mark_node;
4899 context = CP_DECL_CONTEXT (decl);
4900 if (context != global_namespace)
4901 *pushed_scope_p = push_scope (context);
4903 /* Is it valid for this decl to have an initializer at all?
4904 If not, set INITIALIZED to zero, which will indirectly
4905 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
4906 if (initialized
4907 && TREE_CODE (decl) == TYPE_DECL)
4909 error ("typedef %qD is initialized (use decltype instead)", decl);
4910 return error_mark_node;
4913 if (initialized)
4915 if (! toplevel_bindings_p ()
4916 && DECL_EXTERNAL (decl))
4917 warning (0, "declaration of %q#D has %<extern%> and is initialized",
4918 decl);
4919 DECL_EXTERNAL (decl) = 0;
4920 if (toplevel_bindings_p ())
4921 TREE_STATIC (decl) = 1;
4923 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4925 if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4926 record_key_method_defined (decl);
4928 /* If this is a typedef that names the class for linkage purposes
4929 (7.1.3p8), apply any attributes directly to the type. */
4930 if (TREE_CODE (decl) == TYPE_DECL
4931 && OVERLOAD_TYPE_P (TREE_TYPE (decl))
4932 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4933 flags = ATTR_FLAG_TYPE_IN_PLACE;
4934 else
4935 flags = 0;
4937 /* Set attributes here so if duplicate decl, will have proper attributes. */
4938 cplus_decl_attributes (&decl, attributes, flags);
4940 /* Dllimported symbols cannot be defined. Static data members (which
4941 can be initialized in-class and dllimported) go through grokfield,
4942 not here, so we don't need to exclude those decls when checking for
4943 a definition. */
4944 if (initialized && DECL_DLLIMPORT_P (decl))
4946 error ("definition of %q#D is marked %<dllimport%>", decl);
4947 DECL_DLLIMPORT_P (decl) = 0;
4950 /* If #pragma weak was used, mark the decl weak now. */
4951 if (!processing_template_decl)
4952 maybe_apply_pragma_weak (decl);
4954 if (TREE_CODE (decl) == FUNCTION_DECL
4955 && DECL_DECLARED_INLINE_P (decl)
4956 && DECL_UNINLINABLE (decl)
4957 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4958 warning_at (DECL_SOURCE_LOCATION (decl), 0,
4959 "inline function %qD given attribute noinline", decl);
4961 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
4963 bool this_tmpl = (processing_template_decl
4964 > template_class_depth (context));
4965 if (VAR_P (decl))
4967 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4968 if (field == NULL_TREE
4969 || !(VAR_P (field) || variable_template_p (field)))
4970 error ("%q+#D is not a static data member of %q#T", decl, context);
4971 else if (variable_template_p (field) && !this_tmpl)
4973 if (DECL_LANG_SPECIFIC (decl)
4974 && DECL_TEMPLATE_SPECIALIZATION (decl))
4975 /* OK, specialization was already checked. */;
4976 else
4978 error_at (DECL_SOURCE_LOCATION (decl),
4979 "non-member-template declaration of %qD", decl);
4980 inform (DECL_SOURCE_LOCATION (field), "does not match "
4981 "member template declaration here");
4982 return error_mark_node;
4985 else
4987 if (variable_template_p (field))
4988 field = DECL_TEMPLATE_RESULT (field);
4990 if (DECL_CONTEXT (field) != context)
4992 if (!same_type_p (DECL_CONTEXT (field), context))
4993 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4994 "to be defined as %<%T::%D%>",
4995 DECL_CONTEXT (field), DECL_NAME (decl),
4996 context, DECL_NAME (decl));
4997 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4999 /* Static data member are tricky; an in-class initialization
5000 still doesn't provide a definition, so the in-class
5001 declaration will have DECL_EXTERNAL set, but will have an
5002 initialization. Thus, duplicate_decls won't warn
5003 about this situation, and so we check here. */
5004 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
5005 error ("duplicate initialization of %qD", decl);
5006 field = duplicate_decls (decl, field,
5007 /*newdecl_is_friend=*/false);
5008 if (field == error_mark_node)
5009 return error_mark_node;
5010 else if (field)
5011 decl = field;
5014 else
5016 tree field = check_classfn (context, decl,
5017 this_tmpl
5018 ? current_template_parms
5019 : NULL_TREE);
5020 if (field && field != error_mark_node
5021 && duplicate_decls (decl, field,
5022 /*newdecl_is_friend=*/false))
5023 decl = field;
5026 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
5027 DECL_IN_AGGR_P (decl) = 0;
5028 /* Do not mark DECL as an explicit specialization if it was not
5029 already marked as an instantiation; a declaration should
5030 never be marked as a specialization unless we know what
5031 template is being specialized. */
5032 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
5034 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
5035 if (TREE_CODE (decl) == FUNCTION_DECL)
5036 DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
5037 && DECL_DECLARED_INLINE_P (decl));
5038 else
5039 DECL_COMDAT (decl) = false;
5041 /* [temp.expl.spec] An explicit specialization of a static data
5042 member of a template is a definition if the declaration
5043 includes an initializer; otherwise, it is a declaration.
5045 We check for processing_specialization so this only applies
5046 to the new specialization syntax. */
5047 if (!initialized && processing_specialization)
5048 DECL_EXTERNAL (decl) = 1;
5051 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
5052 /* Aliases are definitions. */
5053 && !alias)
5054 permerror (input_location, "declaration of %q#D outside of class is not definition",
5055 decl);
5058 was_public = TREE_PUBLIC (decl);
5060 /* Enter this declaration into the symbol table. Don't push the plain
5061 VAR_DECL for a variable template. */
5062 if (!template_parm_scope_p ()
5063 || !VAR_P (decl))
5064 decl = maybe_push_decl (decl);
5066 if (processing_template_decl)
5067 decl = push_template_decl (decl);
5068 if (decl == error_mark_node)
5069 return error_mark_node;
5071 if (VAR_P (decl)
5072 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
5073 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
5075 /* This is a const variable with implicit 'static'. Set
5076 DECL_THIS_STATIC so we can tell it from variables that are
5077 !TREE_PUBLIC because of the anonymous namespace. */
5078 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
5079 DECL_THIS_STATIC (decl) = 1;
5082 if (current_function_decl && VAR_P (decl)
5083 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
5085 bool ok = false;
5086 if (CP_DECL_THREAD_LOCAL_P (decl))
5087 error ("%qD declared %<thread_local%> in %<constexpr%> function",
5088 decl);
5089 else if (TREE_STATIC (decl))
5090 error ("%qD declared %<static%> in %<constexpr%> function", decl);
5091 else
5092 ok = true;
5093 if (!ok)
5094 cp_function_chain->invalid_constexpr = true;
5097 if (!processing_template_decl && VAR_P (decl))
5098 start_decl_1 (decl, initialized);
5100 return decl;
5103 /* Process the declaration of a variable DECL. INITIALIZED is true
5104 iff DECL is explicitly initialized. (INITIALIZED is false if the
5105 variable is initialized via an implicitly-called constructor.)
5106 This function must be called for ordinary variables (including, for
5107 example, implicit instantiations of templates), but must not be
5108 called for template declarations. */
5110 void
5111 start_decl_1 (tree decl, bool initialized)
5113 tree type;
5114 bool complete_p;
5115 bool aggregate_definition_p;
5117 gcc_assert (!processing_template_decl);
5119 if (error_operand_p (decl))
5120 return;
5122 gcc_assert (VAR_P (decl));
5124 type = TREE_TYPE (decl);
5125 complete_p = COMPLETE_TYPE_P (type);
5126 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
5128 /* If an explicit initializer is present, or if this is a definition
5129 of an aggregate, then we need a complete type at this point.
5130 (Scalars are always complete types, so there is nothing to
5131 check.) This code just sets COMPLETE_P; errors (if necessary)
5132 are issued below. */
5133 if ((initialized || aggregate_definition_p)
5134 && !complete_p
5135 && COMPLETE_TYPE_P (complete_type (type)))
5137 complete_p = true;
5138 /* We will not yet have set TREE_READONLY on DECL if the type
5139 was "const", but incomplete, before this point. But, now, we
5140 have a complete type, so we can try again. */
5141 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
5144 if (initialized)
5145 /* Is it valid for this decl to have an initializer at all? */
5147 /* Don't allow initializations for incomplete types except for
5148 arrays which might be completed by the initialization. */
5149 if (complete_p)
5150 ; /* A complete type is ok. */
5151 else if (type_uses_auto (type))
5152 ; /* An auto type is ok. */
5153 else if (TREE_CODE (type) != ARRAY_TYPE)
5155 error ("variable %q#D has initializer but incomplete type", decl);
5156 type = TREE_TYPE (decl) = error_mark_node;
5158 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5160 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
5161 error ("elements of array %q#D have incomplete type", decl);
5162 /* else we already gave an error in start_decl. */
5165 else if (aggregate_definition_p && !complete_p)
5167 if (type_uses_auto (type))
5168 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (type));
5169 else
5171 error ("aggregate %q#D has incomplete type and cannot be defined",
5172 decl);
5173 /* Change the type so that assemble_variable will give
5174 DECL an rtl we can live with: (mem (const_int 0)). */
5175 type = TREE_TYPE (decl) = error_mark_node;
5179 /* Create a new scope to hold this declaration if necessary.
5180 Whether or not a new scope is necessary cannot be determined
5181 until after the type has been completed; if the type is a
5182 specialization of a class template it is not until after
5183 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
5184 will be set correctly. */
5185 maybe_push_cleanup_level (type);
5188 /* Handle initialization of references. DECL, TYPE, and INIT have the
5189 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
5190 but will be set to a new CLEANUP_STMT if a temporary is created
5191 that must be destroyed subsequently.
5193 Returns an initializer expression to use to initialize DECL, or
5194 NULL if the initialization can be performed statically.
5196 Quotes on semantics can be found in ARM 8.4.3. */
5198 static tree
5199 grok_reference_init (tree decl, tree type, tree init, int flags)
5201 if (init == NULL_TREE)
5203 if ((DECL_LANG_SPECIFIC (decl) == 0
5204 || DECL_IN_AGGR_P (decl) == 0)
5205 && ! DECL_THIS_EXTERN (decl))
5206 error ("%qD declared as reference but not initialized", decl);
5207 return NULL_TREE;
5210 if (TREE_CODE (init) == TREE_LIST)
5211 init = build_x_compound_expr_from_list (init, ELK_INIT,
5212 tf_warning_or_error);
5214 tree ttype = TREE_TYPE (type);
5215 if (TREE_CODE (ttype) != ARRAY_TYPE
5216 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
5217 /* Note: default conversion is only called in very special cases. */
5218 init = decay_conversion (init, tf_warning_or_error);
5220 /* check_initializer handles this for non-reference variables, but for
5221 references we need to do it here or the initializer will get the
5222 incomplete array type and confuse later calls to
5223 cp_complete_array_type. */
5224 if (TREE_CODE (ttype) == ARRAY_TYPE
5225 && TYPE_DOMAIN (ttype) == NULL_TREE
5226 && (BRACE_ENCLOSED_INITIALIZER_P (init)
5227 || TREE_CODE (init) == STRING_CST))
5229 cp_complete_array_type (&ttype, init, false);
5230 if (ttype != TREE_TYPE (type))
5231 type = cp_build_reference_type (ttype, TYPE_REF_IS_RVALUE (type));
5234 /* Convert INIT to the reference type TYPE. This may involve the
5235 creation of a temporary, whose lifetime must be the same as that
5236 of the reference. If so, a DECL_EXPR for the temporary will be
5237 added just after the DECL_EXPR for DECL. That's why we don't set
5238 DECL_INITIAL for local references (instead assigning to them
5239 explicitly); we need to allow the temporary to be initialized
5240 first. */
5241 return initialize_reference (type, init, flags,
5242 tf_warning_or_error);
5245 /* Designated initializers in arrays are not supported in GNU C++.
5246 The parser cannot detect this error since it does not know whether
5247 a given brace-enclosed initializer is for a class type or for an
5248 array. This function checks that CE does not use a designated
5249 initializer. If it does, an error is issued. Returns true if CE
5250 is valid, i.e., does not have a designated initializer. */
5252 static bool
5253 check_array_designated_initializer (constructor_elt *ce,
5254 unsigned HOST_WIDE_INT index)
5256 /* Designated initializers for array elements are not supported. */
5257 if (ce->index)
5259 /* The parser only allows identifiers as designated
5260 initializers. */
5261 if (ce->index == error_mark_node)
5263 error ("name used in a GNU-style designated "
5264 "initializer for an array");
5265 return false;
5267 else if (identifier_p (ce->index))
5269 error ("name %qD used in a GNU-style designated "
5270 "initializer for an array", ce->index);
5271 return false;
5274 tree ce_index = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5275 ce->index, true);
5276 if (ce_index
5277 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index))
5278 && (TREE_CODE (ce_index = maybe_constant_value (ce_index))
5279 == INTEGER_CST))
5281 /* A C99 designator is OK if it matches the current index. */
5282 if (wi::to_wide (ce_index) == index)
5283 return true;
5284 else
5285 sorry ("non-trivial designated initializers not supported");
5287 else
5288 error ("C99 designator %qE is not an integral constant-expression",
5289 ce->index);
5291 return false;
5294 return true;
5297 /* When parsing `int a[] = {1, 2};' we don't know the size of the
5298 array until we finish parsing the initializer. If that's the
5299 situation we're in, update DECL accordingly. */
5301 static void
5302 maybe_deduce_size_from_array_init (tree decl, tree init)
5304 tree type = TREE_TYPE (decl);
5306 if (TREE_CODE (type) == ARRAY_TYPE
5307 && TYPE_DOMAIN (type) == NULL_TREE
5308 && TREE_CODE (decl) != TYPE_DECL)
5310 /* do_default is really a C-ism to deal with tentative definitions.
5311 But let's leave it here to ease the eventual merge. */
5312 int do_default = !DECL_EXTERNAL (decl);
5313 tree initializer = init ? init : DECL_INITIAL (decl);
5314 int failure = 0;
5316 /* Check that there are no designated initializers in INIT, as
5317 those are not supported in GNU C++, and as the middle-end
5318 will crash if presented with a non-numeric designated
5319 initializer. */
5320 if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
5322 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
5323 constructor_elt *ce;
5324 HOST_WIDE_INT i;
5325 FOR_EACH_VEC_SAFE_ELT (v, i, ce)
5326 if (!check_array_designated_initializer (ce, i))
5327 failure = 1;
5330 if (!failure)
5332 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
5333 do_default);
5334 if (failure == 1)
5336 error_at (EXPR_LOC_OR_LOC (initializer,
5337 DECL_SOURCE_LOCATION (decl)),
5338 "initializer fails to determine size of %qD", decl);
5340 else if (failure == 2)
5342 if (do_default)
5344 error_at (DECL_SOURCE_LOCATION (decl),
5345 "array size missing in %qD", decl);
5347 /* If a `static' var's size isn't known, make it extern as
5348 well as static, so it does not get allocated. If it's not
5349 `static', then don't mark it extern; finish_incomplete_decl
5350 will give it a default size and it will get allocated. */
5351 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
5352 DECL_EXTERNAL (decl) = 1;
5354 else if (failure == 3)
5356 error_at (DECL_SOURCE_LOCATION (decl),
5357 "zero-size array %qD", decl);
5361 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
5363 relayout_decl (decl);
5367 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
5368 any appropriate error messages regarding the layout. */
5370 static void
5371 layout_var_decl (tree decl)
5373 tree type;
5375 type = TREE_TYPE (decl);
5376 if (type == error_mark_node)
5377 return;
5379 /* If we haven't already laid out this declaration, do so now.
5380 Note that we must not call complete type for an external object
5381 because it's type might involve templates that we are not
5382 supposed to instantiate yet. (And it's perfectly valid to say
5383 `extern X x' for some incomplete type `X'.) */
5384 if (!DECL_EXTERNAL (decl))
5385 complete_type (type);
5386 if (!DECL_SIZE (decl)
5387 && TREE_TYPE (decl) != error_mark_node
5388 && complete_or_array_type_p (type))
5389 layout_decl (decl, 0);
5391 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
5393 /* An automatic variable with an incomplete type: that is an error.
5394 Don't talk about array types here, since we took care of that
5395 message in grokdeclarator. */
5396 error_at (DECL_SOURCE_LOCATION (decl),
5397 "storage size of %qD isn%'t known", decl);
5398 TREE_TYPE (decl) = error_mark_node;
5400 #if 0
5401 /* Keep this code around in case we later want to control debug info
5402 based on whether a type is "used". (jason 1999-11-11) */
5404 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
5405 /* Let debugger know it should output info for this type. */
5406 note_debug_info_needed (ttype);
5408 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
5409 note_debug_info_needed (DECL_CONTEXT (decl));
5410 #endif
5412 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
5413 && DECL_SIZE (decl) != NULL_TREE
5414 && ! TREE_CONSTANT (DECL_SIZE (decl)))
5416 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
5417 constant_expression_warning (DECL_SIZE (decl));
5418 else
5420 error_at (DECL_SOURCE_LOCATION (decl),
5421 "storage size of %qD isn%'t constant", decl);
5422 TREE_TYPE (decl) = error_mark_node;
5427 /* If a local static variable is declared in an inline function, or if
5428 we have a weak definition, we must endeavor to create only one
5429 instance of the variable at link-time. */
5431 void
5432 maybe_commonize_var (tree decl)
5434 /* Static data in a function with comdat linkage also has comdat
5435 linkage. */
5436 if ((TREE_STATIC (decl)
5437 /* Don't mess with __FUNCTION__. */
5438 && ! DECL_ARTIFICIAL (decl)
5439 && DECL_FUNCTION_SCOPE_P (decl)
5440 && vague_linkage_p (DECL_CONTEXT (decl)))
5441 || (TREE_PUBLIC (decl) && DECL_INLINE_VAR_P (decl)))
5443 if (flag_weak)
5445 /* With weak symbols, we simply make the variable COMDAT;
5446 that will cause copies in multiple translations units to
5447 be merged. */
5448 comdat_linkage (decl);
5450 else
5452 if (DECL_INITIAL (decl) == NULL_TREE
5453 || DECL_INITIAL (decl) == error_mark_node)
5455 /* Without weak symbols, we can use COMMON to merge
5456 uninitialized variables. */
5457 TREE_PUBLIC (decl) = 1;
5458 DECL_COMMON (decl) = 1;
5460 else
5462 /* While for initialized variables, we must use internal
5463 linkage -- which means that multiple copies will not
5464 be merged. */
5465 TREE_PUBLIC (decl) = 0;
5466 DECL_COMMON (decl) = 0;
5467 const char *msg;
5468 if (DECL_INLINE_VAR_P (decl))
5469 msg = G_("sorry: semantics of inline variable "
5470 "%q#D are wrong (you%'ll wind up with "
5471 "multiple copies)");
5472 else
5473 msg = G_("sorry: semantics of inline function "
5474 "static data %q#D are wrong (you%'ll wind "
5475 "up with multiple copies)");
5476 if (warning_at (DECL_SOURCE_LOCATION (decl), 0,
5477 msg, decl))
5478 inform (DECL_SOURCE_LOCATION (decl),
5479 "you can work around this by removing the initializer");
5485 /* Issue an error message if DECL is an uninitialized const variable. */
5487 static void
5488 check_for_uninitialized_const_var (tree decl)
5490 tree type = strip_array_types (TREE_TYPE (decl));
5492 /* ``Unless explicitly declared extern, a const object does not have
5493 external linkage and must be initialized. ($8.4; $12.1)'' ARM
5494 7.1.6 */
5495 if (VAR_P (decl)
5496 && TREE_CODE (type) != REFERENCE_TYPE
5497 && (CP_TYPE_CONST_P (type) || var_in_constexpr_fn (decl))
5498 && !DECL_INITIAL (decl))
5500 tree field = default_init_uninitialized_part (type);
5501 if (!field)
5502 return;
5504 if (CP_TYPE_CONST_P (type))
5505 permerror (DECL_SOURCE_LOCATION (decl),
5506 "uninitialized const %qD", decl);
5507 else
5509 if (!is_instantiation_of_constexpr (current_function_decl))
5510 error_at (DECL_SOURCE_LOCATION (decl),
5511 "uninitialized variable %qD in %<constexpr%> function",
5512 decl);
5513 cp_function_chain->invalid_constexpr = true;
5516 if (CLASS_TYPE_P (type))
5518 tree defaulted_ctor;
5520 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5521 "%q#T has no user-provided default constructor", type);
5522 defaulted_ctor = in_class_defaulted_default_constructor (type);
5523 if (defaulted_ctor)
5524 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5525 "constructor is not user-provided because it is "
5526 "explicitly defaulted in the class body");
5527 inform (DECL_SOURCE_LOCATION (field),
5528 "and the implicitly-defined constructor does not "
5529 "initialize %q#D", field);
5534 /* Structure holding the current initializer being processed by reshape_init.
5535 CUR is a pointer to the current element being processed, END is a pointer
5536 after the last element present in the initializer. */
5537 struct reshape_iter
5539 constructor_elt *cur;
5540 constructor_elt *end;
5543 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5545 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
5546 returned is the next FIELD_DECL (possibly FIELD itself) that can be
5547 initialized. If there are no more such fields, the return value
5548 will be NULL. */
5550 tree
5551 next_initializable_field (tree field)
5553 while (field
5554 && (TREE_CODE (field) != FIELD_DECL
5555 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
5556 || (DECL_ARTIFICIAL (field)
5557 && !(cxx_dialect >= cxx17 && DECL_FIELD_IS_BASE (field)))))
5558 field = DECL_CHAIN (field);
5560 return field;
5563 /* Return true for [dcl.init.list] direct-list-initialization from
5564 single element of enumeration with a fixed underlying type. */
5566 bool
5567 is_direct_enum_init (tree type, tree init)
5569 if (cxx_dialect >= cxx17
5570 && TREE_CODE (type) == ENUMERAL_TYPE
5571 && ENUM_FIXED_UNDERLYING_TYPE_P (type)
5572 && TREE_CODE (init) == CONSTRUCTOR
5573 && CONSTRUCTOR_IS_DIRECT_INIT (init)
5574 && CONSTRUCTOR_NELTS (init) == 1)
5575 return true;
5576 return false;
5579 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5580 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5581 INTEGER_CST representing the size of the array minus one (the maximum index),
5582 or NULL_TREE if the array was declared without specifying the size. D is
5583 the iterator within the constructor. */
5585 static tree
5586 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5587 tsubst_flags_t complain)
5589 tree new_init;
5590 bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5591 unsigned HOST_WIDE_INT max_index_cst = 0;
5592 unsigned HOST_WIDE_INT index;
5594 /* The initializer for an array is always a CONSTRUCTOR. */
5595 new_init = build_constructor (init_list_type_node, NULL);
5597 if (sized_array_p)
5599 /* Minus 1 is used for zero sized arrays. */
5600 if (integer_all_onesp (max_index))
5601 return new_init;
5603 if (tree_fits_uhwi_p (max_index))
5604 max_index_cst = tree_to_uhwi (max_index);
5605 /* sizetype is sign extended, not zero extended. */
5606 else
5607 max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
5610 /* Loop until there are no more initializers. */
5611 for (index = 0;
5612 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5613 ++index)
5615 tree elt_init;
5616 constructor_elt *old_cur = d->cur;
5618 check_array_designated_initializer (d->cur, index);
5619 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5620 complain);
5621 if (elt_init == error_mark_node)
5622 return error_mark_node;
5623 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5624 size_int (index), elt_init);
5625 if (!TREE_CONSTANT (elt_init))
5626 TREE_CONSTANT (new_init) = false;
5628 /* This can happen with an invalid initializer (c++/54501). */
5629 if (d->cur == old_cur && !sized_array_p)
5630 break;
5633 return new_init;
5636 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5637 Parameters are the same of reshape_init_r. */
5639 static tree
5640 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5642 tree max_index = NULL_TREE;
5644 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5646 if (TYPE_DOMAIN (type))
5647 max_index = array_type_nelts (type);
5649 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5652 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5653 Parameters are the same of reshape_init_r. */
5655 static tree
5656 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5658 tree max_index = NULL_TREE;
5660 gcc_assert (VECTOR_TYPE_P (type));
5662 if (COMPOUND_LITERAL_P (d->cur->value))
5664 tree value = d->cur->value;
5665 if (!same_type_p (TREE_TYPE (value), type))
5667 if (complain & tf_error)
5668 error ("invalid type %qT as initializer for a vector of type %qT",
5669 TREE_TYPE (d->cur->value), type);
5670 value = error_mark_node;
5672 ++d->cur;
5673 return value;
5676 /* For a vector, we initialize it as an array of the appropriate size. */
5677 if (VECTOR_TYPE_P (type))
5678 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5680 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5683 /* Subroutine of reshape_init_r, processes the initializers for classes
5684 or union. Parameters are the same of reshape_init_r. */
5686 static tree
5687 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5688 tsubst_flags_t complain)
5690 tree field;
5691 tree new_init;
5693 gcc_assert (CLASS_TYPE_P (type));
5695 /* The initializer for a class is always a CONSTRUCTOR. */
5696 new_init = build_constructor (init_list_type_node, NULL);
5697 field = next_initializable_field (TYPE_FIELDS (type));
5699 if (!field)
5701 /* [dcl.init.aggr]
5703 An initializer for an aggregate member that is an
5704 empty class shall have the form of an empty
5705 initializer-list {}. */
5706 if (!first_initializer_p)
5708 if (complain & tf_error)
5709 error ("initializer for %qT must be brace-enclosed", type);
5710 return error_mark_node;
5712 return new_init;
5715 /* Loop through the initializable fields, gathering initializers. */
5716 while (d->cur != d->end)
5718 tree field_init;
5719 constructor_elt *old_cur = d->cur;
5721 /* Handle designated initializers, as an extension. */
5722 if (d->cur->index)
5724 if (d->cur->index == error_mark_node)
5725 return error_mark_node;
5727 if (TREE_CODE (d->cur->index) == FIELD_DECL)
5728 /* We already reshaped this. */
5729 gcc_assert (d->cur->index == field);
5730 else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
5731 field = get_class_binding (type, d->cur->index, false);
5732 else
5734 if (complain & tf_error)
5735 error ("%<[%E] =%> used in a GNU-style designated initializer"
5736 " for class %qT", d->cur->index, type);
5737 return error_mark_node;
5740 if (!field || TREE_CODE (field) != FIELD_DECL)
5742 if (complain & tf_error)
5743 error ("%qT has no non-static data member named %qD", type,
5744 d->cur->index);
5745 return error_mark_node;
5749 /* If we processed all the member of the class, we are done. */
5750 if (!field)
5751 break;
5753 field_init = reshape_init_r (TREE_TYPE (field), d,
5754 /*first_initializer_p=*/false, complain);
5755 if (field_init == error_mark_node)
5756 return error_mark_node;
5758 if (d->cur == old_cur && d->cur->index)
5760 /* This can happen with an invalid initializer for a flexible
5761 array member (c++/54441). */
5762 if (complain & tf_error)
5763 error ("invalid initializer for %q#D", field);
5764 return error_mark_node;
5767 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5769 /* [dcl.init.aggr]
5771 When a union is initialized with a brace-enclosed
5772 initializer, the braces shall only contain an
5773 initializer for the first member of the union. */
5774 if (TREE_CODE (type) == UNION_TYPE)
5775 break;
5777 field = next_initializable_field (DECL_CHAIN (field));
5780 return new_init;
5783 /* Subroutine of reshape_init_r. We're in a context where C99 initializer
5784 designators are not valid; either complain or return true to indicate
5785 that reshape_init_r should return error_mark_node. */
5787 static bool
5788 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5790 if (d->cur->index)
5792 if (complain & tf_error)
5793 error ("C99 designator %qE outside aggregate initializer",
5794 d->cur->index);
5795 else
5796 return true;
5798 return false;
5801 /* Subroutine of reshape_init, which processes a single initializer (part of
5802 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5803 iterator within the CONSTRUCTOR which points to the initializer to process.
5804 FIRST_INITIALIZER_P is true if this is the first initializer of the
5805 outermost CONSTRUCTOR node. */
5807 static tree
5808 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5809 tsubst_flags_t complain)
5811 tree init = d->cur->value;
5813 if (error_operand_p (init))
5814 return error_mark_node;
5816 if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5817 && has_designator_problem (d, complain))
5818 return error_mark_node;
5820 if (TREE_CODE (type) == COMPLEX_TYPE)
5822 /* A complex type can be initialized from one or two initializers,
5823 but braces are not elided. */
5824 d->cur++;
5825 if (BRACE_ENCLOSED_INITIALIZER_P (init))
5827 if (CONSTRUCTOR_NELTS (init) > 2)
5829 if (complain & tf_error)
5830 error ("too many initializers for %qT", type);
5831 else
5832 return error_mark_node;
5835 else if (first_initializer_p && d->cur != d->end)
5837 vec<constructor_elt, va_gc> *v = 0;
5838 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5839 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5840 if (has_designator_problem (d, complain))
5841 return error_mark_node;
5842 d->cur++;
5843 init = build_constructor (init_list_type_node, v);
5845 return init;
5848 /* A non-aggregate type is always initialized with a single
5849 initializer. */
5850 if (!CP_AGGREGATE_TYPE_P (type))
5852 /* It is invalid to initialize a non-aggregate type with a
5853 brace-enclosed initializer before C++0x.
5854 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5855 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5856 a CONSTRUCTOR (with a record type). */
5857 if (TREE_CODE (init) == CONSTRUCTOR
5858 /* Don't complain about a capture-init. */
5859 && !CONSTRUCTOR_IS_DIRECT_INIT (init)
5860 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
5862 if (SCALAR_TYPE_P (type))
5864 if (cxx_dialect < cxx11
5865 /* Isn't value-initialization. */
5866 || CONSTRUCTOR_NELTS (init) > 0)
5868 if (complain & tf_error)
5869 error ("braces around scalar initializer for type %qT",
5870 type);
5871 init = error_mark_node;
5874 else
5875 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5878 d->cur++;
5879 return init;
5882 /* "If T is a class type and the initializer list has a single element of
5883 type cv U, where U is T or a class derived from T, the object is
5884 initialized from that element." Even if T is an aggregate. */
5885 if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
5886 && first_initializer_p
5887 && d->end - d->cur == 1
5888 && reference_related_p (type, TREE_TYPE (init)))
5890 d->cur++;
5891 return init;
5894 /* [dcl.init.aggr]
5896 All implicit type conversions (clause _conv_) are considered when
5897 initializing the aggregate member with an initializer from an
5898 initializer-list. If the initializer can initialize a member,
5899 the member is initialized. Otherwise, if the member is itself a
5900 non-empty subaggregate, brace elision is assumed and the
5901 initializer is considered for the initialization of the first
5902 member of the subaggregate. */
5903 if (TREE_CODE (init) != CONSTRUCTOR
5904 /* But don't try this for the first initializer, since that would be
5905 looking through the outermost braces; A a2 = { a1 }; is not a
5906 valid aggregate initialization. */
5907 && !first_initializer_p
5908 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5909 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
5910 complain)))
5912 d->cur++;
5913 return init;
5916 /* [dcl.init.string]
5918 A char array (whether plain char, signed char, or unsigned char)
5919 can be initialized by a string-literal (optionally enclosed in
5920 braces); a wchar_t array can be initialized by a wide
5921 string-literal (optionally enclosed in braces). */
5922 if (TREE_CODE (type) == ARRAY_TYPE
5923 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5925 tree str_init = init;
5927 /* Strip one level of braces if and only if they enclose a single
5928 element (as allowed by [dcl.init.string]). */
5929 if (!first_initializer_p
5930 && TREE_CODE (str_init) == CONSTRUCTOR
5931 && CONSTRUCTOR_NELTS (str_init) == 1)
5933 str_init = (*CONSTRUCTOR_ELTS (str_init))[0].value;
5936 /* If it's a string literal, then it's the initializer for the array
5937 as a whole. Otherwise, continue with normal initialization for
5938 array types (one value per array element). */
5939 if (TREE_CODE (str_init) == STRING_CST)
5941 if (has_designator_problem (d, complain))
5942 return error_mark_node;
5943 d->cur++;
5944 return str_init;
5948 /* The following cases are about aggregates. If we are not within a full
5949 initializer already, and there is not a CONSTRUCTOR, it means that there
5950 is a missing set of braces (that is, we are processing the case for
5951 which reshape_init exists). */
5952 if (!first_initializer_p)
5954 if (TREE_CODE (init) == CONSTRUCTOR)
5956 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5957 /* There is no need to reshape pointer-to-member function
5958 initializers, as they are always constructed correctly
5959 by the front end. */
5961 else if (COMPOUND_LITERAL_P (init))
5962 /* For a nested compound literal, there is no need to reshape since
5963 brace elision is not allowed. Even if we decided to allow it,
5964 we should add a call to reshape_init in finish_compound_literal,
5965 before calling digest_init, so changing this code would still
5966 not be necessary. */
5967 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5968 else
5970 ++d->cur;
5971 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5972 return reshape_init (type, init, complain);
5976 if (complain & tf_warning)
5977 warning (OPT_Wmissing_braces,
5978 "missing braces around initializer for %qT",
5979 type);
5982 /* Dispatch to specialized routines. */
5983 if (CLASS_TYPE_P (type))
5984 return reshape_init_class (type, d, first_initializer_p, complain);
5985 else if (TREE_CODE (type) == ARRAY_TYPE)
5986 return reshape_init_array (type, d, complain);
5987 else if (VECTOR_TYPE_P (type))
5988 return reshape_init_vector (type, d, complain);
5989 else
5990 gcc_unreachable();
5993 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5994 brace-enclosed aggregate initializer.
5996 INIT is the CONSTRUCTOR containing the list of initializers describing
5997 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5998 It may not presently match the shape of the TYPE; for example:
6000 struct S { int a; int b; };
6001 struct S a[] = { 1, 2, 3, 4 };
6003 Here INIT will hold a vector of four elements, rather than a
6004 vector of two elements, each itself a vector of two elements. This
6005 routine transforms INIT from the former form into the latter. The
6006 revised CONSTRUCTOR node is returned. */
6008 tree
6009 reshape_init (tree type, tree init, tsubst_flags_t complain)
6011 vec<constructor_elt, va_gc> *v;
6012 reshape_iter d;
6013 tree new_init;
6015 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6017 v = CONSTRUCTOR_ELTS (init);
6019 /* An empty constructor does not need reshaping, and it is always a valid
6020 initializer. */
6021 if (vec_safe_is_empty (v))
6022 return init;
6024 /* Handle [dcl.init.list] direct-list-initialization from
6025 single element of enumeration with a fixed underlying type. */
6026 if (is_direct_enum_init (type, init))
6028 tree elt = CONSTRUCTOR_ELT (init, 0)->value;
6029 type = cv_unqualified (type);
6030 if (check_narrowing (ENUM_UNDERLYING_TYPE (type), elt, complain))
6032 warning_sentinel w (warn_useless_cast);
6033 return cp_build_c_cast (type, elt, tf_warning_or_error);
6035 else
6036 return error_mark_node;
6039 /* Recurse on this CONSTRUCTOR. */
6040 d.cur = &(*v)[0];
6041 d.end = d.cur + v->length ();
6043 new_init = reshape_init_r (type, &d, true, complain);
6044 if (new_init == error_mark_node)
6045 return error_mark_node;
6047 /* Make sure all the element of the constructor were used. Otherwise,
6048 issue an error about exceeding initializers. */
6049 if (d.cur != d.end)
6051 if (complain & tf_error)
6052 error ("too many initializers for %qT", type);
6053 return error_mark_node;
6056 if (CONSTRUCTOR_IS_DIRECT_INIT (init)
6057 && BRACE_ENCLOSED_INITIALIZER_P (new_init))
6058 CONSTRUCTOR_IS_DIRECT_INIT (new_init) = true;
6060 return new_init;
6063 /* Verify array initializer. Returns true if errors have been reported. */
6065 bool
6066 check_array_initializer (tree decl, tree type, tree init)
6068 tree element_type = TREE_TYPE (type);
6070 /* The array type itself need not be complete, because the
6071 initializer may tell us how many elements are in the array.
6072 But, the elements of the array must be complete. */
6073 if (!COMPLETE_TYPE_P (complete_type (element_type)))
6075 if (decl)
6076 error_at (DECL_SOURCE_LOCATION (decl),
6077 "elements of array %q#D have incomplete type", decl);
6078 else
6079 error ("elements of array %q#T have incomplete type", type);
6080 return true;
6082 /* A compound literal can't have variable size. */
6083 if (init && !decl
6084 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
6085 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
6087 error ("variable-sized compound literal");
6088 return true;
6090 return false;
6093 /* Subroutine of check_initializer; args are passed down from that function.
6094 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
6096 static tree
6097 build_aggr_init_full_exprs (tree decl, tree init, int flags)
6100 gcc_assert (stmts_are_full_exprs_p ());
6101 return build_aggr_init (decl, init, flags, tf_warning_or_error);
6104 /* Verify INIT (the initializer for DECL), and record the
6105 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
6106 grok_reference_init.
6108 If the return value is non-NULL, it is an expression that must be
6109 evaluated dynamically to initialize DECL. */
6111 static tree
6112 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
6114 tree type = TREE_TYPE (decl);
6115 tree init_code = NULL;
6116 tree core_type;
6118 /* Things that are going to be initialized need to have complete
6119 type. */
6120 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
6122 if (DECL_HAS_VALUE_EXPR_P (decl))
6124 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
6125 it doesn't have storage to be initialized. */
6126 gcc_assert (init == NULL_TREE);
6127 return NULL_TREE;
6130 if (type == error_mark_node)
6131 /* We will have already complained. */
6132 return NULL_TREE;
6134 if (TREE_CODE (type) == ARRAY_TYPE)
6136 if (check_array_initializer (decl, type, init))
6137 return NULL_TREE;
6139 else if (!COMPLETE_TYPE_P (type))
6141 error_at (DECL_SOURCE_LOCATION (decl),
6142 "%q#D has incomplete type", decl);
6143 TREE_TYPE (decl) = error_mark_node;
6144 return NULL_TREE;
6146 else
6147 /* There is no way to make a variable-sized class type in GNU C++. */
6148 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
6150 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
6152 int init_len = CONSTRUCTOR_NELTS (init);
6153 if (SCALAR_TYPE_P (type))
6155 if (init_len == 0)
6157 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6158 init = build_zero_init (type, NULL_TREE, false);
6160 else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
6162 error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)),
6163 "scalar object %qD requires one element in "
6164 "initializer", decl);
6165 TREE_TYPE (decl) = error_mark_node;
6166 return NULL_TREE;
6171 if (TREE_CODE (decl) == CONST_DECL)
6173 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
6175 DECL_INITIAL (decl) = init;
6177 gcc_assert (init != NULL_TREE);
6178 init = NULL_TREE;
6180 else if (!init && DECL_REALLY_EXTERN (decl))
6182 else if (init || type_build_ctor_call (type)
6183 || TREE_CODE (type) == REFERENCE_TYPE)
6185 if (TREE_CODE (type) == REFERENCE_TYPE)
6187 init = grok_reference_init (decl, type, init, flags);
6188 flags |= LOOKUP_ALREADY_DIGESTED;
6190 else if (!init)
6191 check_for_uninitialized_const_var (decl);
6192 /* Do not reshape constructors of vectors (they don't need to be
6193 reshaped. */
6194 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
6196 if (is_std_init_list (type))
6198 init = perform_implicit_conversion (type, init,
6199 tf_warning_or_error);
6200 flags |= LOOKUP_ALREADY_DIGESTED;
6202 else if (TYPE_NON_AGGREGATE_CLASS (type))
6204 /* Don't reshape if the class has constructors. */
6205 if (cxx_dialect == cxx98)
6206 error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)),
6207 "in C++98 %qD must be initialized by "
6208 "constructor, not by %<{...}%>",
6209 decl);
6211 else if (VECTOR_TYPE_P (type) && TYPE_VECTOR_OPAQUE (type))
6213 error ("opaque vector types cannot be initialized");
6214 init = error_mark_node;
6216 else
6218 init = reshape_init (type, init, tf_warning_or_error);
6219 flags |= LOOKUP_NO_NARROWING;
6222 else if (TREE_CODE (init) == TREE_LIST
6223 && TREE_TYPE (init) != unknown_type_node
6224 && !MAYBE_CLASS_TYPE_P (type))
6226 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6228 /* We get here with code like `int a (2);' */
6229 init = build_x_compound_expr_from_list (init, ELK_INIT,
6230 tf_warning_or_error);
6233 /* If DECL has an array type without a specific bound, deduce the
6234 array size from the initializer. */
6235 maybe_deduce_size_from_array_init (decl, init);
6236 type = TREE_TYPE (decl);
6237 if (type == error_mark_node)
6238 return NULL_TREE;
6240 if (((type_build_ctor_call (type) || CLASS_TYPE_P (type))
6241 && !(flags & LOOKUP_ALREADY_DIGESTED)
6242 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
6243 && CP_AGGREGATE_TYPE_P (type)
6244 && (CLASS_TYPE_P (type)
6245 || !TYPE_NEEDS_CONSTRUCTING (type)
6246 || type_has_extended_temps (type))))
6247 || (DECL_DECOMPOSITION_P (decl) && TREE_CODE (type) == ARRAY_TYPE))
6249 init_code = build_aggr_init_full_exprs (decl, init, flags);
6251 /* A constructor call is a non-trivial initializer even if
6252 it isn't explicitly written. */
6253 if (TREE_SIDE_EFFECTS (init_code))
6254 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
6256 /* If this is a constexpr initializer, expand_default_init will
6257 have returned an INIT_EXPR rather than a CALL_EXPR. In that
6258 case, pull the initializer back out and pass it down into
6259 store_init_value. */
6260 while (TREE_CODE (init_code) == EXPR_STMT
6261 || TREE_CODE (init_code) == CONVERT_EXPR)
6262 init_code = TREE_OPERAND (init_code, 0);
6263 if (TREE_CODE (init_code) == INIT_EXPR)
6265 init = TREE_OPERAND (init_code, 1);
6266 init_code = NULL_TREE;
6267 /* Don't call digest_init; it's unnecessary and will complain
6268 about aggregate initialization of non-aggregate classes. */
6269 flags |= LOOKUP_ALREADY_DIGESTED;
6271 else if (DECL_DECLARED_CONSTEXPR_P (decl))
6273 /* Declared constexpr, but no suitable initializer; massage
6274 init appropriately so we can pass it into store_init_value
6275 for the error. */
6276 if (CLASS_TYPE_P (type)
6277 && (!init || TREE_CODE (init) == TREE_LIST))
6279 init = build_functional_cast (type, init, tf_none);
6280 if (TREE_CODE (init) == TARGET_EXPR)
6281 TARGET_EXPR_DIRECT_INIT_P (init) = true;
6283 init_code = NULL_TREE;
6285 else
6286 init = NULL_TREE;
6289 if (init && TREE_CODE (init) != TREE_VEC)
6291 /* In aggregate initialization of a variable, each element
6292 initialization is a full-expression because there is no
6293 enclosing expression. */
6294 gcc_assert (stmts_are_full_exprs_p ());
6296 init_code = store_init_value (decl, init, cleanups, flags);
6298 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
6299 && DECL_INITIAL (decl)
6300 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
6301 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
6302 warning_at (EXPR_LOC_OR_LOC (DECL_INITIAL (decl),
6303 DECL_SOURCE_LOCATION (decl)),
6304 0, "array %qD initialized by parenthesized "
6305 "string literal %qE",
6306 decl, DECL_INITIAL (decl));
6307 init = NULL;
6310 else
6312 if (CLASS_TYPE_P (core_type = strip_array_types (type))
6313 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
6314 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
6315 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
6316 /*complain=*/true);
6318 check_for_uninitialized_const_var (decl);
6321 if (init && init != error_mark_node)
6322 init_code = build2 (INIT_EXPR, type, decl, init);
6324 if (init_code)
6326 /* We might have set these in cp_finish_decl. */
6327 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
6328 TREE_CONSTANT (decl) = false;
6331 if (init_code
6332 && (DECL_IN_AGGR_P (decl) && !DECL_VAR_DECLARED_INLINE_P (decl)))
6334 static int explained = 0;
6336 if (cxx_dialect < cxx11)
6337 error ("initializer invalid for static member with constructor");
6338 else if (cxx_dialect < cxx17)
6339 error ("non-constant in-class initialization invalid for static "
6340 "member %qD", decl);
6341 else
6342 error ("non-constant in-class initialization invalid for non-inline "
6343 "static member %qD", decl);
6344 if (!explained)
6346 inform (input_location,
6347 "(an out of class initialization is required)");
6348 explained = 1;
6350 return NULL_TREE;
6353 return init_code;
6356 /* If DECL is not a local variable, give it RTL. */
6358 static void
6359 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
6361 int toplev = toplevel_bindings_p ();
6362 int defer_p;
6364 /* Set the DECL_ASSEMBLER_NAME for the object. */
6365 if (asmspec)
6367 /* The `register' keyword, when used together with an
6368 asm-specification, indicates that the variable should be
6369 placed in a particular register. */
6370 if (VAR_P (decl) && DECL_REGISTER (decl))
6372 set_user_assembler_name (decl, asmspec);
6373 DECL_HARD_REGISTER (decl) = 1;
6375 else
6377 if (TREE_CODE (decl) == FUNCTION_DECL
6378 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
6379 set_builtin_user_assembler_name (decl, asmspec);
6380 set_user_assembler_name (decl, asmspec);
6384 /* Handle non-variables up front. */
6385 if (!VAR_P (decl))
6387 rest_of_decl_compilation (decl, toplev, at_eof);
6388 return;
6391 /* If we see a class member here, it should be a static data
6392 member. */
6393 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
6395 gcc_assert (TREE_STATIC (decl));
6396 /* An in-class declaration of a static data member should be
6397 external; it is only a declaration, and not a definition. */
6398 if (init == NULL_TREE)
6399 gcc_assert (DECL_EXTERNAL (decl)
6400 || !TREE_PUBLIC (decl)
6401 || DECL_INLINE_VAR_P (decl));
6404 /* We don't create any RTL for local variables. */
6405 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6406 return;
6408 /* We defer emission of local statics until the corresponding
6409 DECL_EXPR is expanded. But with constexpr its function might never
6410 be expanded, so go ahead and tell cgraph about the variable now. */
6411 defer_p = ((DECL_FUNCTION_SCOPE_P (decl)
6412 && !var_in_maybe_constexpr_fn (decl))
6413 || DECL_VIRTUAL_P (decl));
6415 /* Defer template instantiations. */
6416 if (DECL_LANG_SPECIFIC (decl)
6417 && DECL_IMPLICIT_INSTANTIATION (decl))
6418 defer_p = 1;
6420 /* If we're not deferring, go ahead and assemble the variable. */
6421 if (!defer_p)
6422 rest_of_decl_compilation (decl, toplev, at_eof);
6425 /* walk_tree helper for wrap_temporary_cleanups, below. */
6427 static tree
6428 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
6430 /* Stop at types or full-expression boundaries. */
6431 if (TYPE_P (*stmt_p)
6432 || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
6434 *walk_subtrees = 0;
6435 return NULL_TREE;
6438 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
6440 tree guard = (tree)data;
6441 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
6443 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
6444 /* Tell honor_protect_cleanup_actions to handle this as a separate
6445 cleanup. */
6446 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
6448 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
6451 return NULL_TREE;
6454 /* We're initializing a local variable which has a cleanup GUARD. If there
6455 are any temporaries used in the initializer INIT of this variable, we
6456 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6457 variable will be cleaned up properly if one of them throws.
6459 Unfortunately, there's no way to express this properly in terms of
6460 nesting, as the regions for the temporaries overlap the region for the
6461 variable itself; if there are two temporaries, the variable needs to be
6462 the first thing destroyed if either of them throws. However, we only
6463 want to run the variable's cleanup if it actually got constructed. So
6464 we need to guard the temporary cleanups with the variable's cleanup if
6465 they are run on the normal path, but not if they are run on the
6466 exceptional path. We implement this by telling
6467 honor_protect_cleanup_actions to strip the variable cleanup from the
6468 exceptional path. */
6470 static void
6471 wrap_temporary_cleanups (tree init, tree guard)
6473 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6476 /* Generate code to initialize DECL (a local variable). */
6478 static void
6479 initialize_local_var (tree decl, tree init)
6481 tree type = TREE_TYPE (decl);
6482 tree cleanup;
6483 int already_used;
6485 gcc_assert (VAR_P (decl)
6486 || TREE_CODE (decl) == RESULT_DECL);
6487 gcc_assert (!TREE_STATIC (decl));
6489 if (DECL_SIZE (decl) == NULL_TREE)
6491 /* If we used it already as memory, it must stay in memory. */
6492 DECL_INITIAL (decl) = NULL_TREE;
6493 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6494 return;
6497 if (type == error_mark_node)
6498 return;
6500 /* Compute and store the initial value. */
6501 already_used = TREE_USED (decl) || TREE_USED (type);
6502 if (TREE_USED (type))
6503 DECL_READ_P (decl) = 1;
6505 /* Generate a cleanup, if necessary. */
6506 cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6508 /* Perform the initialization. */
6509 if (init)
6511 tree rinit = (TREE_CODE (init) == INIT_EXPR
6512 ? TREE_OPERAND (init, 1) : NULL_TREE);
6513 if (rinit && !TREE_SIDE_EFFECTS (rinit))
6515 /* Stick simple initializers in DECL_INITIAL so that
6516 -Wno-init-self works (c++/34772). */
6517 gcc_assert (TREE_OPERAND (init, 0) == decl);
6518 DECL_INITIAL (decl) = rinit;
6520 if (warn_init_self && TREE_CODE (type) == REFERENCE_TYPE)
6522 STRIP_NOPS (rinit);
6523 if (rinit == decl)
6524 warning_at (DECL_SOURCE_LOCATION (decl),
6525 OPT_Winit_self,
6526 "reference %qD is initialized with itself", decl);
6529 else
6531 int saved_stmts_are_full_exprs_p;
6533 /* If we're only initializing a single object, guard the
6534 destructors of any temporaries used in its initializer with
6535 its destructor. This isn't right for arrays because each
6536 element initialization is a full-expression. */
6537 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6538 wrap_temporary_cleanups (init, cleanup);
6540 gcc_assert (building_stmt_list_p ());
6541 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6542 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6543 finish_expr_stmt (init);
6544 current_stmt_tree ()->stmts_are_full_exprs_p =
6545 saved_stmts_are_full_exprs_p;
6549 /* Set this to 0 so we can tell whether an aggregate which was
6550 initialized was ever used. Don't do this if it has a
6551 destructor, so we don't complain about the 'resource
6552 allocation is initialization' idiom. Now set
6553 attribute((unused)) on types so decls of that type will be
6554 marked used. (see TREE_USED, above.) */
6555 if (TYPE_NEEDS_CONSTRUCTING (type)
6556 && ! already_used
6557 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6558 && DECL_NAME (decl))
6559 TREE_USED (decl) = 0;
6560 else if (already_used)
6561 TREE_USED (decl) = 1;
6563 if (cleanup)
6564 finish_decl_cleanup (decl, cleanup);
6567 /* DECL is a VAR_DECL for a compiler-generated variable with static
6568 storage duration (like a virtual table) whose initializer is a
6569 compile-time constant. Initialize the variable and provide it to the
6570 back end. */
6572 void
6573 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6575 tree init;
6576 gcc_assert (DECL_ARTIFICIAL (decl));
6577 init = build_constructor (TREE_TYPE (decl), v);
6578 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6579 DECL_INITIAL (decl) = init;
6580 DECL_INITIALIZED_P (decl) = 1;
6581 determine_visibility (decl);
6582 layout_var_decl (decl);
6583 maybe_commonize_var (decl);
6584 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6587 /* INIT is the initializer for a variable, as represented by the
6588 parser. Returns true iff INIT is type-dependent. */
6590 static bool
6591 type_dependent_init_p (tree init)
6593 if (TREE_CODE (init) == TREE_LIST)
6594 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6595 return any_type_dependent_elements_p (init);
6596 else if (TREE_CODE (init) == CONSTRUCTOR)
6597 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6599 if (dependent_type_p (TREE_TYPE (init)))
6600 return true;
6602 vec<constructor_elt, va_gc> *elts;
6603 size_t nelts;
6604 size_t i;
6606 elts = CONSTRUCTOR_ELTS (init);
6607 nelts = vec_safe_length (elts);
6608 for (i = 0; i < nelts; ++i)
6609 if (type_dependent_init_p ((*elts)[i].value))
6610 return true;
6612 else
6613 /* It must be a simple expression, e.g., int i = 3; */
6614 return type_dependent_expression_p (init);
6616 return false;
6619 /* INIT is the initializer for a variable, as represented by the
6620 parser. Returns true iff INIT is value-dependent. */
6622 static bool
6623 value_dependent_init_p (tree init)
6625 if (TREE_CODE (init) == TREE_LIST)
6626 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6627 return any_value_dependent_elements_p (init);
6628 else if (TREE_CODE (init) == CONSTRUCTOR)
6629 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6631 vec<constructor_elt, va_gc> *elts;
6632 size_t nelts;
6633 size_t i;
6635 elts = CONSTRUCTOR_ELTS (init);
6636 nelts = vec_safe_length (elts);
6637 for (i = 0; i < nelts; ++i)
6638 if (value_dependent_init_p ((*elts)[i].value))
6639 return true;
6641 else
6642 /* It must be a simple expression, e.g., int i = 3; */
6643 return value_dependent_expression_p (init);
6645 return false;
6648 // Returns true if a DECL is VAR_DECL with the concept specifier.
6649 static inline bool
6650 is_concept_var (tree decl)
6652 return (VAR_P (decl)
6653 // Not all variables have DECL_LANG_SPECIFIC.
6654 && DECL_LANG_SPECIFIC (decl)
6655 && DECL_DECLARED_CONCEPT_P (decl));
6658 /* A helper function to be called via walk_tree. If any label exists
6659 under *TP, it is (going to be) forced. Set has_forced_label_in_static. */
6661 static tree
6662 notice_forced_label_r (tree *tp, int *walk_subtrees, void *)
6664 if (TYPE_P (*tp))
6665 *walk_subtrees = 0;
6666 if (TREE_CODE (*tp) == LABEL_DECL)
6667 cfun->has_forced_label_in_static = 1;
6668 return NULL_TREE;
6671 /* Finish processing of a declaration;
6672 install its line number and initial value.
6673 If the length of an array type is not known before,
6674 it must be determined now, from the initial value, or it is an error.
6676 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
6677 true, then INIT is an integral constant expression.
6679 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6680 if the (init) syntax was used. */
6682 void
6683 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6684 tree asmspec_tree, int flags)
6686 tree type;
6687 vec<tree, va_gc> *cleanups = NULL;
6688 const char *asmspec = NULL;
6689 int was_readonly = 0;
6690 bool var_definition_p = false;
6691 tree auto_node;
6693 if (decl == error_mark_node)
6694 return;
6695 else if (! decl)
6697 if (init)
6698 error ("assignment (not initialization) in declaration");
6699 return;
6702 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6703 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
6704 gcc_assert (TREE_CODE (decl) != PARM_DECL);
6706 type = TREE_TYPE (decl);
6707 if (type == error_mark_node)
6708 return;
6710 /* Warn about register storage specifiers except when in GNU global
6711 or local register variable extension. */
6712 if (VAR_P (decl) && DECL_REGISTER (decl) && asmspec_tree == NULL_TREE)
6714 if (cxx_dialect >= cxx17)
6715 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6716 "ISO C++17 does not allow %<register%> storage "
6717 "class specifier");
6718 else
6719 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6720 "%<register%> storage class specifier used");
6723 /* If a name was specified, get the string. */
6724 if (at_namespace_scope_p ())
6725 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6726 if (asmspec_tree && asmspec_tree != error_mark_node)
6727 asmspec = TREE_STRING_POINTER (asmspec_tree);
6729 if (current_class_type
6730 && CP_DECL_CONTEXT (decl) == current_class_type
6731 && TYPE_BEING_DEFINED (current_class_type)
6732 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6733 && (DECL_INITIAL (decl) || init))
6734 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6736 if (TREE_CODE (decl) != FUNCTION_DECL
6737 && (auto_node = type_uses_auto (type)))
6739 tree d_init;
6740 if (init == NULL_TREE)
6742 if (DECL_LANG_SPECIFIC (decl)
6743 && DECL_TEMPLATE_INSTANTIATION (decl)
6744 && !DECL_TEMPLATE_INSTANTIATED (decl))
6746 /* init is null because we're deferring instantiating the
6747 initializer until we need it. Well, we need it now. */
6748 instantiate_decl (decl, /*defer_ok*/true, /*expl*/false);
6749 return;
6752 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (auto_node));
6754 d_init = init;
6755 if (d_init)
6757 if (TREE_CODE (d_init) == TREE_LIST
6758 && !CLASS_PLACEHOLDER_TEMPLATE (auto_node))
6759 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6760 tf_warning_or_error);
6761 d_init = resolve_nondeduced_context (d_init, tf_warning_or_error);
6763 enum auto_deduction_context adc = adc_variable_type;
6764 if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
6765 adc = adc_decomp_type;
6766 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init, auto_node,
6767 tf_warning_or_error, adc,
6768 NULL_TREE, flags);
6769 if (type == error_mark_node)
6770 return;
6771 if (TREE_CODE (type) == FUNCTION_TYPE)
6773 error ("initializer for %<decltype(auto) %D%> has function type "
6774 "(did you forget the %<()%> ?)", decl);
6775 TREE_TYPE (decl) = error_mark_node;
6776 return;
6778 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6781 if (!ensure_literal_type_for_constexpr_object (decl))
6782 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6784 if (VAR_P (decl)
6785 && DECL_CLASS_SCOPE_P (decl)
6786 && DECL_INITIALIZED_IN_CLASS_P (decl))
6787 check_static_variable_definition (decl, type);
6789 if (init && TREE_CODE (decl) == FUNCTION_DECL)
6791 tree clone;
6792 if (init == ridpointers[(int)RID_DELETE])
6794 /* FIXME check this is 1st decl. */
6795 DECL_DELETED_FN (decl) = 1;
6796 DECL_DECLARED_INLINE_P (decl) = 1;
6797 DECL_INITIAL (decl) = error_mark_node;
6798 FOR_EACH_CLONE (clone, decl)
6800 DECL_DELETED_FN (clone) = 1;
6801 DECL_DECLARED_INLINE_P (clone) = 1;
6802 DECL_INITIAL (clone) = error_mark_node;
6804 init = NULL_TREE;
6806 else if (init == ridpointers[(int)RID_DEFAULT])
6808 if (defaultable_fn_check (decl))
6809 DECL_DEFAULTED_FN (decl) = 1;
6810 else
6811 DECL_INITIAL (decl) = NULL_TREE;
6815 if (init && VAR_P (decl))
6817 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6818 /* If DECL is a reference, then we want to know whether init is a
6819 reference constant; init_const_expr_p as passed tells us whether
6820 it's an rvalue constant. */
6821 if (TREE_CODE (type) == REFERENCE_TYPE)
6822 init_const_expr_p = potential_constant_expression (init);
6823 if (init_const_expr_p)
6825 /* Set these flags now for templates. We'll update the flags in
6826 store_init_value for instantiations. */
6827 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6828 if (decl_maybe_constant_var_p (decl)
6829 /* FIXME setting TREE_CONSTANT on refs breaks the back end. */
6830 && TREE_CODE (type) != REFERENCE_TYPE)
6831 TREE_CONSTANT (decl) = 1;
6835 if (processing_template_decl)
6837 bool type_dependent_p;
6839 /* Add this declaration to the statement-tree. */
6840 if (at_function_scope_p ())
6841 add_decl_expr (decl);
6843 type_dependent_p = dependent_type_p (type);
6845 if (check_for_bare_parameter_packs (init))
6847 init = NULL_TREE;
6848 DECL_INITIAL (decl) = NULL_TREE;
6851 /* Generally, initializers in templates are expanded when the
6852 template is instantiated. But, if DECL is a variable constant
6853 then it can be used in future constant expressions, so its value
6854 must be available. */
6856 if (!VAR_P (decl) || type_dependent_p)
6857 /* We can't do anything if the decl has dependent type. */;
6858 else if (init
6859 && init_const_expr_p
6860 && TREE_CODE (type) != REFERENCE_TYPE
6861 && decl_maybe_constant_var_p (decl)
6862 && !type_dependent_init_p (init)
6863 && !value_dependent_init_p (init))
6865 /* This variable seems to be a non-dependent constant, so process
6866 its initializer. If check_initializer returns non-null the
6867 initialization wasn't constant after all. */
6868 tree init_code;
6869 cleanups = make_tree_vector ();
6870 init_code = check_initializer (decl, init, flags, &cleanups);
6871 if (init_code == NULL_TREE)
6872 init = NULL_TREE;
6873 release_tree_vector (cleanups);
6875 else if (!init && is_concept_var (decl))
6876 error ("variable concept has no initializer");
6877 else if (!DECL_PRETTY_FUNCTION_P (decl))
6879 /* Deduce array size even if the initializer is dependent. */
6880 maybe_deduce_size_from_array_init (decl, init);
6881 /* And complain about multiple initializers. */
6882 if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
6883 && !MAYBE_CLASS_TYPE_P (type))
6884 init = build_x_compound_expr_from_list (init, ELK_INIT,
6885 tf_warning_or_error);
6888 if (init)
6889 DECL_INITIAL (decl) = init;
6890 return;
6893 /* Just store non-static data member initializers for later. */
6894 if (init && TREE_CODE (decl) == FIELD_DECL)
6895 DECL_INITIAL (decl) = init;
6897 /* Take care of TYPE_DECLs up front. */
6898 if (TREE_CODE (decl) == TYPE_DECL)
6900 if (type != error_mark_node
6901 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6903 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6904 warning (0, "shadowing previous type declaration of %q#D", decl);
6905 set_identifier_type_value (DECL_NAME (decl), decl);
6908 /* If we have installed this as the canonical typedef for this
6909 type, and that type has not been defined yet, delay emitting
6910 the debug information for it, as we will emit it later. */
6911 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6912 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6913 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6915 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6916 at_eof);
6917 return;
6920 /* A reference will be modified here, as it is initialized. */
6921 if (! DECL_EXTERNAL (decl)
6922 && TREE_READONLY (decl)
6923 && TREE_CODE (type) == REFERENCE_TYPE)
6925 was_readonly = 1;
6926 TREE_READONLY (decl) = 0;
6929 if (VAR_P (decl))
6931 /* If this is a local variable that will need a mangled name,
6932 register it now. We must do this before processing the
6933 initializer for the variable, since the initialization might
6934 require a guard variable, and since the mangled name of the
6935 guard variable will depend on the mangled name of this
6936 variable. */
6937 if (DECL_FUNCTION_SCOPE_P (decl)
6938 && TREE_STATIC (decl)
6939 && !DECL_ARTIFICIAL (decl))
6941 push_local_name (decl);
6942 /* Normally has_forced_label_in_static is set during GIMPLE
6943 lowering, but [cd]tors are never actually compiled directly.
6944 We need to set this early so we can deal with the label
6945 address extension. */
6946 if ((DECL_CONSTRUCTOR_P (current_function_decl)
6947 || DECL_DESTRUCTOR_P (current_function_decl))
6948 && init)
6950 walk_tree (&init, notice_forced_label_r, NULL, NULL);
6951 add_local_decl (cfun, decl);
6953 /* And make sure it's in the symbol table for
6954 c_parse_final_cleanups to find. */
6955 varpool_node::get_create (decl);
6958 /* Convert the initializer to the type of DECL, if we have not
6959 already initialized DECL. */
6960 if (!DECL_INITIALIZED_P (decl)
6961 /* If !DECL_EXTERNAL then DECL is being defined. In the
6962 case of a static data member initialized inside the
6963 class-specifier, there can be an initializer even if DECL
6964 is *not* defined. */
6965 && (!DECL_EXTERNAL (decl) || init))
6967 cleanups = make_tree_vector ();
6968 init = check_initializer (decl, init, flags, &cleanups);
6970 /* Handle:
6972 [dcl.init]
6974 The memory occupied by any object of static storage
6975 duration is zero-initialized at program startup before
6976 any other initialization takes place.
6978 We cannot create an appropriate initializer until after
6979 the type of DECL is finalized. If DECL_INITIAL is set,
6980 then the DECL is statically initialized, and any
6981 necessary zero-initialization has already been performed. */
6982 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6983 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6984 /*nelts=*/NULL_TREE,
6985 /*static_storage_p=*/true);
6986 /* Remember that the initialization for this variable has
6987 taken place. */
6988 DECL_INITIALIZED_P (decl) = 1;
6989 /* This declaration is the definition of this variable,
6990 unless we are initializing a static data member within
6991 the class specifier. */
6992 if (!DECL_EXTERNAL (decl))
6993 var_definition_p = true;
6995 /* If the variable has an array type, lay out the type, even if
6996 there is no initializer. It is valid to index through the
6997 array, and we must get TYPE_ALIGN set correctly on the array
6998 type. */
6999 else if (TREE_CODE (type) == ARRAY_TYPE)
7000 layout_type (type);
7002 if (TREE_STATIC (decl)
7003 && !at_function_scope_p ()
7004 && current_function_decl == NULL)
7005 /* So decl is a global variable or a static member of a
7006 non local class. Record the types it uses
7007 so that we can decide later to emit debug info for them. */
7008 record_types_used_by_current_var_decl (decl);
7011 /* Add this declaration to the statement-tree. This needs to happen
7012 after the call to check_initializer so that the DECL_EXPR for a
7013 reference temp is added before the DECL_EXPR for the reference itself. */
7014 if (DECL_FUNCTION_SCOPE_P (decl))
7016 /* If we're building a variable sized type, and we might be
7017 reachable other than via the top of the current binding
7018 level, then create a new BIND_EXPR so that we deallocate
7019 the object at the right time. */
7020 if (VAR_P (decl)
7021 && DECL_SIZE (decl)
7022 && !TREE_CONSTANT (DECL_SIZE (decl))
7023 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
7025 tree bind;
7026 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
7027 TREE_SIDE_EFFECTS (bind) = 1;
7028 add_stmt (bind);
7029 BIND_EXPR_BODY (bind) = push_stmt_list ();
7031 add_decl_expr (decl);
7034 /* Let the middle end know about variables and functions -- but not
7035 static data members in uninstantiated class templates. */
7036 if (VAR_OR_FUNCTION_DECL_P (decl))
7038 if (VAR_P (decl))
7040 layout_var_decl (decl);
7041 maybe_commonize_var (decl);
7044 /* This needs to happen after the linkage is set. */
7045 determine_visibility (decl);
7047 if (var_definition_p && TREE_STATIC (decl))
7049 /* If a TREE_READONLY variable needs initialization
7050 at runtime, it is no longer readonly and we need to
7051 avoid MEM_READONLY_P being set on RTL created for it. */
7052 if (init)
7054 if (TREE_READONLY (decl))
7055 TREE_READONLY (decl) = 0;
7056 was_readonly = 0;
7058 else if (was_readonly)
7059 TREE_READONLY (decl) = 1;
7061 /* Likewise if it needs destruction. */
7062 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7063 TREE_READONLY (decl) = 0;
7066 make_rtl_for_nonlocal_decl (decl, init, asmspec);
7068 /* Check for abstractness of the type. Notice that there is no
7069 need to strip array types here since the check for those types
7070 is already done within create_array_type_for_decl. */
7071 abstract_virtuals_error (decl, type);
7073 if (TREE_TYPE (decl) == error_mark_node)
7074 /* No initialization required. */
7076 else if (TREE_CODE (decl) == FUNCTION_DECL)
7078 if (init)
7080 if (init == ridpointers[(int)RID_DEFAULT])
7082 /* An out-of-class default definition is defined at
7083 the point where it is explicitly defaulted. */
7084 if (DECL_DELETED_FN (decl))
7085 maybe_explain_implicit_delete (decl);
7086 else if (DECL_INITIAL (decl) == error_mark_node)
7087 synthesize_method (decl);
7089 else
7090 error ("function %q#D is initialized like a variable", decl);
7092 /* else no initialization required. */
7094 else if (DECL_EXTERNAL (decl)
7095 && ! (DECL_LANG_SPECIFIC (decl)
7096 && DECL_NOT_REALLY_EXTERN (decl)))
7098 if (init)
7099 DECL_INITIAL (decl) = init;
7101 /* A variable definition. */
7102 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
7103 /* Initialize the local variable. */
7104 initialize_local_var (decl, init);
7106 /* If a variable is defined, and then a subsequent
7107 definition with external linkage is encountered, we will
7108 get here twice for the same variable. We want to avoid
7109 calling expand_static_init more than once. For variables
7110 that are not static data members, we can call
7111 expand_static_init only when we actually process the
7112 initializer. It is not legal to redeclare a static data
7113 member, so this issue does not arise in that case. */
7114 else if (var_definition_p && TREE_STATIC (decl))
7115 expand_static_init (decl, init);
7118 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
7119 reference, insert it in the statement-tree now. */
7120 if (cleanups)
7122 unsigned i; tree t;
7123 FOR_EACH_VEC_ELT (*cleanups, i, t)
7124 push_cleanup (decl, t, false);
7125 release_tree_vector (cleanups);
7128 if (was_readonly)
7129 TREE_READONLY (decl) = 1;
7131 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
7134 /* For class TYPE return itself or some its bases that contain
7135 any direct non-static data members. Return error_mark_node if an
7136 error has been diagnosed. */
7138 static tree
7139 find_decomp_class_base (location_t loc, tree type, tree ret)
7141 bool member_seen = false;
7142 for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
7143 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
7144 continue;
7145 else if (ret)
7146 return type;
7147 else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
7149 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
7150 error_at (loc, "cannot decompose class type %qT because it has an "
7151 "anonymous struct member", type);
7152 else
7153 error_at (loc, "cannot decompose class type %qT because it has an "
7154 "anonymous union member", type);
7155 inform (DECL_SOURCE_LOCATION (field), "declared here");
7156 return error_mark_node;
7158 else if (TREE_PRIVATE (field) || TREE_PROTECTED (field))
7160 error_at (loc, "cannot decompose non-public member %qD of %qT",
7161 field, type);
7162 inform (DECL_SOURCE_LOCATION (field),
7163 TREE_PRIVATE (field)
7164 ? G_("declared private here")
7165 : G_("declared protected here"));
7166 return error_mark_node;
7168 else
7169 member_seen = true;
7171 tree base_binfo, binfo;
7172 tree orig_ret = ret;
7173 int i;
7174 if (member_seen)
7175 ret = type;
7176 for (binfo = TYPE_BINFO (type), i = 0;
7177 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
7179 tree t = find_decomp_class_base (loc, TREE_TYPE (base_binfo), ret);
7180 if (t == error_mark_node)
7181 return error_mark_node;
7182 if (t != NULL_TREE)
7184 if (ret == type)
7186 error_at (loc, "cannot decompose class type %qT: both it and "
7187 "its base class %qT have non-static data members",
7188 type, t);
7189 return error_mark_node;
7191 else if (orig_ret != NULL_TREE)
7192 return t;
7193 else if (ret == t)
7194 /* OK, found the same base along another path. We'll complain
7195 in convert_to_base if it's ambiguous. */;
7196 else if (ret != NULL_TREE)
7198 error_at (loc, "cannot decompose class type %qT: its base "
7199 "classes %qT and %qT have non-static data "
7200 "members", type, ret, t);
7201 return error_mark_node;
7203 else
7204 ret = t;
7207 return ret;
7210 /* Return std::tuple_size<TYPE>::value. */
7212 static tree
7213 get_tuple_size (tree type)
7215 tree args = make_tree_vec (1);
7216 TREE_VEC_ELT (args, 0) = type;
7217 tree inst = lookup_template_class (get_identifier ("tuple_size"), args,
7218 /*in_decl*/NULL_TREE,
7219 /*context*/std_node,
7220 /*entering_scope*/false, tf_none);
7221 inst = complete_type (inst);
7222 if (inst == error_mark_node || !COMPLETE_TYPE_P (inst))
7223 return NULL_TREE;
7224 tree val = lookup_qualified_name (inst, get_identifier ("value"),
7225 /*type*/false, /*complain*/false);
7226 if (TREE_CODE (val) == VAR_DECL || TREE_CODE (val) == CONST_DECL)
7227 val = maybe_constant_value (val);
7228 if (TREE_CODE (val) == INTEGER_CST)
7229 return val;
7230 else
7231 return error_mark_node;
7234 /* Return std::tuple_element<I,TYPE>::type. */
7236 static tree
7237 get_tuple_element_type (tree type, unsigned i)
7239 tree args = make_tree_vec (2);
7240 TREE_VEC_ELT (args, 0) = build_int_cst (integer_type_node, i);
7241 TREE_VEC_ELT (args, 1) = type;
7242 tree inst = lookup_template_class (get_identifier ("tuple_element"), args,
7243 /*in_decl*/NULL_TREE,
7244 /*context*/std_node,
7245 /*entering_scope*/false,
7246 tf_warning_or_error);
7247 return make_typename_type (inst, get_identifier ("type"),
7248 none_type, tf_warning_or_error);
7251 /* Return e.get<i>() or get<i>(e). */
7253 static tree
7254 get_tuple_decomp_init (tree decl, unsigned i)
7256 tree get_id = get_identifier ("get");
7257 tree targs = make_tree_vec (1);
7258 TREE_VEC_ELT (targs, 0) = build_int_cst (integer_type_node, i);
7260 tree etype = TREE_TYPE (decl);
7261 tree e = convert_from_reference (decl);
7263 /* [The id-expression] e is an lvalue if the type of the entity e is an
7264 lvalue reference and an xvalue otherwise. */
7265 if (TREE_CODE (etype) != REFERENCE_TYPE
7266 || TYPE_REF_IS_RVALUE (etype))
7267 e = move (e);
7269 tree fns = lookup_qualified_name (TREE_TYPE (e), get_id,
7270 /*type*/false, /*complain*/false);
7271 if (fns != error_mark_node)
7273 fns = lookup_template_function (fns, targs);
7274 return build_new_method_call (e, fns, /*args*/NULL,
7275 /*path*/NULL_TREE, LOOKUP_NORMAL,
7276 /*fn_p*/NULL, tf_warning_or_error);
7278 else
7280 vec<tree,va_gc> *args = make_tree_vector_single (e);
7281 fns = lookup_template_function (get_id, targs);
7282 fns = perform_koenig_lookup (fns, args, tf_warning_or_error);
7283 return finish_call_expr (fns, &args, /*novirt*/false,
7284 /*koenig*/true, tf_warning_or_error);
7288 /* It's impossible to recover the decltype of a tuple decomposition variable
7289 based on the actual type of the variable, so store it in a hash table. */
7291 static GTY((cache)) tree_cache_map *decomp_type_table;
7292 static void
7293 store_decomp_type (tree v, tree t)
7295 if (!decomp_type_table)
7296 decomp_type_table = tree_cache_map::create_ggc (13);
7297 decomp_type_table->put (v, t);
7300 tree
7301 lookup_decomp_type (tree v)
7303 return *decomp_type_table->get (v);
7306 /* Finish a decomposition declaration. DECL is the underlying declaration
7307 "e", FIRST is the head of a chain of decls for the individual identifiers
7308 chained through DECL_CHAIN in reverse order and COUNT is the number of
7309 those decls. */
7311 void
7312 cp_finish_decomp (tree decl, tree first, unsigned int count)
7314 if (error_operand_p (decl))
7316 error_out:
7317 while (count--)
7319 TREE_TYPE (first) = error_mark_node;
7320 if (DECL_HAS_VALUE_EXPR_P (first))
7322 SET_DECL_VALUE_EXPR (first, NULL_TREE);
7323 DECL_HAS_VALUE_EXPR_P (first) = 0;
7325 first = DECL_CHAIN (first);
7327 if (DECL_P (decl) && DECL_NAMESPACE_SCOPE_P (decl))
7328 SET_DECL_ASSEMBLER_NAME (decl, get_identifier ("<decomp>"));
7329 return;
7332 location_t loc = DECL_SOURCE_LOCATION (decl);
7333 if (type_dependent_expression_p (decl)
7334 /* This happens for range for when not in templates.
7335 Still add the DECL_VALUE_EXPRs for later processing. */
7336 || (!processing_template_decl
7337 && type_uses_auto (TREE_TYPE (decl))))
7339 for (unsigned int i = 0; i < count; i++)
7341 if (!DECL_HAS_VALUE_EXPR_P (first))
7343 tree v = build_nt (ARRAY_REF, decl,
7344 size_int (count - i - 1),
7345 NULL_TREE, NULL_TREE);
7346 SET_DECL_VALUE_EXPR (first, v);
7347 DECL_HAS_VALUE_EXPR_P (first) = 1;
7349 if (processing_template_decl)
7350 fit_decomposition_lang_decl (first, decl);
7351 first = DECL_CHAIN (first);
7353 return;
7356 auto_vec<tree, 16> v;
7357 v.safe_grow (count);
7358 tree d = first;
7359 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7361 v[count - i - 1] = d;
7362 fit_decomposition_lang_decl (d, decl);
7365 tree type = TREE_TYPE (decl);
7366 tree dexp = decl;
7368 if (TREE_CODE (type) == REFERENCE_TYPE)
7370 dexp = convert_from_reference (dexp);
7371 type = TREE_TYPE (type);
7374 tree eltype = NULL_TREE;
7375 unsigned HOST_WIDE_INT eltscnt = 0;
7376 if (TREE_CODE (type) == ARRAY_TYPE)
7378 tree nelts;
7379 nelts = array_type_nelts_top (type);
7380 if (nelts == error_mark_node)
7381 goto error_out;
7382 if (!tree_fits_uhwi_p (nelts))
7384 error_at (loc, "cannot decompose variable length array %qT", type);
7385 goto error_out;
7387 eltscnt = tree_to_uhwi (nelts);
7388 if (count != eltscnt)
7390 cnt_mismatch:
7391 if (count > eltscnt)
7392 error_at (loc, "%u names provided while %qT decomposes into "
7393 "%wu elements", count, type, eltscnt);
7394 else
7395 error_at (loc, "only %u names provided while %qT decomposes into "
7396 "%wu elements", count, type, eltscnt);
7397 goto error_out;
7399 eltype = TREE_TYPE (type);
7400 for (unsigned int i = 0; i < count; i++)
7402 TREE_TYPE (v[i]) = eltype;
7403 layout_decl (v[i], 0);
7404 if (processing_template_decl)
7405 continue;
7406 tree t = unshare_expr (dexp);
7407 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7408 eltype, t, size_int (i), NULL_TREE,
7409 NULL_TREE);
7410 SET_DECL_VALUE_EXPR (v[i], t);
7411 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7414 /* 2 GNU extensions. */
7415 else if (TREE_CODE (type) == COMPLEX_TYPE)
7417 eltscnt = 2;
7418 if (count != eltscnt)
7419 goto cnt_mismatch;
7420 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7421 for (unsigned int i = 0; i < count; i++)
7423 TREE_TYPE (v[i]) = eltype;
7424 layout_decl (v[i], 0);
7425 if (processing_template_decl)
7426 continue;
7427 tree t = unshare_expr (dexp);
7428 t = build1_loc (DECL_SOURCE_LOCATION (v[i]),
7429 i ? IMAGPART_EXPR : REALPART_EXPR, eltype,
7431 SET_DECL_VALUE_EXPR (v[i], t);
7432 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7435 else if (TREE_CODE (type) == VECTOR_TYPE)
7437 eltscnt = TYPE_VECTOR_SUBPARTS (type);
7438 if (count != eltscnt)
7439 goto cnt_mismatch;
7440 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7441 for (unsigned int i = 0; i < count; i++)
7443 TREE_TYPE (v[i]) = eltype;
7444 layout_decl (v[i], 0);
7445 if (processing_template_decl)
7446 continue;
7447 tree t = unshare_expr (dexp);
7448 convert_vector_to_array_for_subscript (DECL_SOURCE_LOCATION (v[i]),
7449 &t, size_int (i));
7450 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7451 eltype, t, size_int (i), NULL_TREE,
7452 NULL_TREE);
7453 SET_DECL_VALUE_EXPR (v[i], t);
7454 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7457 else if (tree tsize = get_tuple_size (type))
7459 if (tsize == error_mark_node)
7461 error_at (loc, "%<std::tuple_size<%T>::value%> is not an integral "
7462 "constant expression", type);
7463 goto error_out;
7465 eltscnt = tree_to_uhwi (tsize);
7466 if (count != eltscnt)
7467 goto cnt_mismatch;
7468 int save_read = DECL_READ_P (decl);
7469 for (unsigned i = 0; i < count; ++i)
7471 location_t sloc = input_location;
7472 location_t dloc = DECL_SOURCE_LOCATION (v[i]);
7474 input_location = dloc;
7475 tree init = get_tuple_decomp_init (decl, i);
7476 tree eltype = (init == error_mark_node ? error_mark_node
7477 : get_tuple_element_type (type, i));
7478 input_location = sloc;
7480 if (init == error_mark_node || eltype == error_mark_node)
7482 inform (dloc, "in initialization of structured binding "
7483 "variable %qD", v[i]);
7484 goto error_out;
7486 /* Save the decltype away before reference collapse. */
7487 store_decomp_type (v[i], eltype);
7488 eltype = cp_build_reference_type (eltype, !lvalue_p (init));
7489 TREE_TYPE (v[i]) = eltype;
7490 layout_decl (v[i], 0);
7491 if (DECL_HAS_VALUE_EXPR_P (v[i]))
7493 /* In this case the names are variables, not just proxies. */
7494 SET_DECL_VALUE_EXPR (v[i], NULL_TREE);
7495 DECL_HAS_VALUE_EXPR_P (v[i]) = 0;
7497 if (!processing_template_decl)
7498 cp_finish_decl (v[i], init, /*constexpr*/false,
7499 /*asm*/NULL_TREE, LOOKUP_NORMAL);
7501 /* Ignore reads from the underlying decl performed during initialization
7502 of the individual variables. If those will be read, we'll mark
7503 the underlying decl as read at that point. */
7504 DECL_READ_P (decl) = save_read;
7506 else if (TREE_CODE (type) == UNION_TYPE)
7508 error_at (loc, "cannot decompose union type %qT", type);
7509 goto error_out;
7511 else if (!CLASS_TYPE_P (type))
7513 error_at (loc, "cannot decompose non-array non-class type %qT", type);
7514 goto error_out;
7516 else if (LAMBDA_TYPE_P (type))
7518 error_at (loc, "cannot decompose lambda closure type %qT", type);
7519 goto error_out;
7521 else
7523 tree btype = find_decomp_class_base (loc, type, NULL_TREE);
7524 if (btype == error_mark_node)
7525 goto error_out;
7526 else if (btype == NULL_TREE)
7528 error_at (loc, "cannot decompose class type %qT without non-static "
7529 "data members", type);
7530 goto error_out;
7532 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7533 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
7534 continue;
7535 else
7536 eltscnt++;
7537 if (count != eltscnt)
7538 goto cnt_mismatch;
7539 tree t = dexp;
7540 if (type != btype)
7542 t = convert_to_base (t, btype, /*check_access*/true,
7543 /*nonnull*/false, tf_warning_or_error);
7544 type = btype;
7546 unsigned int i = 0;
7547 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7548 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
7549 continue;
7550 else
7552 tree tt = finish_non_static_data_member (field, unshare_expr (t),
7553 NULL_TREE);
7554 if (REFERENCE_REF_P (tt))
7555 tt = TREE_OPERAND (tt, 0);
7556 TREE_TYPE (v[i]) = TREE_TYPE (tt);
7557 layout_decl (v[i], 0);
7558 if (!processing_template_decl)
7560 SET_DECL_VALUE_EXPR (v[i], tt);
7561 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7563 i++;
7566 if (processing_template_decl)
7568 for (unsigned int i = 0; i < count; i++)
7569 if (!DECL_HAS_VALUE_EXPR_P (v[i]))
7571 tree a = build_nt (ARRAY_REF, decl, size_int (i),
7572 NULL_TREE, NULL_TREE);
7573 SET_DECL_VALUE_EXPR (v[i], a);
7574 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7577 else if (DECL_NAMESPACE_SCOPE_P (decl))
7578 SET_DECL_ASSEMBLER_NAME (decl, mangle_decomp (decl, v));
7581 /* Returns a declaration for a VAR_DECL as if:
7583 extern "C" TYPE NAME;
7585 had been seen. Used to create compiler-generated global
7586 variables. */
7588 static tree
7589 declare_global_var (tree name, tree type)
7591 tree decl;
7593 push_to_top_level ();
7594 decl = build_decl (input_location, VAR_DECL, name, type);
7595 TREE_PUBLIC (decl) = 1;
7596 DECL_EXTERNAL (decl) = 1;
7597 DECL_ARTIFICIAL (decl) = 1;
7598 DECL_CONTEXT (decl) = FROB_CONTEXT (global_namespace);
7599 /* If the user has explicitly declared this variable (perhaps
7600 because the code we are compiling is part of a low-level runtime
7601 library), then it is possible that our declaration will be merged
7602 with theirs by pushdecl. */
7603 decl = pushdecl (decl);
7604 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
7605 pop_from_top_level ();
7607 return decl;
7610 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
7611 if "__cxa_atexit" is not being used) corresponding to the function
7612 to be called when the program exits. */
7614 static tree
7615 get_atexit_fn_ptr_type (void)
7617 tree fn_type;
7619 if (!atexit_fn_ptr_type_node)
7621 tree arg_type;
7622 if (flag_use_cxa_atexit
7623 && !targetm.cxx.use_atexit_for_cxa_atexit ())
7624 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
7625 arg_type = ptr_type_node;
7626 else
7627 /* The parameter to "atexit" is "void (*)(void)". */
7628 arg_type = NULL_TREE;
7630 fn_type = build_function_type_list (void_type_node,
7631 arg_type, NULL_TREE);
7632 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
7635 return atexit_fn_ptr_type_node;
7638 /* Returns a pointer to the `atexit' function. Note that if
7639 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
7640 `__cxa_atexit' function specified in the IA64 C++ ABI. */
7642 static tree
7643 get_atexit_node (void)
7645 tree atexit_fndecl;
7646 tree fn_type;
7647 tree fn_ptr_type;
7648 const char *name;
7649 bool use_aeabi_atexit;
7651 if (atexit_node)
7652 return atexit_node;
7654 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
7656 /* The declaration for `__cxa_atexit' is:
7658 int __cxa_atexit (void (*)(void *), void *, void *)
7660 We build up the argument types and then the function type
7661 itself. */
7662 tree argtype0, argtype1, argtype2;
7664 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
7665 /* First, build the pointer-to-function type for the first
7666 argument. */
7667 fn_ptr_type = get_atexit_fn_ptr_type ();
7668 /* Then, build the rest of the argument types. */
7669 argtype2 = ptr_type_node;
7670 if (use_aeabi_atexit)
7672 argtype1 = fn_ptr_type;
7673 argtype0 = ptr_type_node;
7675 else
7677 argtype1 = ptr_type_node;
7678 argtype0 = fn_ptr_type;
7680 /* And the final __cxa_atexit type. */
7681 fn_type = build_function_type_list (integer_type_node,
7682 argtype0, argtype1, argtype2,
7683 NULL_TREE);
7684 if (use_aeabi_atexit)
7685 name = "__aeabi_atexit";
7686 else
7687 name = "__cxa_atexit";
7689 else
7691 /* The declaration for `atexit' is:
7693 int atexit (void (*)());
7695 We build up the argument types and then the function type
7696 itself. */
7697 fn_ptr_type = get_atexit_fn_ptr_type ();
7698 /* Build the final atexit type. */
7699 fn_type = build_function_type_list (integer_type_node,
7700 fn_ptr_type, NULL_TREE);
7701 name = "atexit";
7704 /* Now, build the function declaration. */
7705 push_lang_context (lang_name_c);
7706 atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
7707 mark_used (atexit_fndecl);
7708 pop_lang_context ();
7709 atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
7711 return atexit_node;
7714 /* Like get_atexit_node, but for thread-local cleanups. */
7716 static tree
7717 get_thread_atexit_node (void)
7719 /* The declaration for `__cxa_thread_atexit' is:
7721 int __cxa_thread_atexit (void (*)(void *), void *, void *) */
7722 tree fn_type = build_function_type_list (integer_type_node,
7723 get_atexit_fn_ptr_type (),
7724 ptr_type_node, ptr_type_node,
7725 NULL_TREE);
7727 /* Now, build the function declaration. */
7728 tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
7729 ECF_LEAF | ECF_NOTHROW);
7730 return decay_conversion (atexit_fndecl, tf_warning_or_error);
7733 /* Returns the __dso_handle VAR_DECL. */
7735 static tree
7736 get_dso_handle_node (void)
7738 if (dso_handle_node)
7739 return dso_handle_node;
7741 /* Declare the variable. */
7742 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
7743 ptr_type_node);
7745 #ifdef HAVE_GAS_HIDDEN
7746 if (dso_handle_node != error_mark_node)
7748 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
7749 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
7751 #endif
7753 return dso_handle_node;
7756 /* Begin a new function with internal linkage whose job will be simply
7757 to destroy some particular variable. */
7759 static GTY(()) int start_cleanup_cnt;
7761 static tree
7762 start_cleanup_fn (void)
7764 char name[32];
7765 tree fntype;
7766 tree fndecl;
7767 bool use_cxa_atexit = flag_use_cxa_atexit
7768 && !targetm.cxx.use_atexit_for_cxa_atexit ();
7770 push_to_top_level ();
7772 /* No need to mangle this. */
7773 push_lang_context (lang_name_c);
7775 /* Build the name of the function. */
7776 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
7777 /* Build the function declaration. */
7778 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
7779 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
7780 /* It's a function with internal linkage, generated by the
7781 compiler. */
7782 TREE_PUBLIC (fndecl) = 0;
7783 DECL_ARTIFICIAL (fndecl) = 1;
7784 /* Make the function `inline' so that it is only emitted if it is
7785 actually needed. It is unlikely that it will be inlined, since
7786 it is only called via a function pointer, but we avoid unnecessary
7787 emissions this way. */
7788 DECL_DECLARED_INLINE_P (fndecl) = 1;
7789 DECL_INTERFACE_KNOWN (fndecl) = 1;
7790 /* Build the parameter. */
7791 if (use_cxa_atexit)
7793 tree parmdecl = cp_build_parm_decl (fndecl, NULL_TREE, ptr_type_node);
7794 TREE_USED (parmdecl) = 1;
7795 DECL_READ_P (parmdecl) = 1;
7796 DECL_ARGUMENTS (fndecl) = parmdecl;
7799 pushdecl (fndecl);
7800 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
7802 pop_lang_context ();
7804 return current_function_decl;
7807 /* Finish the cleanup function begun by start_cleanup_fn. */
7809 static void
7810 end_cleanup_fn (void)
7812 expand_or_defer_fn (finish_function (/*inline_p=*/false));
7814 pop_from_top_level ();
7817 /* Generate code to handle the destruction of DECL, an object with
7818 static storage duration. */
7820 tree
7821 register_dtor_fn (tree decl)
7823 tree cleanup;
7824 tree addr;
7825 tree compound_stmt;
7826 tree fcall;
7827 tree type;
7828 bool ob_parm, dso_parm, use_dtor;
7829 tree arg0, arg1, arg2;
7830 tree atex_node;
7832 type = TREE_TYPE (decl);
7833 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
7834 return void_node;
7836 /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
7837 "__aeabi_atexit"), and DECL is a class object, we can just pass the
7838 destructor to "__cxa_atexit"; we don't have to build a temporary
7839 function to do the cleanup. */
7840 dso_parm = (flag_use_cxa_atexit
7841 && !targetm.cxx.use_atexit_for_cxa_atexit ());
7842 ob_parm = (CP_DECL_THREAD_LOCAL_P (decl) || dso_parm);
7843 use_dtor = ob_parm && CLASS_TYPE_P (type);
7844 if (use_dtor)
7846 cleanup = get_class_binding (type, complete_dtor_identifier);
7848 /* Make sure it is accessible. */
7849 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
7850 tf_warning_or_error);
7852 else
7854 /* Call build_cleanup before we enter the anonymous function so
7855 that any access checks will be done relative to the current
7856 scope, rather than the scope of the anonymous function. */
7857 build_cleanup (decl);
7859 /* Now start the function. */
7860 cleanup = start_cleanup_fn ();
7862 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
7863 to the original function, rather than the anonymous one. That
7864 will make the back end think that nested functions are in use,
7865 which causes confusion. */
7866 push_deferring_access_checks (dk_no_check);
7867 fcall = build_cleanup (decl);
7868 pop_deferring_access_checks ();
7870 /* Create the body of the anonymous function. */
7871 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
7872 finish_expr_stmt (fcall);
7873 finish_compound_stmt (compound_stmt);
7874 end_cleanup_fn ();
7877 /* Call atexit with the cleanup function. */
7878 mark_used (cleanup);
7879 cleanup = build_address (cleanup);
7881 if (CP_DECL_THREAD_LOCAL_P (decl))
7882 atex_node = get_thread_atexit_node ();
7883 else
7884 atex_node = get_atexit_node ();
7886 if (use_dtor)
7888 /* We must convert CLEANUP to the type that "__cxa_atexit"
7889 expects. */
7890 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
7891 /* "__cxa_atexit" will pass the address of DECL to the
7892 cleanup function. */
7893 mark_used (decl);
7894 addr = build_address (decl);
7895 /* The declared type of the parameter to "__cxa_atexit" is
7896 "void *". For plain "T*", we could just let the
7897 machinery in cp_build_function_call convert it -- but if the
7898 type is "cv-qualified T *", then we need to convert it
7899 before passing it in, to avoid spurious errors. */
7900 addr = build_nop (ptr_type_node, addr);
7902 else
7903 /* Since the cleanup functions we build ignore the address
7904 they're given, there's no reason to pass the actual address
7905 in, and, in general, it's cheaper to pass NULL than any
7906 other value. */
7907 addr = null_pointer_node;
7909 if (dso_parm)
7910 arg2 = cp_build_addr_expr (get_dso_handle_node (),
7911 tf_warning_or_error);
7912 else if (ob_parm)
7913 /* Just pass NULL to the dso handle parm if we don't actually
7914 have a DSO handle on this target. */
7915 arg2 = null_pointer_node;
7916 else
7917 arg2 = NULL_TREE;
7919 if (ob_parm)
7921 if (!CP_DECL_THREAD_LOCAL_P (decl)
7922 && targetm.cxx.use_aeabi_atexit ())
7924 arg1 = cleanup;
7925 arg0 = addr;
7927 else
7929 arg1 = addr;
7930 arg0 = cleanup;
7933 else
7935 arg0 = cleanup;
7936 arg1 = NULL_TREE;
7938 return cp_build_function_call_nary (atex_node, tf_warning_or_error,
7939 arg0, arg1, arg2, NULL_TREE);
7942 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
7943 is its initializer. Generate code to handle the construction
7944 and destruction of DECL. */
7946 static void
7947 expand_static_init (tree decl, tree init)
7949 gcc_assert (VAR_P (decl));
7950 gcc_assert (TREE_STATIC (decl));
7952 /* Some variables require no dynamic initialization. */
7953 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
7955 /* Make sure the destructor is callable. */
7956 cxx_maybe_build_cleanup (decl, tf_warning_or_error);
7957 if (!init)
7958 return;
7961 if (CP_DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
7962 && !DECL_FUNCTION_SCOPE_P (decl))
7964 if (init)
7965 error ("non-local variable %qD declared %<__thread%> "
7966 "needs dynamic initialization", decl);
7967 else
7968 error ("non-local variable %qD declared %<__thread%> "
7969 "has a non-trivial destructor", decl);
7970 static bool informed;
7971 if (!informed)
7973 inform (DECL_SOURCE_LOCATION (decl),
7974 "C++11 %<thread_local%> allows dynamic initialization "
7975 "and destruction");
7976 informed = true;
7978 return;
7981 if (DECL_FUNCTION_SCOPE_P (decl))
7983 /* Emit code to perform this initialization but once. */
7984 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
7985 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
7986 tree guard, guard_addr;
7987 tree flag, begin;
7988 /* We don't need thread-safety code for thread-local vars. */
7989 bool thread_guard = (flag_threadsafe_statics
7990 && !CP_DECL_THREAD_LOCAL_P (decl));
7992 /* Emit code to perform this initialization but once. This code
7993 looks like:
7995 static <type> guard;
7996 if (!__atomic_load (guard.first_byte)) {
7997 if (__cxa_guard_acquire (&guard)) {
7998 bool flag = false;
7999 try {
8000 // Do initialization.
8001 flag = true; __cxa_guard_release (&guard);
8002 // Register variable for destruction at end of program.
8003 } catch {
8004 if (!flag) __cxa_guard_abort (&guard);
8009 Note that the `flag' variable is only set to 1 *after* the
8010 initialization is complete. This ensures that an exception,
8011 thrown during the construction, will cause the variable to
8012 reinitialized when we pass through this code again, as per:
8014 [stmt.dcl]
8016 If the initialization exits by throwing an exception, the
8017 initialization is not complete, so it will be tried again
8018 the next time control enters the declaration.
8020 This process should be thread-safe, too; multiple threads
8021 should not be able to initialize the variable more than
8022 once. */
8024 /* Create the guard variable. */
8025 guard = get_guard (decl);
8027 /* Begin the conditional initialization. */
8028 if_stmt = begin_if_stmt ();
8030 finish_if_stmt_cond (get_guard_cond (guard, thread_guard), if_stmt);
8031 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8033 if (thread_guard)
8035 tree vfntype = NULL_TREE;
8036 tree acquire_name, release_name, abort_name;
8037 tree acquire_fn, release_fn, abort_fn;
8038 guard_addr = build_address (guard);
8040 acquire_name = get_identifier ("__cxa_guard_acquire");
8041 release_name = get_identifier ("__cxa_guard_release");
8042 abort_name = get_identifier ("__cxa_guard_abort");
8043 acquire_fn = get_global_binding (acquire_name);
8044 release_fn = get_global_binding (release_name);
8045 abort_fn = get_global_binding (abort_name);
8046 if (!acquire_fn)
8047 acquire_fn = push_library_fn
8048 (acquire_name, build_function_type_list (integer_type_node,
8049 TREE_TYPE (guard_addr),
8050 NULL_TREE),
8051 NULL_TREE, ECF_NOTHROW | ECF_LEAF);
8052 if (!release_fn || !abort_fn)
8053 vfntype = build_function_type_list (void_type_node,
8054 TREE_TYPE (guard_addr),
8055 NULL_TREE);
8056 if (!release_fn)
8057 release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
8058 ECF_NOTHROW | ECF_LEAF);
8059 if (!abort_fn)
8060 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
8061 ECF_NOTHROW | ECF_LEAF);
8063 inner_if_stmt = begin_if_stmt ();
8064 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
8065 inner_if_stmt);
8067 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8068 begin = get_target_expr (boolean_false_node);
8069 flag = TARGET_EXPR_SLOT (begin);
8071 TARGET_EXPR_CLEANUP (begin)
8072 = build3 (COND_EXPR, void_type_node, flag,
8073 void_node,
8074 build_call_n (abort_fn, 1, guard_addr));
8075 CLEANUP_EH_ONLY (begin) = 1;
8077 /* Do the initialization itself. */
8078 init = add_stmt_to_compound (begin, init);
8079 init = add_stmt_to_compound
8080 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
8081 init = add_stmt_to_compound
8082 (init, build_call_n (release_fn, 1, guard_addr));
8084 else
8085 init = add_stmt_to_compound (init, set_guard (guard));
8087 /* Use atexit to register a function for destroying this static
8088 variable. */
8089 init = add_stmt_to_compound (init, register_dtor_fn (decl));
8091 finish_expr_stmt (init);
8093 if (thread_guard)
8095 finish_compound_stmt (inner_then_clause);
8096 finish_then_clause (inner_if_stmt);
8097 finish_if_stmt (inner_if_stmt);
8100 finish_compound_stmt (then_clause);
8101 finish_then_clause (if_stmt);
8102 finish_if_stmt (if_stmt);
8104 else if (CP_DECL_THREAD_LOCAL_P (decl))
8105 tls_aggregates = tree_cons (init, decl, tls_aggregates);
8106 else
8107 static_aggregates = tree_cons (init, decl, static_aggregates);
8111 /* Make TYPE a complete type based on INITIAL_VALUE.
8112 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8113 2 if there was no information (in which case assume 0 if DO_DEFAULT),
8114 3 if the initializer list is empty (in pedantic mode). */
8117 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
8119 int failure;
8120 tree type, elt_type;
8122 /* Don't get confused by a CONSTRUCTOR for some other type. */
8123 if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
8124 && !BRACE_ENCLOSED_INITIALIZER_P (initial_value)
8125 && TREE_CODE (TREE_TYPE (initial_value)) != ARRAY_TYPE)
8126 return 1;
8128 if (initial_value)
8130 unsigned HOST_WIDE_INT i;
8131 tree value;
8133 /* An array of character type can be initialized from a
8134 brace-enclosed string constant.
8136 FIXME: this code is duplicated from reshape_init. Probably
8137 we should just call reshape_init here? */
8138 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
8139 && TREE_CODE (initial_value) == CONSTRUCTOR
8140 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
8142 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
8143 tree value = (*v)[0].value;
8145 if (TREE_CODE (value) == STRING_CST
8146 && v->length () == 1)
8147 initial_value = value;
8150 /* If any of the elements are parameter packs, we can't actually
8151 complete this type now because the array size is dependent. */
8152 if (TREE_CODE (initial_value) == CONSTRUCTOR)
8154 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
8155 i, value)
8157 if (PACK_EXPANSION_P (value))
8158 return 0;
8163 failure = complete_array_type (ptype, initial_value, do_default);
8165 /* We can create the array before the element type is complete, which
8166 means that we didn't have these two bits set in the original type
8167 either. In completing the type, we are expected to propagate these
8168 bits. See also complete_type which does the same thing for arrays
8169 of fixed size. */
8170 type = *ptype;
8171 if (TYPE_DOMAIN (type))
8173 elt_type = TREE_TYPE (type);
8174 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
8175 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
8176 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
8179 return failure;
8182 /* As above, but either give an error or reject zero-size arrays, depending
8183 on COMPLAIN. */
8186 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
8187 bool do_default, tsubst_flags_t complain)
8189 int failure;
8190 bool sfinae = !(complain & tf_error);
8191 /* In SFINAE context we can't be lenient about zero-size arrays. */
8192 if (sfinae)
8193 ++pedantic;
8194 failure = cp_complete_array_type (ptype, initial_value, do_default);
8195 if (sfinae)
8196 --pedantic;
8197 if (failure)
8199 if (sfinae)
8200 /* Not an error. */;
8201 else if (failure == 1)
8202 error ("initializer fails to determine size of %qT", *ptype);
8203 else if (failure == 2)
8205 if (do_default)
8206 error ("array size missing in %qT", *ptype);
8208 else if (failure == 3)
8209 error ("zero-size array %qT", *ptype);
8210 *ptype = error_mark_node;
8212 return failure;
8215 /* Return zero if something is declared to be a member of type
8216 CTYPE when in the context of CUR_TYPE. STRING is the error
8217 message to print in that case. Otherwise, quietly return 1. */
8219 static int
8220 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
8222 if (ctype && ctype != cur_type)
8224 if (flags == DTOR_FLAG)
8225 error ("destructor for alien class %qT cannot be a member", ctype);
8226 else
8227 error ("constructor for alien class %qT cannot be a member", ctype);
8228 return 0;
8230 return 1;
8233 /* Subroutine of `grokdeclarator'. */
8235 /* Generate errors possibly applicable for a given set of specifiers.
8236 This is for ARM $7.1.2. */
8238 static void
8239 bad_specifiers (tree object,
8240 enum bad_spec_place type,
8241 int virtualp,
8242 int quals,
8243 int inlinep,
8244 int friendp,
8245 int raises)
8247 switch (type)
8249 case BSP_VAR:
8250 if (virtualp)
8251 error ("%qD declared as a %<virtual%> variable", object);
8252 if (quals)
8253 error ("%<const%> and %<volatile%> function specifiers on "
8254 "%qD invalid in variable declaration", object);
8255 break;
8256 case BSP_PARM:
8257 if (virtualp)
8258 error ("%qD declared as a %<virtual%> parameter", object);
8259 if (inlinep)
8260 error ("%qD declared as an %<inline%> parameter", object);
8261 if (quals)
8262 error ("%<const%> and %<volatile%> function specifiers on "
8263 "%qD invalid in parameter declaration", object);
8264 break;
8265 case BSP_TYPE:
8266 if (virtualp)
8267 error ("%qD declared as a %<virtual%> type", object);
8268 if (inlinep)
8269 error ("%qD declared as an %<inline%> type", object);
8270 if (quals)
8271 error ("%<const%> and %<volatile%> function specifiers on "
8272 "%qD invalid in type declaration", object);
8273 break;
8274 case BSP_FIELD:
8275 if (virtualp)
8276 error ("%qD declared as a %<virtual%> field", object);
8277 if (inlinep)
8278 error ("%qD declared as an %<inline%> field", object);
8279 if (quals)
8280 error ("%<const%> and %<volatile%> function specifiers on "
8281 "%qD invalid in field declaration", object);
8282 break;
8283 default:
8284 gcc_unreachable();
8286 if (friendp)
8287 error ("%q+D declared as a friend", object);
8288 if (raises
8289 && !flag_noexcept_type
8290 && (TREE_CODE (object) == TYPE_DECL
8291 || (!TYPE_PTRFN_P (TREE_TYPE (object))
8292 && !TYPE_REFFN_P (TREE_TYPE (object))
8293 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
8294 error ("%q+D declared with an exception specification", object);
8297 /* DECL is a member function or static data member and is presently
8298 being defined. Check that the definition is taking place in a
8299 valid namespace. */
8301 static void
8302 check_class_member_definition_namespace (tree decl)
8304 /* These checks only apply to member functions and static data
8305 members. */
8306 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
8307 /* We check for problems with specializations in pt.c in
8308 check_specialization_namespace, where we can issue better
8309 diagnostics. */
8310 if (processing_specialization)
8311 return;
8312 /* We check this in check_explicit_instantiation_namespace. */
8313 if (processing_explicit_instantiation)
8314 return;
8315 /* [class.mfct]
8317 A member function definition that appears outside of the
8318 class definition shall appear in a namespace scope enclosing
8319 the class definition.
8321 [class.static.data]
8323 The definition for a static data member shall appear in a
8324 namespace scope enclosing the member's class definition. */
8325 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
8326 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
8327 decl, DECL_CONTEXT (decl));
8330 /* Build a PARM_DECL for the "this" parameter of FN. TYPE is the
8331 METHOD_TYPE for a non-static member function; QUALS are the
8332 cv-qualifiers that apply to the function. */
8334 tree
8335 build_this_parm (tree fn, tree type, cp_cv_quals quals)
8337 tree this_type;
8338 tree qual_type;
8339 tree parm;
8340 cp_cv_quals this_quals;
8342 if (CLASS_TYPE_P (type))
8344 this_type
8345 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
8346 this_type = build_pointer_type (this_type);
8348 else
8349 this_type = type_of_this_parm (type);
8350 /* The `this' parameter is implicitly `const'; it cannot be
8351 assigned to. */
8352 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
8353 qual_type = cp_build_qualified_type (this_type, this_quals);
8354 parm = build_artificial_parm (fn, this_identifier, qual_type);
8355 cp_apply_type_quals_to_decl (this_quals, parm);
8356 return parm;
8359 /* DECL is a static member function. Complain if it was declared
8360 with function-cv-quals. */
8362 static void
8363 check_static_quals (tree decl, cp_cv_quals quals)
8365 if (quals != TYPE_UNQUALIFIED)
8366 error ("static member function %q#D declared with type qualifiers",
8367 decl);
8370 // Check that FN takes no arguments and returns bool.
8371 static void
8372 check_concept_fn (tree fn)
8374 // A constraint is nullary.
8375 if (DECL_ARGUMENTS (fn))
8376 error ("concept %q#D declared with function parameters", fn);
8378 // The declared return type of the concept shall be bool, and
8379 // it shall not be deduced from it definition.
8380 tree type = TREE_TYPE (TREE_TYPE (fn));
8381 if (is_auto (type))
8382 error ("concept %q#D declared with a deduced return type", fn);
8383 else if (type != boolean_type_node)
8384 error ("concept %q#D with non-%<bool%> return type %qT", fn, type);
8387 /* Helper function. Replace the temporary this parameter injected
8388 during cp_finish_omp_declare_simd with the real this parameter. */
8390 static tree
8391 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
8393 tree this_parm = (tree) data;
8394 if (TREE_CODE (*tp) == PARM_DECL
8395 && DECL_NAME (*tp) == this_identifier
8396 && *tp != this_parm)
8397 *tp = this_parm;
8398 else if (TYPE_P (*tp))
8399 *walk_subtrees = 0;
8400 return NULL_TREE;
8403 /* CTYPE is class type, or null if non-class.
8404 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8405 or METHOD_TYPE.
8406 DECLARATOR is the function's name.
8407 PARMS is a chain of PARM_DECLs for the function.
8408 VIRTUALP is truthvalue of whether the function is virtual or not.
8409 FLAGS are to be passed through to `grokclassfn'.
8410 QUALS are qualifiers indicating whether the function is `const'
8411 or `volatile'.
8412 RAISES is a list of exceptions that this function can raise.
8413 CHECK is 1 if we must find this method in CTYPE, 0 if we should
8414 not look, and -1 if we should not call `grokclassfn' at all.
8416 SFK is the kind of special function (if any) for the new function.
8418 Returns `NULL_TREE' if something goes wrong, after issuing
8419 applicable error messages. */
8421 static tree
8422 grokfndecl (tree ctype,
8423 tree type,
8424 tree declarator,
8425 tree parms,
8426 tree orig_declarator,
8427 tree decl_reqs,
8428 int virtualp,
8429 enum overload_flags flags,
8430 cp_cv_quals quals,
8431 cp_ref_qualifier rqual,
8432 tree raises,
8433 int check,
8434 int friendp,
8435 int publicp,
8436 int inlinep,
8437 bool deletedp,
8438 special_function_kind sfk,
8439 bool funcdef_flag,
8440 int template_count,
8441 tree in_namespace,
8442 tree* attrlist,
8443 location_t location)
8445 tree decl;
8446 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8447 tree t;
8449 // Was the concept specifier present?
8450 bool concept_p = inlinep & 4;
8452 // Concept declarations must have a corresponding definition.
8453 if (concept_p && !funcdef_flag)
8455 error ("concept %qD has no definition", declarator);
8456 return NULL_TREE;
8459 if (rqual)
8460 type = build_ref_qualified_type (type, rqual);
8461 if (raises)
8462 type = build_exception_variant (type, raises);
8464 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8466 /* Set the constraints on the declaration. */
8467 if (flag_concepts)
8469 tree tmpl_reqs = NULL_TREE;
8470 if (processing_template_decl > template_class_depth (ctype))
8471 tmpl_reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
8473 /* Adjust the required expression into a constraint. */
8474 if (decl_reqs)
8475 decl_reqs = normalize_expression (decl_reqs);
8477 tree ci = build_constraints (tmpl_reqs, decl_reqs);
8478 set_constraints (decl, ci);
8481 /* If we have an explicit location, use it, otherwise use whatever
8482 build_lang_decl used (probably input_location). */
8483 if (location != UNKNOWN_LOCATION)
8484 DECL_SOURCE_LOCATION (decl) = location;
8486 if (TREE_CODE (type) == METHOD_TYPE)
8488 tree parm = build_this_parm (decl, type, quals);
8489 DECL_CHAIN (parm) = parms;
8490 parms = parm;
8492 /* Allocate space to hold the vptr bit if needed. */
8493 SET_DECL_ALIGN (decl, MINIMUM_METHOD_BOUNDARY);
8496 DECL_ARGUMENTS (decl) = parms;
8497 for (t = parms; t; t = DECL_CHAIN (t))
8498 DECL_CONTEXT (t) = decl;
8500 /* Propagate volatile out from type to decl. */
8501 if (TYPE_VOLATILE (type))
8502 TREE_THIS_VOLATILE (decl) = 1;
8504 /* Setup decl according to sfk. */
8505 switch (sfk)
8507 case sfk_constructor:
8508 case sfk_copy_constructor:
8509 case sfk_move_constructor:
8510 DECL_CXX_CONSTRUCTOR_P (decl) = 1;
8511 DECL_NAME (decl) = ctor_identifier;
8512 break;
8513 case sfk_destructor:
8514 DECL_CXX_DESTRUCTOR_P (decl) = 1;
8515 DECL_NAME (decl) = dtor_identifier;
8516 break;
8517 default:
8518 break;
8521 if (friendp && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8523 if (funcdef_flag)
8524 error ("defining explicit specialization %qD in friend declaration",
8525 orig_declarator);
8526 else
8528 tree fns = TREE_OPERAND (orig_declarator, 0);
8529 tree args = TREE_OPERAND (orig_declarator, 1);
8531 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8533 /* Something like `template <class T> friend void f<T>()'. */
8534 error ("invalid use of template-id %qD in declaration "
8535 "of primary template",
8536 orig_declarator);
8537 return NULL_TREE;
8541 /* A friend declaration of the form friend void f<>(). Record
8542 the information in the TEMPLATE_ID_EXPR. */
8543 SET_DECL_IMPLICIT_INSTANTIATION (decl);
8545 gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
8546 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
8548 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8549 if (TREE_PURPOSE (t)
8550 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8552 error ("default arguments are not allowed in declaration "
8553 "of friend template specialization %qD",
8554 decl);
8555 return NULL_TREE;
8558 if (inlinep & 1)
8560 error ("%<inline%> is not allowed in declaration of friend "
8561 "template specialization %qD",
8562 decl);
8563 return NULL_TREE;
8568 /* If this decl has namespace scope, set that up. */
8569 if (in_namespace)
8570 set_decl_namespace (decl, in_namespace, friendp);
8571 else if (!ctype)
8572 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
8574 /* `main' and builtins have implicit 'C' linkage. */
8575 if (ctype == NULL_TREE
8576 && DECL_FILE_SCOPE_P (decl)
8577 && current_lang_name == lang_name_cplusplus
8578 && (MAIN_NAME_P (declarator)
8579 || (IDENTIFIER_LENGTH (declarator) > 10
8580 && IDENTIFIER_POINTER (declarator)[0] == '_'
8581 && IDENTIFIER_POINTER (declarator)[1] == '_'
8582 && strncmp (IDENTIFIER_POINTER (declarator)+2,
8583 "builtin_", 8) == 0)
8584 || (targetcm.cxx_implicit_extern_c
8585 && (targetcm.cxx_implicit_extern_c
8586 (IDENTIFIER_POINTER (declarator))))))
8587 SET_DECL_LANGUAGE (decl, lang_c);
8589 /* Should probably propagate const out from type to decl I bet (mrs). */
8590 if (staticp)
8592 DECL_STATIC_FUNCTION_P (decl) = 1;
8593 DECL_CONTEXT (decl) = ctype;
8596 if (deletedp)
8597 DECL_DELETED_FN (decl) = 1;
8599 if (ctype)
8601 DECL_CONTEXT (decl) = ctype;
8602 if (funcdef_flag)
8603 check_class_member_definition_namespace (decl);
8606 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8608 if (PROCESSING_REAL_TEMPLATE_DECL_P())
8609 error ("cannot declare %<::main%> to be a template");
8610 if (inlinep & 1)
8611 error ("cannot declare %<::main%> to be inline");
8612 if (inlinep & 2)
8613 error ("cannot declare %<::main%> to be %<constexpr%>");
8614 if (!publicp)
8615 error ("cannot declare %<::main%> to be static");
8616 inlinep = 0;
8617 publicp = 1;
8620 /* Members of anonymous types and local classes have no linkage; make
8621 them internal. If a typedef is made later, this will be changed. */
8622 if (ctype && (!TREE_PUBLIC (TYPE_MAIN_DECL (ctype))
8623 || decl_function_context (TYPE_MAIN_DECL (ctype))))
8624 publicp = 0;
8626 if (publicp && cxx_dialect == cxx98)
8628 /* [basic.link]: A name with no linkage (notably, the name of a class
8629 or enumeration declared in a local scope) shall not be used to
8630 declare an entity with linkage.
8632 DR 757 relaxes this restriction for C++0x. */
8633 no_linkage_error (decl);
8636 TREE_PUBLIC (decl) = publicp;
8637 if (! publicp)
8639 DECL_INTERFACE_KNOWN (decl) = 1;
8640 DECL_NOT_REALLY_EXTERN (decl) = 1;
8643 /* If the declaration was declared inline, mark it as such. */
8644 if (inlinep)
8646 DECL_DECLARED_INLINE_P (decl) = 1;
8647 if (publicp)
8648 DECL_COMDAT (decl) = 1;
8650 if (inlinep & 2)
8651 DECL_DECLARED_CONSTEXPR_P (decl) = true;
8653 // If the concept declaration specifier was found, check
8654 // that the declaration satisfies the necessary requirements.
8655 if (concept_p)
8657 DECL_DECLARED_CONCEPT_P (decl) = true;
8658 check_concept_fn (decl);
8661 DECL_EXTERNAL (decl) = 1;
8662 if (TREE_CODE (type) == FUNCTION_TYPE)
8664 if (quals || rqual)
8665 TREE_TYPE (decl) = apply_memfn_quals (TREE_TYPE (decl),
8666 TYPE_UNQUALIFIED,
8667 REF_QUAL_NONE);
8669 if (quals)
8671 error (ctype
8672 ? G_("static member function %qD cannot have cv-qualifier")
8673 : G_("non-member function %qD cannot have cv-qualifier"),
8674 decl);
8675 quals = TYPE_UNQUALIFIED;
8678 if (rqual)
8680 error (ctype
8681 ? G_("static member function %qD cannot have ref-qualifier")
8682 : G_("non-member function %qD cannot have ref-qualifier"),
8683 decl);
8684 rqual = REF_QUAL_NONE;
8688 if (deduction_guide_p (decl))
8690 if (!DECL_NAMESPACE_SCOPE_P (decl))
8692 error_at (location, "deduction guide %qD must be declared at "
8693 "namespace scope", decl);
8694 return NULL_TREE;
8696 if (funcdef_flag)
8697 error_at (location,
8698 "deduction guide %qD must not have a function body", decl);
8700 else if (IDENTIFIER_ANY_OP_P (DECL_NAME (decl))
8701 && !grok_op_properties (decl, /*complain=*/true))
8702 return NULL_TREE;
8703 else if (UDLIT_OPER_P (DECL_NAME (decl)))
8705 bool long_long_unsigned_p;
8706 bool long_double_p;
8707 const char *suffix = NULL;
8708 /* [over.literal]/6: Literal operators shall not have C linkage. */
8709 if (DECL_LANGUAGE (decl) == lang_c)
8711 error ("literal operator with C linkage");
8712 maybe_show_extern_c_location ();
8713 return NULL_TREE;
8716 if (DECL_NAMESPACE_SCOPE_P (decl))
8718 if (!check_literal_operator_args (decl, &long_long_unsigned_p,
8719 &long_double_p))
8721 error ("%qD has invalid argument list", decl);
8722 return NULL_TREE;
8725 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
8726 if (long_long_unsigned_p)
8728 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
8729 warning (0, "integer suffix %qs"
8730 " shadowed by implementation", suffix);
8732 else if (long_double_p)
8734 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
8735 warning (0, "floating point suffix %qs"
8736 " shadowed by implementation", suffix);
8739 else
8741 error ("%qD must be a non-member function", decl);
8742 return NULL_TREE;
8746 if (funcdef_flag)
8747 /* Make the init_value nonzero so pushdecl knows this is not
8748 tentative. error_mark_node is replaced later with the BLOCK. */
8749 DECL_INITIAL (decl) = error_mark_node;
8751 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
8752 TREE_NOTHROW (decl) = 1;
8754 if (flag_openmp || flag_openmp_simd || flag_cilkplus)
8756 /* Adjust "omp declare simd" attributes. */
8757 tree ods = lookup_attribute ("omp declare simd", *attrlist);
8758 if (ods)
8760 tree attr;
8761 for (attr = ods; attr;
8762 attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
8764 if (TREE_CODE (type) == METHOD_TYPE)
8765 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
8766 DECL_ARGUMENTS (decl), NULL);
8767 if (TREE_VALUE (attr) != NULL_TREE)
8769 tree cl = TREE_VALUE (TREE_VALUE (attr));
8770 cl = c_omp_declare_simd_clauses_to_numbers
8771 (DECL_ARGUMENTS (decl), cl);
8772 if (cl)
8773 TREE_VALUE (TREE_VALUE (attr)) = cl;
8774 else
8775 TREE_VALUE (attr) = NULL_TREE;
8781 /* Caller will do the rest of this. */
8782 if (check < 0)
8783 return decl;
8785 if (ctype != NULL_TREE)
8786 grokclassfn (ctype, decl, flags);
8788 /* 12.4/3 */
8789 if (cxx_dialect >= cxx11
8790 && DECL_DESTRUCTOR_P (decl)
8791 && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
8792 && !processing_template_decl)
8793 deduce_noexcept_on_destructor (decl);
8795 decl = check_explicit_specialization (orig_declarator, decl,
8796 template_count,
8797 2 * funcdef_flag +
8798 4 * (friendp != 0) +
8799 8 * concept_p);
8800 if (decl == error_mark_node)
8801 return NULL_TREE;
8803 if (DECL_STATIC_FUNCTION_P (decl))
8804 check_static_quals (decl, quals);
8806 if (attrlist)
8808 cplus_decl_attributes (&decl, *attrlist, 0);
8809 *attrlist = NULL_TREE;
8812 /* Check main's type after attributes have been applied. */
8813 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8815 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
8816 integer_type_node))
8818 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
8819 tree newtype;
8820 error ("%<::main%> must return %<int%>");
8821 newtype = build_function_type (integer_type_node, oldtypeargs);
8822 TREE_TYPE (decl) = newtype;
8824 if (warn_main)
8825 check_main_parameter_types (decl);
8828 if (ctype != NULL_TREE && check)
8830 tree old_decl = check_classfn (ctype, decl,
8831 (processing_template_decl
8832 > template_class_depth (ctype))
8833 ? current_template_parms
8834 : NULL_TREE);
8836 if (old_decl == error_mark_node)
8837 return NULL_TREE;
8839 if (old_decl)
8841 tree ok;
8842 tree pushed_scope;
8844 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
8845 /* Because grokfndecl is always supposed to return a
8846 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
8847 here. We depend on our callers to figure out that its
8848 really a template that's being returned. */
8849 old_decl = DECL_TEMPLATE_RESULT (old_decl);
8851 if (DECL_STATIC_FUNCTION_P (old_decl)
8852 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8854 /* Remove the `this' parm added by grokclassfn. */
8855 revert_static_member_fn (decl);
8856 check_static_quals (decl, quals);
8858 if (DECL_ARTIFICIAL (old_decl))
8860 error ("definition of implicitly-declared %qD", old_decl);
8861 return NULL_TREE;
8863 else if (DECL_DEFAULTED_FN (old_decl))
8865 error ("definition of explicitly-defaulted %q+D", decl);
8866 inform (DECL_SOURCE_LOCATION (old_decl),
8867 "%q#D explicitly defaulted here", old_decl);
8868 return NULL_TREE;
8871 /* Since we've smashed OLD_DECL to its
8872 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
8873 if (TREE_CODE (decl) == TEMPLATE_DECL)
8874 decl = DECL_TEMPLATE_RESULT (decl);
8876 /* Attempt to merge the declarations. This can fail, in
8877 the case of some invalid specialization declarations. */
8878 pushed_scope = push_scope (ctype);
8879 ok = duplicate_decls (decl, old_decl, friendp);
8880 if (pushed_scope)
8881 pop_scope (pushed_scope);
8882 if (!ok)
8884 error ("no %q#D member function declared in class %qT",
8885 decl, ctype);
8886 return NULL_TREE;
8888 if (ok == error_mark_node)
8889 return NULL_TREE;
8890 return old_decl;
8894 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
8895 return NULL_TREE;
8897 if (ctype == NULL_TREE || check)
8898 return decl;
8900 if (virtualp)
8901 DECL_VIRTUAL_P (decl) = 1;
8903 return decl;
8906 /* decl is a FUNCTION_DECL.
8907 specifiers are the parsed virt-specifiers.
8909 Set flags to reflect the virt-specifiers.
8911 Returns decl. */
8913 static tree
8914 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
8916 if (decl == NULL_TREE)
8917 return decl;
8918 if (specifiers & VIRT_SPEC_OVERRIDE)
8919 DECL_OVERRIDE_P (decl) = 1;
8920 if (specifiers & VIRT_SPEC_FINAL)
8921 DECL_FINAL_P (decl) = 1;
8922 return decl;
8925 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
8926 the linkage that DECL will receive in the object file. */
8928 static void
8929 set_linkage_for_static_data_member (tree decl)
8931 /* A static data member always has static storage duration and
8932 external linkage. Note that static data members are forbidden in
8933 local classes -- the only situation in which a class has
8934 non-external linkage. */
8935 TREE_PUBLIC (decl) = 1;
8936 TREE_STATIC (decl) = 1;
8937 /* For non-template classes, static data members are always put
8938 out in exactly those files where they are defined, just as
8939 with ordinary namespace-scope variables. */
8940 if (!processing_template_decl)
8941 DECL_INTERFACE_KNOWN (decl) = 1;
8944 /* Create a VAR_DECL named NAME with the indicated TYPE.
8946 If SCOPE is non-NULL, it is the class type or namespace containing
8947 the variable. If SCOPE is NULL, the variable should is created in
8948 the innermost enclosing scope. */
8950 static tree
8951 grokvardecl (tree type,
8952 tree name,
8953 tree orig_declarator,
8954 const cp_decl_specifier_seq *declspecs,
8955 int initialized,
8956 int type_quals,
8957 int inlinep,
8958 bool conceptp,
8959 int template_count,
8960 tree scope)
8962 tree decl;
8963 tree explicit_scope;
8965 gcc_assert (!name || identifier_p (name));
8967 bool constp = (type_quals & TYPE_QUAL_CONST) != 0;
8968 bool volatilep = (type_quals & TYPE_QUAL_VOLATILE) != 0;
8970 /* Compute the scope in which to place the variable, but remember
8971 whether or not that scope was explicitly specified by the user. */
8972 explicit_scope = scope;
8973 if (!scope)
8975 /* An explicit "extern" specifier indicates a namespace-scope
8976 variable. */
8977 if (declspecs->storage_class == sc_extern)
8978 scope = current_decl_namespace ();
8979 else if (!at_function_scope_p ())
8980 scope = current_scope ();
8983 if (scope
8984 && (/* If the variable is a namespace-scope variable declared in a
8985 template, we need DECL_LANG_SPECIFIC. */
8986 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
8987 /* Similarly for namespace-scope variables with language linkage
8988 other than C++. */
8989 || (TREE_CODE (scope) == NAMESPACE_DECL
8990 && current_lang_name != lang_name_cplusplus)
8991 /* Similarly for static data members. */
8992 || TYPE_P (scope)
8993 /* Similarly for explicit specializations. */
8994 || (orig_declarator
8995 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
8996 decl = build_lang_decl (VAR_DECL, name, type);
8997 else
8998 decl = build_decl (input_location, VAR_DECL, name, type);
9000 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
9001 set_decl_namespace (decl, explicit_scope, 0);
9002 else
9003 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
9005 if (declspecs->storage_class == sc_extern)
9007 DECL_THIS_EXTERN (decl) = 1;
9008 DECL_EXTERNAL (decl) = !initialized;
9011 if (DECL_CLASS_SCOPE_P (decl))
9013 set_linkage_for_static_data_member (decl);
9014 /* This function is only called with out-of-class definitions. */
9015 DECL_EXTERNAL (decl) = 0;
9016 check_class_member_definition_namespace (decl);
9018 /* At top level, either `static' or no s.c. makes a definition
9019 (perhaps tentative), and absence of `static' makes it public. */
9020 else if (toplevel_bindings_p ())
9022 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
9023 && (DECL_THIS_EXTERN (decl)
9024 || ! constp
9025 || volatilep
9026 || inlinep));
9027 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9029 /* Not at top level, only `static' makes a static definition. */
9030 else
9032 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
9033 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9036 if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
9038 if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
9040 CP_DECL_THREAD_LOCAL_P (decl) = true;
9041 if (!processing_template_decl)
9042 set_decl_tls_model (decl, decl_default_tls_model (decl));
9044 if (declspecs->gnu_thread_keyword_p)
9045 SET_DECL_GNU_TLS_P (decl);
9048 /* If the type of the decl has no linkage, make sure that we'll
9049 notice that in mark_used. */
9050 if (cxx_dialect > cxx98
9051 && decl_linkage (decl) != lk_none
9052 && DECL_LANG_SPECIFIC (decl) == NULL
9053 && !DECL_EXTERN_C_P (decl)
9054 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
9055 retrofit_lang_decl (decl);
9057 if (TREE_PUBLIC (decl))
9059 /* [basic.link]: A name with no linkage (notably, the name of a class
9060 or enumeration declared in a local scope) shall not be used to
9061 declare an entity with linkage.
9063 DR 757 relaxes this restriction for C++0x. */
9064 if (cxx_dialect < cxx11)
9065 no_linkage_error (decl);
9067 else
9068 DECL_INTERFACE_KNOWN (decl) = 1;
9070 if (DECL_NAME (decl)
9071 && MAIN_NAME_P (DECL_NAME (decl))
9072 && scope == global_namespace)
9073 error ("cannot declare %<::main%> to be a global variable");
9075 /* Check that the variable can be safely declared as a concept.
9076 Note that this also forbids explicit specializations. */
9077 if (conceptp)
9079 if (!processing_template_decl)
9081 error ("a non-template variable cannot be %<concept%>");
9082 return NULL_TREE;
9084 else
9085 DECL_DECLARED_CONCEPT_P (decl) = true;
9086 if (!same_type_ignoring_top_level_qualifiers_p (type, boolean_type_node))
9087 error_at (declspecs->locations[ds_type_spec],
9088 "concept must have type %<bool%>");
9090 else if (flag_concepts
9091 && processing_template_decl > template_class_depth (scope))
9093 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
9094 tree ci = build_constraints (reqs, NULL_TREE);
9095 set_constraints (decl, ci);
9098 // Handle explicit specializations and instantiations of variable templates.
9099 if (orig_declarator)
9100 decl = check_explicit_specialization (orig_declarator, decl,
9101 template_count, conceptp * 8);
9103 return decl != error_mark_node ? decl : NULL_TREE;
9106 /* Create and return a canonical pointer to member function type, for
9107 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
9109 tree
9110 build_ptrmemfunc_type (tree type)
9112 tree field, fields;
9113 tree t;
9115 if (type == error_mark_node)
9116 return type;
9118 /* Make sure that we always have the unqualified pointer-to-member
9119 type first. */
9120 if (cp_cv_quals quals = cp_type_quals (type))
9122 tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9123 return cp_build_qualified_type (unqual, quals);
9126 /* If a canonical type already exists for this type, use it. We use
9127 this method instead of type_hash_canon, because it only does a
9128 simple equality check on the list of field members. */
9130 t = TYPE_PTRMEMFUNC_TYPE (type);
9131 if (t)
9132 return t;
9134 t = make_node (RECORD_TYPE);
9136 /* Let the front end know this is a pointer to member function. */
9137 TYPE_PTRMEMFUNC_FLAG (t) = 1;
9139 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
9140 fields = field;
9142 field = build_decl (input_location, FIELD_DECL, delta_identifier,
9143 delta_type_node);
9144 DECL_CHAIN (field) = fields;
9145 fields = field;
9147 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
9149 /* Zap out the name so that the back end will give us the debugging
9150 information for this anonymous RECORD_TYPE. */
9151 TYPE_NAME (t) = NULL_TREE;
9153 /* Cache this pointer-to-member type so that we can find it again
9154 later. */
9155 TYPE_PTRMEMFUNC_TYPE (type) = t;
9157 if (TYPE_STRUCTURAL_EQUALITY_P (type))
9158 SET_TYPE_STRUCTURAL_EQUALITY (t);
9159 else if (TYPE_CANONICAL (type) != type)
9160 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
9162 return t;
9165 /* Create and return a pointer to data member type. */
9167 tree
9168 build_ptrmem_type (tree class_type, tree member_type)
9170 if (TREE_CODE (member_type) == METHOD_TYPE)
9172 cp_cv_quals quals = type_memfn_quals (member_type);
9173 cp_ref_qualifier rqual = type_memfn_rqual (member_type);
9174 member_type = build_memfn_type (member_type, class_type, quals, rqual);
9175 return build_ptrmemfunc_type (build_pointer_type (member_type));
9177 else
9179 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
9180 return build_offset_type (class_type, member_type);
9184 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9185 Check to see that the definition is valid. Issue appropriate error
9186 messages. Return 1 if the definition is particularly bad, or 0
9187 otherwise. */
9189 static int
9190 check_static_variable_definition (tree decl, tree type)
9192 /* Avoid redundant diagnostics on out-of-class definitions. */
9193 if (!current_class_type || !TYPE_BEING_DEFINED (current_class_type))
9194 return 0;
9195 /* Can't check yet if we don't know the type. */
9196 if (dependent_type_p (type))
9197 return 0;
9198 /* If DECL is declared constexpr, we'll do the appropriate checks
9199 in check_initializer. Similarly for inline static data members. */
9200 if (DECL_P (decl)
9201 && (DECL_DECLARED_CONSTEXPR_P (decl)
9202 || DECL_VAR_DECLARED_INLINE_P (decl)))
9203 return 0;
9204 else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9206 if (!COMPLETE_TYPE_P (type))
9207 error_at (DECL_SOURCE_LOCATION (decl),
9208 "in-class initialization of static data member %q#D of "
9209 "incomplete type", decl);
9210 else if (literal_type_p (type))
9211 permerror (DECL_SOURCE_LOCATION (decl),
9212 "%<constexpr%> needed for in-class initialization of "
9213 "static data member %q#D of non-integral type", decl);
9214 else
9215 error_at (DECL_SOURCE_LOCATION (decl),
9216 "in-class initialization of static data member %q#D of "
9217 "non-literal type", decl);
9218 return 1;
9221 /* Motion 10 at San Diego: If a static const integral data member is
9222 initialized with an integral constant expression, the initializer
9223 may appear either in the declaration (within the class), or in
9224 the definition, but not both. If it appears in the class, the
9225 member is a member constant. The file-scope definition is always
9226 required. */
9227 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
9229 error_at (DECL_SOURCE_LOCATION (decl),
9230 "invalid in-class initialization of static data member "
9231 "of non-integral type %qT",
9232 type);
9233 return 1;
9235 else if (!CP_TYPE_CONST_P (type))
9236 error_at (DECL_SOURCE_LOCATION (decl),
9237 "ISO C++ forbids in-class initialization of non-const "
9238 "static member %qD",
9239 decl);
9240 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9241 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
9242 "ISO C++ forbids initialization of member constant "
9243 "%qD of non-integral type %qT", decl, type);
9245 return 0;
9248 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
9249 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
9250 expressions out into temporary variables so that walk_tree doesn't
9251 step into them (c++/15764). */
9253 static tree
9254 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
9256 hash_set<tree> *pset = (hash_set<tree> *)data;
9257 tree expr = *expr_p;
9258 if (TREE_CODE (expr) == SAVE_EXPR)
9260 tree op = TREE_OPERAND (expr, 0);
9261 cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
9262 if (TREE_SIDE_EFFECTS (op))
9263 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
9264 *walk_subtrees = 0;
9266 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
9267 *walk_subtrees = 0;
9268 return NULL;
9271 /* Entry point for the above. */
9273 static void
9274 stabilize_vla_size (tree size)
9276 hash_set<tree> pset;
9277 /* Break out any function calls into temporary variables. */
9278 cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
9281 /* Reduce a SIZEOF_EXPR to its value. */
9283 tree
9284 fold_sizeof_expr (tree t)
9286 tree r;
9287 if (SIZEOF_EXPR_TYPE_P (t))
9288 r = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (t, 0)),
9289 SIZEOF_EXPR, false);
9290 else if (TYPE_P (TREE_OPERAND (t, 0)))
9291 r = cxx_sizeof_or_alignof_type (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9292 false);
9293 else
9294 r = cxx_sizeof_or_alignof_expr (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9295 false);
9296 if (r == error_mark_node)
9297 r = size_one_node;
9298 return r;
9301 /* Given the SIZE (i.e., number of elements) in an array, compute
9302 an appropriate index type for the array. If non-NULL, NAME is
9303 the name of the entity being declared. */
9305 tree
9306 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
9308 tree itype;
9309 tree osize = size;
9311 if (error_operand_p (size))
9312 return error_mark_node;
9314 if (!type_dependent_expression_p (size))
9316 tree type = TREE_TYPE (size);
9318 size = mark_rvalue_use (size);
9320 if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
9321 && TREE_SIDE_EFFECTS (size))
9322 /* In C++98, we mark a non-constant array bound with a magic
9323 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
9324 else
9326 size = instantiate_non_dependent_expr_sfinae (size, complain);
9328 if (CLASS_TYPE_P (type)
9329 && CLASSTYPE_LITERAL_P (type))
9331 size = build_expr_type_conversion (WANT_INT, size, true);
9332 if (!size)
9334 if (!(complain & tf_error))
9335 return error_mark_node;
9336 if (name)
9337 error ("size of array %qD has non-integral type %qT",
9338 name, type);
9339 else
9340 error ("size of array has non-integral type %qT", type);
9341 size = integer_one_node;
9343 if (size == error_mark_node)
9344 return error_mark_node;
9345 type = TREE_TYPE (size);
9348 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
9349 size = maybe_constant_value (size);
9351 if (!TREE_CONSTANT (size))
9352 size = osize;
9355 if (error_operand_p (size))
9356 return error_mark_node;
9358 /* The array bound must be an integer type. */
9359 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
9361 if (!(complain & tf_error))
9362 return error_mark_node;
9363 if (name)
9364 error ("size of array %qD has non-integral type %qT", name, type);
9365 else
9366 error ("size of array has non-integral type %qT", type);
9367 size = integer_one_node;
9368 type = TREE_TYPE (size);
9372 /* A type is dependent if it is...an array type constructed from any
9373 dependent type or whose size is specified by a constant expression
9374 that is value-dependent. */
9375 /* We can only call value_dependent_expression_p on integral constant
9376 expressions; treat non-constant expressions as dependent, too. */
9377 if (processing_template_decl
9378 && (type_dependent_expression_p (size)
9379 || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
9381 /* We cannot do any checking for a SIZE that isn't known to be
9382 constant. Just build the index type and mark that it requires
9383 structural equality checks. */
9384 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
9385 size, size_one_node));
9386 TYPE_DEPENDENT_P (itype) = 1;
9387 TYPE_DEPENDENT_P_VALID (itype) = 1;
9388 SET_TYPE_STRUCTURAL_EQUALITY (itype);
9389 return itype;
9392 if (TREE_CODE (size) != INTEGER_CST)
9394 tree folded = cp_fully_fold (size);
9395 if (TREE_CODE (folded) == INTEGER_CST)
9396 pedwarn (location_of (size), OPT_Wpedantic,
9397 "size of array is not an integral constant-expression");
9398 /* Use the folded result for VLAs, too; it will have resolved
9399 SIZEOF_EXPR. */
9400 size = folded;
9403 /* Normally, the array-bound will be a constant. */
9404 if (TREE_CODE (size) == INTEGER_CST)
9406 /* Check to see if the array bound overflowed. Make that an
9407 error, no matter how generous we're being. */
9408 constant_expression_error (size);
9410 /* An array must have a positive number of elements. */
9411 if (tree_int_cst_lt (size, integer_zero_node))
9413 if (!(complain & tf_error))
9414 return error_mark_node;
9415 if (name)
9416 error ("size of array %qD is negative", name);
9417 else
9418 error ("size of array is negative");
9419 size = integer_one_node;
9421 /* As an extension we allow zero-sized arrays. */
9422 else if (integer_zerop (size))
9424 if (!(complain & tf_error))
9425 /* We must fail if performing argument deduction (as
9426 indicated by the state of complain), so that
9427 another substitution can be found. */
9428 return error_mark_node;
9429 else if (in_system_header_at (input_location))
9430 /* Allow them in system headers because glibc uses them. */;
9431 else if (name)
9432 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
9433 else
9434 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
9437 else if (TREE_CONSTANT (size)
9438 /* We don't allow VLAs at non-function scopes, or during
9439 tentative template substitution. */
9440 || !at_function_scope_p ()
9441 || !(complain & tf_error))
9443 if (!(complain & tf_error))
9444 return error_mark_node;
9445 /* `(int) &fn' is not a valid array bound. */
9446 if (name)
9447 error ("size of array %qD is not an integral constant-expression",
9448 name);
9449 else
9450 error ("size of array is not an integral constant-expression");
9451 size = integer_one_node;
9453 else if (pedantic && warn_vla != 0)
9455 if (name)
9456 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
9457 else
9458 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
9460 else if (warn_vla > 0)
9462 if (name)
9463 warning (OPT_Wvla,
9464 "variable length array %qD is used", name);
9465 else
9466 warning (OPT_Wvla,
9467 "variable length array is used");
9470 if (processing_template_decl && !TREE_CONSTANT (size))
9471 /* A variable sized array. */
9472 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
9473 else
9475 /* Compute the index of the largest element in the array. It is
9476 one less than the number of elements in the array. We save
9477 and restore PROCESSING_TEMPLATE_DECL so that computations in
9478 cp_build_binary_op will be appropriately folded. */
9480 processing_template_decl_sentinel s;
9481 itype = cp_build_binary_op (input_location,
9482 MINUS_EXPR,
9483 cp_convert (ssizetype, size, complain),
9484 cp_convert (ssizetype, integer_one_node,
9485 complain),
9486 complain);
9487 itype = maybe_constant_value (itype);
9490 if (!TREE_CONSTANT (itype))
9492 /* A variable sized array. */
9493 itype = variable_size (itype);
9495 stabilize_vla_size (itype);
9497 if (sanitize_flags_p (SANITIZE_VLA)
9498 && current_function_decl != NULL_TREE)
9500 /* We have to add 1 -- in the ubsan routine we generate
9501 LE_EXPR rather than LT_EXPR. */
9502 tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
9503 build_one_cst (TREE_TYPE (itype)));
9504 t = ubsan_instrument_vla (input_location, t);
9505 finish_expr_stmt (t);
9508 /* Make sure that there was no overflow when creating to a signed
9509 index type. (For example, on a 32-bit machine, an array with
9510 size 2^32 - 1 is too big.) */
9511 else if (TREE_CODE (itype) == INTEGER_CST
9512 && TREE_OVERFLOW (itype))
9514 if (!(complain & tf_error))
9515 return error_mark_node;
9516 error ("overflow in array dimension");
9517 TREE_OVERFLOW (itype) = 0;
9521 /* Create and return the appropriate index type. */
9522 itype = build_index_type (itype);
9524 /* If the index type were dependent, we would have returned early, so
9525 remember that it isn't. */
9526 TYPE_DEPENDENT_P (itype) = 0;
9527 TYPE_DEPENDENT_P_VALID (itype) = 1;
9528 return itype;
9531 /* Returns the scope (if any) in which the entity declared by
9532 DECLARATOR will be located. If the entity was declared with an
9533 unqualified name, NULL_TREE is returned. */
9535 tree
9536 get_scope_of_declarator (const cp_declarator *declarator)
9538 while (declarator && declarator->kind != cdk_id)
9539 declarator = declarator->declarator;
9541 /* If the declarator-id is a SCOPE_REF, the scope in which the
9542 declaration occurs is the first operand. */
9543 if (declarator
9544 && declarator->u.id.qualifying_scope)
9545 return declarator->u.id.qualifying_scope;
9547 /* Otherwise, the declarator is not a qualified name; the entity will
9548 be declared in the current scope. */
9549 return NULL_TREE;
9552 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
9553 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9554 with this type. */
9556 static tree
9557 create_array_type_for_decl (tree name, tree type, tree size)
9559 tree itype = NULL_TREE;
9561 /* If things have already gone awry, bail now. */
9562 if (type == error_mark_node || size == error_mark_node)
9563 return error_mark_node;
9565 /* 8.3.4/1: If the type of the identifier of D contains the auto
9566 type-specifier, the program is ill-formed. */
9567 if (type_uses_auto (type))
9569 error ("%qD declared as array of %qT", name, type);
9570 return error_mark_node;
9573 /* If there are some types which cannot be array elements,
9574 issue an error-message and return. */
9575 switch (TREE_CODE (type))
9577 case VOID_TYPE:
9578 if (name)
9579 error ("declaration of %qD as array of void", name);
9580 else
9581 error ("creating array of void");
9582 return error_mark_node;
9584 case FUNCTION_TYPE:
9585 if (name)
9586 error ("declaration of %qD as array of functions", name);
9587 else
9588 error ("creating array of functions");
9589 return error_mark_node;
9591 case REFERENCE_TYPE:
9592 if (name)
9593 error ("declaration of %qD as array of references", name);
9594 else
9595 error ("creating array of references");
9596 return error_mark_node;
9598 case METHOD_TYPE:
9599 if (name)
9600 error ("declaration of %qD as array of function members", name);
9601 else
9602 error ("creating array of function members");
9603 return error_mark_node;
9605 default:
9606 break;
9609 /* [dcl.array]
9611 The constant expressions that specify the bounds of the arrays
9612 can be omitted only for the first member of the sequence. */
9613 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9615 if (name)
9616 error ("declaration of %qD as multidimensional array must "
9617 "have bounds for all dimensions except the first",
9618 name);
9619 else
9620 error ("multidimensional array must have bounds for all "
9621 "dimensions except the first");
9623 return error_mark_node;
9626 /* Figure out the index type for the array. */
9627 if (size)
9628 itype = compute_array_index_type (name, size, tf_warning_or_error);
9630 /* [dcl.array]
9631 T is called the array element type; this type shall not be [...] an
9632 abstract class type. */
9633 abstract_virtuals_error (name, type);
9635 return build_cplus_array_type (type, itype);
9638 /* Returns the smallest location != UNKNOWN_LOCATION among the
9639 three stored in LOCATIONS[ds_const], LOCATIONS[ds_volatile],
9640 and LOCATIONS[ds_restrict]. */
9642 static location_t
9643 smallest_type_quals_location (int type_quals, const location_t* locations)
9645 location_t loc = UNKNOWN_LOCATION;
9647 if (type_quals & TYPE_QUAL_CONST)
9648 loc = locations[ds_const];
9650 if ((type_quals & TYPE_QUAL_VOLATILE)
9651 && (loc == UNKNOWN_LOCATION || locations[ds_volatile] < loc))
9652 loc = locations[ds_volatile];
9654 if ((type_quals & TYPE_QUAL_RESTRICT)
9655 && (loc == UNKNOWN_LOCATION || locations[ds_restrict] < loc))
9656 loc = locations[ds_restrict];
9658 return loc;
9661 /* Check that it's OK to declare a function with the indicated TYPE
9662 and TYPE_QUALS. SFK indicates the kind of special function (if any)
9663 that this function is. OPTYPE is the type given in a conversion
9664 operator declaration, or the class type for a constructor/destructor.
9665 Returns the actual return type of the function; that may be different
9666 than TYPE if an error occurs, or for certain special functions. */
9668 static tree
9669 check_special_function_return_type (special_function_kind sfk,
9670 tree type,
9671 tree optype,
9672 int type_quals,
9673 const location_t* locations)
9675 switch (sfk)
9677 case sfk_constructor:
9678 if (type)
9679 error ("return type specification for constructor invalid");
9680 else if (type_quals != TYPE_UNQUALIFIED)
9681 error_at (smallest_type_quals_location (type_quals, locations),
9682 "qualifiers are not allowed on constructor declaration");
9684 if (targetm.cxx.cdtor_returns_this ())
9685 type = build_pointer_type (optype);
9686 else
9687 type = void_type_node;
9688 break;
9690 case sfk_destructor:
9691 if (type)
9692 error ("return type specification for destructor invalid");
9693 else if (type_quals != TYPE_UNQUALIFIED)
9694 error_at (smallest_type_quals_location (type_quals, locations),
9695 "qualifiers are not allowed on destructor declaration");
9697 /* We can't use the proper return type here because we run into
9698 problems with ambiguous bases and covariant returns. */
9699 if (targetm.cxx.cdtor_returns_this ())
9700 type = build_pointer_type (void_type_node);
9701 else
9702 type = void_type_node;
9703 break;
9705 case sfk_conversion:
9706 if (type)
9707 error ("return type specified for %<operator %T%>", optype);
9708 else if (type_quals != TYPE_UNQUALIFIED)
9709 error_at (smallest_type_quals_location (type_quals, locations),
9710 "qualifiers are not allowed on declaration of "
9711 "%<operator %T%>", optype);
9713 type = optype;
9714 break;
9716 case sfk_deduction_guide:
9717 if (type)
9718 error ("return type specified for deduction guide");
9719 else if (type_quals != TYPE_UNQUALIFIED)
9720 error_at (smallest_type_quals_location (type_quals, locations),
9721 "qualifiers are not allowed on declaration of "
9722 "deduction guide");
9723 type = make_template_placeholder (CLASSTYPE_TI_TEMPLATE (optype));
9724 for (int i = 0; i < ds_last; ++i)
9725 if (i != ds_explicit && locations[i])
9726 error_at (locations[i],
9727 "decl-specifier in declaration of deduction guide");
9728 break;
9730 default:
9731 gcc_unreachable ();
9734 return type;
9737 /* A variable or data member (whose unqualified name is IDENTIFIER)
9738 has been declared with the indicated TYPE. If the TYPE is not
9739 acceptable, issue an error message and return a type to use for
9740 error-recovery purposes. */
9742 tree
9743 check_var_type (tree identifier, tree type)
9745 if (VOID_TYPE_P (type))
9747 if (!identifier)
9748 error ("unnamed variable or field declared void");
9749 else if (identifier_p (identifier))
9751 gcc_assert (!IDENTIFIER_ANY_OP_P (identifier));
9752 error ("variable or field %qE declared void", identifier);
9754 else
9755 error ("variable or field declared void");
9756 type = error_mark_node;
9759 return type;
9762 /* Handle declaring DECL as an inline variable. */
9764 static void
9765 mark_inline_variable (tree decl)
9767 bool inlinep = true;
9768 if (! toplevel_bindings_p ())
9770 error ("%<inline%> specifier invalid for variable "
9771 "%qD declared at block scope", decl);
9772 inlinep = false;
9774 else if (cxx_dialect < cxx17)
9775 pedwarn (DECL_SOURCE_LOCATION (decl), 0,
9776 "inline variables are only available "
9777 "with -std=c++17 or -std=gnu++17");
9778 if (inlinep)
9780 retrofit_lang_decl (decl);
9781 SET_DECL_VAR_DECLARED_INLINE_P (decl);
9786 /* Assign a typedef-given name to a class or enumeration type declared
9787 as anonymous at first. This was split out of grokdeclarator
9788 because it is also used in libcc1. */
9790 void
9791 name_unnamed_type (tree type, tree decl)
9793 gcc_assert (TYPE_UNNAMED_P (type));
9795 /* Replace the anonymous name with the real name everywhere. */
9796 for (tree t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
9798 if (anon_aggrname_p (TYPE_IDENTIFIER (t)))
9799 /* We do not rename the debug info representing the
9800 unnamed tagged type because the standard says in
9801 [dcl.typedef] that the naming applies only for
9802 linkage purposes. */
9803 /*debug_hooks->set_name (t, decl);*/
9804 TYPE_NAME (t) = decl;
9807 if (TYPE_LANG_SPECIFIC (type))
9808 TYPE_WAS_UNNAMED (type) = 1;
9810 /* If this is a typedef within a template class, the nested
9811 type is a (non-primary) template. The name for the
9812 template needs updating as well. */
9813 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
9814 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
9815 = TYPE_IDENTIFIER (type);
9817 /* Adjust linkage now that we aren't unnamed anymore. */
9818 reset_type_linkage (type);
9820 /* FIXME remangle member functions; member functions of a
9821 type with external linkage have external linkage. */
9823 /* Check that our job is done, and that it would fail if we
9824 attempted to do it again. */
9825 gcc_assert (!TYPE_UNNAMED_P (type));
9828 /* Given declspecs and a declarator (abstract or otherwise), determine
9829 the name and type of the object declared and construct a DECL node
9830 for it.
9832 DECLSPECS points to the representation of declaration-specifier
9833 sequence that precedes declarator.
9835 DECL_CONTEXT says which syntactic context this declaration is in:
9836 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9837 FUNCDEF for a function definition. Like NORMAL but a few different
9838 error messages in each case. Return value may be zero meaning
9839 this definition is too screwy to try to parse.
9840 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
9841 handle member functions (which have FIELD context).
9842 Return value may be zero meaning this definition is too screwy to
9843 try to parse.
9844 PARM for a parameter declaration (either within a function prototype
9845 or before a function body). Make a PARM_DECL, or return void_type_node.
9846 TPARM for a template parameter declaration.
9847 CATCHPARM for a parameter declaration before a catch clause.
9848 TYPENAME if for a typename (in a cast or sizeof).
9849 Don't make a DECL node; just return the ..._TYPE node.
9850 FIELD for a struct or union field; make a FIELD_DECL.
9851 BITFIELD for a field with specified width.
9853 INITIALIZED is as for start_decl.
9855 ATTRLIST is a pointer to the list of attributes, which may be NULL
9856 if there are none; *ATTRLIST may be modified if attributes from inside
9857 the declarator should be applied to the declaration.
9859 When this function is called, scoping variables (such as
9860 CURRENT_CLASS_TYPE) should reflect the scope in which the
9861 declaration occurs, not the scope in which the new declaration will
9862 be placed. For example, on:
9864 void S::f() { ... }
9866 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
9867 should not be `S'.
9869 Returns a DECL (if a declarator is present), a TYPE (if there is no
9870 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
9871 error occurs. */
9873 tree
9874 grokdeclarator (const cp_declarator *declarator,
9875 cp_decl_specifier_seq *declspecs,
9876 enum decl_context decl_context,
9877 int initialized,
9878 tree* attrlist)
9880 tree type = NULL_TREE;
9881 int longlong = 0;
9882 int explicit_intN = 0;
9883 int virtualp, explicitp, friendp, inlinep, staticp;
9884 int explicit_int = 0;
9885 int explicit_char = 0;
9886 int defaulted_int = 0;
9888 tree typedef_decl = NULL_TREE;
9889 const char *name = NULL;
9890 tree typedef_type = NULL_TREE;
9891 /* True if this declarator is a function definition. */
9892 bool funcdef_flag = false;
9893 cp_declarator_kind innermost_code = cdk_error;
9894 int bitfield = 0;
9895 #if 0
9896 /* See the code below that used this. */
9897 tree decl_attr = NULL_TREE;
9898 #endif
9900 /* Keep track of what sort of function is being processed
9901 so that we can warn about default return values, or explicit
9902 return values which do not match prescribed defaults. */
9903 special_function_kind sfk = sfk_none;
9905 tree dname = NULL_TREE;
9906 tree ctor_return_type = NULL_TREE;
9907 enum overload_flags flags = NO_SPECIAL;
9908 /* cv-qualifiers that apply to the declarator, for a declaration of
9909 a member function. */
9910 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
9911 /* virt-specifiers that apply to the declarator, for a declaration of
9912 a member function. */
9913 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
9914 /* ref-qualifier that applies to the declarator, for a declaration of
9915 a member function. */
9916 cp_ref_qualifier rqual = REF_QUAL_NONE;
9917 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
9918 int type_quals = TYPE_UNQUALIFIED;
9919 tree raises = NULL_TREE;
9920 int template_count = 0;
9921 tree returned_attrs = NULL_TREE;
9922 tree parms = NULL_TREE;
9923 const cp_declarator *id_declarator;
9924 /* The unqualified name of the declarator; either an
9925 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
9926 tree unqualified_id;
9927 /* The class type, if any, in which this entity is located,
9928 or NULL_TREE if none. Note that this value may be different from
9929 the current class type; for example if an attempt is made to declare
9930 "A::f" inside "B", this value will be "A". */
9931 tree ctype = current_class_type;
9932 /* The NAMESPACE_DECL for the namespace in which this entity is
9933 located. If an unqualified name is used to declare the entity,
9934 this value will be NULL_TREE, even if the entity is located at
9935 namespace scope. */
9936 tree in_namespace = NULL_TREE;
9937 cp_storage_class storage_class;
9938 bool unsigned_p, signed_p, short_p, long_p, thread_p;
9939 bool type_was_error_mark_node = false;
9940 bool parameter_pack_p = declarator ? declarator->parameter_pack_p : false;
9941 bool template_type_arg = false;
9942 bool template_parm_flag = false;
9943 bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
9944 bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
9945 bool late_return_type_p = false;
9946 bool array_parameter_p = false;
9947 source_location saved_loc = input_location;
9948 tree reqs = NULL_TREE;
9950 signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
9951 unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
9952 short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
9953 long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
9954 longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
9955 explicit_intN = declspecs->explicit_intN_p;
9956 thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
9958 // Was concept_p specified? Note that ds_concept
9959 // implies ds_constexpr!
9960 bool concept_p = decl_spec_seq_has_spec_p (declspecs, ds_concept);
9961 if (concept_p)
9962 constexpr_p = true;
9964 if (decl_spec_seq_has_spec_p (declspecs, ds_const))
9965 type_quals |= TYPE_QUAL_CONST;
9966 if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
9967 type_quals |= TYPE_QUAL_VOLATILE;
9968 if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
9969 type_quals |= TYPE_QUAL_RESTRICT;
9971 if (decl_context == FUNCDEF)
9972 funcdef_flag = true, decl_context = NORMAL;
9973 else if (decl_context == MEMFUNCDEF)
9974 funcdef_flag = true, decl_context = FIELD;
9975 else if (decl_context == BITFIELD)
9976 bitfield = 1, decl_context = FIELD;
9977 else if (decl_context == TEMPLATE_TYPE_ARG)
9978 template_type_arg = true, decl_context = TYPENAME;
9979 else if (decl_context == TPARM)
9980 template_parm_flag = true, decl_context = PARM;
9982 if (initialized > 1)
9983 funcdef_flag = true;
9985 location_t typespec_loc = smallest_type_quals_location (type_quals,
9986 declspecs->locations);
9987 if (typespec_loc == UNKNOWN_LOCATION)
9988 typespec_loc = declspecs->locations[ds_type_spec];
9989 if (typespec_loc == UNKNOWN_LOCATION)
9990 typespec_loc = input_location;
9992 /* Look inside a declarator for the name being declared
9993 and get it as a string, for an error message. */
9994 for (id_declarator = declarator;
9995 id_declarator;
9996 id_declarator = id_declarator->declarator)
9998 if (id_declarator->kind != cdk_id)
9999 innermost_code = id_declarator->kind;
10001 switch (id_declarator->kind)
10003 case cdk_function:
10004 if (id_declarator->declarator
10005 && id_declarator->declarator->kind == cdk_id)
10007 sfk = id_declarator->declarator->u.id.sfk;
10008 if (sfk == sfk_destructor)
10009 flags = DTOR_FLAG;
10011 break;
10013 case cdk_id:
10015 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
10016 tree decl = id_declarator->u.id.unqualified_name;
10017 if (!decl)
10018 break;
10019 if (qualifying_scope)
10021 if (at_function_scope_p ())
10023 /* [dcl.meaning]
10025 A declarator-id shall not be qualified except
10026 for ...
10028 None of the cases are permitted in block
10029 scope. */
10030 if (qualifying_scope == global_namespace)
10031 error ("invalid use of qualified-name %<::%D%>",
10032 decl);
10033 else if (TYPE_P (qualifying_scope))
10034 error ("invalid use of qualified-name %<%T::%D%>",
10035 qualifying_scope, decl);
10036 else
10037 error ("invalid use of qualified-name %<%D::%D%>",
10038 qualifying_scope, decl);
10039 return error_mark_node;
10041 else if (TYPE_P (qualifying_scope))
10043 ctype = qualifying_scope;
10044 if (!MAYBE_CLASS_TYPE_P (ctype))
10046 error ("%q#T is not a class or a namespace", ctype);
10047 ctype = NULL_TREE;
10049 else if (innermost_code != cdk_function
10050 && current_class_type
10051 && !uniquely_derived_from_p (ctype,
10052 current_class_type))
10054 error ("invalid use of qualified-name %<%T::%D%>",
10055 qualifying_scope, decl);
10056 return error_mark_node;
10059 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
10060 in_namespace = qualifying_scope;
10062 switch (TREE_CODE (decl))
10064 case BIT_NOT_EXPR:
10066 if (innermost_code != cdk_function)
10068 error ("declaration of %qD as non-function", decl);
10069 return error_mark_node;
10071 else if (!qualifying_scope
10072 && !(current_class_type && at_class_scope_p ()))
10074 error ("declaration of %qD as non-member", decl);
10075 return error_mark_node;
10078 tree type = TREE_OPERAND (decl, 0);
10079 if (TYPE_P (type))
10080 type = constructor_name (type);
10081 name = identifier_to_locale (IDENTIFIER_POINTER (type));
10082 dname = decl;
10084 break;
10086 case TEMPLATE_ID_EXPR:
10088 tree fns = TREE_OPERAND (decl, 0);
10090 dname = fns;
10091 if (!identifier_p (dname))
10092 dname = OVL_NAME (dname);
10094 /* Fall through. */
10096 case IDENTIFIER_NODE:
10097 if (identifier_p (decl))
10098 dname = decl;
10100 if (IDENTIFIER_KEYWORD_P (dname))
10102 error ("declarator-id missing; using reserved word %qD",
10103 dname);
10104 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10106 else if (!IDENTIFIER_CONV_OP_P (dname))
10107 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10108 else
10110 gcc_assert (flags == NO_SPECIAL);
10111 flags = TYPENAME_FLAG;
10112 sfk = sfk_conversion;
10113 tree glob = get_global_binding (dname);
10114 if (glob && TREE_CODE (glob) == TYPE_DECL)
10115 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10116 else
10117 name = "<invalid operator>";
10119 break;
10121 default:
10122 gcc_unreachable ();
10124 break;
10127 case cdk_array:
10128 case cdk_pointer:
10129 case cdk_reference:
10130 case cdk_ptrmem:
10131 break;
10133 case cdk_decomp:
10134 name = "structured binding";
10135 break;
10137 case cdk_error:
10138 return error_mark_node;
10140 default:
10141 gcc_unreachable ();
10143 if (id_declarator->kind == cdk_id)
10144 break;
10147 /* [dcl.fct.edf]
10149 The declarator in a function-definition shall have the form
10150 D1 ( parameter-declaration-clause) ... */
10151 if (funcdef_flag && innermost_code != cdk_function)
10153 error ("function definition does not declare parameters");
10154 return error_mark_node;
10157 if (flags == TYPENAME_FLAG
10158 && innermost_code != cdk_function
10159 && ! (ctype && !declspecs->any_specifiers_p))
10161 error ("declaration of %qD as non-function", dname);
10162 return error_mark_node;
10165 if (dname && identifier_p (dname))
10167 if (UDLIT_OPER_P (dname)
10168 && innermost_code != cdk_function)
10170 error ("declaration of %qD as non-function", dname);
10171 return error_mark_node;
10174 if (IDENTIFIER_ANY_OP_P (dname))
10176 if (typedef_p)
10178 error ("declaration of %qD as %<typedef%>", dname);
10179 return error_mark_node;
10181 else if (decl_context == PARM || decl_context == CATCHPARM)
10183 error ("declaration of %qD as parameter", dname);
10184 return error_mark_node;
10189 /* Anything declared one level down from the top level
10190 must be one of the parameters of a function
10191 (because the body is at least two levels down). */
10193 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
10194 by not allowing C++ class definitions to specify their parameters
10195 with xdecls (must be spec.d in the parmlist).
10197 Since we now wait to push a class scope until we are sure that
10198 we are in a legitimate method context, we must set oldcname
10199 explicitly (since current_class_name is not yet alive).
10201 We also want to avoid calling this a PARM if it is in a namespace. */
10203 if (decl_context == NORMAL && !toplevel_bindings_p ())
10205 cp_binding_level *b = current_binding_level;
10206 current_binding_level = b->level_chain;
10207 if (current_binding_level != 0 && toplevel_bindings_p ())
10208 decl_context = PARM;
10209 current_binding_level = b;
10212 if (name == NULL)
10213 name = decl_context == PARM ? "parameter" : "type name";
10215 if (concept_p && typedef_p)
10217 error ("%<concept%> cannot appear in a typedef declaration");
10218 return error_mark_node;
10221 if (constexpr_p && typedef_p)
10223 error ("%<constexpr%> cannot appear in a typedef declaration");
10224 return error_mark_node;
10227 /* If there were multiple types specified in the decl-specifier-seq,
10228 issue an error message. */
10229 if (declspecs->multiple_types_p)
10231 error ("two or more data types in declaration of %qs", name);
10232 return error_mark_node;
10235 if (declspecs->conflicting_specifiers_p)
10237 error ("conflicting specifiers in declaration of %qs", name);
10238 return error_mark_node;
10241 /* Extract the basic type from the decl-specifier-seq. */
10242 type = declspecs->type;
10243 if (type == error_mark_node)
10245 type = NULL_TREE;
10246 type_was_error_mark_node = true;
10248 /* If the entire declaration is itself tagged as deprecated then
10249 suppress reports of deprecated items. */
10250 if (type && TREE_DEPRECATED (type)
10251 && deprecated_state != DEPRECATED_SUPPRESS)
10252 warn_deprecated_use (type, NULL_TREE);
10253 if (type && TREE_CODE (type) == TYPE_DECL)
10255 typedef_decl = type;
10256 type = TREE_TYPE (typedef_decl);
10257 if (TREE_DEPRECATED (type)
10258 && DECL_ARTIFICIAL (typedef_decl)
10259 && deprecated_state != DEPRECATED_SUPPRESS)
10260 warn_deprecated_use (type, NULL_TREE);
10262 /* No type at all: default to `int', and set DEFAULTED_INT
10263 because it was not a user-defined typedef. */
10264 if (type == NULL_TREE)
10266 if (signed_p || unsigned_p || long_p || short_p)
10268 /* These imply 'int'. */
10269 type = integer_type_node;
10270 defaulted_int = 1;
10272 /* If we just have "complex", it is equivalent to "complex double". */
10273 else if (!longlong && !explicit_intN
10274 && decl_spec_seq_has_spec_p (declspecs, ds_complex))
10276 type = double_type_node;
10277 pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
10278 "ISO C++ does not support plain %<complex%> meaning "
10279 "%<double complex%>");
10282 /* Gather flags. */
10283 explicit_int = declspecs->explicit_int_p;
10284 explicit_char = declspecs->explicit_char_p;
10286 #if 0
10287 /* See the code below that used this. */
10288 if (typedef_decl)
10289 decl_attr = DECL_ATTRIBUTES (typedef_decl);
10290 #endif
10291 typedef_type = type;
10293 if (sfk == sfk_conversion || sfk == sfk_deduction_guide)
10294 ctor_return_type = TREE_TYPE (dname);
10295 else
10296 ctor_return_type = ctype;
10298 if (sfk != sfk_none)
10300 type = check_special_function_return_type (sfk, type,
10301 ctor_return_type,
10302 type_quals,
10303 declspecs->locations);
10304 type_quals = TYPE_UNQUALIFIED;
10306 else if (type == NULL_TREE)
10308 int is_main;
10310 explicit_int = -1;
10312 /* We handle `main' specially here, because 'main () { }' is so
10313 common. With no options, it is allowed. With -Wreturn-type,
10314 it is a warning. It is only an error with -pedantic-errors. */
10315 is_main = (funcdef_flag
10316 && dname && identifier_p (dname)
10317 && MAIN_NAME_P (dname)
10318 && ctype == NULL_TREE
10319 && in_namespace == NULL_TREE
10320 && current_namespace == global_namespace);
10322 if (type_was_error_mark_node)
10323 /* We've already issued an error, don't complain more. */;
10324 else if (in_system_header_at (input_location) || flag_ms_extensions)
10325 /* Allow it, sigh. */;
10326 else if (! is_main)
10327 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
10328 else if (pedantic)
10329 pedwarn (input_location, OPT_Wpedantic,
10330 "ISO C++ forbids declaration of %qs with no type", name);
10331 else
10332 warning (OPT_Wreturn_type,
10333 "ISO C++ forbids declaration of %qs with no type", name);
10335 if (type_was_error_mark_node && template_parm_flag)
10336 /* FIXME we should be able to propagate the error_mark_node as is
10337 for other contexts too. */
10338 type = error_mark_node;
10339 else
10340 type = integer_type_node;
10343 ctype = NULL_TREE;
10345 if (explicit_intN)
10347 if (! int_n_enabled_p[declspecs->int_n_idx])
10349 error ("%<__int%d%> is not supported by this target",
10350 int_n_data[declspecs->int_n_idx].bitsize);
10351 explicit_intN = false;
10353 else if (pedantic && ! in_system_header_at (input_location))
10354 pedwarn (input_location, OPT_Wpedantic,
10355 "ISO C++ does not support %<__int%d%> for %qs",
10356 int_n_data[declspecs->int_n_idx].bitsize, name);
10359 /* Now process the modifiers that were specified
10360 and check for invalid combinations. */
10362 /* Long double is a special combination. */
10363 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
10365 long_p = false;
10366 type = cp_build_qualified_type (long_double_type_node,
10367 cp_type_quals (type));
10370 /* Check all other uses of type modifiers. */
10372 if (unsigned_p || signed_p || long_p || short_p)
10374 int ok = 0;
10376 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
10377 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
10378 else if (signed_p && unsigned_p)
10379 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
10380 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
10381 error ("%<long long%> invalid for %qs", name);
10382 else if (long_p && TREE_CODE (type) == REAL_TYPE)
10383 error ("%<long%> invalid for %qs", name);
10384 else if (short_p && TREE_CODE (type) == REAL_TYPE)
10385 error ("%<short%> invalid for %qs", name);
10386 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
10387 error ("%<long%> or %<short%> invalid for %qs", name);
10388 else if ((long_p || short_p || explicit_char || explicit_int) && explicit_intN)
10389 error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
10390 else if ((long_p || short_p) && explicit_char)
10391 error ("%<long%> or %<short%> specified with char for %qs", name);
10392 else if (long_p && short_p)
10393 error ("%<long%> and %<short%> specified together for %qs", name);
10394 else if (type == char16_type_node || type == char32_type_node)
10396 if (signed_p || unsigned_p)
10397 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
10398 else if (short_p || long_p)
10399 error ("%<short%> or %<long%> invalid for %qs", name);
10401 else
10403 ok = 1;
10404 if (!explicit_int && !defaulted_int && !explicit_char && !explicit_intN && pedantic)
10406 pedwarn (input_location, OPT_Wpedantic,
10407 "long, short, signed or unsigned used invalidly for %qs",
10408 name);
10409 if (flag_pedantic_errors)
10410 ok = 0;
10414 /* Discard the type modifiers if they are invalid. */
10415 if (! ok)
10417 unsigned_p = false;
10418 signed_p = false;
10419 long_p = false;
10420 short_p = false;
10421 longlong = 0;
10425 /* Decide whether an integer type is signed or not.
10426 Optionally treat bitfields as signed by default. */
10427 if (unsigned_p
10428 /* [class.bit]
10430 It is implementation-defined whether a plain (neither
10431 explicitly signed or unsigned) char, short, int, or long
10432 bit-field is signed or unsigned.
10434 Naturally, we extend this to long long as well. Note that
10435 this does not include wchar_t. */
10436 || (bitfield && !flag_signed_bitfields
10437 && !signed_p
10438 /* A typedef for plain `int' without `signed' can be
10439 controlled just like plain `int', but a typedef for
10440 `signed int' cannot be so controlled. */
10441 && !(typedef_decl
10442 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
10443 && TREE_CODE (type) == INTEGER_TYPE
10444 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
10446 if (explicit_intN)
10447 type = int_n_trees[declspecs->int_n_idx].unsigned_type;
10448 else if (longlong)
10449 type = long_long_unsigned_type_node;
10450 else if (long_p)
10451 type = long_unsigned_type_node;
10452 else if (short_p)
10453 type = short_unsigned_type_node;
10454 else if (type == char_type_node)
10455 type = unsigned_char_type_node;
10456 else if (typedef_decl)
10457 type = unsigned_type_for (type);
10458 else
10459 type = unsigned_type_node;
10461 else if (signed_p && type == char_type_node)
10462 type = signed_char_type_node;
10463 else if (explicit_intN)
10464 type = int_n_trees[declspecs->int_n_idx].signed_type;
10465 else if (longlong)
10466 type = long_long_integer_type_node;
10467 else if (long_p)
10468 type = long_integer_type_node;
10469 else if (short_p)
10470 type = short_integer_type_node;
10472 if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
10474 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10475 error ("complex invalid for %qs", name);
10476 /* If a modifier is specified, the resulting complex is the complex
10477 form of TYPE. E.g, "complex short" is "complex short int". */
10478 else if (type == integer_type_node)
10479 type = complex_integer_type_node;
10480 else if (type == float_type_node)
10481 type = complex_float_type_node;
10482 else if (type == double_type_node)
10483 type = complex_double_type_node;
10484 else if (type == long_double_type_node)
10485 type = complex_long_double_type_node;
10486 else
10487 type = build_complex_type (type);
10490 /* If we're using the injected-class-name to form a compound type or a
10491 declaration, replace it with the underlying class so we don't get
10492 redundant typedefs in the debug output. But if we are returning the
10493 type unchanged, leave it alone so that it's available to
10494 maybe_get_template_decl_from_type_decl. */
10495 if (CLASS_TYPE_P (type)
10496 && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
10497 && type == TREE_TYPE (TYPE_NAME (type))
10498 && (declarator || type_quals))
10499 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
10501 type_quals |= cp_type_quals (type);
10502 type = cp_build_qualified_type_real
10503 (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
10504 || declspecs->decltype_p)
10505 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
10506 /* We might have ignored or rejected some of the qualifiers. */
10507 type_quals = cp_type_quals (type);
10509 if (cxx_dialect >= cxx17 && type && is_auto (type)
10510 && innermost_code != cdk_function
10511 && id_declarator && declarator != id_declarator)
10512 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (type))
10514 error_at (typespec_loc, "template placeholder type %qT must be followed "
10515 "by a simple declarator-id", type);
10516 inform (DECL_SOURCE_LOCATION (tmpl), "%qD declared here", tmpl);
10519 staticp = 0;
10520 inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
10521 virtualp = decl_spec_seq_has_spec_p (declspecs, ds_virtual);
10522 explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
10524 storage_class = declspecs->storage_class;
10525 if (storage_class == sc_static)
10526 staticp = 1 + (decl_context == FIELD);
10528 if (virtualp)
10530 if (staticp == 2)
10532 error ("member %qD cannot be declared both %<virtual%> "
10533 "and %<static%>", dname);
10534 storage_class = sc_none;
10535 staticp = 0;
10537 if (constexpr_p)
10538 error ("member %qD cannot be declared both %<virtual%> "
10539 "and %<constexpr%>", dname);
10541 friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
10543 /* Issue errors about use of storage classes for parameters. */
10544 if (decl_context == PARM)
10546 if (typedef_p)
10548 error ("typedef declaration invalid in parameter declaration");
10549 return error_mark_node;
10551 else if (template_parm_flag && storage_class != sc_none)
10553 error ("storage class specified for template parameter %qs", name);
10554 return error_mark_node;
10556 else if (storage_class == sc_static
10557 || storage_class == sc_extern
10558 || thread_p)
10559 error ("storage class specifiers invalid in parameter declarations");
10561 /* Function parameters cannot be concept. */
10562 if (concept_p)
10563 error ("a parameter cannot be declared %<concept%>");
10564 /* Function parameters cannot be constexpr. If we saw one, moan
10565 and pretend it wasn't there. */
10566 else if (constexpr_p)
10568 error ("a parameter cannot be declared %<constexpr%>");
10569 constexpr_p = 0;
10573 /* Give error if `virtual' is used outside of class declaration. */
10574 if (virtualp
10575 && (current_class_name == NULL_TREE || decl_context != FIELD))
10577 error_at (declspecs->locations[ds_virtual],
10578 "%<virtual%> outside class declaration");
10579 virtualp = 0;
10582 if (innermost_code == cdk_decomp)
10584 location_t loc = (declarator->kind == cdk_reference
10585 ? declarator->declarator->id_loc : declarator->id_loc);
10586 if (inlinep)
10587 error_at (declspecs->locations[ds_inline],
10588 "structured binding declaration cannot be %<inline%>");
10589 if (typedef_p)
10590 error_at (declspecs->locations[ds_typedef],
10591 "structured binding declaration cannot be %<typedef%>");
10592 if (constexpr_p)
10593 error_at (declspecs->locations[ds_constexpr], "structured "
10594 "binding declaration cannot be %<constexpr%>");
10595 if (thread_p)
10596 error_at (declspecs->locations[ds_thread],
10597 "structured binding declaration cannot be %qs",
10598 declspecs->gnu_thread_keyword_p
10599 ? "__thread" : "thread_local");
10600 if (concept_p)
10601 error_at (declspecs->locations[ds_concept],
10602 "structured binding declaration cannot be %<concept%>");
10603 switch (storage_class)
10605 case sc_none:
10606 break;
10607 case sc_register:
10608 error_at (loc, "structured binding declaration cannot be "
10609 "%<register%>");
10610 break;
10611 case sc_static:
10612 error_at (loc, "structured binding declaration cannot be "
10613 "%<static%>");
10614 break;
10615 case sc_extern:
10616 error_at (loc, "structured binding declaration cannot be "
10617 "%<extern%>");
10618 break;
10619 case sc_mutable:
10620 error_at (loc, "structured binding declaration cannot be "
10621 "%<mutable%>");
10622 break;
10623 case sc_auto:
10624 error_at (loc, "structured binding declaration cannot be "
10625 "C++98 %<auto%>");
10626 break;
10627 default:
10628 gcc_unreachable ();
10630 if (TREE_CODE (type) != TEMPLATE_TYPE_PARM
10631 || TYPE_IDENTIFIER (type) != auto_identifier)
10633 if (type != error_mark_node)
10635 error_at (loc, "structured binding declaration cannot have "
10636 "type %qT", type);
10637 inform (loc,
10638 "type must be cv-qualified %<auto%> or reference to "
10639 "cv-qualified %<auto%>");
10641 type = build_qualified_type (make_auto (), type_quals);
10642 declspecs->type = type;
10644 inlinep = 0;
10645 typedef_p = 0;
10646 constexpr_p = 0;
10647 thread_p = 0;
10648 concept_p = 0;
10649 storage_class = sc_none;
10650 staticp = 0;
10651 declspecs->storage_class = sc_none;
10652 declspecs->locations[ds_thread] = UNKNOWN_LOCATION;
10655 /* Static anonymous unions are dealt with here. */
10656 if (staticp && decl_context == TYPENAME
10657 && declspecs->type
10658 && ANON_AGGR_TYPE_P (declspecs->type))
10659 decl_context = FIELD;
10661 /* Warn about storage classes that are invalid for certain
10662 kinds of declarations (parameters, typenames, etc.). */
10663 if (thread_p
10664 && ((storage_class
10665 && storage_class != sc_extern
10666 && storage_class != sc_static)
10667 || typedef_p))
10669 error ("multiple storage classes in declaration of %qs", name);
10670 thread_p = false;
10672 if (decl_context != NORMAL
10673 && ((storage_class != sc_none
10674 && storage_class != sc_mutable)
10675 || thread_p))
10677 if ((decl_context == PARM || decl_context == CATCHPARM)
10678 && (storage_class == sc_register
10679 || storage_class == sc_auto))
10681 else if (typedef_p)
10683 else if (decl_context == FIELD
10684 /* C++ allows static class elements. */
10685 && storage_class == sc_static)
10686 /* C++ also allows inlines and signed and unsigned elements,
10687 but in those cases we don't come in here. */
10689 else
10691 if (decl_context == FIELD)
10692 error ("storage class specified for %qs", name);
10693 else
10695 if (decl_context == PARM || decl_context == CATCHPARM)
10696 error ("storage class specified for parameter %qs", name);
10697 else
10698 error ("storage class specified for typename");
10700 if (storage_class == sc_register
10701 || storage_class == sc_auto
10702 || storage_class == sc_extern
10703 || thread_p)
10704 storage_class = sc_none;
10707 else if (storage_class == sc_extern && funcdef_flag
10708 && ! toplevel_bindings_p ())
10709 error ("nested function %qs declared %<extern%>", name);
10710 else if (toplevel_bindings_p ())
10712 if (storage_class == sc_auto)
10713 error ("top-level declaration of %qs specifies %<auto%>", name);
10715 else if (thread_p
10716 && storage_class != sc_extern
10717 && storage_class != sc_static)
10719 if (declspecs->gnu_thread_keyword_p)
10720 pedwarn (input_location, 0, "function-scope %qs implicitly auto and "
10721 "declared %<__thread%>", name);
10723 /* When thread_local is applied to a variable of block scope the
10724 storage-class-specifier static is implied if it does not appear
10725 explicitly. */
10726 storage_class = declspecs->storage_class = sc_static;
10727 staticp = 1;
10730 if (storage_class && friendp)
10732 error ("storage class specifiers invalid in friend function declarations");
10733 storage_class = sc_none;
10734 staticp = 0;
10737 if (!id_declarator)
10738 unqualified_id = NULL_TREE;
10739 else
10741 unqualified_id = id_declarator->u.id.unqualified_name;
10742 switch (TREE_CODE (unqualified_id))
10744 case BIT_NOT_EXPR:
10745 unqualified_id = TREE_OPERAND (unqualified_id, 0);
10746 if (TYPE_P (unqualified_id))
10747 unqualified_id = constructor_name (unqualified_id);
10748 break;
10750 case IDENTIFIER_NODE:
10751 case TEMPLATE_ID_EXPR:
10752 break;
10754 default:
10755 gcc_unreachable ();
10759 if (declspecs->std_attributes)
10761 /* Apply the c++11 attributes to the type preceding them. */
10762 input_location = declspecs->locations[ds_std_attribute];
10763 decl_attributes (&type, declspecs->std_attributes, 0);
10764 input_location = saved_loc;
10767 /* Determine the type of the entity declared by recurring on the
10768 declarator. */
10769 for (; declarator; declarator = declarator->declarator)
10771 const cp_declarator *inner_declarator;
10772 tree attrs;
10774 if (type == error_mark_node)
10775 return error_mark_node;
10777 attrs = declarator->attributes;
10778 if (attrs)
10780 int attr_flags;
10782 attr_flags = 0;
10783 if (declarator == NULL || declarator->kind == cdk_id)
10784 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
10785 if (declarator->kind == cdk_function)
10786 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
10787 if (declarator->kind == cdk_array)
10788 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
10789 returned_attrs = decl_attributes (&type,
10790 chainon (returned_attrs, attrs),
10791 attr_flags);
10794 inner_declarator = declarator->declarator;
10796 /* We don't want to warn in parmeter context because we don't
10797 yet know if the parse will succeed, and this might turn out
10798 to be a constructor call. */
10799 if (decl_context != PARM
10800 && declarator->parenthesized != UNKNOWN_LOCATION
10801 /* If the type is class-like and the inner name used a
10802 global namespace qualifier, we need the parens.
10803 Unfortunately all we can tell is whether a qualified name
10804 was used or not. */
10805 && !(inner_declarator
10806 && inner_declarator->kind == cdk_id
10807 && inner_declarator->u.id.qualifying_scope
10808 && (MAYBE_CLASS_TYPE_P (type)
10809 || TREE_CODE (type) == ENUMERAL_TYPE)))
10810 warning_at (declarator->parenthesized, OPT_Wparentheses,
10811 "unnecessary parentheses in declaration of %qs", name);
10812 if (declarator->kind == cdk_id || declarator->kind == cdk_decomp)
10813 break;
10815 switch (declarator->kind)
10817 case cdk_array:
10818 type = create_array_type_for_decl (dname, type,
10819 declarator->u.array.bounds);
10820 if (!valid_array_size_p (input_location, type, dname))
10821 type = error_mark_node;
10823 if (declarator->std_attributes)
10824 /* [dcl.array]/1:
10826 The optional attribute-specifier-seq appertains to the
10827 array. */
10828 returned_attrs = chainon (returned_attrs,
10829 declarator->std_attributes);
10830 break;
10832 case cdk_function:
10834 tree arg_types;
10835 int funcdecl_p;
10837 /* Declaring a function type. */
10839 input_location = declspecs->locations[ds_type_spec];
10840 abstract_virtuals_error (ACU_RETURN, type);
10841 input_location = saved_loc;
10843 /* Pick up type qualifiers which should be applied to `this'. */
10844 memfn_quals = declarator->u.function.qualifiers;
10845 /* Pick up virt-specifiers. */
10846 virt_specifiers = declarator->u.function.virt_specifiers;
10847 /* And ref-qualifier, too */
10848 rqual = declarator->u.function.ref_qualifier;
10849 /* And tx-qualifier. */
10850 tree tx_qual = declarator->u.function.tx_qualifier;
10851 /* Pick up the exception specifications. */
10852 raises = declarator->u.function.exception_specification;
10853 /* If the exception-specification is ill-formed, let's pretend
10854 there wasn't one. */
10855 if (raises == error_mark_node)
10856 raises = NULL_TREE;
10858 if (reqs)
10859 error_at (location_of (reqs), "requires-clause on return type");
10860 reqs = declarator->u.function.requires_clause;
10862 /* Say it's a definition only for the CALL_EXPR
10863 closest to the identifier. */
10864 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
10866 /* Handle a late-specified return type. */
10867 tree late_return_type = declarator->u.function.late_return_type;
10868 if (funcdecl_p)
10870 if (tree auto_node = type_uses_auto (type))
10872 if (!late_return_type)
10874 if (current_class_type
10875 && LAMBDA_TYPE_P (current_class_type))
10876 /* OK for C++11 lambdas. */;
10877 else if (cxx_dialect < cxx14)
10879 error ("%qs function uses "
10880 "%<auto%> type specifier without trailing "
10881 "return type", name);
10882 inform (input_location, "deduced return type "
10883 "only available with -std=c++14 or "
10884 "-std=gnu++14");
10886 else if (virtualp)
10888 error ("virtual function cannot "
10889 "have deduced return type");
10890 virtualp = false;
10893 else if (!is_auto (type) && sfk != sfk_conversion)
10895 error ("%qs function with trailing return type has"
10896 " %qT as its type rather than plain %<auto%>",
10897 name, type);
10898 return error_mark_node;
10900 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node))
10902 if (!late_return_type)
10904 if (dguide_name_p (unqualified_id))
10905 error_at (declarator->id_loc, "deduction guide "
10906 "for %qT must have trailing return "
10907 "type", TREE_TYPE (tmpl));
10908 else
10909 error_at (declarator->id_loc, "deduced class "
10910 "type %qT in function return type",
10911 type);
10912 inform (DECL_SOURCE_LOCATION (tmpl),
10913 "%qD declared here", tmpl);
10915 else if (CLASS_TYPE_P (late_return_type)
10916 && CLASSTYPE_TEMPLATE_INFO (late_return_type)
10917 && (CLASSTYPE_TI_TEMPLATE (late_return_type)
10918 == tmpl))
10919 /* OK */;
10920 else
10921 error ("trailing return type %qT of deduction guide "
10922 "is not a specialization of %qT",
10923 late_return_type, TREE_TYPE (tmpl));
10926 else if (late_return_type
10927 && sfk != sfk_conversion)
10929 if (cxx_dialect < cxx11)
10930 /* Not using maybe_warn_cpp0x because this should
10931 always be an error. */
10932 error ("trailing return type only available with "
10933 "-std=c++11 or -std=gnu++11");
10934 else
10935 error ("%qs function with trailing return type not "
10936 "declared with %<auto%> type specifier", name);
10937 return error_mark_node;
10940 type = splice_late_return_type (type, late_return_type);
10941 if (type == error_mark_node)
10942 return error_mark_node;
10944 if (late_return_type)
10946 late_return_type_p = true;
10947 type_quals = cp_type_quals (type);
10950 if (type_quals != TYPE_UNQUALIFIED)
10952 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
10953 warning_at (typespec_loc, OPT_Wignored_qualifiers, "type "
10954 "qualifiers ignored on function return type");
10955 /* We now know that the TYPE_QUALS don't apply to the
10956 decl, but to its return type. */
10957 type_quals = TYPE_UNQUALIFIED;
10960 /* Error about some types functions can't return. */
10962 if (TREE_CODE (type) == FUNCTION_TYPE)
10964 error_at (typespec_loc, "%qs declared as function returning "
10965 "a function", name);
10966 return error_mark_node;
10968 if (TREE_CODE (type) == ARRAY_TYPE)
10970 error_at (typespec_loc, "%qs declared as function returning "
10971 "an array", name);
10972 return error_mark_node;
10975 if (ctype == NULL_TREE
10976 && decl_context == FIELD
10977 && funcdecl_p
10978 && friendp == 0)
10979 ctype = current_class_type;
10981 if (ctype && (sfk == sfk_constructor
10982 || sfk == sfk_destructor))
10984 /* We are within a class's scope. If our declarator name
10985 is the same as the class name, and we are defining
10986 a function, then it is a constructor/destructor, and
10987 therefore returns a void type. */
10989 /* ISO C++ 12.4/2. A destructor may not be declared
10990 const or volatile. A destructor may not be static.
10991 A destructor may not be declared with ref-qualifier.
10993 ISO C++ 12.1. A constructor may not be declared
10994 const or volatile. A constructor may not be
10995 virtual. A constructor may not be static.
10996 A constructor may not be declared with ref-qualifier. */
10997 if (staticp == 2)
10998 error ((flags == DTOR_FLAG)
10999 ? G_("destructor cannot be static member function")
11000 : G_("constructor cannot be static member function"));
11001 if (memfn_quals)
11003 error ((flags == DTOR_FLAG)
11004 ? G_("destructors may not be cv-qualified")
11005 : G_("constructors may not be cv-qualified"));
11006 memfn_quals = TYPE_UNQUALIFIED;
11009 if (rqual)
11011 maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
11012 error ((flags == DTOR_FLAG)
11013 ? G_("destructors may not be ref-qualified")
11014 : G_("constructors may not be ref-qualified"));
11015 rqual = REF_QUAL_NONE;
11018 if (decl_context == FIELD
11019 && !member_function_or_else (ctype,
11020 current_class_type,
11021 flags))
11022 return error_mark_node;
11024 if (flags != DTOR_FLAG)
11026 /* It's a constructor. */
11027 if (explicitp == 1)
11028 explicitp = 2;
11029 if (virtualp)
11031 permerror (input_location,
11032 "constructors cannot be declared %<virtual%>");
11033 virtualp = 0;
11035 if (decl_context == FIELD
11036 && sfk != sfk_constructor)
11037 return error_mark_node;
11039 if (decl_context == FIELD)
11040 staticp = 0;
11042 else if (friendp)
11044 if (virtualp)
11046 /* Cannot be both friend and virtual. */
11047 error ("virtual functions cannot be friends");
11048 friendp = 0;
11050 if (decl_context == NORMAL)
11051 error ("friend declaration not in class definition");
11052 if (current_function_decl && funcdef_flag)
11053 error ("can%'t define friend function %qs in a local "
11054 "class definition",
11055 name);
11057 else if (ctype && sfk == sfk_conversion)
11059 if (explicitp == 1)
11061 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
11062 explicitp = 2;
11064 if (late_return_type_p)
11065 error ("a conversion function cannot have a trailing return type");
11067 else if (sfk == sfk_deduction_guide)
11069 if (explicitp == 1)
11070 explicitp = 2;
11073 arg_types = grokparms (declarator->u.function.parameters,
11074 &parms);
11076 if (inner_declarator
11077 && inner_declarator->kind == cdk_id
11078 && inner_declarator->u.id.sfk == sfk_destructor
11079 && arg_types != void_list_node)
11081 error ("destructors may not have parameters");
11082 arg_types = void_list_node;
11083 parms = NULL_TREE;
11086 type = build_function_type (type, arg_types);
11088 tree attrs = declarator->std_attributes;
11089 if (tx_qual)
11091 tree att = build_tree_list (tx_qual, NULL_TREE);
11092 /* transaction_safe applies to the type, but
11093 transaction_safe_dynamic applies to the function. */
11094 if (is_attribute_p ("transaction_safe", tx_qual))
11095 attrs = chainon (attrs, att);
11096 else
11097 returned_attrs = chainon (returned_attrs, att);
11099 if (attrs)
11100 /* [dcl.fct]/2:
11102 The optional attribute-specifier-seq appertains to
11103 the function type. */
11104 decl_attributes (&type, attrs, 0);
11106 if (raises)
11107 type = build_exception_variant (type, raises);
11109 break;
11111 case cdk_pointer:
11112 case cdk_reference:
11113 case cdk_ptrmem:
11114 /* Filter out pointers-to-references and references-to-references.
11115 We can get these if a TYPE_DECL is used. */
11117 if (TREE_CODE (type) == REFERENCE_TYPE)
11119 if (declarator->kind != cdk_reference)
11121 error ("cannot declare pointer to %q#T", type);
11122 type = TREE_TYPE (type);
11125 /* In C++0x, we allow reference to reference declarations
11126 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
11127 and template type arguments [14.3.1/4 temp.arg.type]. The
11128 check for direct reference to reference declarations, which
11129 are still forbidden, occurs below. Reasoning behind the change
11130 can be found in DR106, DR540, and the rvalue reference
11131 proposals. */
11132 else if (cxx_dialect == cxx98)
11134 error ("cannot declare reference to %q#T", type);
11135 type = TREE_TYPE (type);
11138 else if (VOID_TYPE_P (type))
11140 if (declarator->kind == cdk_reference)
11141 error ("cannot declare reference to %q#T", type);
11142 else if (declarator->kind == cdk_ptrmem)
11143 error ("cannot declare pointer to %q#T member", type);
11146 /* We now know that the TYPE_QUALS don't apply to the decl,
11147 but to the target of the pointer. */
11148 type_quals = TYPE_UNQUALIFIED;
11150 /* This code used to handle METHOD_TYPE, but I don't think it's
11151 possible to get it here anymore. */
11152 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11153 if (declarator->kind == cdk_ptrmem
11154 && TREE_CODE (type) == FUNCTION_TYPE)
11156 memfn_quals |= type_memfn_quals (type);
11157 type = build_memfn_type (type,
11158 declarator->u.pointer.class_type,
11159 memfn_quals,
11160 rqual);
11161 if (type == error_mark_node)
11162 return error_mark_node;
11164 rqual = REF_QUAL_NONE;
11165 memfn_quals = TYPE_UNQUALIFIED;
11168 if (TREE_CODE (type) == FUNCTION_TYPE
11169 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
11170 || type_memfn_rqual (type) != REF_QUAL_NONE))
11171 error (declarator->kind == cdk_reference
11172 ? G_("cannot declare reference to qualified function type %qT")
11173 : G_("cannot declare pointer to qualified function type %qT"),
11174 type);
11176 /* When the pointed-to type involves components of variable size,
11177 care must be taken to ensure that the size evaluation code is
11178 emitted early enough to dominate all the possible later uses
11179 and late enough for the variables on which it depends to have
11180 been assigned.
11182 This is expected to happen automatically when the pointed-to
11183 type has a name/declaration of it's own, but special attention
11184 is required if the type is anonymous.
11186 We handle the NORMAL and FIELD contexts here by inserting a
11187 dummy statement that just evaluates the size at a safe point
11188 and ensures it is not deferred until e.g. within a deeper
11189 conditional context (c++/43555).
11191 We expect nothing to be needed here for PARM or TYPENAME.
11192 Evaluating the size at this point for TYPENAME would
11193 actually be incorrect, as we might be in the middle of an
11194 expression with side effects on the pointed-to type size
11195 "arguments" prior to the pointer declaration point and the
11196 size evaluation could end up prior to the side effects. */
11198 if (!TYPE_NAME (type)
11199 && (decl_context == NORMAL || decl_context == FIELD)
11200 && at_function_scope_p ()
11201 && variably_modified_type_p (type, NULL_TREE))
11203 TYPE_NAME (type) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
11204 NULL_TREE, type);
11205 add_decl_expr (TYPE_NAME (type));
11208 if (declarator->kind == cdk_reference)
11210 /* In C++0x, the type we are creating a reference to might be
11211 a typedef which is itself a reference type. In that case,
11212 we follow the reference collapsing rules in
11213 [7.1.3/8 dcl.typedef] to create the final reference type:
11215 "If a typedef TD names a type that is a reference to a type
11216 T, an attempt to create the type 'lvalue reference to cv TD'
11217 creates the type 'lvalue reference to T,' while an attempt
11218 to create the type "rvalue reference to cv TD' creates the
11219 type TD."
11221 if (VOID_TYPE_P (type))
11222 /* We already gave an error. */;
11223 else if (TREE_CODE (type) == REFERENCE_TYPE)
11225 if (declarator->u.reference.rvalue_ref)
11226 /* Leave type alone. */;
11227 else
11228 type = cp_build_reference_type (TREE_TYPE (type), false);
11230 else
11231 type = cp_build_reference_type
11232 (type, declarator->u.reference.rvalue_ref);
11234 /* In C++0x, we need this check for direct reference to
11235 reference declarations, which are forbidden by
11236 [8.3.2/5 dcl.ref]. Reference to reference declarations
11237 are only allowed indirectly through typedefs and template
11238 type arguments. Example:
11240 void foo(int & &); // invalid ref-to-ref decl
11242 typedef int & int_ref;
11243 void foo(int_ref &); // valid ref-to-ref decl
11245 if (inner_declarator && inner_declarator->kind == cdk_reference)
11246 error ("cannot declare reference to %q#T, which is not "
11247 "a typedef or a template type argument", type);
11249 else if (TREE_CODE (type) == METHOD_TYPE)
11250 type = build_ptrmemfunc_type (build_pointer_type (type));
11251 else if (declarator->kind == cdk_ptrmem)
11253 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
11254 != NAMESPACE_DECL);
11255 if (declarator->u.pointer.class_type == error_mark_node)
11256 /* We will already have complained. */
11257 type = error_mark_node;
11258 else
11259 type = build_ptrmem_type (declarator->u.pointer.class_type,
11260 type);
11262 else
11263 type = build_pointer_type (type);
11265 /* Process a list of type modifier keywords (such as
11266 const or volatile) that were given inside the `*' or `&'. */
11268 if (declarator->u.pointer.qualifiers)
11270 type
11271 = cp_build_qualified_type (type,
11272 declarator->u.pointer.qualifiers);
11273 type_quals = cp_type_quals (type);
11276 /* Apply C++11 attributes to the pointer, and not to the
11277 type pointed to. This is unlike what is done for GNU
11278 attributes above. It is to comply with [dcl.ptr]/1:
11280 [the optional attribute-specifier-seq (7.6.1) appertains
11281 to the pointer and not to the object pointed to]. */
11282 if (declarator->std_attributes)
11283 decl_attributes (&type, declarator->std_attributes,
11286 ctype = NULL_TREE;
11287 break;
11289 case cdk_error:
11290 break;
11292 default:
11293 gcc_unreachable ();
11297 /* A `constexpr' specifier used in an object declaration declares
11298 the object as `const'. */
11299 if (constexpr_p && innermost_code != cdk_function)
11301 /* DR1688 says that a `constexpr' specifier in combination with
11302 `volatile' is valid. */
11304 if (TREE_CODE (type) != REFERENCE_TYPE)
11306 type_quals |= TYPE_QUAL_CONST;
11307 type = cp_build_qualified_type (type, type_quals);
11311 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
11312 && TREE_CODE (type) != FUNCTION_TYPE
11313 && TREE_CODE (type) != METHOD_TYPE
11314 && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
11316 error ("template-id %qD used as a declarator",
11317 unqualified_id);
11318 unqualified_id = dname;
11321 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
11322 qualified with a class-name, turn it into a METHOD_TYPE, unless
11323 we know that the function is static. We take advantage of this
11324 opportunity to do other processing that pertains to entities
11325 explicitly declared to be class members. Note that if DECLARATOR
11326 is non-NULL, we know it is a cdk_id declarator; otherwise, we
11327 would not have exited the loop above. */
11328 if (declarator
11329 && declarator->kind == cdk_id
11330 && declarator->u.id.qualifying_scope
11331 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
11333 ctype = declarator->u.id.qualifying_scope;
11334 ctype = TYPE_MAIN_VARIANT (ctype);
11335 template_count = num_template_headers_for_class (ctype);
11337 if (ctype == current_class_type)
11339 if (friendp)
11341 permerror (input_location, "member functions are implicitly "
11342 "friends of their class");
11343 friendp = 0;
11345 else
11346 permerror (declarator->id_loc,
11347 "extra qualification %<%T::%> on member %qs",
11348 ctype, name);
11350 else if (/* If the qualifying type is already complete, then we
11351 can skip the following checks. */
11352 !COMPLETE_TYPE_P (ctype)
11353 && (/* If the function is being defined, then
11354 qualifying type must certainly be complete. */
11355 funcdef_flag
11356 /* A friend declaration of "T::f" is OK, even if
11357 "T" is a template parameter. But, if this
11358 function is not a friend, the qualifying type
11359 must be a class. */
11360 || (!friendp && !CLASS_TYPE_P (ctype))
11361 /* For a declaration, the type need not be
11362 complete, if either it is dependent (since there
11363 is no meaningful definition of complete in that
11364 case) or the qualifying class is currently being
11365 defined. */
11366 || !(dependent_type_p (ctype)
11367 || currently_open_class (ctype)))
11368 /* Check that the qualifying type is complete. */
11369 && !complete_type_or_else (ctype, NULL_TREE))
11370 return error_mark_node;
11371 else if (TREE_CODE (type) == FUNCTION_TYPE)
11373 if (current_class_type
11374 && (!friendp || funcdef_flag || initialized))
11376 error (funcdef_flag || initialized
11377 ? G_("cannot define member function %<%T::%s%> "
11378 "within %qT")
11379 : G_("cannot declare member function %<%T::%s%> "
11380 "within %qT"),
11381 ctype, name, current_class_type);
11382 return error_mark_node;
11385 else if (typedef_p && current_class_type)
11387 error ("cannot declare member %<%T::%s%> within %qT",
11388 ctype, name, current_class_type);
11389 return error_mark_node;
11393 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
11394 ctype = current_class_type;
11396 /* Now TYPE has the actual type. */
11398 if (returned_attrs)
11400 if (attrlist)
11401 *attrlist = chainon (returned_attrs, *attrlist);
11402 else
11403 attrlist = &returned_attrs;
11406 if (declarator
11407 && declarator->kind == cdk_id
11408 && declarator->std_attributes
11409 && attrlist != NULL)
11410 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
11411 a declarator-id appertains to the entity that is declared. */
11412 *attrlist = chainon (*attrlist, declarator->std_attributes);
11414 /* Handle parameter packs. */
11415 if (parameter_pack_p)
11417 if (decl_context == PARM)
11418 /* Turn the type into a pack expansion.*/
11419 type = make_pack_expansion (type);
11420 else
11421 error ("non-parameter %qs cannot be a parameter pack", name);
11424 if ((decl_context == FIELD || decl_context == PARM)
11425 && !processing_template_decl
11426 && variably_modified_type_p (type, NULL_TREE))
11428 if (decl_context == FIELD)
11429 error ("data member may not have variably modified type %qT", type);
11430 else
11431 error ("parameter may not have variably modified type %qT", type);
11432 type = error_mark_node;
11435 if (explicitp == 1 || (explicitp && friendp))
11437 /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
11438 in the declaration of a constructor or conversion function within
11439 a class definition. */
11440 if (!current_class_type)
11441 error_at (declspecs->locations[ds_explicit],
11442 "%<explicit%> outside class declaration");
11443 else if (friendp)
11444 error_at (declspecs->locations[ds_explicit],
11445 "%<explicit%> in friend declaration");
11446 else
11447 error_at (declspecs->locations[ds_explicit],
11448 "only declarations of constructors and conversion operators "
11449 "can be %<explicit%>");
11450 explicitp = 0;
11453 if (storage_class == sc_mutable)
11455 if (decl_context != FIELD || friendp)
11457 error ("non-member %qs cannot be declared %<mutable%>", name);
11458 storage_class = sc_none;
11460 else if (decl_context == TYPENAME || typedef_p)
11462 error ("non-object member %qs cannot be declared %<mutable%>", name);
11463 storage_class = sc_none;
11465 else if (TREE_CODE (type) == FUNCTION_TYPE
11466 || TREE_CODE (type) == METHOD_TYPE)
11468 error ("function %qs cannot be declared %<mutable%>", name);
11469 storage_class = sc_none;
11471 else if (staticp)
11473 error ("static %qs cannot be declared %<mutable%>", name);
11474 storage_class = sc_none;
11476 else if (type_quals & TYPE_QUAL_CONST)
11478 error ("const %qs cannot be declared %<mutable%>", name);
11479 storage_class = sc_none;
11481 else if (TREE_CODE (type) == REFERENCE_TYPE)
11483 permerror (input_location, "reference %qs cannot be declared "
11484 "%<mutable%>", name);
11485 storage_class = sc_none;
11489 /* If this is declaring a typedef name, return a TYPE_DECL. */
11490 if (typedef_p && decl_context != TYPENAME)
11492 tree decl;
11494 /* This declaration:
11496 typedef void f(int) const;
11498 declares a function type which is not a member of any
11499 particular class, but which is cv-qualified; for
11500 example "f S::*" declares a pointer to a const-qualified
11501 member function of S. We record the cv-qualification in the
11502 function type. */
11503 if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
11505 type = apply_memfn_quals (type, memfn_quals, rqual);
11507 /* We have now dealt with these qualifiers. */
11508 memfn_quals = TYPE_UNQUALIFIED;
11509 rqual = REF_QUAL_NONE;
11512 if (type_uses_auto (type))
11514 error ("typedef declared %<auto%>");
11515 type = error_mark_node;
11518 if (reqs)
11519 error_at (location_of (reqs), "requires-clause on typedef");
11521 if (decl_context == FIELD)
11522 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
11523 else
11524 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
11525 if (id_declarator && declarator->u.id.qualifying_scope) {
11526 error_at (DECL_SOURCE_LOCATION (decl),
11527 "typedef name may not be a nested-name-specifier");
11528 TREE_TYPE (decl) = error_mark_node;
11531 if (decl_context != FIELD)
11533 if (!current_function_decl)
11534 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
11535 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
11536 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
11537 (current_function_decl)))
11538 /* The TYPE_DECL is "abstract" because there will be
11539 clones of this constructor/destructor, and there will
11540 be copies of this TYPE_DECL generated in those
11541 clones. The decloning optimization (for space) may
11542 revert this subsequently if it determines that
11543 the clones should share a common implementation. */
11544 DECL_ABSTRACT_P (decl) = true;
11546 else if (current_class_type
11547 && constructor_name_p (unqualified_id, current_class_type))
11548 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
11549 "as enclosing class",
11550 unqualified_id);
11552 /* If the user declares "typedef struct {...} foo" then the
11553 struct will have an anonymous name. Fill that name in now.
11554 Nothing can refer to it, so nothing needs know about the name
11555 change. */
11556 if (type != error_mark_node
11557 && unqualified_id
11558 && TYPE_NAME (type)
11559 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11560 && TYPE_UNNAMED_P (type)
11561 && declspecs->type_definition_p
11562 && attributes_naming_typedef_ok (*attrlist)
11563 && cp_type_quals (type) == TYPE_UNQUALIFIED)
11564 name_unnamed_type (type, decl);
11566 if (signed_p
11567 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11568 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11570 bad_specifiers (decl, BSP_TYPE, virtualp,
11571 memfn_quals != TYPE_UNQUALIFIED,
11572 inlinep, friendp, raises != NULL_TREE);
11574 if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
11575 /* Acknowledge that this was written:
11576 `using analias = atype;'. */
11577 TYPE_DECL_ALIAS_P (decl) = 1;
11579 return decl;
11582 /* Detect the case of an array type of unspecified size
11583 which came, as such, direct from a typedef name.
11584 We must copy the type, so that the array's domain can be
11585 individually set by the object's initializer. */
11587 if (type && typedef_type
11588 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
11589 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
11590 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
11592 /* Detect where we're using a typedef of function type to declare a
11593 function. PARMS will not be set, so we must create it now. */
11595 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
11597 tree decls = NULL_TREE;
11598 tree args;
11600 for (args = TYPE_ARG_TYPES (type);
11601 args && args != void_list_node;
11602 args = TREE_CHAIN (args))
11604 tree decl = cp_build_parm_decl (NULL_TREE, NULL_TREE,
11605 TREE_VALUE (args));
11607 DECL_CHAIN (decl) = decls;
11608 decls = decl;
11611 parms = nreverse (decls);
11613 if (decl_context != TYPENAME)
11615 /* The qualifiers on the function type become the qualifiers on
11616 the non-static member function. */
11617 memfn_quals |= type_memfn_quals (type);
11618 rqual = type_memfn_rqual (type);
11619 type_quals = TYPE_UNQUALIFIED;
11623 /* If this is a type name (such as, in a cast or sizeof),
11624 compute the type and return it now. */
11626 if (decl_context == TYPENAME)
11628 /* Note that here we don't care about type_quals. */
11630 /* Special case: "friend class foo" looks like a TYPENAME context. */
11631 if (friendp)
11633 if (inlinep)
11635 error ("%<inline%> specified for friend class declaration");
11636 inlinep = 0;
11639 if (!current_aggr)
11641 /* Don't allow friend declaration without a class-key. */
11642 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11643 permerror (input_location, "template parameters cannot be friends");
11644 else if (TREE_CODE (type) == TYPENAME_TYPE)
11645 permerror (input_location, "friend declaration requires class-key, "
11646 "i.e. %<friend class %T::%D%>",
11647 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
11648 else
11649 permerror (input_location, "friend declaration requires class-key, "
11650 "i.e. %<friend %#T%>",
11651 type);
11654 /* Only try to do this stuff if we didn't already give up. */
11655 if (type != integer_type_node)
11657 /* A friendly class? */
11658 if (current_class_type)
11659 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
11660 /*complain=*/true);
11661 else
11662 error ("trying to make class %qT a friend of global scope",
11663 type);
11665 type = void_type_node;
11668 else if (memfn_quals || rqual)
11670 if (ctype == NULL_TREE
11671 && TREE_CODE (type) == METHOD_TYPE)
11672 ctype = TYPE_METHOD_BASETYPE (type);
11674 if (ctype)
11675 type = build_memfn_type (type, ctype, memfn_quals, rqual);
11676 /* Core issue #547: need to allow this in template type args.
11677 Allow it in general in C++11 for alias-declarations. */
11678 else if ((template_type_arg || cxx_dialect >= cxx11)
11679 && TREE_CODE (type) == FUNCTION_TYPE)
11680 type = apply_memfn_quals (type, memfn_quals, rqual);
11681 else
11682 error ("invalid qualifiers on non-member function type");
11685 if (reqs)
11686 error_at (location_of (reqs), "requires-clause on type-id");
11688 return type;
11690 else if (unqualified_id == NULL_TREE && decl_context != PARM
11691 && decl_context != CATCHPARM
11692 && TREE_CODE (type) != UNION_TYPE
11693 && ! bitfield
11694 && innermost_code != cdk_decomp)
11696 error ("abstract declarator %qT used as declaration", type);
11697 return error_mark_node;
11700 if (!FUNC_OR_METHOD_TYPE_P (type))
11702 /* Only functions may be declared using an operator-function-id. */
11703 if (dname && IDENTIFIER_ANY_OP_P (dname))
11705 error ("declaration of %qD as non-function", dname);
11706 return error_mark_node;
11709 if (reqs)
11710 error_at (location_of (reqs),
11711 "requires-clause on declaration of non-function type %qT",
11712 type);
11715 /* We don't check parameter types here because we can emit a better
11716 error message later. */
11717 if (decl_context != PARM)
11719 type = check_var_type (unqualified_id, type);
11720 if (type == error_mark_node)
11721 return error_mark_node;
11724 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11725 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
11727 if (decl_context == PARM || decl_context == CATCHPARM)
11729 if (ctype || in_namespace)
11730 error ("cannot use %<::%> in parameter declaration");
11732 if (type_uses_auto (type)
11733 && !(cxx_dialect >= cxx17 && template_parm_flag))
11735 if (cxx_dialect >= cxx14)
11736 error ("%<auto%> parameter not permitted in this context");
11737 else
11738 error ("parameter declared %<auto%>");
11739 type = error_mark_node;
11742 /* A parameter declared as an array of T is really a pointer to T.
11743 One declared as a function is really a pointer to a function.
11744 One declared as a member is really a pointer to member. */
11746 if (TREE_CODE (type) == ARRAY_TYPE)
11748 /* Transfer const-ness of array into that of type pointed to. */
11749 type = build_pointer_type (TREE_TYPE (type));
11750 type_quals = TYPE_UNQUALIFIED;
11751 array_parameter_p = true;
11753 else if (TREE_CODE (type) == FUNCTION_TYPE)
11754 type = build_pointer_type (type);
11757 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
11758 && !(identifier_p (unqualified_id)
11759 && IDENTIFIER_NEWDEL_OP_P (unqualified_id)))
11761 cp_cv_quals real_quals = memfn_quals;
11762 if (cxx_dialect < cxx14 && constexpr_p
11763 && sfk != sfk_constructor && sfk != sfk_destructor)
11764 real_quals |= TYPE_QUAL_CONST;
11765 type = build_memfn_type (type, ctype, real_quals, rqual);
11769 tree decl = NULL_TREE;
11771 if (decl_context == PARM)
11773 decl = cp_build_parm_decl (NULL_TREE, unqualified_id, type);
11774 DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
11776 bad_specifiers (decl, BSP_PARM, virtualp,
11777 memfn_quals != TYPE_UNQUALIFIED,
11778 inlinep, friendp, raises != NULL_TREE);
11780 else if (decl_context == FIELD)
11782 if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE)
11783 if (tree auto_node = type_uses_auto (type))
11785 location_t loc = declspecs->locations[ds_type_spec];
11786 if (CLASS_PLACEHOLDER_TEMPLATE (auto_node))
11787 error_at (loc, "invalid use of template-name %qE without an "
11788 "argument list",
11789 CLASS_PLACEHOLDER_TEMPLATE (auto_node));
11790 else
11791 error_at (loc, "non-static data member declared with "
11792 "placeholder %qT", auto_node);
11793 type = error_mark_node;
11796 /* The C99 flexible array extension. */
11797 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
11798 && TYPE_DOMAIN (type) == NULL_TREE)
11800 if (ctype
11801 && (TREE_CODE (ctype) == UNION_TYPE
11802 || TREE_CODE (ctype) == QUAL_UNION_TYPE))
11804 error ("flexible array member in union");
11805 type = error_mark_node;
11807 else
11809 /* Array is a flexible member. */
11810 if (in_system_header_at (input_location))
11811 /* Do not warn on flexible array members in system
11812 headers because glibc uses them. */;
11813 else if (name)
11814 pedwarn (input_location, OPT_Wpedantic,
11815 "ISO C++ forbids flexible array member %qs", name);
11816 else
11817 pedwarn (input_location, OPT_Wpedantic,
11818 "ISO C++ forbids flexible array members");
11820 /* Flexible array member has a null domain. */
11821 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
11825 if (type == error_mark_node)
11827 /* Happens when declaring arrays of sizes which
11828 are error_mark_node, for example. */
11829 decl = NULL_TREE;
11831 else if (in_namespace && !friendp)
11833 /* Something like struct S { int N::j; }; */
11834 error ("invalid use of %<::%>");
11835 return error_mark_node;
11837 else if (TREE_CODE (type) == FUNCTION_TYPE
11838 || TREE_CODE (type) == METHOD_TYPE)
11840 int publicp = 0;
11841 tree function_context;
11843 if (friendp == 0)
11845 /* This should never happen in pure C++ (the check
11846 could be an assert). It could happen in
11847 Objective-C++ if someone writes invalid code that
11848 uses a function declaration for an instance
11849 variable or property (instance variables and
11850 properties are parsed as FIELD_DECLs, but they are
11851 part of an Objective-C class, not a C++ class).
11852 That code is invalid and is caught by this
11853 check. */
11854 if (!ctype)
11856 error ("declaration of function %qD in invalid context",
11857 unqualified_id);
11858 return error_mark_node;
11861 /* ``A union may [ ... ] not [ have ] virtual functions.''
11862 ARM 9.5 */
11863 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11865 error ("function %qD declared %<virtual%> inside a union",
11866 unqualified_id);
11867 return error_mark_node;
11870 if (virtualp
11871 && identifier_p (unqualified_id)
11872 && IDENTIFIER_NEWDEL_OP_P (unqualified_id))
11874 error ("%qD cannot be declared %<virtual%>, since it "
11875 "is always static", unqualified_id);
11876 virtualp = 0;
11880 /* Check that the name used for a destructor makes sense. */
11881 if (sfk == sfk_destructor)
11883 tree uqname = id_declarator->u.id.unqualified_name;
11885 if (!ctype)
11887 gcc_assert (friendp);
11888 error ("expected qualified name in friend declaration "
11889 "for destructor %qD", uqname);
11890 return error_mark_node;
11893 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
11895 error ("declaration of %qD as member of %qT",
11896 uqname, ctype);
11897 return error_mark_node;
11899 if (concept_p)
11901 error ("a destructor cannot be %<concept%>");
11902 return error_mark_node;
11904 if (constexpr_p)
11906 error ("a destructor cannot be %<constexpr%>");
11907 return error_mark_node;
11910 else if (sfk == sfk_constructor && friendp && !ctype)
11912 error ("expected qualified name in friend declaration "
11913 "for constructor %qD",
11914 id_declarator->u.id.unqualified_name);
11915 return error_mark_node;
11917 if (sfk == sfk_constructor)
11918 if (concept_p)
11920 error ("a constructor cannot be %<concept%>");
11921 return error_mark_node;
11923 if (concept_p)
11925 error ("a concept cannot be a member function");
11926 concept_p = false;
11929 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
11931 tree tmpl = TREE_OPERAND (unqualified_id, 0);
11932 if (variable_template_p (tmpl))
11934 error ("specialization of variable template %qD "
11935 "declared as function", tmpl);
11936 inform (DECL_SOURCE_LOCATION (tmpl),
11937 "variable template declared here");
11938 return error_mark_node;
11942 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
11943 function_context = (ctype != NULL_TREE) ?
11944 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
11945 publicp = (! friendp || ! staticp)
11946 && function_context == NULL_TREE;
11948 if (late_return_type_p)
11949 TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
11951 decl = grokfndecl (ctype, type,
11952 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
11953 ? unqualified_id : dname,
11954 parms,
11955 unqualified_id,
11956 reqs,
11957 virtualp, flags, memfn_quals, rqual, raises,
11958 friendp ? -1 : 0, friendp, publicp,
11959 inlinep | (2 * constexpr_p) | (4 * concept_p),
11960 initialized == SD_DELETED, sfk,
11961 funcdef_flag, template_count, in_namespace,
11962 attrlist, declarator->id_loc);
11963 decl = set_virt_specifiers (decl, virt_specifiers);
11964 if (decl == NULL_TREE)
11965 return error_mark_node;
11966 #if 0
11967 /* This clobbers the attrs stored in `decl' from `attrlist'. */
11968 /* The decl and setting of decl_attr is also turned off. */
11969 decl = build_decl_attribute_variant (decl, decl_attr);
11970 #endif
11972 /* [class.conv.ctor]
11974 A constructor declared without the function-specifier
11975 explicit that can be called with a single parameter
11976 specifies a conversion from the type of its first
11977 parameter to the type of its class. Such a constructor
11978 is called a converting constructor. */
11979 if (explicitp == 2)
11980 DECL_NONCONVERTING_P (decl) = 1;
11982 else if (!staticp && !dependent_type_p (type)
11983 && !COMPLETE_TYPE_P (complete_type (type))
11984 && (!complete_or_array_type_p (type)
11985 || initialized == 0))
11987 if (TREE_CODE (type) != ARRAY_TYPE
11988 || !COMPLETE_TYPE_P (TREE_TYPE (type)))
11990 if (unqualified_id)
11992 error ("field %qD has incomplete type %qT",
11993 unqualified_id, type);
11994 cxx_incomplete_type_inform (strip_array_types (type));
11996 else
11997 error ("name %qT has incomplete type", type);
11999 type = error_mark_node;
12000 decl = NULL_TREE;
12003 else
12005 if (friendp)
12007 error ("%qE is neither function nor member function; "
12008 "cannot be declared friend", unqualified_id);
12009 friendp = 0;
12011 decl = NULL_TREE;
12014 if (friendp)
12016 /* Friends are treated specially. */
12017 if (ctype == current_class_type)
12018 ; /* We already issued a permerror. */
12019 else if (decl && DECL_NAME (decl))
12021 if (template_class_depth (current_class_type) == 0)
12023 decl = check_explicit_specialization
12024 (unqualified_id, decl, template_count,
12025 2 * funcdef_flag + 4);
12026 if (decl == error_mark_node)
12027 return error_mark_node;
12030 decl = do_friend (ctype, unqualified_id, decl,
12031 *attrlist, flags,
12032 funcdef_flag);
12033 return decl;
12035 else
12036 return error_mark_node;
12039 /* Structure field. It may not be a function, except for C++. */
12041 if (decl == NULL_TREE)
12043 if (staticp)
12045 /* C++ allows static class members. All other work
12046 for this is done by grokfield. */
12047 decl = build_lang_decl_loc (declarator
12048 ? declarator->id_loc
12049 : input_location,
12050 VAR_DECL, unqualified_id, type);
12051 set_linkage_for_static_data_member (decl);
12052 if (concept_p)
12053 error ("static data member %qE declared %<concept%>",
12054 unqualified_id);
12055 else if (constexpr_p && !initialized)
12057 error ("%<constexpr%> static data member %qD must have an "
12058 "initializer", decl);
12059 constexpr_p = false;
12062 if (inlinep)
12063 mark_inline_variable (decl);
12065 if (!DECL_VAR_DECLARED_INLINE_P (decl)
12066 && !(cxx_dialect >= cxx17 && constexpr_p))
12067 /* Even if there is an in-class initialization, DECL
12068 is considered undefined until an out-of-class
12069 definition is provided, unless this is an inline
12070 variable. */
12071 DECL_EXTERNAL (decl) = 1;
12073 if (thread_p)
12075 CP_DECL_THREAD_LOCAL_P (decl) = true;
12076 if (!processing_template_decl)
12077 set_decl_tls_model (decl, decl_default_tls_model (decl));
12078 if (declspecs->gnu_thread_keyword_p)
12079 SET_DECL_GNU_TLS_P (decl);
12082 else
12084 if (concept_p)
12085 error ("non-static data member %qE declared %<concept%>",
12086 unqualified_id);
12087 else if (constexpr_p)
12089 error ("non-static data member %qE declared %<constexpr%>",
12090 unqualified_id);
12091 constexpr_p = false;
12093 decl = build_decl (input_location,
12094 FIELD_DECL, unqualified_id, type);
12095 DECL_NONADDRESSABLE_P (decl) = bitfield;
12096 if (bitfield && !unqualified_id)
12098 TREE_NO_WARNING (decl) = 1;
12099 DECL_PADDING_P (decl) = 1;
12102 if (storage_class == sc_mutable)
12104 DECL_MUTABLE_P (decl) = 1;
12105 storage_class = sc_none;
12108 if (initialized)
12110 /* An attempt is being made to initialize a non-static
12111 member. This is new in C++11. */
12112 maybe_warn_cpp0x (CPP0X_NSDMI);
12114 /* If this has been parsed with static storage class, but
12115 errors forced staticp to be cleared, ensure NSDMI is
12116 not present. */
12117 if (declspecs->storage_class == sc_static)
12118 DECL_INITIAL (decl) = error_mark_node;
12122 bad_specifiers (decl, BSP_FIELD, virtualp,
12123 memfn_quals != TYPE_UNQUALIFIED,
12124 staticp ? false : inlinep, friendp,
12125 raises != NULL_TREE);
12128 else if (TREE_CODE (type) == FUNCTION_TYPE
12129 || TREE_CODE (type) == METHOD_TYPE)
12131 tree original_name;
12132 int publicp = 0;
12134 if (!unqualified_id)
12135 return error_mark_node;
12137 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12138 original_name = dname;
12139 else
12140 original_name = unqualified_id;
12141 // FIXME:gcc_assert (original_name == dname);
12143 if (storage_class == sc_auto)
12144 error ("storage class %<auto%> invalid for function %qs", name);
12145 else if (storage_class == sc_register)
12146 error ("storage class %<register%> invalid for function %qs", name);
12147 else if (thread_p)
12149 if (declspecs->gnu_thread_keyword_p)
12150 error ("storage class %<__thread%> invalid for function %qs",
12151 name);
12152 else
12153 error ("storage class %<thread_local%> invalid for function %qs",
12154 name);
12157 if (virt_specifiers)
12158 error ("virt-specifiers in %qs not allowed outside a class definition", name);
12159 /* Function declaration not at top level.
12160 Storage classes other than `extern' are not allowed
12161 and `extern' makes no difference. */
12162 if (! toplevel_bindings_p ()
12163 && (storage_class == sc_static
12164 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
12165 && pedantic)
12167 if (storage_class == sc_static)
12168 pedwarn (input_location, OPT_Wpedantic,
12169 "%<static%> specifier invalid for function %qs "
12170 "declared out of global scope", name);
12171 else
12172 pedwarn (input_location, OPT_Wpedantic,
12173 "%<inline%> specifier invalid for function %qs "
12174 "declared out of global scope", name);
12177 if (ctype == NULL_TREE)
12179 if (virtualp)
12181 error ("virtual non-class function %qs", name);
12182 virtualp = 0;
12184 else if (sfk == sfk_constructor
12185 || sfk == sfk_destructor)
12187 error (funcdef_flag
12188 ? G_("%qs defined in a non-class scope")
12189 : G_("%qs declared in a non-class scope"), name);
12190 sfk = sfk_none;
12194 /* Record whether the function is public. */
12195 publicp = (ctype != NULL_TREE
12196 || storage_class != sc_static);
12198 if (late_return_type_p)
12199 TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
12201 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
12202 reqs, virtualp, flags, memfn_quals, rqual, raises,
12203 1, friendp,
12204 publicp,
12205 inlinep | (2 * constexpr_p) | (4 * concept_p),
12206 initialized == SD_DELETED,
12207 sfk,
12208 funcdef_flag,
12209 template_count, in_namespace, attrlist,
12210 declarator->id_loc);
12211 if (decl == NULL_TREE)
12212 return error_mark_node;
12214 if (explicitp == 2)
12215 DECL_NONCONVERTING_P (decl) = 1;
12216 if (staticp == 1)
12218 int invalid_static = 0;
12220 /* Don't allow a static member function in a class, and forbid
12221 declaring main to be static. */
12222 if (TREE_CODE (type) == METHOD_TYPE)
12224 permerror (input_location, "cannot declare member function %qD to have "
12225 "static linkage", decl);
12226 invalid_static = 1;
12228 else if (current_function_decl)
12230 /* 7.1.1: There can be no static function declarations within a
12231 block. */
12232 error ("cannot declare static function inside another function");
12233 invalid_static = 1;
12236 if (invalid_static)
12238 staticp = 0;
12239 storage_class = sc_none;
12243 else
12245 /* It's a variable. */
12247 /* An uninitialized decl with `extern' is a reference. */
12248 decl = grokvardecl (type, dname, unqualified_id,
12249 declspecs,
12250 initialized,
12251 type_quals,
12252 inlinep,
12253 concept_p,
12254 template_count,
12255 ctype ? ctype : in_namespace);
12256 if (decl == NULL_TREE)
12257 return error_mark_node;
12259 bad_specifiers (decl, BSP_VAR, virtualp,
12260 memfn_quals != TYPE_UNQUALIFIED,
12261 inlinep, friendp, raises != NULL_TREE);
12263 if (ctype)
12265 DECL_CONTEXT (decl) = ctype;
12266 if (staticp == 1)
12268 permerror (input_location, "%<static%> may not be used when defining "
12269 "(as opposed to declaring) a static data member");
12270 staticp = 0;
12271 storage_class = sc_none;
12273 if (storage_class == sc_register && TREE_STATIC (decl))
12275 error ("static member %qD declared %<register%>", decl);
12276 storage_class = sc_none;
12278 if (storage_class == sc_extern && pedantic)
12280 pedwarn (input_location, OPT_Wpedantic,
12281 "cannot explicitly declare member %q#D to have "
12282 "extern linkage", decl);
12283 storage_class = sc_none;
12286 else if (constexpr_p && DECL_EXTERNAL (decl))
12288 error ("declaration of %<constexpr%> variable %qD "
12289 "is not a definition", decl);
12290 constexpr_p = false;
12293 if (inlinep)
12294 mark_inline_variable (decl);
12295 if (innermost_code == cdk_decomp)
12297 gcc_assert (declarator && declarator->kind == cdk_decomp);
12298 DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
12299 DECL_ARTIFICIAL (decl) = 1;
12300 fit_decomposition_lang_decl (decl, NULL_TREE);
12304 if (VAR_P (decl) && !initialized)
12305 if (tree auto_node = type_uses_auto (type))
12306 if (!CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12308 location_t loc = declspecs->locations[ds_type_spec];
12309 error_at (loc, "declaration of %q#D has no initializer", decl);
12310 TREE_TYPE (decl) = error_mark_node;
12313 if (storage_class == sc_extern && initialized && !funcdef_flag)
12315 if (toplevel_bindings_p ())
12317 /* It's common practice (and completely valid) to have a const
12318 be initialized and declared extern. */
12319 if (!(type_quals & TYPE_QUAL_CONST))
12320 warning (0, "%qs initialized and declared %<extern%>", name);
12322 else
12324 error ("%qs has both %<extern%> and initializer", name);
12325 return error_mark_node;
12329 /* Record `register' declaration for warnings on &
12330 and in case doing stupid register allocation. */
12332 if (storage_class == sc_register)
12334 DECL_REGISTER (decl) = 1;
12335 /* Warn about register storage specifiers on PARM_DECLs. */
12336 if (TREE_CODE (decl) == PARM_DECL)
12338 if (cxx_dialect >= cxx17)
12339 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12340 "ISO C++17 does not allow %<register%> storage "
12341 "class specifier");
12342 else
12343 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12344 "%<register%> storage class specifier used");
12347 else if (storage_class == sc_extern)
12348 DECL_THIS_EXTERN (decl) = 1;
12349 else if (storage_class == sc_static)
12350 DECL_THIS_STATIC (decl) = 1;
12352 /* Set constexpr flag on vars (functions got it in grokfndecl). */
12353 if (constexpr_p && VAR_P (decl))
12354 DECL_DECLARED_CONSTEXPR_P (decl) = true;
12356 /* Record constancy and volatility on the DECL itself . There's
12357 no need to do this when processing a template; we'll do this
12358 for the instantiated declaration based on the type of DECL. */
12359 if (!processing_template_decl)
12360 cp_apply_type_quals_to_decl (type_quals, decl);
12362 return decl;
12366 /* Subroutine of start_function. Ensure that each of the parameter
12367 types (as listed in PARMS) is complete, as is required for a
12368 function definition. */
12370 static void
12371 require_complete_types_for_parms (tree parms)
12373 for (; parms; parms = DECL_CHAIN (parms))
12375 if (dependent_type_p (TREE_TYPE (parms)))
12376 continue;
12377 if (!VOID_TYPE_P (TREE_TYPE (parms))
12378 && complete_type_or_else (TREE_TYPE (parms), parms))
12380 relayout_decl (parms);
12381 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
12383 maybe_warn_parm_abi (TREE_TYPE (parms),
12384 DECL_SOURCE_LOCATION (parms));
12386 else
12387 /* grokparms or complete_type_or_else will have already issued
12388 an error. */
12389 TREE_TYPE (parms) = error_mark_node;
12393 /* Returns nonzero if T is a local variable. */
12396 local_variable_p (const_tree t)
12398 if ((VAR_P (t)
12399 /* A VAR_DECL with a context that is a _TYPE is a static data
12400 member. */
12401 && !TYPE_P (CP_DECL_CONTEXT (t))
12402 /* Any other non-local variable must be at namespace scope. */
12403 && !DECL_NAMESPACE_SCOPE_P (t))
12404 || (TREE_CODE (t) == PARM_DECL))
12405 return 1;
12407 return 0;
12410 /* Like local_variable_p, but suitable for use as a tree-walking
12411 function. */
12413 static tree
12414 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
12415 void * /*data*/)
12417 if (local_variable_p (*tp)
12418 && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
12419 return *tp;
12420 else if (TYPE_P (*tp))
12421 *walk_subtrees = 0;
12423 return NULL_TREE;
12426 /* Check that ARG, which is a default-argument expression for a
12427 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
12428 something goes wrong. DECL may also be a _TYPE node, rather than a
12429 DECL, if there is no DECL available. */
12431 tree
12432 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
12434 tree var;
12435 tree decl_type;
12437 if (TREE_CODE (arg) == DEFAULT_ARG)
12438 /* We get a DEFAULT_ARG when looking at an in-class declaration
12439 with a default argument. Ignore the argument for now; we'll
12440 deal with it after the class is complete. */
12441 return arg;
12443 if (TYPE_P (decl))
12445 decl_type = decl;
12446 decl = NULL_TREE;
12448 else
12449 decl_type = TREE_TYPE (decl);
12451 if (arg == error_mark_node
12452 || decl == error_mark_node
12453 || TREE_TYPE (arg) == error_mark_node
12454 || decl_type == error_mark_node)
12455 /* Something already went wrong. There's no need to check
12456 further. */
12457 return error_mark_node;
12459 /* [dcl.fct.default]
12461 A default argument expression is implicitly converted to the
12462 parameter type. */
12463 ++cp_unevaluated_operand;
12464 perform_implicit_conversion_flags (decl_type, arg, complain,
12465 LOOKUP_IMPLICIT);
12466 --cp_unevaluated_operand;
12468 /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
12469 the call sites. */
12470 if (TYPE_PTR_OR_PTRMEM_P (decl_type)
12471 && null_ptr_cst_p (arg))
12472 return nullptr_node;
12474 /* [dcl.fct.default]
12476 Local variables shall not be used in default argument
12477 expressions.
12479 The keyword `this' shall not be used in a default argument of a
12480 member function. */
12481 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
12482 if (var)
12484 if (complain & tf_warning_or_error)
12486 if (DECL_NAME (var) == this_identifier)
12487 permerror (input_location, "default argument %qE uses %qD",
12488 arg, var);
12489 else
12490 error ("default argument %qE uses local variable %qD", arg, var);
12492 return error_mark_node;
12495 /* All is well. */
12496 return arg;
12499 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
12501 static tree
12502 type_is_deprecated (tree type)
12504 enum tree_code code;
12505 if (TREE_DEPRECATED (type))
12506 return type;
12507 if (TYPE_NAME (type))
12509 if (TREE_DEPRECATED (TYPE_NAME (type)))
12510 return type;
12511 else
12512 return NULL_TREE;
12515 /* Do warn about using typedefs to a deprecated class. */
12516 if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
12517 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
12519 code = TREE_CODE (type);
12521 if (code == POINTER_TYPE || code == REFERENCE_TYPE
12522 || code == OFFSET_TYPE || code == FUNCTION_TYPE
12523 || code == METHOD_TYPE || code == ARRAY_TYPE)
12524 return type_is_deprecated (TREE_TYPE (type));
12526 if (TYPE_PTRMEMFUNC_P (type))
12527 return type_is_deprecated
12528 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
12530 return NULL_TREE;
12533 /* Decode the list of parameter types for a function type.
12534 Given the list of things declared inside the parens,
12535 return a list of types.
12537 If this parameter does not end with an ellipsis, we append
12538 void_list_node.
12540 *PARMS is set to the chain of PARM_DECLs created. */
12542 tree
12543 grokparms (tree parmlist, tree *parms)
12545 tree result = NULL_TREE;
12546 tree decls = NULL_TREE;
12547 tree parm;
12548 int any_error = 0;
12550 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
12552 tree type = NULL_TREE;
12553 tree init = TREE_PURPOSE (parm);
12554 tree decl = TREE_VALUE (parm);
12556 if (parm == void_list_node)
12557 break;
12559 if (! decl || TREE_TYPE (decl) == error_mark_node)
12560 continue;
12562 type = TREE_TYPE (decl);
12563 if (VOID_TYPE_P (type))
12565 if (same_type_p (type, void_type_node)
12566 && !init
12567 && !DECL_NAME (decl) && !result
12568 && TREE_CHAIN (parm) == void_list_node)
12569 /* DR 577: A parameter list consisting of a single
12570 unnamed parameter of non-dependent type 'void'. */
12571 break;
12572 else if (cv_qualified_p (type))
12573 error_at (DECL_SOURCE_LOCATION (decl),
12574 "invalid use of cv-qualified type %qT in "
12575 "parameter declaration", type);
12576 else
12577 error_at (DECL_SOURCE_LOCATION (decl),
12578 "invalid use of type %<void%> in parameter "
12579 "declaration");
12580 /* It's not a good idea to actually create parameters of
12581 type `void'; other parts of the compiler assume that a
12582 void type terminates the parameter list. */
12583 type = error_mark_node;
12584 TREE_TYPE (decl) = error_mark_node;
12587 if (type != error_mark_node)
12589 if (deprecated_state != DEPRECATED_SUPPRESS)
12591 tree deptype = type_is_deprecated (type);
12592 if (deptype)
12593 warn_deprecated_use (deptype, NULL_TREE);
12596 /* Top-level qualifiers on the parameters are
12597 ignored for function types. */
12598 type = cp_build_qualified_type (type, 0);
12599 if (TREE_CODE (type) == METHOD_TYPE)
12601 error ("parameter %qD invalidly declared method type", decl);
12602 type = build_pointer_type (type);
12603 TREE_TYPE (decl) = type;
12605 else if (abstract_virtuals_error (decl, type))
12606 any_error = 1; /* Seems like a good idea. */
12607 else if (cxx_dialect < cxx17 && POINTER_TYPE_P (type))
12609 /* Before C++17 DR 393:
12610 [dcl.fct]/6, parameter types cannot contain pointers
12611 (references) to arrays of unknown bound. */
12612 tree t = TREE_TYPE (type);
12613 int ptr = TYPE_PTR_P (type);
12615 while (1)
12617 if (TYPE_PTR_P (t))
12618 ptr = 1;
12619 else if (TREE_CODE (t) != ARRAY_TYPE)
12620 break;
12621 else if (!TYPE_DOMAIN (t))
12622 break;
12623 t = TREE_TYPE (t);
12625 if (TREE_CODE (t) == ARRAY_TYPE)
12626 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
12628 ? G_("parameter %qD includes pointer to array of "
12629 "unknown bound %qT")
12630 : G_("parameter %qD includes reference to array of "
12631 "unknown bound %qT"),
12632 decl, t);
12635 if (any_error)
12636 init = NULL_TREE;
12637 else if (init && !processing_template_decl)
12638 init = check_default_argument (decl, init, tf_warning_or_error);
12641 DECL_CHAIN (decl) = decls;
12642 decls = decl;
12643 result = tree_cons (init, type, result);
12645 decls = nreverse (decls);
12646 result = nreverse (result);
12647 if (parm)
12648 result = chainon (result, void_list_node);
12649 *parms = decls;
12651 return result;
12655 /* D is a constructor or overloaded `operator='.
12657 Let T be the class in which D is declared. Then, this function
12658 returns:
12660 -1 if D's is an ill-formed constructor or copy assignment operator
12661 whose first parameter is of type `T'.
12662 0 if D is not a copy constructor or copy assignment
12663 operator.
12664 1 if D is a copy constructor or copy assignment operator whose
12665 first parameter is a reference to non-const qualified T.
12666 2 if D is a copy constructor or copy assignment operator whose
12667 first parameter is a reference to const qualified T.
12669 This function can be used as a predicate. Positive values indicate
12670 a copy constructor and nonzero values indicate a copy assignment
12671 operator. */
12674 copy_fn_p (const_tree d)
12676 tree args;
12677 tree arg_type;
12678 int result = 1;
12680 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
12682 if (TREE_CODE (d) == TEMPLATE_DECL
12683 || (DECL_TEMPLATE_INFO (d)
12684 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
12685 /* Instantiations of template member functions are never copy
12686 functions. Note that member functions of templated classes are
12687 represented as template functions internally, and we must
12688 accept those as copy functions. */
12689 return 0;
12691 args = FUNCTION_FIRST_USER_PARMTYPE (d);
12692 if (!args)
12693 return 0;
12695 arg_type = TREE_VALUE (args);
12696 if (arg_type == error_mark_node)
12697 return 0;
12699 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
12701 /* Pass by value copy assignment operator. */
12702 result = -1;
12704 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
12705 && !TYPE_REF_IS_RVALUE (arg_type)
12706 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
12708 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
12709 result = 2;
12711 else
12712 return 0;
12714 args = TREE_CHAIN (args);
12716 if (args && args != void_list_node && !TREE_PURPOSE (args))
12717 /* There are more non-optional args. */
12718 return 0;
12720 return result;
12723 /* D is a constructor or overloaded `operator='.
12725 Let T be the class in which D is declared. Then, this function
12726 returns true when D is a move constructor or move assignment
12727 operator, false otherwise. */
12729 bool
12730 move_fn_p (const_tree d)
12732 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
12734 if (cxx_dialect == cxx98)
12735 /* There are no move constructors if we are in C++98 mode. */
12736 return false;
12738 if (TREE_CODE (d) == TEMPLATE_DECL
12739 || (DECL_TEMPLATE_INFO (d)
12740 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
12741 /* Instantiations of template member functions are never move
12742 functions. Note that member functions of templated classes are
12743 represented as template functions internally, and we must
12744 accept those as move functions. */
12745 return 0;
12747 return move_signature_fn_p (d);
12750 /* D is a constructor or overloaded `operator='.
12752 Then, this function returns true when D has the same signature as a move
12753 constructor or move assignment operator (because either it is such a
12754 ctor/op= or it is a template specialization with the same signature),
12755 false otherwise. */
12757 bool
12758 move_signature_fn_p (const_tree d)
12760 tree args;
12761 tree arg_type;
12762 bool result = false;
12764 args = FUNCTION_FIRST_USER_PARMTYPE (d);
12765 if (!args)
12766 return 0;
12768 arg_type = TREE_VALUE (args);
12769 if (arg_type == error_mark_node)
12770 return 0;
12772 if (TREE_CODE (arg_type) == REFERENCE_TYPE
12773 && TYPE_REF_IS_RVALUE (arg_type)
12774 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
12775 DECL_CONTEXT (d)))
12776 result = true;
12778 args = TREE_CHAIN (args);
12780 if (args && args != void_list_node && !TREE_PURPOSE (args))
12781 /* There are more non-optional args. */
12782 return false;
12784 return result;
12787 /* Remember any special properties of member function DECL. */
12789 void
12790 grok_special_member_properties (tree decl)
12792 tree class_type;
12794 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
12795 return;
12797 class_type = DECL_CONTEXT (decl);
12798 if (IDENTIFIER_CTOR_P (DECL_NAME (decl)))
12800 int ctor = copy_fn_p (decl);
12802 if (!DECL_ARTIFICIAL (decl))
12803 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
12805 if (ctor > 0)
12807 /* [class.copy]
12809 A non-template constructor for class X is a copy
12810 constructor if its first parameter is of type X&, const
12811 X&, volatile X& or const volatile X&, and either there
12812 are no other parameters or else all other parameters have
12813 default arguments. */
12814 TYPE_HAS_COPY_CTOR (class_type) = 1;
12815 if (user_provided_p (decl))
12816 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
12817 if (ctor > 1)
12818 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
12820 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
12821 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
12822 else if (move_fn_p (decl) && user_provided_p (decl))
12823 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
12824 else if (is_list_ctor (decl))
12825 TYPE_HAS_LIST_CTOR (class_type) = 1;
12827 if (DECL_DECLARED_CONSTEXPR_P (decl)
12828 && !ctor && !move_fn_p (decl))
12829 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
12831 else if (DECL_NAME (decl) == assign_op_identifier)
12833 /* [class.copy]
12835 A non-template assignment operator for class X is a copy
12836 assignment operator if its parameter is of type X, X&, const
12837 X&, volatile X& or const volatile X&. */
12839 int assop = copy_fn_p (decl);
12841 if (assop)
12843 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
12844 if (user_provided_p (decl))
12845 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
12846 if (assop != 1)
12847 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
12849 else if (move_fn_p (decl) && user_provided_p (decl))
12850 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
12852 else if (IDENTIFIER_CONV_OP_P (DECL_NAME (decl)))
12853 TYPE_HAS_CONVERSION (class_type) = true;
12855 /* Destructors are handled in check_methods. */
12858 /* Check a constructor DECL has the correct form. Complains
12859 if the class has a constructor of the form X(X). */
12861 bool
12862 grok_ctor_properties (const_tree ctype, const_tree decl)
12864 int ctor_parm = copy_fn_p (decl);
12866 if (ctor_parm < 0)
12868 /* [class.copy]
12870 A declaration of a constructor for a class X is ill-formed if
12871 its first parameter is of type (optionally cv-qualified) X
12872 and either there are no other parameters or else all other
12873 parameters have default arguments.
12875 We *don't* complain about member template instantiations that
12876 have this form, though; they can occur as we try to decide
12877 what constructor to use during overload resolution. Since
12878 overload resolution will never prefer such a constructor to
12879 the non-template copy constructor (which is either explicitly
12880 or implicitly defined), there's no need to worry about their
12881 existence. Theoretically, they should never even be
12882 instantiated, but that's hard to forestall. */
12883 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
12884 ctype, ctype);
12885 return false;
12888 return true;
12891 /* DECL is a declaration for an overloaded or conversion operator. If
12892 COMPLAIN is true, errors are issued for invalid declarations. */
12894 bool
12895 grok_op_properties (tree decl, bool complain)
12897 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
12898 bool methodp = TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE;
12899 tree name = DECL_NAME (decl);
12901 tree class_type = DECL_CONTEXT (decl);
12902 if (class_type && !CLASS_TYPE_P (class_type))
12903 class_type = NULL_TREE;
12905 tree_code operator_code;
12906 unsigned op_flags;
12907 if (IDENTIFIER_CONV_OP_P (name))
12909 /* Conversion operators are TYPE_EXPR for the purposes of this
12910 function. */
12911 operator_code = TYPE_EXPR;
12912 op_flags = OVL_OP_FLAG_UNARY;
12914 else
12916 const ovl_op_info_t *ovl_op = IDENTIFIER_OVL_OP_INFO (name);
12918 operator_code = ovl_op->tree_code;
12919 op_flags = ovl_op->flags;
12920 gcc_checking_assert (operator_code != ERROR_MARK);
12921 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
12924 if (op_flags & OVL_OP_FLAG_ALLOC)
12926 /* operator new and operator delete are quite special. */
12927 if (class_type)
12928 switch (op_flags)
12930 case OVL_OP_FLAG_ALLOC:
12931 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
12932 break;
12934 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE:
12935 TYPE_GETS_DELETE (class_type) |= 1;
12936 break;
12938 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_VEC:
12939 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
12940 break;
12942 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE | OVL_OP_FLAG_VEC:
12943 TYPE_GETS_DELETE (class_type) |= 2;
12944 break;
12946 default:
12947 gcc_unreachable ();
12950 /* [basic.std.dynamic.allocation]/1:
12952 A program is ill-formed if an allocation function is declared
12953 in a namespace scope other than global scope or declared
12954 static in global scope.
12956 The same also holds true for deallocation functions. */
12957 if (DECL_NAMESPACE_SCOPE_P (decl))
12959 if (CP_DECL_CONTEXT (decl) != global_namespace)
12961 error ("%qD may not be declared within a namespace", decl);
12962 return false;
12965 if (!TREE_PUBLIC (decl))
12967 error ("%qD may not be declared as static", decl);
12968 return false;
12972 if (op_flags & OVL_OP_FLAG_DELETE)
12973 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
12974 else
12976 DECL_IS_OPERATOR_NEW (decl) = 1;
12977 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
12980 return true;
12983 /* An operator function must either be a non-static member function
12984 or have at least one parameter of a class, a reference to a class,
12985 an enumeration, or a reference to an enumeration. 13.4.0.6 */
12986 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
12988 if (operator_code == TYPE_EXPR
12989 || operator_code == CALL_EXPR
12990 || operator_code == COMPONENT_REF
12991 || operator_code == ARRAY_REF
12992 || operator_code == NOP_EXPR)
12994 error ("%qD must be a nonstatic member function", decl);
12995 return false;
12998 if (DECL_STATIC_FUNCTION_P (decl))
13000 error ("%qD must be either a non-static member "
13001 "function or a non-member function", decl);
13002 return false;
13005 for (tree arg = argtypes; ; arg = TREE_CHAIN (arg))
13007 if (!arg || arg == void_list_node)
13009 if (complain)
13010 error ("%qD must have an argument of class or "
13011 "enumerated type", decl);
13012 return false;
13015 tree type = non_reference (TREE_VALUE (arg));
13016 if (type == error_mark_node)
13017 return false;
13019 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
13020 because these checks are performed even on template
13021 functions. */
13022 if (MAYBE_CLASS_TYPE_P (type)
13023 || TREE_CODE (type) == ENUMERAL_TYPE)
13024 break;
13028 if (operator_code == CALL_EXPR)
13029 /* There are no further restrictions on the arguments to an overloaded
13030 "operator ()". */
13031 return true;
13033 if (operator_code == COND_EXPR)
13035 /* 13.4.0.3 */
13036 error ("ISO C++ prohibits overloading operator ?:");
13037 return false;
13040 /* Count the number of arguments and check for ellipsis. */
13041 int arity = 0;
13042 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13044 if (!arg)
13046 /* Variadic. */
13047 error ("%qD must not have variable number of arguments", decl);
13048 return false;
13050 ++arity;
13053 /* Verify correct number of arguments. */
13054 switch (op_flags)
13056 case OVL_OP_FLAG_AMBIARY:
13057 if (arity == 1)
13059 /* We have a unary instance of an ambi-ary op. Remap to the
13060 unary one. */
13061 unsigned alt = ovl_op_alternate[ovl_op_mapping [operator_code]];
13062 const ovl_op_info_t *ovl_op = &ovl_op_info[false][alt];
13063 gcc_checking_assert (ovl_op->flags == OVL_OP_FLAG_UNARY);
13064 operator_code = ovl_op->tree_code;
13065 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13067 else if (arity != 2)
13069 /* This was an ambiguous operator but is invalid. */
13070 error (methodp
13071 ? G_("%qD must have either zero or one argument")
13072 : G_("%qD must have either one or two arguments"), decl);
13073 return false;
13075 else if ((operator_code == POSTINCREMENT_EXPR
13076 || operator_code == POSTDECREMENT_EXPR)
13077 && ! processing_template_decl
13078 /* x++ and x--'s second argument must be an int. */
13079 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)),
13080 integer_type_node))
13082 error (methodp
13083 ? G_("postfix %qD must have %<int%> as its argument")
13084 : G_("postfix %qD must have %<int%> as its second argument"),
13085 decl);
13086 return false;
13088 break;
13090 case OVL_OP_FLAG_UNARY:
13091 if (arity != 1)
13093 error (methodp
13094 ? G_("%qD must have no arguments")
13095 : G_("%qD must have exactly one argument"), decl);
13096 return false;
13098 break;
13100 case OVL_OP_FLAG_BINARY:
13101 if (arity != 2)
13103 error (methodp
13104 ? G_("%qD must have exactly one argument")
13105 : G_("%qD must have exactly two arguments"), decl);
13106 return false;
13108 break;
13110 default:
13111 gcc_unreachable ();
13114 /* There can be no default arguments. */
13115 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13116 if (TREE_PURPOSE (arg))
13118 TREE_PURPOSE (arg) = NULL_TREE;
13119 if (operator_code == POSTINCREMENT_EXPR
13120 || operator_code == POSTDECREMENT_EXPR)
13121 pedwarn (input_location, OPT_Wpedantic,
13122 "%qD cannot have default arguments", decl);
13123 else
13125 error ("%qD cannot have default arguments", decl);
13126 return false;
13130 /* At this point the declaration is well-formed. It may not be
13131 sensible though. */
13133 /* Check member function warnings only on the in-class declaration.
13134 There's no point warning on an out-of-class definition. */
13135 if (class_type && class_type != current_class_type)
13136 return true;
13138 /* Warn about conversion operators that will never be used. */
13139 if (IDENTIFIER_CONV_OP_P (name)
13140 && ! DECL_TEMPLATE_INFO (decl)
13141 && warn_conversion)
13143 tree t = TREE_TYPE (name);
13144 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
13146 if (ref)
13147 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
13149 if (VOID_TYPE_P (t))
13150 warning (OPT_Wconversion,
13152 ? G_("conversion to a reference to void "
13153 "will never use a type conversion operator")
13154 : G_("conversion to void "
13155 "will never use a type conversion operator"));
13156 else if (class_type)
13158 if (t == class_type)
13159 warning (OPT_Wconversion,
13161 ? G_("conversion to a reference to the same type "
13162 "will never use a type conversion operator")
13163 : G_("conversion to the same type "
13164 "will never use a type conversion operator"));
13165 /* Don't force t to be complete here. */
13166 else if (MAYBE_CLASS_TYPE_P (t)
13167 && COMPLETE_TYPE_P (t)
13168 && DERIVED_FROM_P (t, class_type))
13169 warning (OPT_Wconversion,
13171 ? G_("conversion to a reference to a base class "
13172 "will never use a type conversion operator")
13173 : G_("conversion to a base class "
13174 "will never use a type conversion operator"));
13178 if (!warn_ecpp)
13179 return true;
13181 /* Effective C++ rules below. */
13183 /* More Effective C++ rule 7. */
13184 if (operator_code == TRUTH_ANDIF_EXPR
13185 || operator_code == TRUTH_ORIF_EXPR
13186 || operator_code == COMPOUND_EXPR)
13187 warning (OPT_Weffc__,
13188 "user-defined %qD always evaluates both arguments", decl);
13190 /* More Effective C++ rule 6. */
13191 if (operator_code == POSTINCREMENT_EXPR
13192 || operator_code == POSTDECREMENT_EXPR
13193 || operator_code == PREINCREMENT_EXPR
13194 || operator_code == PREDECREMENT_EXPR)
13196 tree arg = TREE_VALUE (argtypes);
13197 tree ret = TREE_TYPE (TREE_TYPE (decl));
13198 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
13199 arg = TREE_TYPE (arg);
13200 arg = TYPE_MAIN_VARIANT (arg);
13202 if (operator_code == PREINCREMENT_EXPR
13203 || operator_code == PREDECREMENT_EXPR)
13205 if (TREE_CODE (ret) != REFERENCE_TYPE
13206 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)), arg))
13207 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
13208 build_reference_type (arg));
13210 else
13212 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
13213 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
13217 /* Effective C++ rule 23. */
13218 if (!DECL_ASSIGNMENT_OPERATOR_P (decl)
13219 && (operator_code == PLUS_EXPR
13220 || operator_code == MINUS_EXPR
13221 || operator_code == TRUNC_DIV_EXPR
13222 || operator_code == MULT_EXPR
13223 || operator_code == TRUNC_MOD_EXPR)
13224 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
13225 warning (OPT_Weffc__, "%qD should return by value", decl);
13227 return true;
13230 /* Return a string giving the keyword associate with CODE. */
13232 static const char *
13233 tag_name (enum tag_types code)
13235 switch (code)
13237 case record_type:
13238 return "struct";
13239 case class_type:
13240 return "class";
13241 case union_type:
13242 return "union";
13243 case enum_type:
13244 return "enum";
13245 case typename_type:
13246 return "typename";
13247 default:
13248 gcc_unreachable ();
13252 /* Name lookup in an elaborated-type-specifier (after the keyword
13253 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
13254 elaborated-type-specifier is invalid, issue a diagnostic and return
13255 error_mark_node; otherwise, return the *_TYPE to which it referred.
13256 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
13258 tree
13259 check_elaborated_type_specifier (enum tag_types tag_code,
13260 tree decl,
13261 bool allow_template_p)
13263 tree type;
13265 /* In the case of:
13267 struct S { struct S *p; };
13269 name lookup will find the TYPE_DECL for the implicit "S::S"
13270 typedef. Adjust for that here. */
13271 if (DECL_SELF_REFERENCE_P (decl))
13272 decl = TYPE_NAME (TREE_TYPE (decl));
13274 type = TREE_TYPE (decl);
13276 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
13277 is false for this case as well. */
13278 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
13280 error ("using template type parameter %qT after %qs",
13281 type, tag_name (tag_code));
13282 return error_mark_node;
13284 /* Accept template template parameters. */
13285 else if (allow_template_p
13286 && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
13287 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
13289 /* [dcl.type.elab]
13291 If the identifier resolves to a typedef-name or the
13292 simple-template-id resolves to an alias template
13293 specialization, the elaborated-type-specifier is ill-formed.
13295 In other words, the only legitimate declaration to use in the
13296 elaborated type specifier is the implicit typedef created when
13297 the type is declared. */
13298 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
13299 && !DECL_SELF_REFERENCE_P (decl)
13300 && tag_code != typename_type)
13302 if (alias_template_specialization_p (type))
13303 error ("using alias template specialization %qT after %qs",
13304 type, tag_name (tag_code));
13305 else
13306 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
13307 inform (DECL_SOURCE_LOCATION (decl),
13308 "%qD has a previous declaration here", decl);
13309 return error_mark_node;
13311 else if (TREE_CODE (type) != RECORD_TYPE
13312 && TREE_CODE (type) != UNION_TYPE
13313 && tag_code != enum_type
13314 && tag_code != typename_type)
13316 error ("%qT referred to as %qs", type, tag_name (tag_code));
13317 inform (location_of (type), "%qT has a previous declaration here", type);
13318 return error_mark_node;
13320 else if (TREE_CODE (type) != ENUMERAL_TYPE
13321 && tag_code == enum_type)
13323 error ("%qT referred to as enum", type);
13324 inform (location_of (type), "%qT has a previous declaration here", type);
13325 return error_mark_node;
13327 else if (!allow_template_p
13328 && TREE_CODE (type) == RECORD_TYPE
13329 && CLASSTYPE_IS_TEMPLATE (type))
13331 /* If a class template appears as elaborated type specifier
13332 without a template header such as:
13334 template <class T> class C {};
13335 void f(class C); // No template header here
13337 then the required template argument is missing. */
13338 error ("template argument required for %<%s %T%>",
13339 tag_name (tag_code),
13340 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
13341 return error_mark_node;
13344 return type;
13347 /* Lookup NAME in elaborate type specifier in scope according to
13348 SCOPE and issue diagnostics if necessary.
13349 Return *_TYPE node upon success, NULL_TREE when the NAME is not
13350 found, and ERROR_MARK_NODE for type error. */
13352 static tree
13353 lookup_and_check_tag (enum tag_types tag_code, tree name,
13354 tag_scope scope, bool template_header_p)
13356 tree t;
13357 tree decl;
13358 if (scope == ts_global)
13360 /* First try ordinary name lookup, ignoring hidden class name
13361 injected via friend declaration. */
13362 decl = lookup_name_prefer_type (name, 2);
13363 decl = strip_using_decl (decl);
13364 /* If that fails, the name will be placed in the smallest
13365 non-class, non-function-prototype scope according to 3.3.1/5.
13366 We may already have a hidden name declared as friend in this
13367 scope. So lookup again but not ignoring hidden names.
13368 If we find one, that name will be made visible rather than
13369 creating a new tag. */
13370 if (!decl)
13371 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
13373 else
13374 decl = lookup_type_scope (name, scope);
13376 if (decl
13377 && (DECL_CLASS_TEMPLATE_P (decl)
13378 /* If scope is ts_current we're defining a class, so ignore a
13379 template template parameter. */
13380 || (scope != ts_current
13381 && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
13382 decl = DECL_TEMPLATE_RESULT (decl);
13384 if (decl && TREE_CODE (decl) == TYPE_DECL)
13386 /* Look for invalid nested type:
13387 class C {
13388 class C {};
13389 }; */
13390 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
13392 error ("%qD has the same name as the class in which it is "
13393 "declared",
13394 decl);
13395 return error_mark_node;
13398 /* Two cases we need to consider when deciding if a class
13399 template is allowed as an elaborated type specifier:
13400 1. It is a self reference to its own class.
13401 2. It comes with a template header.
13403 For example:
13405 template <class T> class C {
13406 class C *c1; // DECL_SELF_REFERENCE_P is true
13407 class D;
13409 template <class U> class C; // template_header_p is true
13410 template <class T> class C<T>::D {
13411 class C *c2; // DECL_SELF_REFERENCE_P is true
13412 }; */
13414 t = check_elaborated_type_specifier (tag_code,
13415 decl,
13416 template_header_p
13417 | DECL_SELF_REFERENCE_P (decl));
13418 if (template_header_p && t && CLASS_TYPE_P (t)
13419 && (!CLASSTYPE_TEMPLATE_INFO (t)
13420 || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))))
13422 error ("%qT is not a template", t);
13423 inform (location_of (t), "previous declaration here");
13424 if (TYPE_CLASS_SCOPE_P (t)
13425 && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t)))
13426 inform (input_location,
13427 "perhaps you want to explicitly add %<%T::%>",
13428 TYPE_CONTEXT (t));
13429 t = error_mark_node;
13432 return t;
13434 else if (decl && TREE_CODE (decl) == TREE_LIST)
13436 error ("reference to %qD is ambiguous", name);
13437 print_candidates (decl);
13438 return error_mark_node;
13440 else
13441 return NULL_TREE;
13444 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
13445 Define the tag as a forward-reference if it is not defined.
13447 If a declaration is given, process it here, and report an error if
13448 multiple declarations are not identical.
13450 SCOPE is TS_CURRENT when this is also a definition. Only look in
13451 the current frame for the name (since C++ allows new names in any
13452 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
13453 declaration. Only look beginning from the current scope outward up
13454 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
13456 TEMPLATE_HEADER_P is true when this declaration is preceded by
13457 a set of template parameters. */
13459 static tree
13460 xref_tag_1 (enum tag_types tag_code, tree name,
13461 tag_scope scope, bool template_header_p)
13463 enum tree_code code;
13464 tree context = NULL_TREE;
13466 gcc_assert (identifier_p (name));
13468 switch (tag_code)
13470 case record_type:
13471 case class_type:
13472 code = RECORD_TYPE;
13473 break;
13474 case union_type:
13475 code = UNION_TYPE;
13476 break;
13477 case enum_type:
13478 code = ENUMERAL_TYPE;
13479 break;
13480 default:
13481 gcc_unreachable ();
13484 /* In case of anonymous name, xref_tag is only called to
13485 make type node and push name. Name lookup is not required. */
13486 tree t = NULL_TREE;
13487 if (scope != ts_lambda && !anon_aggrname_p (name))
13488 t = lookup_and_check_tag (tag_code, name, scope, template_header_p);
13490 if (t == error_mark_node)
13491 return error_mark_node;
13493 if (scope != ts_current && t && current_class_type
13494 && template_class_depth (current_class_type)
13495 && template_header_p)
13497 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
13498 return t;
13500 /* Since SCOPE is not TS_CURRENT, we are not looking at a
13501 definition of this tag. Since, in addition, we are currently
13502 processing a (member) template declaration of a template
13503 class, we must be very careful; consider:
13505 template <class X>
13506 struct S1
13508 template <class U>
13509 struct S2
13510 { template <class V>
13511 friend struct S1; };
13513 Here, the S2::S1 declaration should not be confused with the
13514 outer declaration. In particular, the inner version should
13515 have a template parameter of level 2, not level 1. This
13516 would be particularly important if the member declaration
13517 were instead:
13519 template <class V = U> friend struct S1;
13521 say, when we should tsubst into `U' when instantiating
13522 S2. On the other hand, when presented with:
13524 template <class T>
13525 struct S1 {
13526 template <class U>
13527 struct S2 {};
13528 template <class U>
13529 friend struct S2;
13532 we must find the inner binding eventually. We
13533 accomplish this by making sure that the new type we
13534 create to represent this declaration has the right
13535 TYPE_CONTEXT. */
13536 context = TYPE_CONTEXT (t);
13537 t = NULL_TREE;
13540 if (! t)
13542 /* If no such tag is yet defined, create a forward-reference node
13543 and record it as the "definition".
13544 When a real declaration of this type is found,
13545 the forward-reference will be altered into a real type. */
13546 if (code == ENUMERAL_TYPE)
13548 error ("use of enum %q#D without previous declaration", name);
13549 return error_mark_node;
13551 else
13553 t = make_class_type (code);
13554 TYPE_CONTEXT (t) = context;
13555 if (scope == ts_lambda)
13557 /* Mark it as a lambda type. */
13558 CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
13559 /* And push it into current scope. */
13560 scope = ts_current;
13562 t = pushtag (name, t, scope);
13565 else
13567 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
13569 /* Check that we aren't trying to overload a class with different
13570 constraints. */
13571 tree constr = NULL_TREE;
13572 if (current_template_parms)
13574 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
13575 constr = build_constraints (reqs, NULL_TREE);
13577 if (!redeclare_class_template (t, current_template_parms, constr))
13578 return error_mark_node;
13580 else if (!processing_template_decl
13581 && CLASS_TYPE_P (t)
13582 && CLASSTYPE_IS_TEMPLATE (t))
13584 error ("redeclaration of %qT as a non-template", t);
13585 inform (location_of (t), "previous declaration %qD", t);
13586 return error_mark_node;
13589 /* Make injected friend class visible. */
13590 if (scope != ts_within_enclosing_non_class && TYPE_HIDDEN_P (t))
13592 tree decl = TYPE_NAME (t);
13594 DECL_ANTICIPATED (decl) = false;
13595 DECL_FRIEND_P (decl) = false;
13597 if (TYPE_TEMPLATE_INFO (t))
13599 tree tmpl = TYPE_TI_TEMPLATE (t);
13600 DECL_ANTICIPATED (tmpl) = false;
13601 DECL_FRIEND_P (tmpl) = false;
13606 return t;
13609 /* Wrapper for xref_tag_1. */
13611 tree
13612 xref_tag (enum tag_types tag_code, tree name,
13613 tag_scope scope, bool template_header_p)
13615 tree ret;
13616 bool subtime;
13617 subtime = timevar_cond_start (TV_NAME_LOOKUP);
13618 ret = xref_tag_1 (tag_code, name, scope, template_header_p);
13619 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
13620 return ret;
13624 tree
13625 xref_tag_from_type (tree old, tree id, tag_scope scope)
13627 enum tag_types tag_kind;
13629 if (TREE_CODE (old) == RECORD_TYPE)
13630 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
13631 else
13632 tag_kind = union_type;
13634 if (id == NULL_TREE)
13635 id = TYPE_IDENTIFIER (old);
13637 return xref_tag (tag_kind, id, scope, false);
13640 /* Create the binfo hierarchy for REF with (possibly NULL) base list
13641 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
13642 access_* node, and the TREE_VALUE is the type of the base-class.
13643 Non-NULL TREE_TYPE indicates virtual inheritance. */
13645 void
13646 xref_basetypes (tree ref, tree base_list)
13648 tree *basep;
13649 tree binfo, base_binfo;
13650 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
13651 unsigned max_bases = 0; /* Maximum direct bases. */
13652 unsigned max_dvbases = 0; /* Maximum direct virtual bases. */
13653 int i;
13654 tree default_access;
13655 tree igo_prev; /* Track Inheritance Graph Order. */
13657 if (ref == error_mark_node)
13658 return;
13660 /* The base of a derived class is private by default, all others are
13661 public. */
13662 default_access = (TREE_CODE (ref) == RECORD_TYPE
13663 && CLASSTYPE_DECLARED_CLASS (ref)
13664 ? access_private_node : access_public_node);
13666 /* First, make sure that any templates in base-classes are
13667 instantiated. This ensures that if we call ourselves recursively
13668 we do not get confused about which classes are marked and which
13669 are not. */
13670 basep = &base_list;
13671 while (*basep)
13673 tree basetype = TREE_VALUE (*basep);
13675 /* The dependent_type_p call below should really be dependent_scope_p
13676 so that we give a hard error about using an incomplete type as a
13677 base, but we allow it with a pedwarn for backward
13678 compatibility. */
13679 if (processing_template_decl
13680 && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
13681 cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
13682 if (!dependent_type_p (basetype)
13683 && !complete_type_or_else (basetype, NULL))
13684 /* An incomplete type. Remove it from the list. */
13685 *basep = TREE_CHAIN (*basep);
13686 else
13688 max_bases++;
13689 if (TREE_TYPE (*basep))
13690 max_dvbases++;
13691 if (CLASS_TYPE_P (basetype))
13692 max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
13693 basep = &TREE_CHAIN (*basep);
13696 max_vbases += max_dvbases;
13698 TYPE_MARKED_P (ref) = 1;
13700 /* The binfo slot should be empty, unless this is an (ill-formed)
13701 redefinition. */
13702 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
13704 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
13706 binfo = make_tree_binfo (max_bases);
13708 TYPE_BINFO (ref) = binfo;
13709 BINFO_OFFSET (binfo) = size_zero_node;
13710 BINFO_TYPE (binfo) = ref;
13712 /* Apply base-class info set up to the variants of this type. */
13713 fixup_type_variants (ref);
13715 if (max_bases)
13717 vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
13718 /* A C++98 POD cannot have base classes. */
13719 CLASSTYPE_NON_LAYOUT_POD_P (ref) = true;
13721 if (TREE_CODE (ref) == UNION_TYPE)
13722 error ("derived union %qT invalid", ref);
13725 if (max_bases > 1)
13726 warning (OPT_Wmultiple_inheritance,
13727 "%qT defined with multiple direct bases", ref);
13729 if (max_vbases)
13731 /* An aggregate can't have virtual base classes. */
13732 CLASSTYPE_NON_AGGREGATE (ref) = true;
13734 vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
13736 if (max_dvbases)
13737 warning (OPT_Wvirtual_inheritance,
13738 "%qT defined with direct virtual base", ref);
13741 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
13743 tree access = TREE_PURPOSE (base_list);
13744 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
13745 tree basetype = TREE_VALUE (base_list);
13747 if (access == access_default_node)
13748 access = default_access;
13750 /* Before C++17, an aggregate cannot have base classes. In C++17, an
13751 aggregate can't have virtual, private, or protected base classes. */
13752 if (cxx_dialect < cxx17
13753 || access != access_public_node
13754 || via_virtual)
13755 CLASSTYPE_NON_AGGREGATE (ref) = true;
13757 if (PACK_EXPANSION_P (basetype))
13758 basetype = PACK_EXPANSION_PATTERN (basetype);
13759 if (TREE_CODE (basetype) == TYPE_DECL)
13760 basetype = TREE_TYPE (basetype);
13761 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
13763 error ("base type %qT fails to be a struct or class type",
13764 basetype);
13765 goto dropped_base;
13768 base_binfo = NULL_TREE;
13769 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
13771 base_binfo = TYPE_BINFO (basetype);
13772 /* The original basetype could have been a typedef'd type. */
13773 basetype = BINFO_TYPE (base_binfo);
13775 /* Inherit flags from the base. */
13776 TYPE_HAS_NEW_OPERATOR (ref)
13777 |= TYPE_HAS_NEW_OPERATOR (basetype);
13778 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
13779 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
13780 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
13781 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
13782 CLASSTYPE_DIAMOND_SHAPED_P (ref)
13783 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
13784 CLASSTYPE_REPEATED_BASE_P (ref)
13785 |= CLASSTYPE_REPEATED_BASE_P (basetype);
13788 /* We must do this test after we've seen through a typedef
13789 type. */
13790 if (TYPE_MARKED_P (basetype))
13792 if (basetype == ref)
13793 error ("recursive type %qT undefined", basetype);
13794 else
13795 error ("duplicate base type %qT invalid", basetype);
13796 goto dropped_base;
13799 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
13800 /* Regenerate the pack expansion for the bases. */
13801 basetype = make_pack_expansion (basetype);
13803 TYPE_MARKED_P (basetype) = 1;
13805 base_binfo = copy_binfo (base_binfo, basetype, ref,
13806 &igo_prev, via_virtual);
13807 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
13808 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
13810 BINFO_BASE_APPEND (binfo, base_binfo);
13811 BINFO_BASE_ACCESS_APPEND (binfo, access);
13812 continue;
13814 dropped_base:
13815 /* Update max_vbases to reflect the reality that we are dropping
13816 this base: if it reaches zero we want to undo the vec_alloc
13817 above to avoid inconsistencies during error-recovery: eg, in
13818 build_special_member_call, CLASSTYPE_VBASECLASSES non null
13819 and vtt null (c++/27952). */
13820 if (via_virtual)
13821 max_vbases--;
13822 if (CLASS_TYPE_P (basetype))
13823 max_vbases
13824 -= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
13827 if (CLASSTYPE_VBASECLASSES (ref)
13828 && max_vbases == 0)
13829 vec_free (CLASSTYPE_VBASECLASSES (ref));
13831 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
13832 /* If we didn't get max_vbases vbases, we must have shared at
13833 least one of them, and are therefore diamond shaped. */
13834 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
13836 /* Unmark all the types. */
13837 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
13838 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
13839 TYPE_MARKED_P (ref) = 0;
13841 /* Now see if we have a repeated base type. */
13842 if (!CLASSTYPE_REPEATED_BASE_P (ref))
13844 for (base_binfo = binfo; base_binfo;
13845 base_binfo = TREE_CHAIN (base_binfo))
13847 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
13849 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
13850 break;
13852 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
13854 for (base_binfo = binfo; base_binfo;
13855 base_binfo = TREE_CHAIN (base_binfo))
13856 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
13857 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
13858 else
13859 break;
13864 /* Copies the enum-related properties from type SRC to type DST.
13865 Used with the underlying type of an enum and the enum itself. */
13866 static void
13867 copy_type_enum (tree dst, tree src)
13869 tree t;
13870 for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
13872 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
13873 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
13874 TYPE_SIZE (t) = TYPE_SIZE (src);
13875 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
13876 SET_TYPE_MODE (dst, TYPE_MODE (src));
13877 TYPE_PRECISION (t) = TYPE_PRECISION (src);
13878 unsigned valign = TYPE_ALIGN (src);
13879 if (TYPE_USER_ALIGN (t))
13880 valign = MAX (valign, TYPE_ALIGN (t));
13881 else
13882 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
13883 SET_TYPE_ALIGN (t, valign);
13884 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
13888 /* Begin compiling the definition of an enumeration type.
13889 NAME is its name,
13891 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
13893 UNDERLYING_TYPE is the type that will be used as the storage for
13894 the enumeration type. This should be NULL_TREE if no storage type
13895 was specified.
13897 ATTRIBUTES are any attributes specified after the enum-key.
13899 SCOPED_ENUM_P is true if this is a scoped enumeration type.
13901 if IS_NEW is not NULL, gets TRUE iff a new type is created.
13903 Returns the type object, as yet incomplete.
13904 Also records info about it so that build_enumerator
13905 may be used to declare the individual values as they are read. */
13907 tree
13908 start_enum (tree name, tree enumtype, tree underlying_type,
13909 tree attributes, bool scoped_enum_p, bool *is_new)
13911 tree prevtype = NULL_TREE;
13912 gcc_assert (identifier_p (name));
13914 if (is_new)
13915 *is_new = false;
13916 /* [C++0x dcl.enum]p5:
13918 If not explicitly specified, the underlying type of a scoped
13919 enumeration type is int. */
13920 if (!underlying_type && scoped_enum_p)
13921 underlying_type = integer_type_node;
13923 if (underlying_type)
13924 underlying_type = cv_unqualified (underlying_type);
13926 /* If this is the real definition for a previous forward reference,
13927 fill in the contents in the same object that used to be the
13928 forward reference. */
13929 if (!enumtype)
13930 enumtype = lookup_and_check_tag (enum_type, name,
13931 /*tag_scope=*/ts_current,
13932 /*template_header_p=*/false);
13934 /* In case of a template_decl, the only check that should be deferred
13935 to instantiation time is the comparison of underlying types. */
13936 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
13938 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
13940 error_at (input_location, "scoped/unscoped mismatch "
13941 "in enum %q#T", enumtype);
13942 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
13943 "previous definition here");
13944 enumtype = error_mark_node;
13946 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
13948 error_at (input_location, "underlying type mismatch "
13949 "in enum %q#T", enumtype);
13950 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
13951 "previous definition here");
13952 enumtype = error_mark_node;
13954 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
13955 && !dependent_type_p (underlying_type)
13956 && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
13957 && !same_type_p (underlying_type,
13958 ENUM_UNDERLYING_TYPE (enumtype)))
13960 error_at (input_location, "different underlying type "
13961 "in enum %q#T", enumtype);
13962 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
13963 "previous definition here");
13964 underlying_type = NULL_TREE;
13968 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
13969 || processing_template_decl)
13971 /* In case of error, make a dummy enum to allow parsing to
13972 continue. */
13973 if (enumtype == error_mark_node)
13975 name = make_anon_name ();
13976 enumtype = NULL_TREE;
13979 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
13980 of an opaque enum, or an opaque enum of an already defined
13981 enumeration (C++0x only).
13982 In any other case, it'll be NULL_TREE. */
13983 if (!enumtype)
13985 if (is_new)
13986 *is_new = true;
13988 prevtype = enumtype;
13990 /* Do not push the decl more than once, unless we need to
13991 compare underlying types at instantiation time */
13992 if (!enumtype
13993 || TREE_CODE (enumtype) != ENUMERAL_TYPE
13994 || (underlying_type
13995 && dependent_type_p (underlying_type))
13996 || (ENUM_UNDERLYING_TYPE (enumtype)
13997 && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
13999 enumtype = cxx_make_type (ENUMERAL_TYPE);
14000 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
14002 /* std::byte aliases anything. */
14003 if (enumtype != error_mark_node
14004 && TYPE_CONTEXT (enumtype) == std_node
14005 && !strcmp ("byte", TYPE_NAME_STRING (enumtype)))
14006 TYPE_ALIAS_SET (enumtype) = 0;
14008 else
14009 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
14010 false);
14012 if (enumtype == error_mark_node)
14013 return error_mark_node;
14015 /* The enum is considered opaque until the opening '{' of the
14016 enumerator list. */
14017 SET_OPAQUE_ENUM_P (enumtype, true);
14018 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
14021 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
14023 cplus_decl_attributes (&enumtype, attributes, (int)ATTR_FLAG_TYPE_IN_PLACE);
14025 if (underlying_type)
14027 if (ENUM_UNDERLYING_TYPE (enumtype))
14028 /* We already checked that it matches, don't change it to a different
14029 typedef variant. */;
14030 else if (CP_INTEGRAL_TYPE_P (underlying_type))
14032 copy_type_enum (enumtype, underlying_type);
14033 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14035 else if (dependent_type_p (underlying_type))
14036 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14037 else
14038 error ("underlying type %qT of %qT must be an integral type",
14039 underlying_type, enumtype);
14042 /* If into a template class, the returned enum is always the first
14043 declaration (opaque or not) seen. This way all the references to
14044 this type will be to the same declaration. The following ones are used
14045 only to check for definition errors. */
14046 if (prevtype && processing_template_decl)
14047 return prevtype;
14048 else
14049 return enumtype;
14052 /* After processing and defining all the values of an enumeration type,
14053 install their decls in the enumeration type.
14054 ENUMTYPE is the type object. */
14056 void
14057 finish_enum_value_list (tree enumtype)
14059 tree values;
14060 tree underlying_type;
14061 tree decl;
14062 tree value;
14063 tree minnode, maxnode;
14064 tree t;
14066 bool fixed_underlying_type_p
14067 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
14069 /* We built up the VALUES in reverse order. */
14070 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
14072 /* For an enum defined in a template, just set the type of the values;
14073 all further processing is postponed until the template is
14074 instantiated. We need to set the type so that tsubst of a CONST_DECL
14075 works. */
14076 if (processing_template_decl)
14078 for (values = TYPE_VALUES (enumtype);
14079 values;
14080 values = TREE_CHAIN (values))
14081 TREE_TYPE (TREE_VALUE (values)) = enumtype;
14082 return;
14085 /* Determine the minimum and maximum values of the enumerators. */
14086 if (TYPE_VALUES (enumtype))
14088 minnode = maxnode = NULL_TREE;
14090 for (values = TYPE_VALUES (enumtype);
14091 values;
14092 values = TREE_CHAIN (values))
14094 decl = TREE_VALUE (values);
14096 /* [dcl.enum]: Following the closing brace of an enum-specifier,
14097 each enumerator has the type of its enumeration. Prior to the
14098 closing brace, the type of each enumerator is the type of its
14099 initializing value. */
14100 TREE_TYPE (decl) = enumtype;
14102 /* Update the minimum and maximum values, if appropriate. */
14103 value = DECL_INITIAL (decl);
14104 if (value == error_mark_node)
14105 value = integer_zero_node;
14106 /* Figure out what the minimum and maximum values of the
14107 enumerators are. */
14108 if (!minnode)
14109 minnode = maxnode = value;
14110 else if (tree_int_cst_lt (maxnode, value))
14111 maxnode = value;
14112 else if (tree_int_cst_lt (value, minnode))
14113 minnode = value;
14116 else
14117 /* [dcl.enum]
14119 If the enumerator-list is empty, the underlying type is as if
14120 the enumeration had a single enumerator with value 0. */
14121 minnode = maxnode = integer_zero_node;
14123 if (!fixed_underlying_type_p)
14125 /* Compute the number of bits require to represent all values of the
14126 enumeration. We must do this before the type of MINNODE and
14127 MAXNODE are transformed, since tree_int_cst_min_precision relies
14128 on the TREE_TYPE of the value it is passed. */
14129 signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
14130 int lowprec = tree_int_cst_min_precision (minnode, sgn);
14131 int highprec = tree_int_cst_min_precision (maxnode, sgn);
14132 int precision = MAX (lowprec, highprec);
14133 unsigned int itk;
14134 bool use_short_enum;
14136 /* Determine the underlying type of the enumeration.
14138 [dcl.enum]
14140 The underlying type of an enumeration is an integral type that
14141 can represent all the enumerator values defined in the
14142 enumeration. It is implementation-defined which integral type is
14143 used as the underlying type for an enumeration except that the
14144 underlying type shall not be larger than int unless the value of
14145 an enumerator cannot fit in an int or unsigned int.
14147 We use "int" or an "unsigned int" as the underlying type, even if
14148 a smaller integral type would work, unless the user has
14149 explicitly requested that we use the smallest possible type. The
14150 user can request that for all enumerations with a command line
14151 flag, or for just one enumeration with an attribute. */
14153 use_short_enum = flag_short_enums
14154 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
14156 /* If the precision of the type was specified with an attribute and it
14157 was too small, give an error. Otherwise, use it. */
14158 if (TYPE_PRECISION (enumtype))
14160 if (precision > TYPE_PRECISION (enumtype))
14161 error ("specified mode too small for enumeral values");
14162 else
14164 use_short_enum = true;
14165 precision = TYPE_PRECISION (enumtype);
14169 for (itk = (use_short_enum ? itk_char : itk_int);
14170 itk != itk_none;
14171 itk++)
14173 underlying_type = integer_types[itk];
14174 if (underlying_type != NULL_TREE
14175 && TYPE_PRECISION (underlying_type) >= precision
14176 && TYPE_SIGN (underlying_type) == sgn)
14177 break;
14179 if (itk == itk_none)
14181 /* DR 377
14183 IF no integral type can represent all the enumerator values, the
14184 enumeration is ill-formed. */
14185 error ("no integral type can represent all of the enumerator values "
14186 "for %qT", enumtype);
14187 precision = TYPE_PRECISION (long_long_integer_type_node);
14188 underlying_type = integer_types[itk_unsigned_long_long];
14191 /* [dcl.enum]
14193 The value of sizeof() applied to an enumeration type, an object
14194 of an enumeration type, or an enumerator, is the value of sizeof()
14195 applied to the underlying type. */
14196 copy_type_enum (enumtype, underlying_type);
14198 /* Compute the minimum and maximum values for the type.
14200 [dcl.enum]
14202 For an enumeration where emin is the smallest enumerator and emax
14203 is the largest, the values of the enumeration are the values of the
14204 underlying type in the range bmin to bmax, where bmin and bmax are,
14205 respectively, the smallest and largest values of the smallest bit-
14206 field that can store emin and emax. */
14208 /* The middle-end currently assumes that types with TYPE_PRECISION
14209 narrower than their underlying type are suitably zero or sign
14210 extended to fill their mode. Similarly, it assumes that the front
14211 end assures that a value of a particular type must be within
14212 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
14214 We used to set these fields based on bmin and bmax, but that led
14215 to invalid assumptions like optimizing away bounds checking. So
14216 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
14217 TYPE_MAX_VALUE to the values for the mode above and only restrict
14218 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
14219 ENUM_UNDERLYING_TYPE (enumtype)
14220 = build_distinct_type_copy (underlying_type);
14221 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
14222 set_min_and_max_values_for_integral_type
14223 (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
14225 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
14226 if (flag_strict_enums)
14227 set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
14229 else
14230 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
14232 /* Convert each of the enumerators to the type of the underlying
14233 type of the enumeration. */
14234 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
14236 location_t saved_location;
14238 decl = TREE_VALUE (values);
14239 saved_location = input_location;
14240 input_location = DECL_SOURCE_LOCATION (decl);
14241 if (fixed_underlying_type_p)
14242 /* If the enumeration type has a fixed underlying type, we
14243 already checked all of the enumerator values. */
14244 value = DECL_INITIAL (decl);
14245 else
14246 value = perform_implicit_conversion (underlying_type,
14247 DECL_INITIAL (decl),
14248 tf_warning_or_error);
14249 input_location = saved_location;
14251 /* Do not clobber shared ints. */
14252 if (value != error_mark_node)
14254 value = copy_node (value);
14256 TREE_TYPE (value) = enumtype;
14258 DECL_INITIAL (decl) = value;
14261 /* Fix up all variant types of this enum type. */
14262 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
14263 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
14265 if (at_class_scope_p ()
14266 && COMPLETE_TYPE_P (current_class_type)
14267 && UNSCOPED_ENUM_P (enumtype))
14269 insert_late_enum_def_bindings (current_class_type, enumtype);
14270 /* TYPE_FIELDS needs fixup. */
14271 fixup_type_variants (current_class_type);
14274 /* Finish debugging output for this type. */
14275 rest_of_type_compilation (enumtype, namespace_bindings_p ());
14277 /* Each enumerator now has the type of its enumeration. Clear the cache
14278 so that this change in types doesn't confuse us later on. */
14279 clear_cv_and_fold_caches ();
14282 /* Finishes the enum type. This is called only the first time an
14283 enumeration is seen, be it opaque or odinary.
14284 ENUMTYPE is the type object. */
14286 void
14287 finish_enum (tree enumtype)
14289 if (processing_template_decl)
14291 if (at_function_scope_p ())
14292 add_stmt (build_min (TAG_DEFN, enumtype));
14293 return;
14296 /* If this is a forward declaration, there should not be any variants,
14297 though we can get a variant in the middle of an enum-specifier with
14298 wacky code like 'enum E { e = sizeof(const E*) };' */
14299 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
14300 && (TYPE_VALUES (enumtype)
14301 || !TYPE_NEXT_VARIANT (enumtype)));
14304 /* Build and install a CONST_DECL for an enumeration constant of the
14305 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
14306 Apply ATTRIBUTES if available. LOC is the location of NAME.
14307 Assignment of sequential values by default is handled here. */
14309 void
14310 build_enumerator (tree name, tree value, tree enumtype, tree attributes,
14311 location_t loc)
14313 tree decl;
14314 tree context;
14315 tree type;
14317 /* scalar_constant_value will pull out this expression, so make sure
14318 it's folded as appropriate. */
14319 if (processing_template_decl)
14320 value = fold_non_dependent_expr (value);
14322 /* If the VALUE was erroneous, pretend it wasn't there; that will
14323 result in the enum being assigned the next value in sequence. */
14324 if (value == error_mark_node)
14325 value = NULL_TREE;
14327 /* Remove no-op casts from the value. */
14328 if (value)
14329 STRIP_TYPE_NOPS (value);
14331 if (! processing_template_decl)
14333 /* Validate and default VALUE. */
14334 if (value != NULL_TREE)
14336 if (!ENUM_UNDERLYING_TYPE (enumtype))
14338 tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
14339 value, true);
14340 if (tmp_value)
14341 value = tmp_value;
14343 else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14344 (TREE_TYPE (value)))
14345 value = perform_implicit_conversion_flags
14346 (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
14347 LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
14349 if (value == error_mark_node)
14350 value = NULL_TREE;
14352 if (value != NULL_TREE)
14354 if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14355 (TREE_TYPE (value)))
14357 error ("enumerator value for %qD must have integral or "
14358 "unscoped enumeration type", name);
14359 value = NULL_TREE;
14361 else
14363 value = cxx_constant_value (value);
14365 if (TREE_CODE (value) != INTEGER_CST)
14367 error ("enumerator value for %qD is not an integer "
14368 "constant", name);
14369 value = NULL_TREE;
14375 /* Default based on previous value. */
14376 if (value == NULL_TREE)
14378 if (TYPE_VALUES (enumtype))
14380 tree prev_value;
14381 bool overflowed;
14383 /* C++03 7.2/4: If no initializer is specified for the first
14384 enumerator, the type is an unspecified integral
14385 type. Otherwise the type is the same as the type of the
14386 initializing value of the preceding enumerator unless the
14387 incremented value is not representable in that type, in
14388 which case the type is an unspecified integral type
14389 sufficient to contain the incremented value. */
14390 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
14391 if (error_operand_p (prev_value))
14392 value = error_mark_node;
14393 else
14395 tree type = TREE_TYPE (prev_value);
14396 signop sgn = TYPE_SIGN (type);
14397 widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
14398 &overflowed);
14399 if (!overflowed)
14401 bool pos = !wi::neg_p (wi, sgn);
14402 if (!wi::fits_to_tree_p (wi, type))
14404 unsigned int itk;
14405 for (itk = itk_int; itk != itk_none; itk++)
14407 type = integer_types[itk];
14408 if (type != NULL_TREE
14409 && (pos || !TYPE_UNSIGNED (type))
14410 && wi::fits_to_tree_p (wi, type))
14411 break;
14413 if (type && cxx_dialect < cxx11
14414 && itk > itk_unsigned_long)
14415 pedwarn (input_location, OPT_Wlong_long,
14416 pos ? G_("\
14417 incremented enumerator value is too large for %<unsigned long%>") : G_("\
14418 incremented enumerator value is too large for %<long%>"));
14420 if (type == NULL_TREE)
14421 overflowed = true;
14422 else
14423 value = wide_int_to_tree (type, wi);
14426 if (overflowed)
14428 error ("overflow in enumeration values at %qD", name);
14429 value = error_mark_node;
14433 else
14434 value = integer_zero_node;
14437 /* Remove no-op casts from the value. */
14438 STRIP_TYPE_NOPS (value);
14440 /* If the underlying type of the enum is fixed, check whether
14441 the enumerator values fits in the underlying type. If it
14442 does not fit, the program is ill-formed [C++0x dcl.enum]. */
14443 if (ENUM_UNDERLYING_TYPE (enumtype)
14444 && value
14445 && TREE_CODE (value) == INTEGER_CST)
14447 if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
14448 error ("enumerator value %qE is outside the range of underlying "
14449 "type %qT", value, ENUM_UNDERLYING_TYPE (enumtype));
14451 /* Convert the value to the appropriate type. */
14452 value = fold_convert (ENUM_UNDERLYING_TYPE (enumtype), value);
14456 /* C++ associates enums with global, function, or class declarations. */
14457 context = current_scope ();
14459 /* Build the actual enumeration constant. Note that the enumeration
14460 constants have the underlying type of the enum (if it is fixed)
14461 or the type of their initializer (if the underlying type of the
14462 enum is not fixed):
14464 [ C++0x dcl.enum ]
14466 If the underlying type is fixed, the type of each enumerator
14467 prior to the closing brace is the underlying type; if the
14468 initializing value of an enumerator cannot be represented by
14469 the underlying type, the program is ill-formed. If the
14470 underlying type is not fixed, the type of each enumerator is
14471 the type of its initializing value.
14473 If the underlying type is not fixed, it will be computed by
14474 finish_enum and we will reset the type of this enumerator. Of
14475 course, if we're processing a template, there may be no value. */
14476 type = value ? TREE_TYPE (value) : NULL_TREE;
14478 decl = build_decl (loc, CONST_DECL, name, type);
14480 DECL_CONTEXT (decl) = enumtype;
14481 TREE_CONSTANT (decl) = 1;
14482 TREE_READONLY (decl) = 1;
14483 DECL_INITIAL (decl) = value;
14485 if (attributes)
14486 cplus_decl_attributes (&decl, attributes, 0);
14488 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
14490 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
14491 on the TYPE_FIELDS list for `S'. (That's so that you can say
14492 things like `S::i' later.) */
14494 /* The enumerator may be getting declared outside of its enclosing
14495 class, like so:
14497 class S { public: enum E : int; }; enum S::E : int { i = 7; };
14499 For which case we need to make sure that the access of `S::i'
14500 matches the access of `S::E'. */
14501 tree saved_cas = current_access_specifier;
14502 if (TREE_PRIVATE (TYPE_NAME (enumtype)))
14503 current_access_specifier = access_private_node;
14504 else if (TREE_PROTECTED (TYPE_NAME (enumtype)))
14505 current_access_specifier = access_protected_node;
14506 else
14507 current_access_specifier = access_public_node;
14509 finish_member_declaration (decl);
14511 current_access_specifier = saved_cas;
14513 else
14514 pushdecl (decl);
14516 /* Add this enumeration constant to the list for this type. */
14517 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
14520 /* Look for an enumerator with the given NAME within the enumeration
14521 type ENUMTYPE. This routine is used primarily for qualified name
14522 lookup into an enumerator in C++0x, e.g.,
14524 enum class Color { Red, Green, Blue };
14526 Color color = Color::Red;
14528 Returns the value corresponding to the enumerator, or
14529 NULL_TREE if no such enumerator was found. */
14530 tree
14531 lookup_enumerator (tree enumtype, tree name)
14533 tree e;
14534 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
14536 e = purpose_member (name, TYPE_VALUES (enumtype));
14537 return e? TREE_VALUE (e) : NULL_TREE;
14541 /* We're defining DECL. Make sure that its type is OK. */
14543 static void
14544 check_function_type (tree decl, tree current_function_parms)
14546 tree fntype = TREE_TYPE (decl);
14547 tree return_type = complete_type (TREE_TYPE (fntype));
14549 /* In a function definition, arg types must be complete. */
14550 require_complete_types_for_parms (current_function_parms);
14552 if (dependent_type_p (return_type)
14553 || type_uses_auto (return_type))
14554 return;
14555 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
14557 tree args = TYPE_ARG_TYPES (fntype);
14559 error ("return type %q#T is incomplete", return_type);
14561 /* Make it return void instead. */
14562 if (TREE_CODE (fntype) == METHOD_TYPE)
14563 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
14564 void_type_node,
14565 TREE_CHAIN (args));
14566 else
14567 fntype = build_function_type (void_type_node, args);
14568 fntype
14569 = build_exception_variant (fntype,
14570 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
14571 fntype = (cp_build_type_attribute_variant
14572 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
14573 TREE_TYPE (decl) = fntype;
14575 else
14577 abstract_virtuals_error (decl, TREE_TYPE (fntype));
14578 maybe_warn_parm_abi (TREE_TYPE (fntype),
14579 DECL_SOURCE_LOCATION (decl));
14583 /* True iff FN is an implicitly-defined default constructor. */
14585 static bool
14586 implicit_default_ctor_p (tree fn)
14588 return (DECL_CONSTRUCTOR_P (fn)
14589 && !user_provided_p (fn)
14590 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)));
14593 /* Clobber the contents of *this to let the back end know that the object
14594 storage is dead when we enter the constructor or leave the destructor. */
14596 static tree
14597 build_clobber_this ()
14599 /* Clobbering an empty base is pointless, and harmful if its one byte
14600 TYPE_SIZE overlays real data. */
14601 if (is_empty_class (current_class_type))
14602 return void_node;
14604 /* If we have virtual bases, clobber the whole object, but only if we're in
14605 charge. If we don't have virtual bases, clobber the as-base type so we
14606 don't mess with tail padding. */
14607 bool vbases = CLASSTYPE_VBASECLASSES (current_class_type);
14609 tree ctype = current_class_type;
14610 if (!vbases)
14611 ctype = CLASSTYPE_AS_BASE (ctype);
14613 tree clobber = build_constructor (ctype, NULL);
14614 TREE_THIS_VOLATILE (clobber) = true;
14616 tree thisref = current_class_ref;
14617 if (ctype != current_class_type)
14619 thisref = build_nop (build_reference_type (ctype), current_class_ptr);
14620 thisref = convert_from_reference (thisref);
14623 tree exprstmt = build2 (MODIFY_EXPR, void_type_node, thisref, clobber);
14624 if (vbases)
14625 exprstmt = build_if_in_charge (exprstmt);
14627 return exprstmt;
14630 /* Create the FUNCTION_DECL for a function definition.
14631 DECLSPECS and DECLARATOR are the parts of the declaration;
14632 they describe the function's name and the type it returns,
14633 but twisted together in a fashion that parallels the syntax of C.
14635 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
14636 DECLARATOR is really the DECL for the function we are about to
14637 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
14638 indicating that the function is an inline defined in-class.
14640 This function creates a binding context for the function body
14641 as well as setting up the FUNCTION_DECL in current_function_decl.
14643 For C++, we must first check whether that datum makes any sense.
14644 For example, "class A local_a(1,2);" means that variable local_a
14645 is an aggregate of type A, which should have a constructor
14646 applied to it with the argument list [1, 2].
14648 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
14649 or may be a BLOCK if the function has been defined previously
14650 in this translation unit. On exit, DECL_INITIAL (decl1) will be
14651 error_mark_node if the function has never been defined, or
14652 a BLOCK if the function has been defined somewhere. */
14654 bool
14655 start_preparsed_function (tree decl1, tree attrs, int flags)
14657 tree ctype = NULL_TREE;
14658 tree fntype;
14659 tree restype;
14660 int doing_friend = 0;
14661 cp_binding_level *bl;
14662 tree current_function_parms;
14663 struct c_fileinfo *finfo
14664 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
14665 bool honor_interface;
14667 /* Sanity check. */
14668 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
14669 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
14671 fntype = TREE_TYPE (decl1);
14672 if (TREE_CODE (fntype) == METHOD_TYPE)
14673 ctype = TYPE_METHOD_BASETYPE (fntype);
14675 /* ISO C++ 11.4/5. A friend function defined in a class is in
14676 the (lexical) scope of the class in which it is defined. */
14677 if (!ctype && DECL_FRIEND_P (decl1))
14679 ctype = DECL_FRIEND_CONTEXT (decl1);
14681 /* CTYPE could be null here if we're dealing with a template;
14682 for example, `inline friend float foo()' inside a template
14683 will have no CTYPE set. */
14684 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
14685 ctype = NULL_TREE;
14686 else
14687 doing_friend = 1;
14690 if (DECL_DECLARED_INLINE_P (decl1)
14691 && lookup_attribute ("noinline", attrs))
14692 warning_at (DECL_SOURCE_LOCATION (decl1), 0,
14693 "inline function %qD given attribute noinline", decl1);
14695 /* Handle gnu_inline attribute. */
14696 if (GNU_INLINE_P (decl1))
14698 DECL_EXTERNAL (decl1) = 1;
14699 DECL_NOT_REALLY_EXTERN (decl1) = 0;
14700 DECL_INTERFACE_KNOWN (decl1) = 1;
14701 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
14704 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
14705 /* This is a constructor, we must ensure that any default args
14706 introduced by this definition are propagated to the clones
14707 now. The clones are used directly in overload resolution. */
14708 adjust_clone_args (decl1);
14710 /* Sometimes we don't notice that a function is a static member, and
14711 build a METHOD_TYPE for it. Fix that up now. */
14712 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
14713 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
14715 /* Set up current_class_type, and enter the scope of the class, if
14716 appropriate. */
14717 if (ctype)
14718 push_nested_class (ctype);
14719 else if (DECL_STATIC_FUNCTION_P (decl1))
14720 push_nested_class (DECL_CONTEXT (decl1));
14722 /* Now that we have entered the scope of the class, we must restore
14723 the bindings for any template parameters surrounding DECL1, if it
14724 is an inline member template. (Order is important; consider the
14725 case where a template parameter has the same name as a field of
14726 the class.) It is not until after this point that
14727 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
14728 if (flags & SF_INCLASS_INLINE)
14729 maybe_begin_member_template_processing (decl1);
14731 /* Effective C++ rule 15. */
14732 if (warn_ecpp
14733 && DECL_ASSIGNMENT_OPERATOR_P (decl1)
14734 && DECL_OVERLOADED_OPERATOR_IS (decl1, NOP_EXPR)
14735 && VOID_TYPE_P (TREE_TYPE (fntype)))
14736 warning (OPT_Weffc__,
14737 "%<operator=%> should return a reference to %<*this%>");
14739 /* Make the init_value nonzero so pushdecl knows this is not tentative.
14740 error_mark_node is replaced below (in poplevel) with the BLOCK. */
14741 if (!DECL_INITIAL (decl1))
14742 DECL_INITIAL (decl1) = error_mark_node;
14744 /* This function exists in static storage.
14745 (This does not mean `static' in the C sense!) */
14746 TREE_STATIC (decl1) = 1;
14748 /* We must call push_template_decl after current_class_type is set
14749 up. (If we are processing inline definitions after exiting a
14750 class scope, current_class_type will be NULL_TREE until set above
14751 by push_nested_class.) */
14752 if (processing_template_decl)
14754 tree newdecl1 = push_template_decl (decl1);
14755 if (newdecl1 == error_mark_node)
14757 if (ctype || DECL_STATIC_FUNCTION_P (decl1))
14758 pop_nested_class ();
14759 return false;
14761 decl1 = newdecl1;
14764 /* Make sure the parameter and return types are reasonable. When
14765 you declare a function, these types can be incomplete, but they
14766 must be complete when you define the function. */
14767 check_function_type (decl1, DECL_ARGUMENTS (decl1));
14769 /* Build the return declaration for the function. */
14770 restype = TREE_TYPE (fntype);
14772 if (DECL_RESULT (decl1) == NULL_TREE)
14774 tree resdecl;
14776 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
14777 DECL_ARTIFICIAL (resdecl) = 1;
14778 DECL_IGNORED_P (resdecl) = 1;
14779 DECL_RESULT (decl1) = resdecl;
14781 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
14784 /* Record the decl so that the function name is defined.
14785 If we already have a decl for this name, and it is a FUNCTION_DECL,
14786 use the old decl. */
14787 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
14789 /* A specialization is not used to guide overload resolution. */
14790 if (!DECL_FUNCTION_MEMBER_P (decl1)
14791 && !(DECL_USE_TEMPLATE (decl1) &&
14792 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
14794 tree olddecl = pushdecl (decl1);
14796 if (olddecl == error_mark_node)
14797 /* If something went wrong when registering the declaration,
14798 use DECL1; we have to have a FUNCTION_DECL to use when
14799 parsing the body of the function. */
14801 else
14803 /* Otherwise, OLDDECL is either a previous declaration
14804 of the same function or DECL1 itself. */
14806 if (warn_missing_declarations
14807 && olddecl == decl1
14808 && !DECL_MAIN_P (decl1)
14809 && TREE_PUBLIC (decl1)
14810 && !DECL_DECLARED_INLINE_P (decl1))
14812 tree context;
14814 /* Check whether DECL1 is in an anonymous
14815 namespace. */
14816 for (context = DECL_CONTEXT (decl1);
14817 context;
14818 context = DECL_CONTEXT (context))
14820 if (TREE_CODE (context) == NAMESPACE_DECL
14821 && DECL_NAME (context) == NULL_TREE)
14822 break;
14825 if (context == NULL)
14826 warning_at (DECL_SOURCE_LOCATION (decl1),
14827 OPT_Wmissing_declarations,
14828 "no previous declaration for %qD", decl1);
14831 decl1 = olddecl;
14834 else
14836 /* We need to set the DECL_CONTEXT. */
14837 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
14838 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
14840 fntype = TREE_TYPE (decl1);
14841 restype = TREE_TYPE (fntype);
14843 /* If #pragma weak applies, mark the decl appropriately now.
14844 The pragma only applies to global functions. Because
14845 determining whether or not the #pragma applies involves
14846 computing the mangled name for the declaration, we cannot
14847 apply the pragma until after we have merged this declaration
14848 with any previous declarations; if the original declaration
14849 has a linkage specification, that specification applies to
14850 the definition as well, and may affect the mangled name. */
14851 if (DECL_FILE_SCOPE_P (decl1))
14852 maybe_apply_pragma_weak (decl1);
14855 /* We are now in the scope of the function being defined. */
14856 current_function_decl = decl1;
14858 /* Save the parm names or decls from this function's declarator
14859 where store_parm_decls will find them. */
14860 current_function_parms = DECL_ARGUMENTS (decl1);
14862 /* Let the user know we're compiling this function. */
14863 announce_function (decl1);
14865 gcc_assert (DECL_INITIAL (decl1));
14867 /* This function may already have been parsed, in which case just
14868 return; our caller will skip over the body without parsing. */
14869 if (DECL_INITIAL (decl1) != error_mark_node)
14870 return true;
14872 /* Initialize RTL machinery. We cannot do this until
14873 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
14874 even when processing a template; this is how we get
14875 CFUN set up, and our per-function variables initialized.
14876 FIXME factor out the non-RTL stuff. */
14877 bl = current_binding_level;
14878 allocate_struct_function (decl1, processing_template_decl);
14880 /* Initialize the language data structures. Whenever we start
14881 a new function, we destroy temporaries in the usual way. */
14882 cfun->language = ggc_cleared_alloc<language_function> ();
14883 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
14884 current_binding_level = bl;
14886 if (!processing_template_decl && type_uses_auto (restype))
14888 FNDECL_USED_AUTO (decl1) = true;
14889 current_function_auto_return_pattern = restype;
14892 /* Start the statement-tree, start the tree now. */
14893 DECL_SAVED_TREE (decl1) = push_stmt_list ();
14895 /* If we are (erroneously) defining a function that we have already
14896 defined before, wipe out what we knew before. */
14897 if (!DECL_PENDING_INLINE_P (decl1))
14898 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
14900 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
14902 /* We know that this was set up by `grokclassfn'. We do not
14903 wait until `store_parm_decls', since evil parse errors may
14904 never get us to that point. Here we keep the consistency
14905 between `current_class_type' and `current_class_ptr'. */
14906 tree t = DECL_ARGUMENTS (decl1);
14908 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
14909 gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
14911 cp_function_chain->x_current_class_ref
14912 = cp_build_fold_indirect_ref (t);
14913 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
14914 cp_function_chain->x_current_class_ptr = t;
14916 /* Constructors and destructors need to know whether they're "in
14917 charge" of initializing virtual base classes. */
14918 t = DECL_CHAIN (t);
14919 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
14921 current_in_charge_parm = t;
14922 t = DECL_CHAIN (t);
14924 if (DECL_HAS_VTT_PARM_P (decl1))
14926 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
14927 current_vtt_parm = t;
14931 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
14932 /* Implicitly-defined methods (like the
14933 destructor for a class in which no destructor
14934 is explicitly declared) must not be defined
14935 until their definition is needed. So, we
14936 ignore interface specifications for
14937 compiler-generated functions. */
14938 && !DECL_ARTIFICIAL (decl1));
14940 if (processing_template_decl)
14941 /* Don't mess with interface flags. */;
14942 else if (DECL_INTERFACE_KNOWN (decl1))
14944 tree ctx = decl_function_context (decl1);
14946 if (DECL_NOT_REALLY_EXTERN (decl1))
14947 DECL_EXTERNAL (decl1) = 0;
14949 if (ctx != NULL_TREE && vague_linkage_p (ctx))
14950 /* This is a function in a local class in an extern inline
14951 or template function. */
14952 comdat_linkage (decl1);
14954 /* If this function belongs to an interface, it is public.
14955 If it belongs to someone else's interface, it is also external.
14956 This only affects inlines and template instantiations. */
14957 else if (!finfo->interface_unknown && honor_interface)
14959 if (DECL_DECLARED_INLINE_P (decl1)
14960 || DECL_TEMPLATE_INSTANTIATION (decl1))
14962 DECL_EXTERNAL (decl1)
14963 = (finfo->interface_only
14964 || (DECL_DECLARED_INLINE_P (decl1)
14965 && ! flag_implement_inlines
14966 && !DECL_VINDEX (decl1)));
14968 /* For WIN32 we also want to put these in linkonce sections. */
14969 maybe_make_one_only (decl1);
14971 else
14972 DECL_EXTERNAL (decl1) = 0;
14973 DECL_INTERFACE_KNOWN (decl1) = 1;
14974 /* If this function is in an interface implemented in this file,
14975 make sure that the back end knows to emit this function
14976 here. */
14977 if (!DECL_EXTERNAL (decl1))
14978 mark_needed (decl1);
14980 else if (finfo->interface_unknown && finfo->interface_only
14981 && honor_interface)
14983 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
14984 interface, we will have both finfo->interface_unknown and
14985 finfo->interface_only set. In that case, we don't want to
14986 use the normal heuristics because someone will supply a
14987 #pragma implementation elsewhere, and deducing it here would
14988 produce a conflict. */
14989 comdat_linkage (decl1);
14990 DECL_EXTERNAL (decl1) = 0;
14991 DECL_INTERFACE_KNOWN (decl1) = 1;
14992 DECL_DEFER_OUTPUT (decl1) = 1;
14994 else
14996 /* This is a definition, not a reference.
14997 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
14998 if (!GNU_INLINE_P (decl1))
14999 DECL_EXTERNAL (decl1) = 0;
15001 if ((DECL_DECLARED_INLINE_P (decl1)
15002 || DECL_TEMPLATE_INSTANTIATION (decl1))
15003 && ! DECL_INTERFACE_KNOWN (decl1))
15004 DECL_DEFER_OUTPUT (decl1) = 1;
15005 else
15006 DECL_INTERFACE_KNOWN (decl1) = 1;
15009 /* Determine the ELF visibility attribute for the function. We must not
15010 do this before calling "pushdecl", as we must allow "duplicate_decls"
15011 to merge any attributes appropriately. We also need to wait until
15012 linkage is set. */
15013 if (!DECL_CLONED_FUNCTION_P (decl1))
15014 determine_visibility (decl1);
15016 if (!processing_template_decl)
15017 maybe_instantiate_noexcept (decl1);
15019 begin_scope (sk_function_parms, decl1);
15021 ++function_depth;
15023 if (DECL_DESTRUCTOR_P (decl1)
15024 || (DECL_CONSTRUCTOR_P (decl1)
15025 && targetm.cxx.cdtor_returns_this ()))
15027 cdtor_label = create_artificial_label (input_location);
15028 LABEL_DECL_CDTOR (cdtor_label) = true;
15031 start_fname_decls ();
15033 store_parm_decls (current_function_parms);
15035 if (!processing_template_decl
15036 && (flag_lifetime_dse > 1)
15037 && DECL_CONSTRUCTOR_P (decl1)
15038 && !DECL_CLONED_FUNCTION_P (decl1)
15039 /* Clobbering an empty base is harmful if it overlays real data. */
15040 && !is_empty_class (current_class_type)
15041 /* We can't clobber safely for an implicitly-defined default constructor
15042 because part of the initialization might happen before we enter the
15043 constructor, via AGGR_INIT_ZERO_FIRST (c++/68006). */
15044 && !implicit_default_ctor_p (decl1))
15045 finish_expr_stmt (build_clobber_this ());
15047 if (!processing_template_decl
15048 && DECL_CONSTRUCTOR_P (decl1)
15049 && sanitize_flags_p (SANITIZE_VPTR)
15050 && !DECL_CLONED_FUNCTION_P (decl1)
15051 && !implicit_default_ctor_p (decl1))
15052 cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr);
15054 start_lambda_scope (decl1);
15056 return true;
15060 /* Like start_preparsed_function, except that instead of a
15061 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
15063 Returns true on success. If the DECLARATOR is not suitable
15064 for a function, we return false, which tells the parser to
15065 skip the entire function. */
15067 bool
15068 start_function (cp_decl_specifier_seq *declspecs,
15069 const cp_declarator *declarator,
15070 tree attrs)
15072 tree decl1;
15074 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
15075 invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION, decl1);
15076 if (decl1 == error_mark_node)
15077 return false;
15078 /* If the declarator is not suitable for a function definition,
15079 cause a syntax error. */
15080 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
15082 error ("invalid function declaration");
15083 return false;
15086 if (DECL_MAIN_P (decl1))
15087 /* main must return int. grokfndecl should have corrected it
15088 (and issued a diagnostic) if the user got it wrong. */
15089 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
15090 integer_type_node));
15092 return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
15095 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
15096 FN. */
15098 static bool
15099 use_eh_spec_block (tree fn)
15101 return (flag_exceptions && flag_enforce_eh_specs
15102 && !processing_template_decl
15103 && !type_throw_all_p (TREE_TYPE (fn))
15104 /* We insert the EH_SPEC_BLOCK only in the original
15105 function; then, it is copied automatically to the
15106 clones. */
15107 && !DECL_CLONED_FUNCTION_P (fn)
15108 /* Implicitly-generated constructors and destructors have
15109 exception specifications. However, those specifications
15110 are the union of the possible exceptions specified by the
15111 constructors/destructors for bases and members, so no
15112 unallowed exception will ever reach this function. By
15113 not creating the EH_SPEC_BLOCK we save a little memory,
15114 and we avoid spurious warnings about unreachable
15115 code. */
15116 && !DECL_DEFAULTED_FN (fn));
15119 /* Store the parameter declarations into the current function declaration.
15120 This is called after parsing the parameter declarations, before
15121 digesting the body of the function.
15123 Also install to binding contour return value identifier, if any. */
15125 static void
15126 store_parm_decls (tree current_function_parms)
15128 tree fndecl = current_function_decl;
15129 tree parm;
15131 /* This is a chain of any other decls that came in among the parm
15132 declarations. If a parm is declared with enum {foo, bar} x;
15133 then CONST_DECLs for foo and bar are put here. */
15134 tree nonparms = NULL_TREE;
15136 if (current_function_parms)
15138 /* This case is when the function was defined with an ANSI prototype.
15139 The parms already have decls, so we need not do anything here
15140 except record them as in effect
15141 and complain if any redundant old-style parm decls were written. */
15143 tree specparms = current_function_parms;
15144 tree next;
15146 /* Must clear this because it might contain TYPE_DECLs declared
15147 at class level. */
15148 current_binding_level->names = NULL;
15150 /* If we're doing semantic analysis, then we'll call pushdecl
15151 for each of these. We must do them in reverse order so that
15152 they end in the correct forward order. */
15153 specparms = nreverse (specparms);
15155 for (parm = specparms; parm; parm = next)
15157 next = DECL_CHAIN (parm);
15158 if (TREE_CODE (parm) == PARM_DECL)
15159 pushdecl (parm);
15160 else
15162 /* If we find an enum constant or a type tag,
15163 put it aside for the moment. */
15164 TREE_CHAIN (parm) = NULL_TREE;
15165 nonparms = chainon (nonparms, parm);
15169 /* Get the decls in their original chain order and record in the
15170 function. This is all and only the PARM_DECLs that were
15171 pushed into scope by the loop above. */
15172 DECL_ARGUMENTS (fndecl) = get_local_decls ();
15174 else
15175 DECL_ARGUMENTS (fndecl) = NULL_TREE;
15177 /* Now store the final chain of decls for the arguments
15178 as the decl-chain of the current lexical scope.
15179 Put the enumerators in as well, at the front so that
15180 DECL_ARGUMENTS is not modified. */
15181 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
15183 if (use_eh_spec_block (current_function_decl))
15184 current_eh_spec_block = begin_eh_spec_block ();
15188 /* We have finished doing semantic analysis on DECL, but have not yet
15189 generated RTL for its body. Save away our current state, so that
15190 when we want to generate RTL later we know what to do. */
15192 static void
15193 save_function_data (tree decl)
15195 struct language_function *f;
15197 /* Save the language-specific per-function data so that we can
15198 get it back when we really expand this function. */
15199 gcc_assert (!DECL_PENDING_INLINE_P (decl));
15201 /* Make a copy. */
15202 f = ggc_alloc<language_function> ();
15203 memcpy (f, cp_function_chain, sizeof (struct language_function));
15204 DECL_SAVED_FUNCTION_DATA (decl) = f;
15206 /* Clear out the bits we don't need. */
15207 f->base.x_stmt_tree.x_cur_stmt_list = NULL;
15208 f->bindings = NULL;
15209 f->x_local_names = NULL;
15210 f->base.local_typedefs = NULL;
15214 /* Set the return value of the constructor (if present). */
15216 static void
15217 finish_constructor_body (void)
15219 tree val;
15220 tree exprstmt;
15222 if (targetm.cxx.cdtor_returns_this ())
15224 /* Any return from a constructor will end up here. */
15225 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15227 val = DECL_ARGUMENTS (current_function_decl);
15228 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15229 DECL_RESULT (current_function_decl), val);
15230 /* Return the address of the object. */
15231 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15232 add_stmt (exprstmt);
15236 /* Do all the processing for the beginning of a destructor; set up the
15237 vtable pointers and cleanups for bases and members. */
15239 static void
15240 begin_destructor_body (void)
15242 tree compound_stmt;
15244 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
15245 issued an error message. We still want to try to process the
15246 body of the function, but initialize_vtbl_ptrs will crash if
15247 TYPE_BINFO is NULL. */
15248 if (COMPLETE_TYPE_P (current_class_type))
15250 compound_stmt = begin_compound_stmt (0);
15251 /* Make all virtual function table pointers in non-virtual base
15252 classes point to CURRENT_CLASS_TYPE's virtual function
15253 tables. */
15254 initialize_vtbl_ptrs (current_class_ptr);
15255 finish_compound_stmt (compound_stmt);
15257 if (flag_lifetime_dse
15258 /* Clobbering an empty base is harmful if it overlays real data. */
15259 && !is_empty_class (current_class_type))
15261 if (sanitize_flags_p (SANITIZE_VPTR)
15262 && (flag_sanitize_recover & SANITIZE_VPTR) == 0
15263 && TYPE_CONTAINS_VPTR_P (current_class_type))
15265 tree binfo = TYPE_BINFO (current_class_type);
15266 tree ref
15267 = cp_build_fold_indirect_ref (current_class_ptr);
15269 tree vtbl_ptr = build_vfield_ref (ref, TREE_TYPE (binfo));
15270 tree vtbl = build_zero_cst (TREE_TYPE (vtbl_ptr));
15271 tree stmt = cp_build_modify_expr (input_location, vtbl_ptr,
15272 NOP_EXPR, vtbl,
15273 tf_warning_or_error);
15274 finish_decl_cleanup (NULL_TREE, stmt);
15276 else
15277 finish_decl_cleanup (NULL_TREE, build_clobber_this ());
15280 /* And insert cleanups for our bases and members so that they
15281 will be properly destroyed if we throw. */
15282 push_base_cleanups ();
15286 /* At the end of every destructor we generate code to delete the object if
15287 necessary. Do that now. */
15289 static void
15290 finish_destructor_body (void)
15292 tree exprstmt;
15294 /* Any return from a destructor will end up here; that way all base
15295 and member cleanups will be run when the function returns. */
15296 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15298 if (targetm.cxx.cdtor_returns_this ())
15300 tree val;
15302 val = DECL_ARGUMENTS (current_function_decl);
15303 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15304 DECL_RESULT (current_function_decl), val);
15305 /* Return the address of the object. */
15306 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15307 add_stmt (exprstmt);
15311 /* Do the necessary processing for the beginning of a function body, which
15312 in this case includes member-initializers, but not the catch clauses of
15313 a function-try-block. Currently, this means opening a binding level
15314 for the member-initializers (in a ctor), member cleanups (in a dtor),
15315 and capture proxies (in a lambda operator()). */
15317 tree
15318 begin_function_body (void)
15320 tree stmt;
15322 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
15323 return NULL_TREE;
15325 if (processing_template_decl)
15326 /* Do nothing now. */;
15327 else
15328 /* Always keep the BLOCK node associated with the outermost pair of
15329 curly braces of a function. These are needed for correct
15330 operation of dwarfout.c. */
15331 keep_next_level (true);
15333 stmt = begin_compound_stmt (BCS_FN_BODY);
15335 if (processing_template_decl)
15336 /* Do nothing now. */;
15337 else if (DECL_DESTRUCTOR_P (current_function_decl))
15338 begin_destructor_body ();
15340 return stmt;
15343 /* Do the processing for the end of a function body. Currently, this means
15344 closing out the cleanups for fully-constructed bases and members, and in
15345 the case of the destructor, deleting the object if desired. Again, this
15346 is only meaningful for [cd]tors, since they are the only functions where
15347 there is a significant distinction between the main body and any
15348 function catch clauses. Handling, say, main() return semantics here
15349 would be wrong, as flowing off the end of a function catch clause for
15350 main() would also need to return 0. */
15352 void
15353 finish_function_body (tree compstmt)
15355 if (compstmt == NULL_TREE)
15356 return;
15358 /* Close the block. */
15359 finish_compound_stmt (compstmt);
15361 if (processing_template_decl)
15362 /* Do nothing now. */;
15363 else if (DECL_CONSTRUCTOR_P (current_function_decl))
15364 finish_constructor_body ();
15365 else if (DECL_DESTRUCTOR_P (current_function_decl))
15366 finish_destructor_body ();
15369 /* Given a function, returns the BLOCK corresponding to the outermost level
15370 of curly braces, skipping the artificial block created for constructor
15371 initializers. */
15373 tree
15374 outer_curly_brace_block (tree fndecl)
15376 tree block = DECL_INITIAL (fndecl);
15377 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15378 return block;
15379 block = BLOCK_SUBBLOCKS (block);
15380 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15381 return block;
15382 block = BLOCK_SUBBLOCKS (block);
15383 gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
15384 return block;
15387 /* If FNDECL is a class's key method, add the class to the list of
15388 keyed classes that should be emitted. */
15390 static void
15391 record_key_method_defined (tree fndecl)
15393 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
15394 && DECL_VIRTUAL_P (fndecl)
15395 && !processing_template_decl)
15397 tree fnclass = DECL_CONTEXT (fndecl);
15398 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
15399 vec_safe_push (keyed_classes, fnclass);
15403 /* Subroutine of finish_function.
15404 Save the body of constexpr functions for possible
15405 future compile time evaluation. */
15407 static void
15408 maybe_save_function_definition (tree fun)
15410 if (!processing_template_decl
15411 && DECL_DECLARED_CONSTEXPR_P (fun)
15412 && !cp_function_chain->invalid_constexpr
15413 && !DECL_CLONED_FUNCTION_P (fun))
15414 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
15417 /* Finish up a function declaration and compile that function
15418 all the way to assembler language output. The free the storage
15419 for the function definition. INLINE_P is TRUE if we just
15420 finished processing the body of an in-class inline function
15421 definition. (This processing will have taken place after the
15422 class definition is complete.) */
15424 tree
15425 finish_function (bool inline_p)
15427 tree fndecl = current_function_decl;
15428 tree fntype, ctype = NULL_TREE;
15430 /* When we get some parse errors, we can end up without a
15431 current_function_decl, so cope. */
15432 if (fndecl == NULL_TREE)
15433 return error_mark_node;
15435 finish_lambda_scope ();
15437 if (c_dialect_objc ())
15438 objc_finish_function ();
15440 record_key_method_defined (fndecl);
15442 fntype = TREE_TYPE (fndecl);
15444 /* TREE_READONLY (fndecl) = 1;
15445 This caused &foo to be of type ptr-to-const-function
15446 which then got a warning when stored in a ptr-to-function variable. */
15448 gcc_assert (building_stmt_list_p ());
15449 /* The current function is being defined, so its DECL_INITIAL should
15450 be set, and unless there's a multiple definition, it should be
15451 error_mark_node. */
15452 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
15454 /* For a cloned function, we've already got all the code we need;
15455 there's no need to add any extra bits. */
15456 if (!DECL_CLONED_FUNCTION_P (fndecl))
15458 /* Make it so that `main' always returns 0 by default. */
15459 if (DECL_MAIN_P (current_function_decl))
15460 finish_return_stmt (integer_zero_node);
15462 if (use_eh_spec_block (current_function_decl))
15463 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
15464 (TREE_TYPE (current_function_decl)),
15465 current_eh_spec_block);
15468 /* If we're saving up tree structure, tie off the function now. */
15469 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
15471 if (fn_contains_cilk_spawn_p (cfun) && !processing_template_decl)
15472 cfun->cilk_frame_decl = insert_cilk_frame (fndecl);
15474 finish_fname_decls ();
15476 /* If this function can't throw any exceptions, remember that. */
15477 if (!processing_template_decl
15478 && !cp_function_chain->can_throw
15479 && !flag_non_call_exceptions
15480 && !decl_replaceable_p (fndecl))
15481 TREE_NOTHROW (fndecl) = 1;
15483 /* This must come after expand_function_end because cleanups might
15484 have declarations (from inline functions) that need to go into
15485 this function's blocks. */
15487 /* If the current binding level isn't the outermost binding level
15488 for this function, either there is a bug, or we have experienced
15489 syntax errors and the statement tree is malformed. */
15490 if (current_binding_level->kind != sk_function_parms)
15492 /* Make sure we have already experienced errors. */
15493 gcc_assert (errorcount);
15495 /* Throw away the broken statement tree and extra binding
15496 levels. */
15497 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
15499 while (current_binding_level->kind != sk_function_parms)
15501 if (current_binding_level->kind == sk_class)
15502 pop_nested_class ();
15503 else
15504 poplevel (0, 0, 0);
15507 poplevel (1, 0, 1);
15509 /* Statements should always be full-expressions at the outermost set
15510 of curly braces for a function. */
15511 gcc_assert (stmts_are_full_exprs_p ());
15513 /* If there are no return statements in a function with auto return type,
15514 the return type is void. But if the declared type is something like
15515 auto*, this is an error. */
15516 if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
15517 && TREE_TYPE (fntype) == current_function_auto_return_pattern)
15519 if (is_auto (current_function_auto_return_pattern))
15521 apply_deduced_return_type (fndecl, void_type_node);
15522 fntype = TREE_TYPE (fndecl);
15524 else if (!current_function_returns_value
15525 && !current_function_returns_null)
15527 error ("no return statements in function returning %qT",
15528 current_function_auto_return_pattern);
15529 inform (input_location, "only plain %<auto%> return type can be "
15530 "deduced to %<void%>");
15534 // If this is a concept, check that the definition is reasonable.
15535 if (DECL_DECLARED_CONCEPT_P (fndecl))
15536 check_function_concept (fndecl);
15538 /* Lambda closure members are implicitly constexpr if possible. */
15539 if (cxx_dialect >= cxx17
15540 && LAMBDA_TYPE_P (CP_DECL_CONTEXT (fndecl)))
15541 DECL_DECLARED_CONSTEXPR_P (fndecl)
15542 = ((processing_template_decl
15543 || is_valid_constexpr_fn (fndecl, /*complain*/false))
15544 && potential_constant_expression (DECL_SAVED_TREE (fndecl)));
15546 /* Save constexpr function body before it gets munged by
15547 the NRV transformation. */
15548 maybe_save_function_definition (fndecl);
15550 /* Invoke the pre-genericize plugin before we start munging things. */
15551 if (!processing_template_decl)
15552 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
15554 /* Perform delayed folding before NRV transformation. */
15555 if (!processing_template_decl)
15556 cp_fold_function (fndecl);
15558 /* Set up the named return value optimization, if we can. Candidate
15559 variables are selected in check_return_expr. */
15560 if (current_function_return_value)
15562 tree r = current_function_return_value;
15563 tree outer;
15565 if (r != error_mark_node
15566 /* This is only worth doing for fns that return in memory--and
15567 simpler, since we don't have to worry about promoted modes. */
15568 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
15569 /* Only allow this for variables declared in the outer scope of
15570 the function so we know that their lifetime always ends with a
15571 return; see g++.dg/opt/nrv6.C. We could be more flexible if
15572 we were to do this optimization in tree-ssa. */
15573 && (outer = outer_curly_brace_block (fndecl))
15574 && chain_member (r, BLOCK_VARS (outer)))
15575 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
15577 current_function_return_value = NULL_TREE;
15580 /* Remember that we were in class scope. */
15581 if (current_class_name)
15582 ctype = current_class_type;
15584 /* Must mark the RESULT_DECL as being in this function. */
15585 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
15587 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
15588 to the FUNCTION_DECL node itself. */
15589 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
15591 /* Save away current state, if appropriate. */
15592 if (!processing_template_decl)
15593 save_function_data (fndecl);
15595 /* Complain if there's just no return statement. */
15596 if (warn_return_type
15597 && !VOID_TYPE_P (TREE_TYPE (fntype))
15598 && !dependent_type_p (TREE_TYPE (fntype))
15599 && !current_function_returns_value && !current_function_returns_null
15600 /* Don't complain if we abort or throw. */
15601 && !current_function_returns_abnormally
15602 /* Don't complain if there's an infinite loop. */
15603 && !current_function_infinite_loop
15604 /* Don't complain if we are declared noreturn. */
15605 && !TREE_THIS_VOLATILE (fndecl)
15606 && !DECL_NAME (DECL_RESULT (fndecl))
15607 && !TREE_NO_WARNING (fndecl)
15608 /* Structor return values (if any) are set by the compiler. */
15609 && !DECL_CONSTRUCTOR_P (fndecl)
15610 && !DECL_DESTRUCTOR_P (fndecl)
15611 && targetm.warn_func_return (fndecl))
15613 warning (OPT_Wreturn_type,
15614 "no return statement in function returning non-void");
15615 TREE_NO_WARNING (fndecl) = 1;
15618 /* Store the end of the function, so that we get good line number
15619 info for the epilogue. */
15620 cfun->function_end_locus = input_location;
15622 /* Complain about parameters that are only set, but never otherwise used. */
15623 if (warn_unused_but_set_parameter
15624 && !processing_template_decl
15625 && errorcount == unused_but_set_errorcount
15626 && !DECL_CLONED_FUNCTION_P (fndecl))
15628 tree decl;
15630 for (decl = DECL_ARGUMENTS (fndecl);
15631 decl;
15632 decl = DECL_CHAIN (decl))
15633 if (TREE_USED (decl)
15634 && TREE_CODE (decl) == PARM_DECL
15635 && !DECL_READ_P (decl)
15636 && DECL_NAME (decl)
15637 && !DECL_ARTIFICIAL (decl)
15638 && !TREE_NO_WARNING (decl)
15639 && !DECL_IN_SYSTEM_HEADER (decl)
15640 && TREE_TYPE (decl) != error_mark_node
15641 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
15642 && (!CLASS_TYPE_P (TREE_TYPE (decl))
15643 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
15644 warning_at (DECL_SOURCE_LOCATION (decl),
15645 OPT_Wunused_but_set_parameter,
15646 "parameter %qD set but not used", decl);
15647 unused_but_set_errorcount = errorcount;
15650 /* Complain about locally defined typedefs that are not used in this
15651 function. */
15652 maybe_warn_unused_local_typedefs ();
15654 /* Possibly warn about unused parameters. */
15655 if (warn_unused_parameter
15656 && !processing_template_decl
15657 && !DECL_CLONED_FUNCTION_P (fndecl))
15658 do_warn_unused_parameter (fndecl);
15660 /* Genericize before inlining. */
15661 if (!processing_template_decl)
15663 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
15664 cp_genericize (fndecl);
15665 /* Clear out the bits we don't need. */
15666 f->x_current_class_ptr = NULL;
15667 f->x_current_class_ref = NULL;
15668 f->x_eh_spec_block = NULL;
15669 f->x_in_charge_parm = NULL;
15670 f->x_vtt_parm = NULL;
15671 f->x_return_value = NULL;
15672 f->bindings = NULL;
15673 f->extern_decl_map = NULL;
15674 f->infinite_loops = NULL;
15676 /* Clear out the bits we don't need. */
15677 local_names = NULL;
15679 /* We're leaving the context of this function, so zap cfun. It's still in
15680 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
15681 set_cfun (NULL);
15682 current_function_decl = NULL;
15684 /* If this is an in-class inline definition, we may have to pop the
15685 bindings for the template parameters that we added in
15686 maybe_begin_member_template_processing when start_function was
15687 called. */
15688 if (inline_p)
15689 maybe_end_member_template_processing ();
15691 /* Leave the scope of the class. */
15692 if (ctype)
15693 pop_nested_class ();
15695 --function_depth;
15697 /* Clean up. */
15698 current_function_decl = NULL_TREE;
15700 invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
15701 return fndecl;
15704 /* Create the FUNCTION_DECL for a function definition.
15705 DECLSPECS and DECLARATOR are the parts of the declaration;
15706 they describe the return type and the name of the function,
15707 but twisted together in a fashion that parallels the syntax of C.
15709 This function creates a binding context for the function body
15710 as well as setting up the FUNCTION_DECL in current_function_decl.
15712 Returns a FUNCTION_DECL on success.
15714 If the DECLARATOR is not suitable for a function (it defines a datum
15715 instead), we return 0, which tells yyparse to report a parse error.
15717 May return void_type_node indicating that this method is actually
15718 a friend. See grokfield for more details.
15720 Came here with a `.pushlevel' .
15722 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
15723 CHANGES TO CODE IN `grokfield'. */
15725 tree
15726 grokmethod (cp_decl_specifier_seq *declspecs,
15727 const cp_declarator *declarator, tree attrlist)
15729 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
15730 &attrlist);
15732 if (fndecl == error_mark_node)
15733 return error_mark_node;
15735 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
15737 error ("invalid member function declaration");
15738 return error_mark_node;
15741 if (attrlist)
15742 cplus_decl_attributes (&fndecl, attrlist, 0);
15744 /* Pass friends other than inline friend functions back. */
15745 if (fndecl == void_type_node)
15746 return fndecl;
15748 if (DECL_IN_AGGR_P (fndecl))
15750 if (DECL_CLASS_SCOPE_P (fndecl))
15751 error ("%qD is already defined in class %qT", fndecl,
15752 DECL_CONTEXT (fndecl));
15753 return error_mark_node;
15756 check_template_shadow (fndecl);
15758 if (TREE_PUBLIC (fndecl))
15759 DECL_COMDAT (fndecl) = 1;
15760 DECL_DECLARED_INLINE_P (fndecl) = 1;
15761 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
15763 /* We process method specializations in finish_struct_1. */
15764 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
15766 fndecl = push_template_decl (fndecl);
15767 if (fndecl == error_mark_node)
15768 return fndecl;
15771 if (! DECL_FRIEND_P (fndecl))
15773 if (DECL_CHAIN (fndecl))
15775 fndecl = copy_node (fndecl);
15776 TREE_CHAIN (fndecl) = NULL_TREE;
15780 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
15782 DECL_IN_AGGR_P (fndecl) = 1;
15783 return fndecl;
15787 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
15788 we can lay it out later, when and if its type becomes complete.
15790 Also handle constexpr variables where the initializer involves
15791 an unlowered PTRMEM_CST because the class isn't complete yet. */
15793 void
15794 maybe_register_incomplete_var (tree var)
15796 gcc_assert (VAR_P (var));
15798 /* Keep track of variables with incomplete types. */
15799 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
15800 && DECL_EXTERNAL (var))
15802 tree inner_type = TREE_TYPE (var);
15804 while (TREE_CODE (inner_type) == ARRAY_TYPE)
15805 inner_type = TREE_TYPE (inner_type);
15806 inner_type = TYPE_MAIN_VARIANT (inner_type);
15808 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
15809 /* RTTI TD entries are created while defining the type_info. */
15810 || (TYPE_LANG_SPECIFIC (inner_type)
15811 && TYPE_BEING_DEFINED (inner_type)))
15813 incomplete_var iv = {var, inner_type};
15814 vec_safe_push (incomplete_vars, iv);
15816 else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
15817 && decl_constant_var_p (var)
15818 && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
15820 /* When the outermost open class is complete we can resolve any
15821 pointers-to-members. */
15822 tree context = outermost_open_class ();
15823 incomplete_var iv = {var, context};
15824 vec_safe_push (incomplete_vars, iv);
15829 /* Called when a class type (given by TYPE) is defined. If there are
15830 any existing VAR_DECLs whose type has been completed by this
15831 declaration, update them now. */
15833 void
15834 complete_vars (tree type)
15836 unsigned ix;
15837 incomplete_var *iv;
15839 for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
15841 if (same_type_p (type, iv->incomplete_type))
15843 tree var = iv->decl;
15844 tree type = TREE_TYPE (var);
15846 if (type != error_mark_node
15847 && (TYPE_MAIN_VARIANT (strip_array_types (type))
15848 == iv->incomplete_type))
15850 /* Complete the type of the variable. The VAR_DECL itself
15851 will be laid out in expand_expr. */
15852 complete_type (type);
15853 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
15856 /* Remove this entry from the list. */
15857 incomplete_vars->unordered_remove (ix);
15859 else
15860 ix++;
15863 /* Check for pending declarations which may have abstract type. */
15864 complete_type_check_abstract (type);
15867 /* If DECL is of a type which needs a cleanup, build and return an
15868 expression to perform that cleanup here. Return NULL_TREE if no
15869 cleanup need be done. DECL can also be a _REF when called from
15870 split_nonconstant_init_1. */
15872 tree
15873 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
15875 tree type;
15876 tree attr;
15877 tree cleanup;
15879 /* Assume no cleanup is required. */
15880 cleanup = NULL_TREE;
15882 if (error_operand_p (decl))
15883 return cleanup;
15885 /* Handle "__attribute__((cleanup))". We run the cleanup function
15886 before the destructor since the destructor is what actually
15887 terminates the lifetime of the object. */
15888 if (DECL_P (decl))
15889 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
15890 else
15891 attr = NULL_TREE;
15892 if (attr)
15894 tree id;
15895 tree fn;
15896 tree arg;
15898 /* Get the name specified by the user for the cleanup function. */
15899 id = TREE_VALUE (TREE_VALUE (attr));
15900 /* Look up the name to find the cleanup function to call. It is
15901 important to use lookup_name here because that is what is
15902 used in c-common.c:handle_cleanup_attribute when performing
15903 initial checks on the attribute. Note that those checks
15904 include ensuring that the function found is not an overloaded
15905 function, or an object with an overloaded call operator,
15906 etc.; we can rely on the fact that the function found is an
15907 ordinary FUNCTION_DECL. */
15908 fn = lookup_name (id);
15909 arg = build_address (decl);
15910 if (!mark_used (decl, complain) && !(complain & tf_error))
15911 return error_mark_node;
15912 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
15913 if (cleanup == error_mark_node)
15914 return error_mark_node;
15916 /* Handle ordinary C++ destructors. */
15917 type = TREE_TYPE (decl);
15918 if (type_build_dtor_call (type))
15920 int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
15921 tree addr;
15922 tree call;
15924 if (TREE_CODE (type) == ARRAY_TYPE)
15925 addr = decl;
15926 else
15927 addr = build_address (decl);
15929 call = build_delete (TREE_TYPE (addr), addr,
15930 sfk_complete_destructor, flags, 0, complain);
15931 if (call == error_mark_node)
15932 cleanup = error_mark_node;
15933 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
15934 /* Discard the call. */;
15935 else if (cleanup)
15936 cleanup = cp_build_compound_expr (cleanup, call, complain);
15937 else
15938 cleanup = call;
15941 /* build_delete sets the location of the destructor call to the
15942 current location, even though the destructor is going to be
15943 called later, at the end of the current scope. This can lead to
15944 a "jumpy" behavior for users of debuggers when they step around
15945 the end of the block. So let's unset the location of the
15946 destructor call instead. */
15947 protected_set_expr_location (cleanup, UNKNOWN_LOCATION);
15949 if (cleanup
15950 && DECL_P (decl)
15951 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl)))
15952 /* Treat objects with destructors as used; the destructor may do
15953 something substantive. */
15954 && !mark_used (decl, complain) && !(complain & tf_error))
15955 return error_mark_node;
15957 return cleanup;
15961 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
15962 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
15963 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
15965 tree
15966 static_fn_type (tree memfntype)
15968 tree fntype;
15969 tree args;
15971 if (TYPE_PTRMEMFUNC_P (memfntype))
15972 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
15973 if (POINTER_TYPE_P (memfntype)
15974 || TREE_CODE (memfntype) == FUNCTION_DECL)
15975 memfntype = TREE_TYPE (memfntype);
15976 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
15977 return memfntype;
15978 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
15979 args = TYPE_ARG_TYPES (memfntype);
15980 cp_ref_qualifier rqual = type_memfn_rqual (memfntype);
15981 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
15982 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype), rqual);
15983 fntype = (cp_build_type_attribute_variant
15984 (fntype, TYPE_ATTRIBUTES (memfntype)));
15985 fntype = (build_exception_variant
15986 (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
15987 if (TYPE_HAS_LATE_RETURN_TYPE (memfntype))
15988 TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
15989 return fntype;
15992 /* DECL was originally constructed as a non-static member function,
15993 but turned out to be static. Update it accordingly. */
15995 void
15996 revert_static_member_fn (tree decl)
15998 tree stype = static_fn_type (decl);
15999 cp_cv_quals quals = type_memfn_quals (stype);
16000 cp_ref_qualifier rqual = type_memfn_rqual (stype);
16002 if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
16003 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
16005 TREE_TYPE (decl) = stype;
16007 if (DECL_ARGUMENTS (decl))
16008 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
16009 DECL_STATIC_FUNCTION_P (decl) = 1;
16012 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
16013 one of the language-independent trees. */
16015 enum cp_tree_node_structure_enum
16016 cp_tree_node_structure (union lang_tree_node * t)
16018 switch (TREE_CODE (&t->generic))
16020 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
16021 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
16022 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
16023 case OVERLOAD: return TS_CP_OVERLOAD;
16024 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
16025 case PTRMEM_CST: return TS_CP_PTRMEM;
16026 case BASELINK: return TS_CP_BASELINK;
16027 case TEMPLATE_DECL: return TS_CP_TEMPLATE_DECL;
16028 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
16029 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
16030 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
16031 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
16032 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
16033 case CONSTRAINT_INFO: return TS_CP_CONSTRAINT_INFO;
16034 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
16035 default: return TS_CP_GENERIC;
16039 /* Build the void_list_node (void_type_node having been created). */
16040 tree
16041 build_void_list_node (void)
16043 tree t = build_tree_list (NULL_TREE, void_type_node);
16044 return t;
16047 bool
16048 cp_missing_noreturn_ok_p (tree decl)
16050 /* A missing noreturn is ok for the `main' function. */
16051 return DECL_MAIN_P (decl);
16054 /* Return the decl used to identify the COMDAT group into which DECL should
16055 be placed. */
16057 tree
16058 cxx_comdat_group (tree decl)
16060 /* Virtual tables, construction virtual tables, and virtual table
16061 tables all go in a single COMDAT group, named after the primary
16062 virtual table. */
16063 if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
16064 decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
16065 /* For all other DECLs, the COMDAT group is the mangled name of the
16066 declaration itself. */
16067 else
16069 while (DECL_THUNK_P (decl))
16071 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
16072 into the same section as the target function. In that case
16073 we must return target's name. */
16074 tree target = THUNK_TARGET (decl);
16075 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
16076 && DECL_SECTION_NAME (target) != NULL
16077 && DECL_ONE_ONLY (target))
16078 decl = target;
16079 else
16080 break;
16084 return decl;
16087 /* Returns the return type for FN as written by the user, which may include
16088 a placeholder for a deduced return type. */
16090 tree
16091 fndecl_declared_return_type (tree fn)
16093 fn = STRIP_TEMPLATE (fn);
16094 if (FNDECL_USED_AUTO (fn))
16096 struct language_function *f = NULL;
16097 if (DECL_STRUCT_FUNCTION (fn))
16098 f = DECL_STRUCT_FUNCTION (fn)->language;
16099 if (f == NULL)
16100 f = DECL_SAVED_FUNCTION_DATA (fn);
16101 return f->x_auto_return_pattern;
16103 return TREE_TYPE (TREE_TYPE (fn));
16106 /* Returns true iff DECL was declared with an auto type and it has
16107 not yet been deduced to a real type. */
16109 bool
16110 undeduced_auto_decl (tree decl)
16112 if (cxx_dialect < cxx11)
16113 return false;
16114 return type_uses_auto (TREE_TYPE (decl));
16117 /* Complain if DECL has an undeduced return type. */
16119 bool
16120 require_deduced_type (tree decl, tsubst_flags_t complain)
16122 if (undeduced_auto_decl (decl))
16124 if (complain & tf_error)
16125 error ("use of %qD before deduction of %<auto%>", decl);
16126 return false;
16128 return true;
16131 #include "gt-cp-decl.h"