[C++ PATCH] overloaded operator fns [6/N]
[official-gcc.git] / gcc / cp / decl.c
blobf43c960c939d03577816fca3a011a4848e3d4cba
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 (newdecl)
1924 = DECL_OVERLOADED_OPERATOR_CODE (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 debug_hooks->register_main_translation_unit
4016 (DECL_CONTEXT (global_namespace));
4017 begin_scope (sk_namespace, global_namespace);
4018 current_namespace = global_namespace;
4020 if (flag_visibility_ms_compat)
4021 default_visibility = VISIBILITY_HIDDEN;
4023 /* Initially, C. */
4024 current_lang_name = lang_name_c;
4026 /* Create the `std' namespace. */
4027 push_namespace (std_identifier);
4028 std_node = current_namespace;
4029 pop_namespace ();
4031 flag_noexcept_type = (cxx_dialect >= cxx17);
4033 c_common_nodes_and_builtins ();
4035 integer_two_node = build_int_cst (NULL_TREE, 2);
4037 /* Guess at the initial static decls size. */
4038 vec_alloc (static_decls, 500);
4040 /* ... and keyed classes. */
4041 vec_alloc (keyed_classes, 100);
4043 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
4044 truthvalue_type_node = boolean_type_node;
4045 truthvalue_false_node = boolean_false_node;
4046 truthvalue_true_node = boolean_true_node;
4048 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
4049 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
4050 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
4051 noexcept_deferred_spec = build_tree_list (make_node (DEFERRED_NOEXCEPT),
4052 NULL_TREE);
4054 #if 0
4055 record_builtin_type (RID_MAX, NULL, string_type_node);
4056 #endif
4058 delta_type_node = ptrdiff_type_node;
4059 vtable_index_type = ptrdiff_type_node;
4061 vtt_parm_type = build_pointer_type (const_ptr_type_node);
4062 void_ftype = build_function_type_list (void_type_node, NULL_TREE);
4063 void_ftype_ptr = build_function_type_list (void_type_node,
4064 ptr_type_node, NULL_TREE);
4065 void_ftype_ptr
4066 = build_exception_variant (void_ftype_ptr, empty_except_spec);
4068 /* Create the conversion operator marker. This operator's DECL_NAME
4069 is in the identifier table, so we can use identifier equality to
4070 find it. */
4071 conv_op_marker = build_lang_decl (FUNCTION_DECL, conv_op_identifier,
4072 void_ftype);
4074 /* C++ extensions */
4076 unknown_type_node = make_node (LANG_TYPE);
4077 record_unknown_type (unknown_type_node, "unknown type");
4079 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
4080 TREE_TYPE (unknown_type_node) = unknown_type_node;
4082 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
4083 result. */
4084 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
4085 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
4087 init_list_type_node = make_node (LANG_TYPE);
4088 record_unknown_type (init_list_type_node, "init list");
4091 /* Make sure we get a unique function type, so we can give
4092 its pointer type a name. (This wins for gdb.) */
4093 tree vfunc_type = make_node (FUNCTION_TYPE);
4094 TREE_TYPE (vfunc_type) = integer_type_node;
4095 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
4096 layout_type (vfunc_type);
4098 vtable_entry_type = build_pointer_type (vfunc_type);
4100 record_builtin_type (RID_MAX, "__vtbl_ptr_type", vtable_entry_type);
4102 vtbl_type_node
4103 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
4104 layout_type (vtbl_type_node);
4105 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
4106 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
4107 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
4108 layout_type (vtbl_ptr_type_node);
4109 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
4111 push_namespace (get_identifier ("__cxxabiv1"));
4112 abi_node = current_namespace;
4113 pop_namespace ();
4115 global_type_node = make_node (LANG_TYPE);
4116 record_unknown_type (global_type_node, "global type");
4118 any_targ_node = make_node (LANG_TYPE);
4119 record_unknown_type (any_targ_node, "any type");
4121 /* Now, C++. */
4122 current_lang_name = lang_name_cplusplus;
4124 if (aligned_new_threshold > 1
4125 && !pow2p_hwi (aligned_new_threshold))
4127 error ("-faligned-new=%d is not a power of two", aligned_new_threshold);
4128 aligned_new_threshold = 1;
4130 if (aligned_new_threshold == -1)
4131 aligned_new_threshold = (cxx_dialect >= cxx17) ? 1 : 0;
4132 if (aligned_new_threshold == 1)
4133 aligned_new_threshold = malloc_alignment () / BITS_PER_UNIT;
4136 tree newattrs, extvisattr;
4137 tree newtype, deltype;
4138 tree ptr_ftype_sizetype;
4139 tree new_eh_spec;
4141 ptr_ftype_sizetype
4142 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
4143 if (cxx_dialect == cxx98)
4145 tree bad_alloc_id;
4146 tree bad_alloc_type_node;
4147 tree bad_alloc_decl;
4149 push_namespace (std_identifier);
4150 bad_alloc_id = get_identifier ("bad_alloc");
4151 bad_alloc_type_node = make_class_type (RECORD_TYPE);
4152 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
4153 bad_alloc_decl
4154 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
4155 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
4156 pop_namespace ();
4158 new_eh_spec
4159 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
4161 else
4162 new_eh_spec = noexcept_false_spec;
4164 /* Ensure attribs.c is initialized. */
4165 init_attributes ();
4167 /* Ensure constraint.cc is initialized. */
4168 init_constraint_processing ();
4170 extvisattr = build_tree_list (get_identifier ("externally_visible"),
4171 NULL_TREE);
4172 newattrs = tree_cons (get_identifier ("alloc_size"),
4173 build_tree_list (NULL_TREE, integer_one_node),
4174 extvisattr);
4175 newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
4176 newtype = build_exception_variant (newtype, new_eh_spec);
4177 deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
4178 deltype = build_exception_variant (deltype, empty_except_spec);
4179 tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4180 DECL_IS_MALLOC (opnew) = 1;
4181 DECL_IS_OPERATOR_NEW (opnew) = 1;
4182 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4183 DECL_IS_MALLOC (opnew) = 1;
4184 DECL_IS_OPERATOR_NEW (opnew) = 1;
4185 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4186 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4187 if (flag_sized_deallocation)
4189 /* Also push the sized deallocation variants:
4190 void operator delete(void*, std::size_t) throw();
4191 void operator delete[](void*, std::size_t) throw(); */
4192 tree void_ftype_ptr_size
4193 = build_function_type_list (void_type_node, ptr_type_node,
4194 size_type_node, NULL_TREE);
4195 deltype = cp_build_type_attribute_variant (void_ftype_ptr_size,
4196 extvisattr);
4197 deltype = build_exception_variant (deltype, empty_except_spec);
4198 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4199 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4202 if (aligned_new_threshold)
4204 push_namespace (std_identifier);
4205 tree align_id = get_identifier ("align_val_t");
4206 align_type_node = start_enum (align_id, NULL_TREE, size_type_node,
4207 NULL_TREE, /*scoped*/true, NULL);
4208 pop_namespace ();
4210 /* operator new (size_t, align_val_t); */
4211 newtype = build_function_type_list (ptr_type_node, size_type_node,
4212 align_type_node, NULL_TREE);
4213 newtype = cp_build_type_attribute_variant (newtype, newattrs);
4214 newtype = build_exception_variant (newtype, new_eh_spec);
4215 opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4216 DECL_IS_MALLOC (opnew) = 1;
4217 DECL_IS_OPERATOR_NEW (opnew) = 1;
4218 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4219 DECL_IS_MALLOC (opnew) = 1;
4220 DECL_IS_OPERATOR_NEW (opnew) = 1;
4222 /* operator delete (void *, align_val_t); */
4223 deltype = build_function_type_list (void_type_node, ptr_type_node,
4224 align_type_node, NULL_TREE);
4225 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4226 deltype = build_exception_variant (deltype, empty_except_spec);
4227 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4228 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4230 if (flag_sized_deallocation)
4232 /* operator delete (void *, size_t, align_val_t); */
4233 deltype = build_function_type_list (void_type_node, ptr_type_node,
4234 size_type_node, align_type_node,
4235 NULL_TREE);
4236 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4237 deltype = build_exception_variant (deltype, empty_except_spec);
4238 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4239 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4243 nullptr_type_node = make_node (NULLPTR_TYPE);
4244 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
4245 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
4246 TYPE_UNSIGNED (nullptr_type_node) = 1;
4247 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
4248 if (abi_version_at_least (9))
4249 SET_TYPE_ALIGN (nullptr_type_node, GET_MODE_ALIGNMENT (ptr_mode));
4250 SET_TYPE_MODE (nullptr_type_node, ptr_mode);
4251 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
4252 nullptr_node = build_int_cst (nullptr_type_node, 0);
4255 abort_fndecl
4256 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
4257 ECF_NORETURN | ECF_NOTHROW | ECF_COLD);
4259 /* Perform other language dependent initializations. */
4260 init_class_processing ();
4261 init_rtti_processing ();
4262 init_template_processing ();
4264 if (flag_exceptions)
4265 init_exception_processing ();
4267 if (! supports_one_only ())
4268 flag_weak = 0;
4270 make_fname_decl = cp_make_fname_decl;
4271 start_fname_decls ();
4273 /* Show we use EH for cleanups. */
4274 if (flag_exceptions)
4275 using_eh_for_cleanups ();
4278 /* Generate an initializer for a function naming variable from
4279 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
4280 filled in with the type of the init. */
4282 tree
4283 cp_fname_init (const char* name, tree *type_p)
4285 tree domain = NULL_TREE;
4286 tree type;
4287 tree init = NULL_TREE;
4288 size_t length = 0;
4290 if (name)
4292 length = strlen (name);
4293 domain = build_index_type (size_int (length));
4294 init = build_string (length + 1, name);
4297 type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
4298 type = build_cplus_array_type (type, domain);
4300 *type_p = type;
4302 if (init)
4303 TREE_TYPE (init) = type;
4304 else
4305 init = error_mark_node;
4307 return init;
4310 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
4311 the decl, LOC is the location to give the decl, NAME is the
4312 initialization string and TYPE_DEP indicates whether NAME depended
4313 on the type of the function. We make use of that to detect
4314 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
4315 at the point of first use, so we mustn't push the decl now. */
4317 static tree
4318 cp_make_fname_decl (location_t loc, tree id, int type_dep)
4320 const char *const name = (type_dep && processing_template_decl
4321 ? NULL : fname_as_string (type_dep));
4322 tree type;
4323 tree init = cp_fname_init (name, &type);
4324 tree decl = build_decl (loc, VAR_DECL, id, type);
4326 if (name)
4327 free (CONST_CAST (char *, name));
4329 TREE_STATIC (decl) = 1;
4330 TREE_READONLY (decl) = 1;
4331 DECL_ARTIFICIAL (decl) = 1;
4333 TREE_USED (decl) = 1;
4335 if (current_function_decl)
4337 DECL_CONTEXT (decl) = current_function_decl;
4338 decl = pushdecl_outermost_localscope (decl);
4339 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
4340 LOOKUP_ONLYCONVERTING);
4342 else
4344 DECL_THIS_STATIC (decl) = true;
4345 pushdecl_top_level_and_finish (decl, init);
4348 return decl;
4351 static tree
4352 builtin_function_1 (tree decl, tree context, bool is_global)
4354 tree id = DECL_NAME (decl);
4355 const char *name = IDENTIFIER_POINTER (id);
4357 retrofit_lang_decl (decl);
4359 DECL_ARTIFICIAL (decl) = 1;
4360 SET_DECL_LANGUAGE (decl, lang_c);
4361 /* Runtime library routines are, by definition, available in an
4362 external shared object. */
4363 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4364 DECL_VISIBILITY_SPECIFIED (decl) = 1;
4366 DECL_CONTEXT (decl) = context;
4368 /* A function in the user's namespace should have an explicit
4369 declaration before it is used. Mark the built-in function as
4370 anticipated but not actually declared. */
4371 if (name[0] != '_' || name[1] != '_')
4372 DECL_ANTICIPATED (decl) = 1;
4373 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4375 size_t len = strlen (name);
4377 /* Treat __*_chk fortification functions as anticipated as well,
4378 unless they are __builtin_*. */
4379 if (len > strlen ("___chk")
4380 && memcmp (name + len - strlen ("_chk"),
4381 "_chk", strlen ("_chk") + 1) == 0)
4382 DECL_ANTICIPATED (decl) = 1;
4385 if (is_global)
4386 pushdecl_top_level (decl);
4387 else
4388 pushdecl (decl);
4390 return decl;
4393 tree
4394 cxx_builtin_function (tree decl)
4396 tree id = DECL_NAME (decl);
4397 const char *name = IDENTIFIER_POINTER (id);
4398 /* All builtins that don't begin with an '_' should additionally
4399 go in the 'std' namespace. */
4400 if (name[0] != '_')
4402 tree decl2 = copy_node(decl);
4403 push_namespace (std_identifier);
4404 builtin_function_1 (decl2, std_node, false);
4405 pop_namespace ();
4408 return builtin_function_1 (decl, NULL_TREE, false);
4411 /* Like cxx_builtin_function, but guarantee the function is added to the global
4412 scope. This is to allow function specific options to add new machine
4413 dependent builtins when the target ISA changes via attribute((target(...)))
4414 which saves space on program startup if the program does not use non-generic
4415 ISAs. */
4417 tree
4418 cxx_builtin_function_ext_scope (tree decl)
4421 tree id = DECL_NAME (decl);
4422 const char *name = IDENTIFIER_POINTER (id);
4423 /* All builtins that don't begin with an '_' should additionally
4424 go in the 'std' namespace. */
4425 if (name[0] != '_')
4427 tree decl2 = copy_node(decl);
4428 push_namespace (std_identifier);
4429 builtin_function_1 (decl2, std_node, true);
4430 pop_namespace ();
4433 return builtin_function_1 (decl, NULL_TREE, true);
4436 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4437 function. Not called directly. */
4439 static tree
4440 build_library_fn (tree name, enum tree_code operator_code, tree type,
4441 int ecf_flags)
4443 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4444 DECL_EXTERNAL (fn) = 1;
4445 TREE_PUBLIC (fn) = 1;
4446 DECL_ARTIFICIAL (fn) = 1;
4447 DECL_OVERLOADED_OPERATOR_CODE (fn) = operator_code;
4448 SET_DECL_LANGUAGE (fn, lang_c);
4449 /* Runtime library routines are, by definition, available in an
4450 external shared object. */
4451 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4452 DECL_VISIBILITY_SPECIFIED (fn) = 1;
4453 set_call_expr_flags (fn, ecf_flags);
4454 return fn;
4457 /* Returns the _DECL for a library function with C++ linkage. */
4459 static tree
4460 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4461 int ecf_flags)
4463 tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4464 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4465 SET_DECL_LANGUAGE (fn, lang_cplusplus);
4466 return fn;
4469 /* Like build_library_fn, but takes a C string instead of an
4470 IDENTIFIER_NODE. */
4472 tree
4473 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4475 return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4478 /* Like build_cp_library_fn, but takes a C string instead of an
4479 IDENTIFIER_NODE. */
4481 tree
4482 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4484 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4485 ecf_flags);
4488 /* Like build_library_fn, but also pushes the function so that we will
4489 be able to find it via get_global_binding. Also, the function
4490 may throw exceptions listed in RAISES. */
4492 tree
4493 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4495 tree fn;
4497 if (raises)
4498 type = build_exception_variant (type, raises);
4500 fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4501 pushdecl_top_level (fn);
4502 return fn;
4505 /* Like build_cp_library_fn, but also pushes the function so that it
4506 will be found by normal lookup. */
4508 static tree
4509 push_cp_library_fn (enum tree_code operator_code, tree type,
4510 int ecf_flags)
4512 tree fn = build_cp_library_fn (ovl_op_identifier (false, operator_code),
4513 operator_code, type, ecf_flags);
4514 pushdecl (fn);
4515 if (flag_tm)
4516 apply_tm_attr (fn, get_identifier ("transaction_safe"));
4517 return fn;
4520 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4521 a FUNCTION_TYPE. */
4523 tree
4524 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4526 tree type = build_function_type (void_type_node, parmtypes);
4527 return push_library_fn (name, type, NULL_TREE, ecf_flags);
4530 /* Like push_library_fn, but also note that this function throws
4531 and does not return. Used for __throw_foo and the like. */
4533 tree
4534 push_throw_library_fn (tree name, tree type)
4536 tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN | ECF_COLD);
4537 return fn;
4540 /* When we call finish_struct for an anonymous union, we create
4541 default copy constructors and such. But, an anonymous union
4542 shouldn't have such things; this function undoes the damage to the
4543 anonymous union type T.
4545 (The reason that we create the synthesized methods is that we don't
4546 distinguish `union { int i; }' from `typedef union { int i; } U'.
4547 The first is an anonymous union; the second is just an ordinary
4548 union type.) */
4550 void
4551 fixup_anonymous_aggr (tree t)
4553 /* Wipe out memory of synthesized methods. */
4554 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4555 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4556 TYPE_HAS_COPY_CTOR (t) = 0;
4557 TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4558 TYPE_HAS_COPY_ASSIGN (t) = 0;
4559 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4561 /* Splice the implicitly generated functions out of TYPE_FIELDS. */
4562 for (tree probe, *prev_p = &TYPE_FIELDS (t); (probe = *prev_p);)
4563 if (TREE_CODE (probe) == FUNCTION_DECL && DECL_ARTIFICIAL (probe))
4564 *prev_p = DECL_CHAIN (probe);
4565 else
4566 prev_p = &DECL_CHAIN (probe);
4568 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4569 assignment operators (because they cannot have these methods themselves).
4570 For anonymous unions this is already checked because they are not allowed
4571 in any union, otherwise we have to check it. */
4572 if (TREE_CODE (t) != UNION_TYPE)
4574 tree field, type;
4576 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4577 if (TREE_CODE (field) == FIELD_DECL)
4579 type = TREE_TYPE (field);
4580 if (CLASS_TYPE_P (type))
4582 if (TYPE_NEEDS_CONSTRUCTING (type))
4583 error ("member %q+#D with constructor not allowed "
4584 "in anonymous aggregate", field);
4585 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4586 error ("member %q+#D with destructor not allowed "
4587 "in anonymous aggregate", field);
4588 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4589 error ("member %q+#D with copy assignment operator "
4590 "not allowed in anonymous aggregate", field);
4596 /* Warn for an attribute located at LOCATION that appertains to the
4597 class type CLASS_TYPE that has not been properly placed after its
4598 class-key, in it class-specifier. */
4600 void
4601 warn_misplaced_attr_for_class_type (source_location location,
4602 tree class_type)
4604 gcc_assert (OVERLOAD_TYPE_P (class_type));
4606 if (warning_at (location, OPT_Wattributes,
4607 "attribute ignored in declaration "
4608 "of %q#T", class_type))
4609 inform (location,
4610 "attribute for %q#T must follow the %qs keyword",
4611 class_type, class_key_or_enum_as_string (class_type));
4614 /* Make sure that a declaration with no declarator is well-formed, i.e.
4615 just declares a tagged type or anonymous union.
4617 Returns the type declared; or NULL_TREE if none. */
4619 tree
4620 check_tag_decl (cp_decl_specifier_seq *declspecs,
4621 bool explicit_type_instantiation_p)
4623 int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4624 int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4625 /* If a class, struct, or enum type is declared by the DECLSPECS
4626 (i.e, if a class-specifier, enum-specifier, or non-typename
4627 elaborated-type-specifier appears in the DECLSPECS),
4628 DECLARED_TYPE is set to the corresponding type. */
4629 tree declared_type = NULL_TREE;
4630 bool error_p = false;
4632 if (declspecs->multiple_types_p)
4633 error ("multiple types in one declaration");
4634 else if (declspecs->redefined_builtin_type)
4636 if (!in_system_header_at (input_location))
4637 permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4638 "redeclaration of C++ built-in type %qT",
4639 declspecs->redefined_builtin_type);
4640 return NULL_TREE;
4643 if (declspecs->type
4644 && TYPE_P (declspecs->type)
4645 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4646 && MAYBE_CLASS_TYPE_P (declspecs->type))
4647 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4648 declared_type = declspecs->type;
4649 else if (declspecs->type == error_mark_node)
4650 error_p = true;
4651 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4652 permerror (input_location, "declaration does not declare anything");
4653 else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4655 error_at (declspecs->locations[ds_type_spec],
4656 "%<auto%> can only be specified for variables "
4657 "or function declarations");
4658 return error_mark_node;
4660 /* Check for an anonymous union. */
4661 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4662 && TYPE_UNNAMED_P (declared_type))
4664 /* 7/3 In a simple-declaration, the optional init-declarator-list
4665 can be omitted only when declaring a class (clause 9) or
4666 enumeration (7.2), that is, when the decl-specifier-seq contains
4667 either a class-specifier, an elaborated-type-specifier with
4668 a class-key (9.1), or an enum-specifier. In these cases and
4669 whenever a class-specifier or enum-specifier is present in the
4670 decl-specifier-seq, the identifiers in these specifiers are among
4671 the names being declared by the declaration (as class-name,
4672 enum-names, or enumerators, depending on the syntax). In such
4673 cases, and except for the declaration of an unnamed bit-field (9.6),
4674 the decl-specifier-seq shall introduce one or more names into the
4675 program, or shall redeclare a name introduced by a previous
4676 declaration. [Example:
4677 enum { }; // ill-formed
4678 typedef class { }; // ill-formed
4679 --end example] */
4680 if (saw_typedef)
4682 error ("missing type-name in typedef-declaration");
4683 return NULL_TREE;
4685 /* Anonymous unions are objects, so they can have specifiers. */;
4686 SET_ANON_AGGR_TYPE_P (declared_type);
4688 if (TREE_CODE (declared_type) != UNION_TYPE
4689 && !in_system_header_at (input_location))
4690 pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4693 else
4695 if (decl_spec_seq_has_spec_p (declspecs, ds_inline))
4696 error_at (declspecs->locations[ds_inline],
4697 "%<inline%> can only be specified for functions");
4698 else if (decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4699 error_at (declspecs->locations[ds_virtual],
4700 "%<virtual%> can only be specified for functions");
4701 else if (saw_friend
4702 && (!current_class_type
4703 || current_scope () != current_class_type))
4704 error_at (declspecs->locations[ds_friend],
4705 "%<friend%> can only be specified inside a class");
4706 else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4707 error_at (declspecs->locations[ds_explicit],
4708 "%<explicit%> can only be specified for constructors");
4709 else if (declspecs->storage_class)
4710 error_at (declspecs->locations[ds_storage_class],
4711 "a storage class can only be specified for objects "
4712 "and functions");
4713 else if (decl_spec_seq_has_spec_p (declspecs, ds_const))
4714 error_at (declspecs->locations[ds_const],
4715 "%<const%> can only be specified for objects and "
4716 "functions");
4717 else if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
4718 error_at (declspecs->locations[ds_volatile],
4719 "%<volatile%> can only be specified for objects and "
4720 "functions");
4721 else if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
4722 error_at (declspecs->locations[ds_restrict],
4723 "%<__restrict%> can only be specified for objects and "
4724 "functions");
4725 else if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
4726 error_at (declspecs->locations[ds_thread],
4727 "%<__thread%> can only be specified for objects "
4728 "and functions");
4729 else if (saw_typedef)
4730 warning_at (declspecs->locations[ds_typedef], 0,
4731 "%<typedef%> was ignored in this declaration");
4732 else if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr))
4733 error_at (declspecs->locations[ds_constexpr],
4734 "%<constexpr%> cannot be used for type declarations");
4737 if (declspecs->attributes && warn_attributes && declared_type)
4739 location_t loc;
4740 if (!CLASS_TYPE_P (declared_type)
4741 || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4742 /* For a non-template class, use the name location. */
4743 loc = location_of (declared_type);
4744 else
4745 /* For a template class (an explicit instantiation), use the
4746 current location. */
4747 loc = input_location;
4749 if (explicit_type_instantiation_p)
4750 /* [dcl.attr.grammar]/4:
4752 No attribute-specifier-seq shall appertain to an explicit
4753 instantiation. */
4755 if (warning_at (loc, OPT_Wattributes,
4756 "attribute ignored in explicit instantiation %q#T",
4757 declared_type))
4758 inform (loc,
4759 "no attribute can be applied to "
4760 "an explicit instantiation");
4762 else
4763 warn_misplaced_attr_for_class_type (loc, declared_type);
4766 return declared_type;
4769 /* Called when a declaration is seen that contains no names to declare.
4770 If its type is a reference to a structure, union or enum inherited
4771 from a containing scope, shadow that tag name for the current scope
4772 with a forward reference.
4773 If its type defines a new named structure or union
4774 or defines an enum, it is valid but we need not do anything here.
4775 Otherwise, it is an error.
4777 C++: may have to grok the declspecs to learn about static,
4778 complain for anonymous unions.
4780 Returns the TYPE declared -- or NULL_TREE if none. */
4782 tree
4783 shadow_tag (cp_decl_specifier_seq *declspecs)
4785 tree t = check_tag_decl (declspecs,
4786 /*explicit_type_instantiation_p=*/false);
4788 if (!t)
4789 return NULL_TREE;
4791 if (maybe_process_partial_specialization (t) == error_mark_node)
4792 return NULL_TREE;
4794 /* This is where the variables in an anonymous union are
4795 declared. An anonymous union declaration looks like:
4796 union { ... } ;
4797 because there is no declarator after the union, the parser
4798 sends that declaration here. */
4799 if (ANON_AGGR_TYPE_P (t))
4801 fixup_anonymous_aggr (t);
4803 if (TYPE_FIELDS (t))
4805 tree decl = grokdeclarator (/*declarator=*/NULL,
4806 declspecs, NORMAL, 0, NULL);
4807 finish_anon_union (decl);
4811 return t;
4814 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4816 tree
4817 groktypename (cp_decl_specifier_seq *type_specifiers,
4818 const cp_declarator *declarator,
4819 bool is_template_arg)
4821 tree attrs;
4822 tree type;
4823 enum decl_context context
4824 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4825 attrs = type_specifiers->attributes;
4826 type_specifiers->attributes = NULL_TREE;
4827 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4828 if (attrs && type != error_mark_node)
4830 if (CLASS_TYPE_P (type))
4831 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4832 "outside of definition", type);
4833 else if (MAYBE_CLASS_TYPE_P (type))
4834 /* A template type parameter or other dependent type. */
4835 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4836 "type %qT without an associated declaration", type);
4837 else
4838 cplus_decl_attributes (&type, attrs, 0);
4840 return type;
4843 /* Process a DECLARATOR for a function-scope variable declaration,
4844 namespace-scope variable declaration, or function declaration.
4845 (Function definitions go through start_function; class member
4846 declarations appearing in the body of the class go through
4847 grokfield.) The DECL corresponding to the DECLARATOR is returned.
4848 If an error occurs, the error_mark_node is returned instead.
4850 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
4851 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4852 for an explicitly defaulted function, or SD_DELETED for an explicitly
4853 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4854 implicitly initialized via a default constructor. ATTRIBUTES and
4855 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4857 The scope represented by the context of the returned DECL is pushed
4858 (if it is not the global namespace) and is assigned to
4859 *PUSHED_SCOPE_P. The caller is then responsible for calling
4860 pop_scope on *PUSHED_SCOPE_P if it is set. */
4862 tree
4863 start_decl (const cp_declarator *declarator,
4864 cp_decl_specifier_seq *declspecs,
4865 int initialized,
4866 tree attributes,
4867 tree prefix_attributes,
4868 tree *pushed_scope_p)
4870 tree decl;
4871 tree context;
4872 bool was_public;
4873 int flags;
4874 bool alias;
4876 *pushed_scope_p = NULL_TREE;
4878 /* An object declared as __attribute__((deprecated)) suppresses
4879 warnings of uses of other deprecated items. */
4880 if (lookup_attribute ("deprecated", attributes))
4881 deprecated_state = DEPRECATED_SUPPRESS;
4883 attributes = chainon (attributes, prefix_attributes);
4885 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4886 &attributes);
4888 deprecated_state = DEPRECATED_NORMAL;
4890 if (decl == NULL_TREE || VOID_TYPE_P (decl)
4891 || decl == error_mark_node)
4892 return error_mark_node;
4894 context = CP_DECL_CONTEXT (decl);
4895 if (context != global_namespace)
4896 *pushed_scope_p = push_scope (context);
4898 /* Is it valid for this decl to have an initializer at all?
4899 If not, set INITIALIZED to zero, which will indirectly
4900 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
4901 if (initialized
4902 && TREE_CODE (decl) == TYPE_DECL)
4904 error ("typedef %qD is initialized (use decltype instead)", decl);
4905 return error_mark_node;
4908 if (initialized)
4910 if (! toplevel_bindings_p ()
4911 && DECL_EXTERNAL (decl))
4912 warning (0, "declaration of %q#D has %<extern%> and is initialized",
4913 decl);
4914 DECL_EXTERNAL (decl) = 0;
4915 if (toplevel_bindings_p ())
4916 TREE_STATIC (decl) = 1;
4918 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4920 if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4921 record_key_method_defined (decl);
4923 /* If this is a typedef that names the class for linkage purposes
4924 (7.1.3p8), apply any attributes directly to the type. */
4925 if (TREE_CODE (decl) == TYPE_DECL
4926 && OVERLOAD_TYPE_P (TREE_TYPE (decl))
4927 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4928 flags = ATTR_FLAG_TYPE_IN_PLACE;
4929 else
4930 flags = 0;
4932 /* Set attributes here so if duplicate decl, will have proper attributes. */
4933 cplus_decl_attributes (&decl, attributes, flags);
4935 /* Dllimported symbols cannot be defined. Static data members (which
4936 can be initialized in-class and dllimported) go through grokfield,
4937 not here, so we don't need to exclude those decls when checking for
4938 a definition. */
4939 if (initialized && DECL_DLLIMPORT_P (decl))
4941 error ("definition of %q#D is marked %<dllimport%>", decl);
4942 DECL_DLLIMPORT_P (decl) = 0;
4945 /* If #pragma weak was used, mark the decl weak now. */
4946 if (!processing_template_decl)
4947 maybe_apply_pragma_weak (decl);
4949 if (TREE_CODE (decl) == FUNCTION_DECL
4950 && DECL_DECLARED_INLINE_P (decl)
4951 && DECL_UNINLINABLE (decl)
4952 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
4953 warning_at (DECL_SOURCE_LOCATION (decl), 0,
4954 "inline function %qD given attribute noinline", decl);
4956 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
4958 bool this_tmpl = (processing_template_decl
4959 > template_class_depth (context));
4960 if (VAR_P (decl))
4962 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
4963 if (field == NULL_TREE
4964 || !(VAR_P (field) || variable_template_p (field)))
4965 error ("%q+#D is not a static data member of %q#T", decl, context);
4966 else if (variable_template_p (field) && !this_tmpl)
4968 if (DECL_LANG_SPECIFIC (decl)
4969 && DECL_TEMPLATE_SPECIALIZATION (decl))
4970 /* OK, specialization was already checked. */;
4971 else
4973 error_at (DECL_SOURCE_LOCATION (decl),
4974 "non-member-template declaration of %qD", decl);
4975 inform (DECL_SOURCE_LOCATION (field), "does not match "
4976 "member template declaration here");
4977 return error_mark_node;
4980 else
4982 if (variable_template_p (field))
4983 field = DECL_TEMPLATE_RESULT (field);
4985 if (DECL_CONTEXT (field) != context)
4987 if (!same_type_p (DECL_CONTEXT (field), context))
4988 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
4989 "to be defined as %<%T::%D%>",
4990 DECL_CONTEXT (field), DECL_NAME (decl),
4991 context, DECL_NAME (decl));
4992 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
4994 /* Static data member are tricky; an in-class initialization
4995 still doesn't provide a definition, so the in-class
4996 declaration will have DECL_EXTERNAL set, but will have an
4997 initialization. Thus, duplicate_decls won't warn
4998 about this situation, and so we check here. */
4999 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
5000 error ("duplicate initialization of %qD", decl);
5001 field = duplicate_decls (decl, field,
5002 /*newdecl_is_friend=*/false);
5003 if (field == error_mark_node)
5004 return error_mark_node;
5005 else if (field)
5006 decl = field;
5009 else
5011 tree field = check_classfn (context, decl,
5012 this_tmpl
5013 ? current_template_parms
5014 : NULL_TREE);
5015 if (field && field != error_mark_node
5016 && duplicate_decls (decl, field,
5017 /*newdecl_is_friend=*/false))
5018 decl = field;
5021 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
5022 DECL_IN_AGGR_P (decl) = 0;
5023 /* Do not mark DECL as an explicit specialization if it was not
5024 already marked as an instantiation; a declaration should
5025 never be marked as a specialization unless we know what
5026 template is being specialized. */
5027 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
5029 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
5030 if (TREE_CODE (decl) == FUNCTION_DECL)
5031 DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
5032 && DECL_DECLARED_INLINE_P (decl));
5033 else
5034 DECL_COMDAT (decl) = false;
5036 /* [temp.expl.spec] An explicit specialization of a static data
5037 member of a template is a definition if the declaration
5038 includes an initializer; otherwise, it is a declaration.
5040 We check for processing_specialization so this only applies
5041 to the new specialization syntax. */
5042 if (!initialized && processing_specialization)
5043 DECL_EXTERNAL (decl) = 1;
5046 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
5047 /* Aliases are definitions. */
5048 && !alias)
5049 permerror (input_location, "declaration of %q#D outside of class is not definition",
5050 decl);
5053 was_public = TREE_PUBLIC (decl);
5055 /* Enter this declaration into the symbol table. Don't push the plain
5056 VAR_DECL for a variable template. */
5057 if (!template_parm_scope_p ()
5058 || !VAR_P (decl))
5059 decl = maybe_push_decl (decl);
5061 if (processing_template_decl)
5062 decl = push_template_decl (decl);
5063 if (decl == error_mark_node)
5064 return error_mark_node;
5066 if (VAR_P (decl)
5067 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
5068 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
5070 /* This is a const variable with implicit 'static'. Set
5071 DECL_THIS_STATIC so we can tell it from variables that are
5072 !TREE_PUBLIC because of the anonymous namespace. */
5073 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
5074 DECL_THIS_STATIC (decl) = 1;
5077 if (current_function_decl && VAR_P (decl)
5078 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
5080 bool ok = false;
5081 if (CP_DECL_THREAD_LOCAL_P (decl))
5082 error ("%qD declared %<thread_local%> in %<constexpr%> function",
5083 decl);
5084 else if (TREE_STATIC (decl))
5085 error ("%qD declared %<static%> in %<constexpr%> function", decl);
5086 else
5087 ok = true;
5088 if (!ok)
5089 cp_function_chain->invalid_constexpr = true;
5092 if (!processing_template_decl && VAR_P (decl))
5093 start_decl_1 (decl, initialized);
5095 return decl;
5098 /* Process the declaration of a variable DECL. INITIALIZED is true
5099 iff DECL is explicitly initialized. (INITIALIZED is false if the
5100 variable is initialized via an implicitly-called constructor.)
5101 This function must be called for ordinary variables (including, for
5102 example, implicit instantiations of templates), but must not be
5103 called for template declarations. */
5105 void
5106 start_decl_1 (tree decl, bool initialized)
5108 tree type;
5109 bool complete_p;
5110 bool aggregate_definition_p;
5112 gcc_assert (!processing_template_decl);
5114 if (error_operand_p (decl))
5115 return;
5117 gcc_assert (VAR_P (decl));
5119 type = TREE_TYPE (decl);
5120 complete_p = COMPLETE_TYPE_P (type);
5121 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
5123 /* If an explicit initializer is present, or if this is a definition
5124 of an aggregate, then we need a complete type at this point.
5125 (Scalars are always complete types, so there is nothing to
5126 check.) This code just sets COMPLETE_P; errors (if necessary)
5127 are issued below. */
5128 if ((initialized || aggregate_definition_p)
5129 && !complete_p
5130 && COMPLETE_TYPE_P (complete_type (type)))
5132 complete_p = true;
5133 /* We will not yet have set TREE_READONLY on DECL if the type
5134 was "const", but incomplete, before this point. But, now, we
5135 have a complete type, so we can try again. */
5136 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
5139 if (initialized)
5140 /* Is it valid for this decl to have an initializer at all? */
5142 /* Don't allow initializations for incomplete types except for
5143 arrays which might be completed by the initialization. */
5144 if (complete_p)
5145 ; /* A complete type is ok. */
5146 else if (type_uses_auto (type))
5147 ; /* An auto type is ok. */
5148 else if (TREE_CODE (type) != ARRAY_TYPE)
5150 error ("variable %q#D has initializer but incomplete type", decl);
5151 type = TREE_TYPE (decl) = error_mark_node;
5153 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5155 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
5156 error ("elements of array %q#D have incomplete type", decl);
5157 /* else we already gave an error in start_decl. */
5160 else if (aggregate_definition_p && !complete_p)
5162 if (type_uses_auto (type))
5163 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (type));
5164 else
5166 error ("aggregate %q#D has incomplete type and cannot be defined",
5167 decl);
5168 /* Change the type so that assemble_variable will give
5169 DECL an rtl we can live with: (mem (const_int 0)). */
5170 type = TREE_TYPE (decl) = error_mark_node;
5174 /* Create a new scope to hold this declaration if necessary.
5175 Whether or not a new scope is necessary cannot be determined
5176 until after the type has been completed; if the type is a
5177 specialization of a class template it is not until after
5178 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
5179 will be set correctly. */
5180 maybe_push_cleanup_level (type);
5183 /* Handle initialization of references. DECL, TYPE, and INIT have the
5184 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
5185 but will be set to a new CLEANUP_STMT if a temporary is created
5186 that must be destroyed subsequently.
5188 Returns an initializer expression to use to initialize DECL, or
5189 NULL if the initialization can be performed statically.
5191 Quotes on semantics can be found in ARM 8.4.3. */
5193 static tree
5194 grok_reference_init (tree decl, tree type, tree init, int flags)
5196 if (init == NULL_TREE)
5198 if ((DECL_LANG_SPECIFIC (decl) == 0
5199 || DECL_IN_AGGR_P (decl) == 0)
5200 && ! DECL_THIS_EXTERN (decl))
5201 error ("%qD declared as reference but not initialized", decl);
5202 return NULL_TREE;
5205 if (TREE_CODE (init) == TREE_LIST)
5206 init = build_x_compound_expr_from_list (init, ELK_INIT,
5207 tf_warning_or_error);
5209 tree ttype = TREE_TYPE (type);
5210 if (TREE_CODE (ttype) != ARRAY_TYPE
5211 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
5212 /* Note: default conversion is only called in very special cases. */
5213 init = decay_conversion (init, tf_warning_or_error);
5215 /* check_initializer handles this for non-reference variables, but for
5216 references we need to do it here or the initializer will get the
5217 incomplete array type and confuse later calls to
5218 cp_complete_array_type. */
5219 if (TREE_CODE (ttype) == ARRAY_TYPE
5220 && TYPE_DOMAIN (ttype) == NULL_TREE
5221 && (BRACE_ENCLOSED_INITIALIZER_P (init)
5222 || TREE_CODE (init) == STRING_CST))
5224 cp_complete_array_type (&ttype, init, false);
5225 if (ttype != TREE_TYPE (type))
5226 type = cp_build_reference_type (ttype, TYPE_REF_IS_RVALUE (type));
5229 /* Convert INIT to the reference type TYPE. This may involve the
5230 creation of a temporary, whose lifetime must be the same as that
5231 of the reference. If so, a DECL_EXPR for the temporary will be
5232 added just after the DECL_EXPR for DECL. That's why we don't set
5233 DECL_INITIAL for local references (instead assigning to them
5234 explicitly); we need to allow the temporary to be initialized
5235 first. */
5236 return initialize_reference (type, init, flags,
5237 tf_warning_or_error);
5240 /* Designated initializers in arrays are not supported in GNU C++.
5241 The parser cannot detect this error since it does not know whether
5242 a given brace-enclosed initializer is for a class type or for an
5243 array. This function checks that CE does not use a designated
5244 initializer. If it does, an error is issued. Returns true if CE
5245 is valid, i.e., does not have a designated initializer. */
5247 static bool
5248 check_array_designated_initializer (constructor_elt *ce,
5249 unsigned HOST_WIDE_INT index)
5251 /* Designated initializers for array elements are not supported. */
5252 if (ce->index)
5254 /* The parser only allows identifiers as designated
5255 initializers. */
5256 if (ce->index == error_mark_node)
5258 error ("name used in a GNU-style designated "
5259 "initializer for an array");
5260 return false;
5262 else if (identifier_p (ce->index))
5264 error ("name %qD used in a GNU-style designated "
5265 "initializer for an array", ce->index);
5266 return false;
5269 tree ce_index = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5270 ce->index, true);
5271 if (ce_index
5272 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index))
5273 && (TREE_CODE (ce_index = maybe_constant_value (ce_index))
5274 == INTEGER_CST))
5276 /* A C99 designator is OK if it matches the current index. */
5277 if (wi::to_wide (ce_index) == index)
5278 return true;
5279 else
5280 sorry ("non-trivial designated initializers not supported");
5282 else
5283 error ("C99 designator %qE is not an integral constant-expression",
5284 ce->index);
5286 return false;
5289 return true;
5292 /* When parsing `int a[] = {1, 2};' we don't know the size of the
5293 array until we finish parsing the initializer. If that's the
5294 situation we're in, update DECL accordingly. */
5296 static void
5297 maybe_deduce_size_from_array_init (tree decl, tree init)
5299 tree type = TREE_TYPE (decl);
5301 if (TREE_CODE (type) == ARRAY_TYPE
5302 && TYPE_DOMAIN (type) == NULL_TREE
5303 && TREE_CODE (decl) != TYPE_DECL)
5305 /* do_default is really a C-ism to deal with tentative definitions.
5306 But let's leave it here to ease the eventual merge. */
5307 int do_default = !DECL_EXTERNAL (decl);
5308 tree initializer = init ? init : DECL_INITIAL (decl);
5309 int failure = 0;
5311 /* Check that there are no designated initializers in INIT, as
5312 those are not supported in GNU C++, and as the middle-end
5313 will crash if presented with a non-numeric designated
5314 initializer. */
5315 if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
5317 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
5318 constructor_elt *ce;
5319 HOST_WIDE_INT i;
5320 FOR_EACH_VEC_SAFE_ELT (v, i, ce)
5321 if (!check_array_designated_initializer (ce, i))
5322 failure = 1;
5325 if (!failure)
5327 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
5328 do_default);
5329 if (failure == 1)
5331 error_at (EXPR_LOC_OR_LOC (initializer,
5332 DECL_SOURCE_LOCATION (decl)),
5333 "initializer fails to determine size of %qD", decl);
5335 else if (failure == 2)
5337 if (do_default)
5339 error_at (DECL_SOURCE_LOCATION (decl),
5340 "array size missing in %qD", decl);
5342 /* If a `static' var's size isn't known, make it extern as
5343 well as static, so it does not get allocated. If it's not
5344 `static', then don't mark it extern; finish_incomplete_decl
5345 will give it a default size and it will get allocated. */
5346 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
5347 DECL_EXTERNAL (decl) = 1;
5349 else if (failure == 3)
5351 error_at (DECL_SOURCE_LOCATION (decl),
5352 "zero-size array %qD", decl);
5356 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
5358 relayout_decl (decl);
5362 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
5363 any appropriate error messages regarding the layout. */
5365 static void
5366 layout_var_decl (tree decl)
5368 tree type;
5370 type = TREE_TYPE (decl);
5371 if (type == error_mark_node)
5372 return;
5374 /* If we haven't already laid out this declaration, do so now.
5375 Note that we must not call complete type for an external object
5376 because it's type might involve templates that we are not
5377 supposed to instantiate yet. (And it's perfectly valid to say
5378 `extern X x' for some incomplete type `X'.) */
5379 if (!DECL_EXTERNAL (decl))
5380 complete_type (type);
5381 if (!DECL_SIZE (decl)
5382 && TREE_TYPE (decl) != error_mark_node
5383 && complete_or_array_type_p (type))
5384 layout_decl (decl, 0);
5386 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
5388 /* An automatic variable with an incomplete type: that is an error.
5389 Don't talk about array types here, since we took care of that
5390 message in grokdeclarator. */
5391 error_at (DECL_SOURCE_LOCATION (decl),
5392 "storage size of %qD isn%'t known", decl);
5393 TREE_TYPE (decl) = error_mark_node;
5395 #if 0
5396 /* Keep this code around in case we later want to control debug info
5397 based on whether a type is "used". (jason 1999-11-11) */
5399 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
5400 /* Let debugger know it should output info for this type. */
5401 note_debug_info_needed (ttype);
5403 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
5404 note_debug_info_needed (DECL_CONTEXT (decl));
5405 #endif
5407 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
5408 && DECL_SIZE (decl) != NULL_TREE
5409 && ! TREE_CONSTANT (DECL_SIZE (decl)))
5411 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
5412 constant_expression_warning (DECL_SIZE (decl));
5413 else
5415 error_at (DECL_SOURCE_LOCATION (decl),
5416 "storage size of %qD isn%'t constant", decl);
5417 TREE_TYPE (decl) = error_mark_node;
5422 /* If a local static variable is declared in an inline function, or if
5423 we have a weak definition, we must endeavor to create only one
5424 instance of the variable at link-time. */
5426 void
5427 maybe_commonize_var (tree decl)
5429 /* Static data in a function with comdat linkage also has comdat
5430 linkage. */
5431 if ((TREE_STATIC (decl)
5432 /* Don't mess with __FUNCTION__. */
5433 && ! DECL_ARTIFICIAL (decl)
5434 && DECL_FUNCTION_SCOPE_P (decl)
5435 && vague_linkage_p (DECL_CONTEXT (decl)))
5436 || (TREE_PUBLIC (decl) && DECL_INLINE_VAR_P (decl)))
5438 if (flag_weak)
5440 /* With weak symbols, we simply make the variable COMDAT;
5441 that will cause copies in multiple translations units to
5442 be merged. */
5443 comdat_linkage (decl);
5445 else
5447 if (DECL_INITIAL (decl) == NULL_TREE
5448 || DECL_INITIAL (decl) == error_mark_node)
5450 /* Without weak symbols, we can use COMMON to merge
5451 uninitialized variables. */
5452 TREE_PUBLIC (decl) = 1;
5453 DECL_COMMON (decl) = 1;
5455 else
5457 /* While for initialized variables, we must use internal
5458 linkage -- which means that multiple copies will not
5459 be merged. */
5460 TREE_PUBLIC (decl) = 0;
5461 DECL_COMMON (decl) = 0;
5462 const char *msg;
5463 if (DECL_INLINE_VAR_P (decl))
5464 msg = G_("sorry: semantics of inline variable "
5465 "%q#D are wrong (you%'ll wind up with "
5466 "multiple copies)");
5467 else
5468 msg = G_("sorry: semantics of inline function "
5469 "static data %q#D are wrong (you%'ll wind "
5470 "up with multiple copies)");
5471 if (warning_at (DECL_SOURCE_LOCATION (decl), 0,
5472 msg, decl))
5473 inform (DECL_SOURCE_LOCATION (decl),
5474 "you can work around this by removing the initializer");
5480 /* Issue an error message if DECL is an uninitialized const variable. */
5482 static void
5483 check_for_uninitialized_const_var (tree decl)
5485 tree type = strip_array_types (TREE_TYPE (decl));
5487 /* ``Unless explicitly declared extern, a const object does not have
5488 external linkage and must be initialized. ($8.4; $12.1)'' ARM
5489 7.1.6 */
5490 if (VAR_P (decl)
5491 && TREE_CODE (type) != REFERENCE_TYPE
5492 && (CP_TYPE_CONST_P (type) || var_in_constexpr_fn (decl))
5493 && !DECL_INITIAL (decl))
5495 tree field = default_init_uninitialized_part (type);
5496 if (!field)
5497 return;
5499 if (CP_TYPE_CONST_P (type))
5500 permerror (DECL_SOURCE_LOCATION (decl),
5501 "uninitialized const %qD", decl);
5502 else
5504 if (!is_instantiation_of_constexpr (current_function_decl))
5505 error_at (DECL_SOURCE_LOCATION (decl),
5506 "uninitialized variable %qD in %<constexpr%> function",
5507 decl);
5508 cp_function_chain->invalid_constexpr = true;
5511 if (CLASS_TYPE_P (type))
5513 tree defaulted_ctor;
5515 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5516 "%q#T has no user-provided default constructor", type);
5517 defaulted_ctor = in_class_defaulted_default_constructor (type);
5518 if (defaulted_ctor)
5519 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5520 "constructor is not user-provided because it is "
5521 "explicitly defaulted in the class body");
5522 inform (DECL_SOURCE_LOCATION (field),
5523 "and the implicitly-defined constructor does not "
5524 "initialize %q#D", field);
5529 /* Structure holding the current initializer being processed by reshape_init.
5530 CUR is a pointer to the current element being processed, END is a pointer
5531 after the last element present in the initializer. */
5532 struct reshape_iter
5534 constructor_elt *cur;
5535 constructor_elt *end;
5538 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5540 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
5541 returned is the next FIELD_DECL (possibly FIELD itself) that can be
5542 initialized. If there are no more such fields, the return value
5543 will be NULL. */
5545 tree
5546 next_initializable_field (tree field)
5548 while (field
5549 && (TREE_CODE (field) != FIELD_DECL
5550 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
5551 || (DECL_ARTIFICIAL (field)
5552 && !(cxx_dialect >= cxx17 && DECL_FIELD_IS_BASE (field)))))
5553 field = DECL_CHAIN (field);
5555 return field;
5558 /* Return true for [dcl.init.list] direct-list-initialization from
5559 single element of enumeration with a fixed underlying type. */
5561 bool
5562 is_direct_enum_init (tree type, tree init)
5564 if (cxx_dialect >= cxx17
5565 && TREE_CODE (type) == ENUMERAL_TYPE
5566 && ENUM_FIXED_UNDERLYING_TYPE_P (type)
5567 && TREE_CODE (init) == CONSTRUCTOR
5568 && CONSTRUCTOR_IS_DIRECT_INIT (init)
5569 && CONSTRUCTOR_NELTS (init) == 1)
5570 return true;
5571 return false;
5574 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5575 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5576 INTEGER_CST representing the size of the array minus one (the maximum index),
5577 or NULL_TREE if the array was declared without specifying the size. D is
5578 the iterator within the constructor. */
5580 static tree
5581 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5582 tsubst_flags_t complain)
5584 tree new_init;
5585 bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5586 unsigned HOST_WIDE_INT max_index_cst = 0;
5587 unsigned HOST_WIDE_INT index;
5589 /* The initializer for an array is always a CONSTRUCTOR. */
5590 new_init = build_constructor (init_list_type_node, NULL);
5592 if (sized_array_p)
5594 /* Minus 1 is used for zero sized arrays. */
5595 if (integer_all_onesp (max_index))
5596 return new_init;
5598 if (tree_fits_uhwi_p (max_index))
5599 max_index_cst = tree_to_uhwi (max_index);
5600 /* sizetype is sign extended, not zero extended. */
5601 else
5602 max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
5605 /* Loop until there are no more initializers. */
5606 for (index = 0;
5607 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5608 ++index)
5610 tree elt_init;
5611 constructor_elt *old_cur = d->cur;
5613 check_array_designated_initializer (d->cur, index);
5614 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5615 complain);
5616 if (elt_init == error_mark_node)
5617 return error_mark_node;
5618 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5619 size_int (index), elt_init);
5620 if (!TREE_CONSTANT (elt_init))
5621 TREE_CONSTANT (new_init) = false;
5623 /* This can happen with an invalid initializer (c++/54501). */
5624 if (d->cur == old_cur && !sized_array_p)
5625 break;
5628 return new_init;
5631 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5632 Parameters are the same of reshape_init_r. */
5634 static tree
5635 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5637 tree max_index = NULL_TREE;
5639 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5641 if (TYPE_DOMAIN (type))
5642 max_index = array_type_nelts (type);
5644 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5647 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5648 Parameters are the same of reshape_init_r. */
5650 static tree
5651 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5653 tree max_index = NULL_TREE;
5655 gcc_assert (VECTOR_TYPE_P (type));
5657 if (COMPOUND_LITERAL_P (d->cur->value))
5659 tree value = d->cur->value;
5660 if (!same_type_p (TREE_TYPE (value), type))
5662 if (complain & tf_error)
5663 error ("invalid type %qT as initializer for a vector of type %qT",
5664 TREE_TYPE (d->cur->value), type);
5665 value = error_mark_node;
5667 ++d->cur;
5668 return value;
5671 /* For a vector, we initialize it as an array of the appropriate size. */
5672 if (VECTOR_TYPE_P (type))
5673 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5675 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5678 /* Subroutine of reshape_init_r, processes the initializers for classes
5679 or union. Parameters are the same of reshape_init_r. */
5681 static tree
5682 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5683 tsubst_flags_t complain)
5685 tree field;
5686 tree new_init;
5688 gcc_assert (CLASS_TYPE_P (type));
5690 /* The initializer for a class is always a CONSTRUCTOR. */
5691 new_init = build_constructor (init_list_type_node, NULL);
5692 field = next_initializable_field (TYPE_FIELDS (type));
5694 if (!field)
5696 /* [dcl.init.aggr]
5698 An initializer for an aggregate member that is an
5699 empty class shall have the form of an empty
5700 initializer-list {}. */
5701 if (!first_initializer_p)
5703 if (complain & tf_error)
5704 error ("initializer for %qT must be brace-enclosed", type);
5705 return error_mark_node;
5707 return new_init;
5710 /* Loop through the initializable fields, gathering initializers. */
5711 while (d->cur != d->end)
5713 tree field_init;
5714 constructor_elt *old_cur = d->cur;
5716 /* Handle designated initializers, as an extension. */
5717 if (d->cur->index)
5719 if (d->cur->index == error_mark_node)
5720 return error_mark_node;
5722 if (TREE_CODE (d->cur->index) == FIELD_DECL)
5723 /* We already reshaped this. */
5724 gcc_assert (d->cur->index == field);
5725 else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
5726 field = get_class_binding (type, d->cur->index, false);
5727 else
5729 if (complain & tf_error)
5730 error ("%<[%E] =%> used in a GNU-style designated initializer"
5731 " for class %qT", d->cur->index, type);
5732 return error_mark_node;
5735 if (!field || TREE_CODE (field) != FIELD_DECL)
5737 if (complain & tf_error)
5738 error ("%qT has no non-static data member named %qD", type,
5739 d->cur->index);
5740 return error_mark_node;
5744 /* If we processed all the member of the class, we are done. */
5745 if (!field)
5746 break;
5748 field_init = reshape_init_r (TREE_TYPE (field), d,
5749 /*first_initializer_p=*/false, complain);
5750 if (field_init == error_mark_node)
5751 return error_mark_node;
5753 if (d->cur == old_cur && d->cur->index)
5755 /* This can happen with an invalid initializer for a flexible
5756 array member (c++/54441). */
5757 if (complain & tf_error)
5758 error ("invalid initializer for %q#D", field);
5759 return error_mark_node;
5762 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5764 /* [dcl.init.aggr]
5766 When a union is initialized with a brace-enclosed
5767 initializer, the braces shall only contain an
5768 initializer for the first member of the union. */
5769 if (TREE_CODE (type) == UNION_TYPE)
5770 break;
5772 field = next_initializable_field (DECL_CHAIN (field));
5775 return new_init;
5778 /* Subroutine of reshape_init_r. We're in a context where C99 initializer
5779 designators are not valid; either complain or return true to indicate
5780 that reshape_init_r should return error_mark_node. */
5782 static bool
5783 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5785 if (d->cur->index)
5787 if (complain & tf_error)
5788 error ("C99 designator %qE outside aggregate initializer",
5789 d->cur->index);
5790 else
5791 return true;
5793 return false;
5796 /* Subroutine of reshape_init, which processes a single initializer (part of
5797 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5798 iterator within the CONSTRUCTOR which points to the initializer to process.
5799 FIRST_INITIALIZER_P is true if this is the first initializer of the
5800 outermost CONSTRUCTOR node. */
5802 static tree
5803 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5804 tsubst_flags_t complain)
5806 tree init = d->cur->value;
5808 if (error_operand_p (init))
5809 return error_mark_node;
5811 if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5812 && has_designator_problem (d, complain))
5813 return error_mark_node;
5815 if (TREE_CODE (type) == COMPLEX_TYPE)
5817 /* A complex type can be initialized from one or two initializers,
5818 but braces are not elided. */
5819 d->cur++;
5820 if (BRACE_ENCLOSED_INITIALIZER_P (init))
5822 if (CONSTRUCTOR_NELTS (init) > 2)
5824 if (complain & tf_error)
5825 error ("too many initializers for %qT", type);
5826 else
5827 return error_mark_node;
5830 else if (first_initializer_p && d->cur != d->end)
5832 vec<constructor_elt, va_gc> *v = 0;
5833 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5834 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5835 if (has_designator_problem (d, complain))
5836 return error_mark_node;
5837 d->cur++;
5838 init = build_constructor (init_list_type_node, v);
5840 return init;
5843 /* A non-aggregate type is always initialized with a single
5844 initializer. */
5845 if (!CP_AGGREGATE_TYPE_P (type))
5847 /* It is invalid to initialize a non-aggregate type with a
5848 brace-enclosed initializer before C++0x.
5849 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5850 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5851 a CONSTRUCTOR (with a record type). */
5852 if (TREE_CODE (init) == CONSTRUCTOR
5853 /* Don't complain about a capture-init. */
5854 && !CONSTRUCTOR_IS_DIRECT_INIT (init)
5855 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
5857 if (SCALAR_TYPE_P (type))
5859 if (cxx_dialect < cxx11
5860 /* Isn't value-initialization. */
5861 || CONSTRUCTOR_NELTS (init) > 0)
5863 if (complain & tf_error)
5864 error ("braces around scalar initializer for type %qT",
5865 type);
5866 init = error_mark_node;
5869 else
5870 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5873 d->cur++;
5874 return init;
5877 /* "If T is a class type and the initializer list has a single element of
5878 type cv U, where U is T or a class derived from T, the object is
5879 initialized from that element." Even if T is an aggregate. */
5880 if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
5881 && first_initializer_p
5882 && d->end - d->cur == 1
5883 && reference_related_p (type, TREE_TYPE (init)))
5885 d->cur++;
5886 return init;
5889 /* [dcl.init.aggr]
5891 All implicit type conversions (clause _conv_) are considered when
5892 initializing the aggregate member with an initializer from an
5893 initializer-list. If the initializer can initialize a member,
5894 the member is initialized. Otherwise, if the member is itself a
5895 non-empty subaggregate, brace elision is assumed and the
5896 initializer is considered for the initialization of the first
5897 member of the subaggregate. */
5898 if (TREE_CODE (init) != CONSTRUCTOR
5899 /* But don't try this for the first initializer, since that would be
5900 looking through the outermost braces; A a2 = { a1 }; is not a
5901 valid aggregate initialization. */
5902 && !first_initializer_p
5903 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5904 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
5905 complain)))
5907 d->cur++;
5908 return init;
5911 /* [dcl.init.string]
5913 A char array (whether plain char, signed char, or unsigned char)
5914 can be initialized by a string-literal (optionally enclosed in
5915 braces); a wchar_t array can be initialized by a wide
5916 string-literal (optionally enclosed in braces). */
5917 if (TREE_CODE (type) == ARRAY_TYPE
5918 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5920 tree str_init = init;
5922 /* Strip one level of braces if and only if they enclose a single
5923 element (as allowed by [dcl.init.string]). */
5924 if (!first_initializer_p
5925 && TREE_CODE (str_init) == CONSTRUCTOR
5926 && CONSTRUCTOR_NELTS (str_init) == 1)
5928 str_init = (*CONSTRUCTOR_ELTS (str_init))[0].value;
5931 /* If it's a string literal, then it's the initializer for the array
5932 as a whole. Otherwise, continue with normal initialization for
5933 array types (one value per array element). */
5934 if (TREE_CODE (str_init) == STRING_CST)
5936 if (has_designator_problem (d, complain))
5937 return error_mark_node;
5938 d->cur++;
5939 return str_init;
5943 /* The following cases are about aggregates. If we are not within a full
5944 initializer already, and there is not a CONSTRUCTOR, it means that there
5945 is a missing set of braces (that is, we are processing the case for
5946 which reshape_init exists). */
5947 if (!first_initializer_p)
5949 if (TREE_CODE (init) == CONSTRUCTOR)
5951 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
5952 /* There is no need to reshape pointer-to-member function
5953 initializers, as they are always constructed correctly
5954 by the front end. */
5956 else if (COMPOUND_LITERAL_P (init))
5957 /* For a nested compound literal, there is no need to reshape since
5958 brace elision is not allowed. Even if we decided to allow it,
5959 we should add a call to reshape_init in finish_compound_literal,
5960 before calling digest_init, so changing this code would still
5961 not be necessary. */
5962 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
5963 else
5965 ++d->cur;
5966 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
5967 return reshape_init (type, init, complain);
5971 if (complain & tf_warning)
5972 warning (OPT_Wmissing_braces,
5973 "missing braces around initializer for %qT",
5974 type);
5977 /* Dispatch to specialized routines. */
5978 if (CLASS_TYPE_P (type))
5979 return reshape_init_class (type, d, first_initializer_p, complain);
5980 else if (TREE_CODE (type) == ARRAY_TYPE)
5981 return reshape_init_array (type, d, complain);
5982 else if (VECTOR_TYPE_P (type))
5983 return reshape_init_vector (type, d, complain);
5984 else
5985 gcc_unreachable();
5988 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
5989 brace-enclosed aggregate initializer.
5991 INIT is the CONSTRUCTOR containing the list of initializers describing
5992 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
5993 It may not presently match the shape of the TYPE; for example:
5995 struct S { int a; int b; };
5996 struct S a[] = { 1, 2, 3, 4 };
5998 Here INIT will hold a vector of four elements, rather than a
5999 vector of two elements, each itself a vector of two elements. This
6000 routine transforms INIT from the former form into the latter. The
6001 revised CONSTRUCTOR node is returned. */
6003 tree
6004 reshape_init (tree type, tree init, tsubst_flags_t complain)
6006 vec<constructor_elt, va_gc> *v;
6007 reshape_iter d;
6008 tree new_init;
6010 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6012 v = CONSTRUCTOR_ELTS (init);
6014 /* An empty constructor does not need reshaping, and it is always a valid
6015 initializer. */
6016 if (vec_safe_is_empty (v))
6017 return init;
6019 /* Handle [dcl.init.list] direct-list-initialization from
6020 single element of enumeration with a fixed underlying type. */
6021 if (is_direct_enum_init (type, init))
6023 tree elt = CONSTRUCTOR_ELT (init, 0)->value;
6024 type = cv_unqualified (type);
6025 if (check_narrowing (ENUM_UNDERLYING_TYPE (type), elt, complain))
6027 warning_sentinel w (warn_useless_cast);
6028 return cp_build_c_cast (type, elt, tf_warning_or_error);
6030 else
6031 return error_mark_node;
6034 /* Recurse on this CONSTRUCTOR. */
6035 d.cur = &(*v)[0];
6036 d.end = d.cur + v->length ();
6038 new_init = reshape_init_r (type, &d, true, complain);
6039 if (new_init == error_mark_node)
6040 return error_mark_node;
6042 /* Make sure all the element of the constructor were used. Otherwise,
6043 issue an error about exceeding initializers. */
6044 if (d.cur != d.end)
6046 if (complain & tf_error)
6047 error ("too many initializers for %qT", type);
6048 return error_mark_node;
6051 if (CONSTRUCTOR_IS_DIRECT_INIT (init)
6052 && BRACE_ENCLOSED_INITIALIZER_P (new_init))
6053 CONSTRUCTOR_IS_DIRECT_INIT (new_init) = true;
6055 return new_init;
6058 /* Verify array initializer. Returns true if errors have been reported. */
6060 bool
6061 check_array_initializer (tree decl, tree type, tree init)
6063 tree element_type = TREE_TYPE (type);
6065 /* The array type itself need not be complete, because the
6066 initializer may tell us how many elements are in the array.
6067 But, the elements of the array must be complete. */
6068 if (!COMPLETE_TYPE_P (complete_type (element_type)))
6070 if (decl)
6071 error_at (DECL_SOURCE_LOCATION (decl),
6072 "elements of array %q#D have incomplete type", decl);
6073 else
6074 error ("elements of array %q#T have incomplete type", type);
6075 return true;
6077 /* A compound literal can't have variable size. */
6078 if (init && !decl
6079 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
6080 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
6082 error ("variable-sized compound literal");
6083 return true;
6085 return false;
6088 /* Subroutine of check_initializer; args are passed down from that function.
6089 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
6091 static tree
6092 build_aggr_init_full_exprs (tree decl, tree init, int flags)
6095 gcc_assert (stmts_are_full_exprs_p ());
6096 return build_aggr_init (decl, init, flags, tf_warning_or_error);
6099 /* Verify INIT (the initializer for DECL), and record the
6100 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
6101 grok_reference_init.
6103 If the return value is non-NULL, it is an expression that must be
6104 evaluated dynamically to initialize DECL. */
6106 static tree
6107 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
6109 tree type = TREE_TYPE (decl);
6110 tree init_code = NULL;
6111 tree core_type;
6113 /* Things that are going to be initialized need to have complete
6114 type. */
6115 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
6117 if (DECL_HAS_VALUE_EXPR_P (decl))
6119 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
6120 it doesn't have storage to be initialized. */
6121 gcc_assert (init == NULL_TREE);
6122 return NULL_TREE;
6125 if (type == error_mark_node)
6126 /* We will have already complained. */
6127 return NULL_TREE;
6129 if (TREE_CODE (type) == ARRAY_TYPE)
6131 if (check_array_initializer (decl, type, init))
6132 return NULL_TREE;
6134 else if (!COMPLETE_TYPE_P (type))
6136 error_at (DECL_SOURCE_LOCATION (decl),
6137 "%q#D has incomplete type", decl);
6138 TREE_TYPE (decl) = error_mark_node;
6139 return NULL_TREE;
6141 else
6142 /* There is no way to make a variable-sized class type in GNU C++. */
6143 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
6145 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
6147 int init_len = CONSTRUCTOR_NELTS (init);
6148 if (SCALAR_TYPE_P (type))
6150 if (init_len == 0)
6152 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6153 init = build_zero_init (type, NULL_TREE, false);
6155 else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
6157 error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)),
6158 "scalar object %qD requires one element in "
6159 "initializer", decl);
6160 TREE_TYPE (decl) = error_mark_node;
6161 return NULL_TREE;
6166 if (TREE_CODE (decl) == CONST_DECL)
6168 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
6170 DECL_INITIAL (decl) = init;
6172 gcc_assert (init != NULL_TREE);
6173 init = NULL_TREE;
6175 else if (!init && DECL_REALLY_EXTERN (decl))
6177 else if (init || type_build_ctor_call (type)
6178 || TREE_CODE (type) == REFERENCE_TYPE)
6180 if (TREE_CODE (type) == REFERENCE_TYPE)
6182 init = grok_reference_init (decl, type, init, flags);
6183 flags |= LOOKUP_ALREADY_DIGESTED;
6185 else if (!init)
6186 check_for_uninitialized_const_var (decl);
6187 /* Do not reshape constructors of vectors (they don't need to be
6188 reshaped. */
6189 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
6191 if (is_std_init_list (type))
6193 init = perform_implicit_conversion (type, init,
6194 tf_warning_or_error);
6195 flags |= LOOKUP_ALREADY_DIGESTED;
6197 else if (TYPE_NON_AGGREGATE_CLASS (type))
6199 /* Don't reshape if the class has constructors. */
6200 if (cxx_dialect == cxx98)
6201 error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)),
6202 "in C++98 %qD must be initialized by "
6203 "constructor, not by %<{...}%>",
6204 decl);
6206 else if (VECTOR_TYPE_P (type) && TYPE_VECTOR_OPAQUE (type))
6208 error ("opaque vector types cannot be initialized");
6209 init = error_mark_node;
6211 else
6213 init = reshape_init (type, init, tf_warning_or_error);
6214 flags |= LOOKUP_NO_NARROWING;
6217 else if (TREE_CODE (init) == TREE_LIST
6218 && TREE_TYPE (init) != unknown_type_node
6219 && !MAYBE_CLASS_TYPE_P (type))
6221 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6223 /* We get here with code like `int a (2);' */
6224 init = build_x_compound_expr_from_list (init, ELK_INIT,
6225 tf_warning_or_error);
6228 /* If DECL has an array type without a specific bound, deduce the
6229 array size from the initializer. */
6230 maybe_deduce_size_from_array_init (decl, init);
6231 type = TREE_TYPE (decl);
6232 if (type == error_mark_node)
6233 return NULL_TREE;
6235 if (((type_build_ctor_call (type) || CLASS_TYPE_P (type))
6236 && !(flags & LOOKUP_ALREADY_DIGESTED)
6237 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
6238 && CP_AGGREGATE_TYPE_P (type)
6239 && (CLASS_TYPE_P (type)
6240 || !TYPE_NEEDS_CONSTRUCTING (type)
6241 || type_has_extended_temps (type))))
6242 || (DECL_DECOMPOSITION_P (decl) && TREE_CODE (type) == ARRAY_TYPE))
6244 init_code = build_aggr_init_full_exprs (decl, init, flags);
6246 /* A constructor call is a non-trivial initializer even if
6247 it isn't explicitly written. */
6248 if (TREE_SIDE_EFFECTS (init_code))
6249 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
6251 /* If this is a constexpr initializer, expand_default_init will
6252 have returned an INIT_EXPR rather than a CALL_EXPR. In that
6253 case, pull the initializer back out and pass it down into
6254 store_init_value. */
6255 while (TREE_CODE (init_code) == EXPR_STMT
6256 || TREE_CODE (init_code) == CONVERT_EXPR)
6257 init_code = TREE_OPERAND (init_code, 0);
6258 if (TREE_CODE (init_code) == INIT_EXPR)
6260 init = TREE_OPERAND (init_code, 1);
6261 init_code = NULL_TREE;
6262 /* Don't call digest_init; it's unnecessary and will complain
6263 about aggregate initialization of non-aggregate classes. */
6264 flags |= LOOKUP_ALREADY_DIGESTED;
6266 else if (DECL_DECLARED_CONSTEXPR_P (decl))
6268 /* Declared constexpr, but no suitable initializer; massage
6269 init appropriately so we can pass it into store_init_value
6270 for the error. */
6271 if (CLASS_TYPE_P (type)
6272 && (!init || TREE_CODE (init) == TREE_LIST))
6274 init = build_functional_cast (type, init, tf_none);
6275 if (TREE_CODE (init) == TARGET_EXPR)
6276 TARGET_EXPR_DIRECT_INIT_P (init) = true;
6278 init_code = NULL_TREE;
6280 else
6281 init = NULL_TREE;
6284 if (init && TREE_CODE (init) != TREE_VEC)
6286 /* In aggregate initialization of a variable, each element
6287 initialization is a full-expression because there is no
6288 enclosing expression. */
6289 gcc_assert (stmts_are_full_exprs_p ());
6291 init_code = store_init_value (decl, init, cleanups, flags);
6293 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
6294 && DECL_INITIAL (decl)
6295 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
6296 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
6297 warning_at (EXPR_LOC_OR_LOC (DECL_INITIAL (decl),
6298 DECL_SOURCE_LOCATION (decl)),
6299 0, "array %qD initialized by parenthesized "
6300 "string literal %qE",
6301 decl, DECL_INITIAL (decl));
6302 init = NULL;
6305 else
6307 if (CLASS_TYPE_P (core_type = strip_array_types (type))
6308 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
6309 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
6310 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
6311 /*complain=*/true);
6313 check_for_uninitialized_const_var (decl);
6316 if (init && init != error_mark_node)
6317 init_code = build2 (INIT_EXPR, type, decl, init);
6319 if (init_code)
6321 /* We might have set these in cp_finish_decl. */
6322 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
6323 TREE_CONSTANT (decl) = false;
6326 if (init_code
6327 && (DECL_IN_AGGR_P (decl) && !DECL_VAR_DECLARED_INLINE_P (decl)))
6329 static int explained = 0;
6331 if (cxx_dialect < cxx11)
6332 error ("initializer invalid for static member with constructor");
6333 else if (cxx_dialect < cxx17)
6334 error ("non-constant in-class initialization invalid for static "
6335 "member %qD", decl);
6336 else
6337 error ("non-constant in-class initialization invalid for non-inline "
6338 "static member %qD", decl);
6339 if (!explained)
6341 inform (input_location,
6342 "(an out of class initialization is required)");
6343 explained = 1;
6345 return NULL_TREE;
6348 return init_code;
6351 /* If DECL is not a local variable, give it RTL. */
6353 static void
6354 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
6356 int toplev = toplevel_bindings_p ();
6357 int defer_p;
6359 /* Set the DECL_ASSEMBLER_NAME for the object. */
6360 if (asmspec)
6362 /* The `register' keyword, when used together with an
6363 asm-specification, indicates that the variable should be
6364 placed in a particular register. */
6365 if (VAR_P (decl) && DECL_REGISTER (decl))
6367 set_user_assembler_name (decl, asmspec);
6368 DECL_HARD_REGISTER (decl) = 1;
6370 else
6372 if (TREE_CODE (decl) == FUNCTION_DECL
6373 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
6374 set_builtin_user_assembler_name (decl, asmspec);
6375 set_user_assembler_name (decl, asmspec);
6379 /* Handle non-variables up front. */
6380 if (!VAR_P (decl))
6382 rest_of_decl_compilation (decl, toplev, at_eof);
6383 return;
6386 /* If we see a class member here, it should be a static data
6387 member. */
6388 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
6390 gcc_assert (TREE_STATIC (decl));
6391 /* An in-class declaration of a static data member should be
6392 external; it is only a declaration, and not a definition. */
6393 if (init == NULL_TREE)
6394 gcc_assert (DECL_EXTERNAL (decl)
6395 || !TREE_PUBLIC (decl)
6396 || DECL_INLINE_VAR_P (decl));
6399 /* We don't create any RTL for local variables. */
6400 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6401 return;
6403 /* We defer emission of local statics until the corresponding
6404 DECL_EXPR is expanded. But with constexpr its function might never
6405 be expanded, so go ahead and tell cgraph about the variable now. */
6406 defer_p = ((DECL_FUNCTION_SCOPE_P (decl)
6407 && !var_in_maybe_constexpr_fn (decl))
6408 || DECL_VIRTUAL_P (decl));
6410 /* Defer template instantiations. */
6411 if (DECL_LANG_SPECIFIC (decl)
6412 && DECL_IMPLICIT_INSTANTIATION (decl))
6413 defer_p = 1;
6415 /* If we're not deferring, go ahead and assemble the variable. */
6416 if (!defer_p)
6417 rest_of_decl_compilation (decl, toplev, at_eof);
6420 /* walk_tree helper for wrap_temporary_cleanups, below. */
6422 static tree
6423 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
6425 /* Stop at types or full-expression boundaries. */
6426 if (TYPE_P (*stmt_p)
6427 || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
6429 *walk_subtrees = 0;
6430 return NULL_TREE;
6433 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
6435 tree guard = (tree)data;
6436 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
6438 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
6439 /* Tell honor_protect_cleanup_actions to handle this as a separate
6440 cleanup. */
6441 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
6443 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
6446 return NULL_TREE;
6449 /* We're initializing a local variable which has a cleanup GUARD. If there
6450 are any temporaries used in the initializer INIT of this variable, we
6451 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6452 variable will be cleaned up properly if one of them throws.
6454 Unfortunately, there's no way to express this properly in terms of
6455 nesting, as the regions for the temporaries overlap the region for the
6456 variable itself; if there are two temporaries, the variable needs to be
6457 the first thing destroyed if either of them throws. However, we only
6458 want to run the variable's cleanup if it actually got constructed. So
6459 we need to guard the temporary cleanups with the variable's cleanup if
6460 they are run on the normal path, but not if they are run on the
6461 exceptional path. We implement this by telling
6462 honor_protect_cleanup_actions to strip the variable cleanup from the
6463 exceptional path. */
6465 static void
6466 wrap_temporary_cleanups (tree init, tree guard)
6468 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6471 /* Generate code to initialize DECL (a local variable). */
6473 static void
6474 initialize_local_var (tree decl, tree init)
6476 tree type = TREE_TYPE (decl);
6477 tree cleanup;
6478 int already_used;
6480 gcc_assert (VAR_P (decl)
6481 || TREE_CODE (decl) == RESULT_DECL);
6482 gcc_assert (!TREE_STATIC (decl));
6484 if (DECL_SIZE (decl) == NULL_TREE)
6486 /* If we used it already as memory, it must stay in memory. */
6487 DECL_INITIAL (decl) = NULL_TREE;
6488 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6489 return;
6492 if (type == error_mark_node)
6493 return;
6495 /* Compute and store the initial value. */
6496 already_used = TREE_USED (decl) || TREE_USED (type);
6497 if (TREE_USED (type))
6498 DECL_READ_P (decl) = 1;
6500 /* Generate a cleanup, if necessary. */
6501 cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6503 /* Perform the initialization. */
6504 if (init)
6506 tree rinit = (TREE_CODE (init) == INIT_EXPR
6507 ? TREE_OPERAND (init, 1) : NULL_TREE);
6508 if (rinit && !TREE_SIDE_EFFECTS (rinit))
6510 /* Stick simple initializers in DECL_INITIAL so that
6511 -Wno-init-self works (c++/34772). */
6512 gcc_assert (TREE_OPERAND (init, 0) == decl);
6513 DECL_INITIAL (decl) = rinit;
6515 if (warn_init_self && TREE_CODE (type) == REFERENCE_TYPE)
6517 STRIP_NOPS (rinit);
6518 if (rinit == decl)
6519 warning_at (DECL_SOURCE_LOCATION (decl),
6520 OPT_Winit_self,
6521 "reference %qD is initialized with itself", decl);
6524 else
6526 int saved_stmts_are_full_exprs_p;
6528 /* If we're only initializing a single object, guard the
6529 destructors of any temporaries used in its initializer with
6530 its destructor. This isn't right for arrays because each
6531 element initialization is a full-expression. */
6532 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6533 wrap_temporary_cleanups (init, cleanup);
6535 gcc_assert (building_stmt_list_p ());
6536 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6537 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6538 finish_expr_stmt (init);
6539 current_stmt_tree ()->stmts_are_full_exprs_p =
6540 saved_stmts_are_full_exprs_p;
6544 /* Set this to 0 so we can tell whether an aggregate which was
6545 initialized was ever used. Don't do this if it has a
6546 destructor, so we don't complain about the 'resource
6547 allocation is initialization' idiom. Now set
6548 attribute((unused)) on types so decls of that type will be
6549 marked used. (see TREE_USED, above.) */
6550 if (TYPE_NEEDS_CONSTRUCTING (type)
6551 && ! already_used
6552 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6553 && DECL_NAME (decl))
6554 TREE_USED (decl) = 0;
6555 else if (already_used)
6556 TREE_USED (decl) = 1;
6558 if (cleanup)
6559 finish_decl_cleanup (decl, cleanup);
6562 /* DECL is a VAR_DECL for a compiler-generated variable with static
6563 storage duration (like a virtual table) whose initializer is a
6564 compile-time constant. Initialize the variable and provide it to the
6565 back end. */
6567 void
6568 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6570 tree init;
6571 gcc_assert (DECL_ARTIFICIAL (decl));
6572 init = build_constructor (TREE_TYPE (decl), v);
6573 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6574 DECL_INITIAL (decl) = init;
6575 DECL_INITIALIZED_P (decl) = 1;
6576 determine_visibility (decl);
6577 layout_var_decl (decl);
6578 maybe_commonize_var (decl);
6579 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6582 /* INIT is the initializer for a variable, as represented by the
6583 parser. Returns true iff INIT is type-dependent. */
6585 static bool
6586 type_dependent_init_p (tree init)
6588 if (TREE_CODE (init) == TREE_LIST)
6589 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6590 return any_type_dependent_elements_p (init);
6591 else if (TREE_CODE (init) == CONSTRUCTOR)
6592 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6594 if (dependent_type_p (TREE_TYPE (init)))
6595 return true;
6597 vec<constructor_elt, va_gc> *elts;
6598 size_t nelts;
6599 size_t i;
6601 elts = CONSTRUCTOR_ELTS (init);
6602 nelts = vec_safe_length (elts);
6603 for (i = 0; i < nelts; ++i)
6604 if (type_dependent_init_p ((*elts)[i].value))
6605 return true;
6607 else
6608 /* It must be a simple expression, e.g., int i = 3; */
6609 return type_dependent_expression_p (init);
6611 return false;
6614 /* INIT is the initializer for a variable, as represented by the
6615 parser. Returns true iff INIT is value-dependent. */
6617 static bool
6618 value_dependent_init_p (tree init)
6620 if (TREE_CODE (init) == TREE_LIST)
6621 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6622 return any_value_dependent_elements_p (init);
6623 else if (TREE_CODE (init) == CONSTRUCTOR)
6624 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6626 vec<constructor_elt, va_gc> *elts;
6627 size_t nelts;
6628 size_t i;
6630 elts = CONSTRUCTOR_ELTS (init);
6631 nelts = vec_safe_length (elts);
6632 for (i = 0; i < nelts; ++i)
6633 if (value_dependent_init_p ((*elts)[i].value))
6634 return true;
6636 else
6637 /* It must be a simple expression, e.g., int i = 3; */
6638 return value_dependent_expression_p (init);
6640 return false;
6643 // Returns true if a DECL is VAR_DECL with the concept specifier.
6644 static inline bool
6645 is_concept_var (tree decl)
6647 return (VAR_P (decl)
6648 // Not all variables have DECL_LANG_SPECIFIC.
6649 && DECL_LANG_SPECIFIC (decl)
6650 && DECL_DECLARED_CONCEPT_P (decl));
6653 /* A helper function to be called via walk_tree. If any label exists
6654 under *TP, it is (going to be) forced. Set has_forced_label_in_static. */
6656 static tree
6657 notice_forced_label_r (tree *tp, int *walk_subtrees, void *)
6659 if (TYPE_P (*tp))
6660 *walk_subtrees = 0;
6661 if (TREE_CODE (*tp) == LABEL_DECL)
6662 cfun->has_forced_label_in_static = 1;
6663 return NULL_TREE;
6666 /* Finish processing of a declaration;
6667 install its line number and initial value.
6668 If the length of an array type is not known before,
6669 it must be determined now, from the initial value, or it is an error.
6671 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
6672 true, then INIT is an integral constant expression.
6674 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6675 if the (init) syntax was used. */
6677 void
6678 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6679 tree asmspec_tree, int flags)
6681 tree type;
6682 vec<tree, va_gc> *cleanups = NULL;
6683 const char *asmspec = NULL;
6684 int was_readonly = 0;
6685 bool var_definition_p = false;
6686 tree auto_node;
6688 if (decl == error_mark_node)
6689 return;
6690 else if (! decl)
6692 if (init)
6693 error ("assignment (not initialization) in declaration");
6694 return;
6697 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6698 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
6699 gcc_assert (TREE_CODE (decl) != PARM_DECL);
6701 type = TREE_TYPE (decl);
6702 if (type == error_mark_node)
6703 return;
6705 /* Warn about register storage specifiers except when in GNU global
6706 or local register variable extension. */
6707 if (VAR_P (decl) && DECL_REGISTER (decl) && asmspec_tree == NULL_TREE)
6709 if (cxx_dialect >= cxx17)
6710 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6711 "ISO C++17 does not allow %<register%> storage "
6712 "class specifier");
6713 else
6714 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6715 "%<register%> storage class specifier used");
6718 /* If a name was specified, get the string. */
6719 if (at_namespace_scope_p ())
6720 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6721 if (asmspec_tree && asmspec_tree != error_mark_node)
6722 asmspec = TREE_STRING_POINTER (asmspec_tree);
6724 if (current_class_type
6725 && CP_DECL_CONTEXT (decl) == current_class_type
6726 && TYPE_BEING_DEFINED (current_class_type)
6727 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6728 && (DECL_INITIAL (decl) || init))
6729 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6731 if (TREE_CODE (decl) != FUNCTION_DECL
6732 && (auto_node = type_uses_auto (type)))
6734 tree d_init;
6735 if (init == NULL_TREE)
6737 if (DECL_LANG_SPECIFIC (decl)
6738 && DECL_TEMPLATE_INSTANTIATION (decl)
6739 && !DECL_TEMPLATE_INSTANTIATED (decl))
6741 /* init is null because we're deferring instantiating the
6742 initializer until we need it. Well, we need it now. */
6743 instantiate_decl (decl, /*defer_ok*/true, /*expl*/false);
6744 return;
6747 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (auto_node));
6749 d_init = init;
6750 if (d_init)
6752 if (TREE_CODE (d_init) == TREE_LIST
6753 && !CLASS_PLACEHOLDER_TEMPLATE (auto_node))
6754 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6755 tf_warning_or_error);
6756 d_init = resolve_nondeduced_context (d_init, tf_warning_or_error);
6758 enum auto_deduction_context adc = adc_variable_type;
6759 if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
6760 adc = adc_decomp_type;
6761 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init, auto_node,
6762 tf_warning_or_error, adc,
6763 NULL_TREE, flags);
6764 if (type == error_mark_node)
6765 return;
6766 if (TREE_CODE (type) == FUNCTION_TYPE)
6768 error ("initializer for %<decltype(auto) %D%> has function type "
6769 "(did you forget the %<()%> ?)", decl);
6770 TREE_TYPE (decl) = error_mark_node;
6771 return;
6773 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6776 if (!ensure_literal_type_for_constexpr_object (decl))
6777 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6779 if (VAR_P (decl)
6780 && DECL_CLASS_SCOPE_P (decl)
6781 && DECL_INITIALIZED_IN_CLASS_P (decl))
6782 check_static_variable_definition (decl, type);
6784 if (init && TREE_CODE (decl) == FUNCTION_DECL)
6786 tree clone;
6787 if (init == ridpointers[(int)RID_DELETE])
6789 /* FIXME check this is 1st decl. */
6790 DECL_DELETED_FN (decl) = 1;
6791 DECL_DECLARED_INLINE_P (decl) = 1;
6792 DECL_INITIAL (decl) = error_mark_node;
6793 FOR_EACH_CLONE (clone, decl)
6795 DECL_DELETED_FN (clone) = 1;
6796 DECL_DECLARED_INLINE_P (clone) = 1;
6797 DECL_INITIAL (clone) = error_mark_node;
6799 init = NULL_TREE;
6801 else if (init == ridpointers[(int)RID_DEFAULT])
6803 if (defaultable_fn_check (decl))
6804 DECL_DEFAULTED_FN (decl) = 1;
6805 else
6806 DECL_INITIAL (decl) = NULL_TREE;
6810 if (init && VAR_P (decl))
6812 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6813 /* If DECL is a reference, then we want to know whether init is a
6814 reference constant; init_const_expr_p as passed tells us whether
6815 it's an rvalue constant. */
6816 if (TREE_CODE (type) == REFERENCE_TYPE)
6817 init_const_expr_p = potential_constant_expression (init);
6818 if (init_const_expr_p)
6820 /* Set these flags now for templates. We'll update the flags in
6821 store_init_value for instantiations. */
6822 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6823 if (decl_maybe_constant_var_p (decl)
6824 /* FIXME setting TREE_CONSTANT on refs breaks the back end. */
6825 && TREE_CODE (type) != REFERENCE_TYPE)
6826 TREE_CONSTANT (decl) = 1;
6830 if (processing_template_decl)
6832 bool type_dependent_p;
6834 /* Add this declaration to the statement-tree. */
6835 if (at_function_scope_p ())
6836 add_decl_expr (decl);
6838 type_dependent_p = dependent_type_p (type);
6840 if (check_for_bare_parameter_packs (init))
6842 init = NULL_TREE;
6843 DECL_INITIAL (decl) = NULL_TREE;
6846 init = do_dependent_capture (init);
6848 /* Generally, initializers in templates are expanded when the
6849 template is instantiated. But, if DECL is a variable constant
6850 then it can be used in future constant expressions, so its value
6851 must be available. */
6853 if (!VAR_P (decl) || type_dependent_p)
6854 /* We can't do anything if the decl has dependent type. */;
6855 else if (init
6856 && init_const_expr_p
6857 && TREE_CODE (type) != REFERENCE_TYPE
6858 && decl_maybe_constant_var_p (decl)
6859 && !type_dependent_init_p (init)
6860 && !value_dependent_init_p (init))
6862 /* This variable seems to be a non-dependent constant, so process
6863 its initializer. If check_initializer returns non-null the
6864 initialization wasn't constant after all. */
6865 tree init_code;
6866 cleanups = make_tree_vector ();
6867 init_code = check_initializer (decl, init, flags, &cleanups);
6868 if (init_code == NULL_TREE)
6869 init = NULL_TREE;
6870 release_tree_vector (cleanups);
6872 else if (!init && is_concept_var (decl))
6873 error ("variable concept has no initializer");
6874 else if (!DECL_PRETTY_FUNCTION_P (decl))
6876 /* Deduce array size even if the initializer is dependent. */
6877 maybe_deduce_size_from_array_init (decl, init);
6878 /* And complain about multiple initializers. */
6879 if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
6880 && !MAYBE_CLASS_TYPE_P (type))
6881 init = build_x_compound_expr_from_list (init, ELK_INIT,
6882 tf_warning_or_error);
6885 if (init)
6886 DECL_INITIAL (decl) = init;
6887 return;
6890 /* Just store non-static data member initializers for later. */
6891 if (init && TREE_CODE (decl) == FIELD_DECL)
6892 DECL_INITIAL (decl) = init;
6894 /* Take care of TYPE_DECLs up front. */
6895 if (TREE_CODE (decl) == TYPE_DECL)
6897 if (type != error_mark_node
6898 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6900 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6901 warning (0, "shadowing previous type declaration of %q#D", decl);
6902 set_identifier_type_value (DECL_NAME (decl), decl);
6905 /* If we have installed this as the canonical typedef for this
6906 type, and that type has not been defined yet, delay emitting
6907 the debug information for it, as we will emit it later. */
6908 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6909 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6910 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6912 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6913 at_eof);
6914 return;
6917 /* A reference will be modified here, as it is initialized. */
6918 if (! DECL_EXTERNAL (decl)
6919 && TREE_READONLY (decl)
6920 && TREE_CODE (type) == REFERENCE_TYPE)
6922 was_readonly = 1;
6923 TREE_READONLY (decl) = 0;
6926 if (VAR_P (decl))
6928 /* If this is a local variable that will need a mangled name,
6929 register it now. We must do this before processing the
6930 initializer for the variable, since the initialization might
6931 require a guard variable, and since the mangled name of the
6932 guard variable will depend on the mangled name of this
6933 variable. */
6934 if (DECL_FUNCTION_SCOPE_P (decl)
6935 && TREE_STATIC (decl)
6936 && !DECL_ARTIFICIAL (decl))
6938 push_local_name (decl);
6939 /* Normally has_forced_label_in_static is set during GIMPLE
6940 lowering, but [cd]tors are never actually compiled directly.
6941 We need to set this early so we can deal with the label
6942 address extension. */
6943 if ((DECL_CONSTRUCTOR_P (current_function_decl)
6944 || DECL_DESTRUCTOR_P (current_function_decl))
6945 && init)
6947 walk_tree (&init, notice_forced_label_r, NULL, NULL);
6948 add_local_decl (cfun, decl);
6950 /* And make sure it's in the symbol table for
6951 c_parse_final_cleanups to find. */
6952 varpool_node::get_create (decl);
6955 /* Convert the initializer to the type of DECL, if we have not
6956 already initialized DECL. */
6957 if (!DECL_INITIALIZED_P (decl)
6958 /* If !DECL_EXTERNAL then DECL is being defined. In the
6959 case of a static data member initialized inside the
6960 class-specifier, there can be an initializer even if DECL
6961 is *not* defined. */
6962 && (!DECL_EXTERNAL (decl) || init))
6964 cleanups = make_tree_vector ();
6965 init = check_initializer (decl, init, flags, &cleanups);
6967 /* Handle:
6969 [dcl.init]
6971 The memory occupied by any object of static storage
6972 duration is zero-initialized at program startup before
6973 any other initialization takes place.
6975 We cannot create an appropriate initializer until after
6976 the type of DECL is finalized. If DECL_INITIAL is set,
6977 then the DECL is statically initialized, and any
6978 necessary zero-initialization has already been performed. */
6979 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
6980 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
6981 /*nelts=*/NULL_TREE,
6982 /*static_storage_p=*/true);
6983 /* Remember that the initialization for this variable has
6984 taken place. */
6985 DECL_INITIALIZED_P (decl) = 1;
6986 /* This declaration is the definition of this variable,
6987 unless we are initializing a static data member within
6988 the class specifier. */
6989 if (!DECL_EXTERNAL (decl))
6990 var_definition_p = true;
6992 /* If the variable has an array type, lay out the type, even if
6993 there is no initializer. It is valid to index through the
6994 array, and we must get TYPE_ALIGN set correctly on the array
6995 type. */
6996 else if (TREE_CODE (type) == ARRAY_TYPE)
6997 layout_type (type);
6999 if (TREE_STATIC (decl)
7000 && !at_function_scope_p ()
7001 && current_function_decl == NULL)
7002 /* So decl is a global variable or a static member of a
7003 non local class. Record the types it uses
7004 so that we can decide later to emit debug info for them. */
7005 record_types_used_by_current_var_decl (decl);
7008 /* Add this declaration to the statement-tree. This needs to happen
7009 after the call to check_initializer so that the DECL_EXPR for a
7010 reference temp is added before the DECL_EXPR for the reference itself. */
7011 if (DECL_FUNCTION_SCOPE_P (decl))
7013 /* If we're building a variable sized type, and we might be
7014 reachable other than via the top of the current binding
7015 level, then create a new BIND_EXPR so that we deallocate
7016 the object at the right time. */
7017 if (VAR_P (decl)
7018 && DECL_SIZE (decl)
7019 && !TREE_CONSTANT (DECL_SIZE (decl))
7020 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
7022 tree bind;
7023 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
7024 TREE_SIDE_EFFECTS (bind) = 1;
7025 add_stmt (bind);
7026 BIND_EXPR_BODY (bind) = push_stmt_list ();
7028 add_decl_expr (decl);
7031 /* Let the middle end know about variables and functions -- but not
7032 static data members in uninstantiated class templates. */
7033 if (VAR_OR_FUNCTION_DECL_P (decl))
7035 if (VAR_P (decl))
7037 layout_var_decl (decl);
7038 maybe_commonize_var (decl);
7041 /* This needs to happen after the linkage is set. */
7042 determine_visibility (decl);
7044 if (var_definition_p && TREE_STATIC (decl))
7046 /* If a TREE_READONLY variable needs initialization
7047 at runtime, it is no longer readonly and we need to
7048 avoid MEM_READONLY_P being set on RTL created for it. */
7049 if (init)
7051 if (TREE_READONLY (decl))
7052 TREE_READONLY (decl) = 0;
7053 was_readonly = 0;
7055 else if (was_readonly)
7056 TREE_READONLY (decl) = 1;
7058 /* Likewise if it needs destruction. */
7059 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7060 TREE_READONLY (decl) = 0;
7063 make_rtl_for_nonlocal_decl (decl, init, asmspec);
7065 /* Check for abstractness of the type. Notice that there is no
7066 need to strip array types here since the check for those types
7067 is already done within create_array_type_for_decl. */
7068 abstract_virtuals_error (decl, type);
7070 if (TREE_TYPE (decl) == error_mark_node)
7071 /* No initialization required. */
7073 else if (TREE_CODE (decl) == FUNCTION_DECL)
7075 if (init)
7077 if (init == ridpointers[(int)RID_DEFAULT])
7079 /* An out-of-class default definition is defined at
7080 the point where it is explicitly defaulted. */
7081 if (DECL_DELETED_FN (decl))
7082 maybe_explain_implicit_delete (decl);
7083 else if (DECL_INITIAL (decl) == error_mark_node)
7084 synthesize_method (decl);
7086 else
7087 error ("function %q#D is initialized like a variable", decl);
7089 /* else no initialization required. */
7091 else if (DECL_EXTERNAL (decl)
7092 && ! (DECL_LANG_SPECIFIC (decl)
7093 && DECL_NOT_REALLY_EXTERN (decl)))
7095 if (init)
7096 DECL_INITIAL (decl) = init;
7098 /* A variable definition. */
7099 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
7100 /* Initialize the local variable. */
7101 initialize_local_var (decl, init);
7103 /* If a variable is defined, and then a subsequent
7104 definition with external linkage is encountered, we will
7105 get here twice for the same variable. We want to avoid
7106 calling expand_static_init more than once. For variables
7107 that are not static data members, we can call
7108 expand_static_init only when we actually process the
7109 initializer. It is not legal to redeclare a static data
7110 member, so this issue does not arise in that case. */
7111 else if (var_definition_p && TREE_STATIC (decl))
7112 expand_static_init (decl, init);
7115 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
7116 reference, insert it in the statement-tree now. */
7117 if (cleanups)
7119 unsigned i; tree t;
7120 FOR_EACH_VEC_ELT (*cleanups, i, t)
7121 push_cleanup (decl, t, false);
7122 release_tree_vector (cleanups);
7125 if (was_readonly)
7126 TREE_READONLY (decl) = 1;
7128 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
7131 /* For class TYPE return itself or some its bases that contain
7132 any direct non-static data members. Return error_mark_node if an
7133 error has been diagnosed. */
7135 static tree
7136 find_decomp_class_base (location_t loc, tree type, tree ret)
7138 bool member_seen = false;
7139 for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
7140 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
7141 continue;
7142 else if (ret)
7143 return type;
7144 else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
7146 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
7147 error_at (loc, "cannot decompose class type %qT because it has an "
7148 "anonymous struct member", type);
7149 else
7150 error_at (loc, "cannot decompose class type %qT because it has an "
7151 "anonymous union member", type);
7152 inform (DECL_SOURCE_LOCATION (field), "declared here");
7153 return error_mark_node;
7155 else if (TREE_PRIVATE (field) || TREE_PROTECTED (field))
7157 error_at (loc, "cannot decompose non-public member %qD of %qT",
7158 field, type);
7159 inform (DECL_SOURCE_LOCATION (field),
7160 TREE_PRIVATE (field)
7161 ? G_("declared private here")
7162 : G_("declared protected here"));
7163 return error_mark_node;
7165 else
7166 member_seen = true;
7168 tree base_binfo, binfo;
7169 tree orig_ret = ret;
7170 int i;
7171 if (member_seen)
7172 ret = type;
7173 for (binfo = TYPE_BINFO (type), i = 0;
7174 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
7176 tree t = find_decomp_class_base (loc, TREE_TYPE (base_binfo), ret);
7177 if (t == error_mark_node)
7178 return error_mark_node;
7179 if (t != NULL_TREE)
7181 if (ret == type)
7183 error_at (loc, "cannot decompose class type %qT: both it and "
7184 "its base class %qT have non-static data members",
7185 type, t);
7186 return error_mark_node;
7188 else if (orig_ret != NULL_TREE)
7189 return t;
7190 else if (ret == t)
7191 /* OK, found the same base along another path. We'll complain
7192 in convert_to_base if it's ambiguous. */;
7193 else if (ret != NULL_TREE)
7195 error_at (loc, "cannot decompose class type %qT: its base "
7196 "classes %qT and %qT have non-static data "
7197 "members", type, ret, t);
7198 return error_mark_node;
7200 else
7201 ret = t;
7204 return ret;
7207 /* Return std::tuple_size<TYPE>::value. */
7209 static tree
7210 get_tuple_size (tree type)
7212 tree args = make_tree_vec (1);
7213 TREE_VEC_ELT (args, 0) = type;
7214 tree inst = lookup_template_class (get_identifier ("tuple_size"), args,
7215 /*in_decl*/NULL_TREE,
7216 /*context*/std_node,
7217 /*entering_scope*/false, tf_none);
7218 inst = complete_type (inst);
7219 if (inst == error_mark_node || !COMPLETE_TYPE_P (inst))
7220 return NULL_TREE;
7221 tree val = lookup_qualified_name (inst, get_identifier ("value"),
7222 /*type*/false, /*complain*/false);
7223 if (TREE_CODE (val) == VAR_DECL || TREE_CODE (val) == CONST_DECL)
7224 val = maybe_constant_value (val);
7225 if (TREE_CODE (val) == INTEGER_CST)
7226 return val;
7227 else
7228 return error_mark_node;
7231 /* Return std::tuple_element<I,TYPE>::type. */
7233 static tree
7234 get_tuple_element_type (tree type, unsigned i)
7236 tree args = make_tree_vec (2);
7237 TREE_VEC_ELT (args, 0) = build_int_cst (integer_type_node, i);
7238 TREE_VEC_ELT (args, 1) = type;
7239 tree inst = lookup_template_class (get_identifier ("tuple_element"), args,
7240 /*in_decl*/NULL_TREE,
7241 /*context*/std_node,
7242 /*entering_scope*/false,
7243 tf_warning_or_error);
7244 return make_typename_type (inst, get_identifier ("type"),
7245 none_type, tf_warning_or_error);
7248 /* Return e.get<i>() or get<i>(e). */
7250 static tree
7251 get_tuple_decomp_init (tree decl, unsigned i)
7253 tree get_id = get_identifier ("get");
7254 tree targs = make_tree_vec (1);
7255 TREE_VEC_ELT (targs, 0) = build_int_cst (integer_type_node, i);
7257 tree etype = TREE_TYPE (decl);
7258 tree e = convert_from_reference (decl);
7260 /* [The id-expression] e is an lvalue if the type of the entity e is an
7261 lvalue reference and an xvalue otherwise. */
7262 if (TREE_CODE (etype) != REFERENCE_TYPE
7263 || TYPE_REF_IS_RVALUE (etype))
7264 e = move (e);
7266 tree fns = lookup_qualified_name (TREE_TYPE (e), get_id,
7267 /*type*/false, /*complain*/false);
7268 if (fns != error_mark_node)
7270 fns = lookup_template_function (fns, targs);
7271 return build_new_method_call (e, fns, /*args*/NULL,
7272 /*path*/NULL_TREE, LOOKUP_NORMAL,
7273 /*fn_p*/NULL, tf_warning_or_error);
7275 else
7277 vec<tree,va_gc> *args = make_tree_vector_single (e);
7278 fns = lookup_template_function (get_id, targs);
7279 fns = perform_koenig_lookup (fns, args, tf_warning_or_error);
7280 return finish_call_expr (fns, &args, /*novirt*/false,
7281 /*koenig*/true, tf_warning_or_error);
7285 /* It's impossible to recover the decltype of a tuple decomposition variable
7286 based on the actual type of the variable, so store it in a hash table. */
7287 static GTY(()) hash_map<tree,tree> *decomp_type_table;
7288 static void
7289 store_decomp_type (tree v, tree t)
7291 if (!decomp_type_table)
7292 decomp_type_table = hash_map<tree,tree>::create_ggc (13);
7293 decomp_type_table->put (v, t);
7296 tree
7297 lookup_decomp_type (tree v)
7299 return *decomp_type_table->get (v);
7302 /* Finish a decomposition declaration. DECL is the underlying declaration
7303 "e", FIRST is the head of a chain of decls for the individual identifiers
7304 chained through DECL_CHAIN in reverse order and COUNT is the number of
7305 those decls. */
7307 void
7308 cp_finish_decomp (tree decl, tree first, unsigned int count)
7310 if (error_operand_p (decl))
7312 error_out:
7313 while (count--)
7315 TREE_TYPE (first) = error_mark_node;
7316 if (DECL_HAS_VALUE_EXPR_P (first))
7318 SET_DECL_VALUE_EXPR (first, NULL_TREE);
7319 DECL_HAS_VALUE_EXPR_P (first) = 0;
7321 first = DECL_CHAIN (first);
7323 if (DECL_P (decl) && DECL_NAMESPACE_SCOPE_P (decl))
7324 SET_DECL_ASSEMBLER_NAME (decl, get_identifier ("<decomp>"));
7325 return;
7328 location_t loc = DECL_SOURCE_LOCATION (decl);
7329 if (type_dependent_expression_p (decl)
7330 /* This happens for range for when not in templates.
7331 Still add the DECL_VALUE_EXPRs for later processing. */
7332 || (!processing_template_decl
7333 && type_uses_auto (TREE_TYPE (decl))))
7335 for (unsigned int i = 0; i < count; i++)
7337 if (!DECL_HAS_VALUE_EXPR_P (first))
7339 tree v = build_nt (ARRAY_REF, decl,
7340 size_int (count - i - 1),
7341 NULL_TREE, NULL_TREE);
7342 SET_DECL_VALUE_EXPR (first, v);
7343 DECL_HAS_VALUE_EXPR_P (first) = 1;
7345 if (processing_template_decl)
7346 fit_decomposition_lang_decl (first, decl);
7347 first = DECL_CHAIN (first);
7349 return;
7352 auto_vec<tree, 16> v;
7353 v.safe_grow (count);
7354 tree d = first;
7355 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7357 v[count - i - 1] = d;
7358 fit_decomposition_lang_decl (d, decl);
7361 tree type = TREE_TYPE (decl);
7362 tree dexp = decl;
7364 if (TREE_CODE (type) == REFERENCE_TYPE)
7366 dexp = convert_from_reference (dexp);
7367 type = TREE_TYPE (type);
7370 tree eltype = NULL_TREE;
7371 unsigned HOST_WIDE_INT eltscnt = 0;
7372 if (TREE_CODE (type) == ARRAY_TYPE)
7374 tree nelts;
7375 nelts = array_type_nelts_top (type);
7376 if (nelts == error_mark_node)
7377 goto error_out;
7378 if (!tree_fits_uhwi_p (nelts))
7380 error_at (loc, "cannot decompose variable length array %qT", type);
7381 goto error_out;
7383 eltscnt = tree_to_uhwi (nelts);
7384 if (count != eltscnt)
7386 cnt_mismatch:
7387 if (count > eltscnt)
7388 error_at (loc, "%u names provided while %qT decomposes into "
7389 "%wu elements", count, type, eltscnt);
7390 else
7391 error_at (loc, "only %u names provided while %qT decomposes into "
7392 "%wu elements", count, type, eltscnt);
7393 goto error_out;
7395 eltype = TREE_TYPE (type);
7396 for (unsigned int i = 0; i < count; i++)
7398 TREE_TYPE (v[i]) = eltype;
7399 layout_decl (v[i], 0);
7400 if (processing_template_decl)
7401 continue;
7402 tree t = unshare_expr (dexp);
7403 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7404 eltype, t, size_int (i), NULL_TREE,
7405 NULL_TREE);
7406 SET_DECL_VALUE_EXPR (v[i], t);
7407 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7410 /* 2 GNU extensions. */
7411 else if (TREE_CODE (type) == COMPLEX_TYPE)
7413 eltscnt = 2;
7414 if (count != eltscnt)
7415 goto cnt_mismatch;
7416 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7417 for (unsigned int i = 0; i < count; i++)
7419 TREE_TYPE (v[i]) = eltype;
7420 layout_decl (v[i], 0);
7421 if (processing_template_decl)
7422 continue;
7423 tree t = unshare_expr (dexp);
7424 t = build1_loc (DECL_SOURCE_LOCATION (v[i]),
7425 i ? IMAGPART_EXPR : REALPART_EXPR, eltype,
7427 SET_DECL_VALUE_EXPR (v[i], t);
7428 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7431 else if (TREE_CODE (type) == VECTOR_TYPE)
7433 eltscnt = TYPE_VECTOR_SUBPARTS (type);
7434 if (count != eltscnt)
7435 goto cnt_mismatch;
7436 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7437 for (unsigned int i = 0; i < count; i++)
7439 TREE_TYPE (v[i]) = eltype;
7440 layout_decl (v[i], 0);
7441 if (processing_template_decl)
7442 continue;
7443 tree t = unshare_expr (dexp);
7444 convert_vector_to_array_for_subscript (DECL_SOURCE_LOCATION (v[i]),
7445 &t, size_int (i));
7446 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7447 eltype, t, size_int (i), NULL_TREE,
7448 NULL_TREE);
7449 SET_DECL_VALUE_EXPR (v[i], t);
7450 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7453 else if (tree tsize = get_tuple_size (type))
7455 if (tsize == error_mark_node)
7457 error_at (loc, "%<std::tuple_size<%T>::value%> is not an integral "
7458 "constant expression", type);
7459 goto error_out;
7461 eltscnt = tree_to_uhwi (tsize);
7462 if (count != eltscnt)
7463 goto cnt_mismatch;
7464 int save_read = DECL_READ_P (decl);
7465 for (unsigned i = 0; i < count; ++i)
7467 location_t sloc = input_location;
7468 location_t dloc = DECL_SOURCE_LOCATION (v[i]);
7470 input_location = dloc;
7471 tree init = get_tuple_decomp_init (decl, i);
7472 tree eltype = (init == error_mark_node ? error_mark_node
7473 : get_tuple_element_type (type, i));
7474 input_location = sloc;
7476 if (init == error_mark_node || eltype == error_mark_node)
7478 inform (dloc, "in initialization of structured binding "
7479 "variable %qD", v[i]);
7480 goto error_out;
7482 /* Save the decltype away before reference collapse. */
7483 store_decomp_type (v[i], eltype);
7484 eltype = cp_build_reference_type (eltype, !lvalue_p (init));
7485 TREE_TYPE (v[i]) = eltype;
7486 layout_decl (v[i], 0);
7487 if (DECL_HAS_VALUE_EXPR_P (v[i]))
7489 /* In this case the names are variables, not just proxies. */
7490 SET_DECL_VALUE_EXPR (v[i], NULL_TREE);
7491 DECL_HAS_VALUE_EXPR_P (v[i]) = 0;
7493 if (!processing_template_decl)
7494 cp_finish_decl (v[i], init, /*constexpr*/false,
7495 /*asm*/NULL_TREE, LOOKUP_NORMAL);
7497 /* Ignore reads from the underlying decl performed during initialization
7498 of the individual variables. If those will be read, we'll mark
7499 the underlying decl as read at that point. */
7500 DECL_READ_P (decl) = save_read;
7502 else if (TREE_CODE (type) == UNION_TYPE)
7504 error_at (loc, "cannot decompose union type %qT", type);
7505 goto error_out;
7507 else if (!CLASS_TYPE_P (type))
7509 error_at (loc, "cannot decompose non-array non-class type %qT", type);
7510 goto error_out;
7512 else if (LAMBDA_TYPE_P (type))
7514 error_at (loc, "cannot decompose lambda closure type %qT", type);
7515 goto error_out;
7517 else
7519 tree btype = find_decomp_class_base (loc, type, NULL_TREE);
7520 if (btype == error_mark_node)
7521 goto error_out;
7522 else if (btype == NULL_TREE)
7524 error_at (loc, "cannot decompose class type %qT without non-static "
7525 "data members", type);
7526 goto error_out;
7528 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7529 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
7530 continue;
7531 else
7532 eltscnt++;
7533 if (count != eltscnt)
7534 goto cnt_mismatch;
7535 tree t = dexp;
7536 if (type != btype)
7538 t = convert_to_base (t, btype, /*check_access*/true,
7539 /*nonnull*/false, tf_warning_or_error);
7540 type = btype;
7542 unsigned int i = 0;
7543 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7544 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
7545 continue;
7546 else
7548 tree tt = finish_non_static_data_member (field, unshare_expr (t),
7549 NULL_TREE);
7550 if (REFERENCE_REF_P (tt))
7551 tt = TREE_OPERAND (tt, 0);
7552 TREE_TYPE (v[i]) = TREE_TYPE (tt);
7553 layout_decl (v[i], 0);
7554 if (!processing_template_decl)
7556 SET_DECL_VALUE_EXPR (v[i], tt);
7557 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7559 i++;
7562 if (processing_template_decl)
7564 for (unsigned int i = 0; i < count; i++)
7565 if (!DECL_HAS_VALUE_EXPR_P (v[i]))
7567 tree a = build_nt (ARRAY_REF, decl, size_int (i),
7568 NULL_TREE, NULL_TREE);
7569 SET_DECL_VALUE_EXPR (v[i], a);
7570 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7573 else if (DECL_NAMESPACE_SCOPE_P (decl))
7574 SET_DECL_ASSEMBLER_NAME (decl, mangle_decomp (decl, v));
7577 /* Returns a declaration for a VAR_DECL as if:
7579 extern "C" TYPE NAME;
7581 had been seen. Used to create compiler-generated global
7582 variables. */
7584 static tree
7585 declare_global_var (tree name, tree type)
7587 tree decl;
7589 push_to_top_level ();
7590 decl = build_decl (input_location, VAR_DECL, name, type);
7591 TREE_PUBLIC (decl) = 1;
7592 DECL_EXTERNAL (decl) = 1;
7593 DECL_ARTIFICIAL (decl) = 1;
7594 DECL_CONTEXT (decl) = FROB_CONTEXT (global_namespace);
7595 /* If the user has explicitly declared this variable (perhaps
7596 because the code we are compiling is part of a low-level runtime
7597 library), then it is possible that our declaration will be merged
7598 with theirs by pushdecl. */
7599 decl = pushdecl (decl);
7600 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
7601 pop_from_top_level ();
7603 return decl;
7606 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
7607 if "__cxa_atexit" is not being used) corresponding to the function
7608 to be called when the program exits. */
7610 static tree
7611 get_atexit_fn_ptr_type (void)
7613 tree fn_type;
7615 if (!atexit_fn_ptr_type_node)
7617 tree arg_type;
7618 if (flag_use_cxa_atexit
7619 && !targetm.cxx.use_atexit_for_cxa_atexit ())
7620 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
7621 arg_type = ptr_type_node;
7622 else
7623 /* The parameter to "atexit" is "void (*)(void)". */
7624 arg_type = NULL_TREE;
7626 fn_type = build_function_type_list (void_type_node,
7627 arg_type, NULL_TREE);
7628 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
7631 return atexit_fn_ptr_type_node;
7634 /* Returns a pointer to the `atexit' function. Note that if
7635 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
7636 `__cxa_atexit' function specified in the IA64 C++ ABI. */
7638 static tree
7639 get_atexit_node (void)
7641 tree atexit_fndecl;
7642 tree fn_type;
7643 tree fn_ptr_type;
7644 const char *name;
7645 bool use_aeabi_atexit;
7647 if (atexit_node)
7648 return atexit_node;
7650 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
7652 /* The declaration for `__cxa_atexit' is:
7654 int __cxa_atexit (void (*)(void *), void *, void *)
7656 We build up the argument types and then the function type
7657 itself. */
7658 tree argtype0, argtype1, argtype2;
7660 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
7661 /* First, build the pointer-to-function type for the first
7662 argument. */
7663 fn_ptr_type = get_atexit_fn_ptr_type ();
7664 /* Then, build the rest of the argument types. */
7665 argtype2 = ptr_type_node;
7666 if (use_aeabi_atexit)
7668 argtype1 = fn_ptr_type;
7669 argtype0 = ptr_type_node;
7671 else
7673 argtype1 = ptr_type_node;
7674 argtype0 = fn_ptr_type;
7676 /* And the final __cxa_atexit type. */
7677 fn_type = build_function_type_list (integer_type_node,
7678 argtype0, argtype1, argtype2,
7679 NULL_TREE);
7680 if (use_aeabi_atexit)
7681 name = "__aeabi_atexit";
7682 else
7683 name = "__cxa_atexit";
7685 else
7687 /* The declaration for `atexit' is:
7689 int atexit (void (*)());
7691 We build up the argument types and then the function type
7692 itself. */
7693 fn_ptr_type = get_atexit_fn_ptr_type ();
7694 /* Build the final atexit type. */
7695 fn_type = build_function_type_list (integer_type_node,
7696 fn_ptr_type, NULL_TREE);
7697 name = "atexit";
7700 /* Now, build the function declaration. */
7701 push_lang_context (lang_name_c);
7702 atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
7703 mark_used (atexit_fndecl);
7704 pop_lang_context ();
7705 atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
7707 return atexit_node;
7710 /* Like get_atexit_node, but for thread-local cleanups. */
7712 static tree
7713 get_thread_atexit_node (void)
7715 /* The declaration for `__cxa_thread_atexit' is:
7717 int __cxa_thread_atexit (void (*)(void *), void *, void *) */
7718 tree fn_type = build_function_type_list (integer_type_node,
7719 get_atexit_fn_ptr_type (),
7720 ptr_type_node, ptr_type_node,
7721 NULL_TREE);
7723 /* Now, build the function declaration. */
7724 tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
7725 ECF_LEAF | ECF_NOTHROW);
7726 return decay_conversion (atexit_fndecl, tf_warning_or_error);
7729 /* Returns the __dso_handle VAR_DECL. */
7731 static tree
7732 get_dso_handle_node (void)
7734 if (dso_handle_node)
7735 return dso_handle_node;
7737 /* Declare the variable. */
7738 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
7739 ptr_type_node);
7741 #ifdef HAVE_GAS_HIDDEN
7742 if (dso_handle_node != error_mark_node)
7744 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
7745 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
7747 #endif
7749 return dso_handle_node;
7752 /* Begin a new function with internal linkage whose job will be simply
7753 to destroy some particular variable. */
7755 static GTY(()) int start_cleanup_cnt;
7757 static tree
7758 start_cleanup_fn (void)
7760 char name[32];
7761 tree fntype;
7762 tree fndecl;
7763 bool use_cxa_atexit = flag_use_cxa_atexit
7764 && !targetm.cxx.use_atexit_for_cxa_atexit ();
7766 push_to_top_level ();
7768 /* No need to mangle this. */
7769 push_lang_context (lang_name_c);
7771 /* Build the name of the function. */
7772 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
7773 /* Build the function declaration. */
7774 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
7775 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
7776 /* It's a function with internal linkage, generated by the
7777 compiler. */
7778 TREE_PUBLIC (fndecl) = 0;
7779 DECL_ARTIFICIAL (fndecl) = 1;
7780 /* Make the function `inline' so that it is only emitted if it is
7781 actually needed. It is unlikely that it will be inlined, since
7782 it is only called via a function pointer, but we avoid unnecessary
7783 emissions this way. */
7784 DECL_DECLARED_INLINE_P (fndecl) = 1;
7785 DECL_INTERFACE_KNOWN (fndecl) = 1;
7786 /* Build the parameter. */
7787 if (use_cxa_atexit)
7789 tree parmdecl = cp_build_parm_decl (fndecl, NULL_TREE, ptr_type_node);
7790 TREE_USED (parmdecl) = 1;
7791 DECL_READ_P (parmdecl) = 1;
7792 DECL_ARGUMENTS (fndecl) = parmdecl;
7795 pushdecl (fndecl);
7796 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
7798 pop_lang_context ();
7800 return current_function_decl;
7803 /* Finish the cleanup function begun by start_cleanup_fn. */
7805 static void
7806 end_cleanup_fn (void)
7808 expand_or_defer_fn (finish_function (/*inline_p=*/false));
7810 pop_from_top_level ();
7813 /* Generate code to handle the destruction of DECL, an object with
7814 static storage duration. */
7816 tree
7817 register_dtor_fn (tree decl)
7819 tree cleanup;
7820 tree addr;
7821 tree compound_stmt;
7822 tree fcall;
7823 tree type;
7824 bool ob_parm, dso_parm, use_dtor;
7825 tree arg0, arg1, arg2;
7826 tree atex_node;
7828 type = TREE_TYPE (decl);
7829 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
7830 return void_node;
7832 /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
7833 "__aeabi_atexit"), and DECL is a class object, we can just pass the
7834 destructor to "__cxa_atexit"; we don't have to build a temporary
7835 function to do the cleanup. */
7836 dso_parm = (flag_use_cxa_atexit
7837 && !targetm.cxx.use_atexit_for_cxa_atexit ());
7838 ob_parm = (CP_DECL_THREAD_LOCAL_P (decl) || dso_parm);
7839 use_dtor = ob_parm && CLASS_TYPE_P (type);
7840 if (use_dtor)
7842 cleanup = get_class_binding (type, complete_dtor_identifier);
7844 /* Make sure it is accessible. */
7845 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
7846 tf_warning_or_error);
7848 else
7850 /* Call build_cleanup before we enter the anonymous function so
7851 that any access checks will be done relative to the current
7852 scope, rather than the scope of the anonymous function. */
7853 build_cleanup (decl);
7855 /* Now start the function. */
7856 cleanup = start_cleanup_fn ();
7858 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
7859 to the original function, rather than the anonymous one. That
7860 will make the back end think that nested functions are in use,
7861 which causes confusion. */
7862 push_deferring_access_checks (dk_no_check);
7863 fcall = build_cleanup (decl);
7864 pop_deferring_access_checks ();
7866 /* Create the body of the anonymous function. */
7867 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
7868 finish_expr_stmt (fcall);
7869 finish_compound_stmt (compound_stmt);
7870 end_cleanup_fn ();
7873 /* Call atexit with the cleanup function. */
7874 mark_used (cleanup);
7875 cleanup = build_address (cleanup);
7877 if (CP_DECL_THREAD_LOCAL_P (decl))
7878 atex_node = get_thread_atexit_node ();
7879 else
7880 atex_node = get_atexit_node ();
7882 if (use_dtor)
7884 /* We must convert CLEANUP to the type that "__cxa_atexit"
7885 expects. */
7886 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
7887 /* "__cxa_atexit" will pass the address of DECL to the
7888 cleanup function. */
7889 mark_used (decl);
7890 addr = build_address (decl);
7891 /* The declared type of the parameter to "__cxa_atexit" is
7892 "void *". For plain "T*", we could just let the
7893 machinery in cp_build_function_call convert it -- but if the
7894 type is "cv-qualified T *", then we need to convert it
7895 before passing it in, to avoid spurious errors. */
7896 addr = build_nop (ptr_type_node, addr);
7898 else
7899 /* Since the cleanup functions we build ignore the address
7900 they're given, there's no reason to pass the actual address
7901 in, and, in general, it's cheaper to pass NULL than any
7902 other value. */
7903 addr = null_pointer_node;
7905 if (dso_parm)
7906 arg2 = cp_build_addr_expr (get_dso_handle_node (),
7907 tf_warning_or_error);
7908 else if (ob_parm)
7909 /* Just pass NULL to the dso handle parm if we don't actually
7910 have a DSO handle on this target. */
7911 arg2 = null_pointer_node;
7912 else
7913 arg2 = NULL_TREE;
7915 if (ob_parm)
7917 if (!CP_DECL_THREAD_LOCAL_P (decl)
7918 && targetm.cxx.use_aeabi_atexit ())
7920 arg1 = cleanup;
7921 arg0 = addr;
7923 else
7925 arg1 = addr;
7926 arg0 = cleanup;
7929 else
7931 arg0 = cleanup;
7932 arg1 = NULL_TREE;
7934 return cp_build_function_call_nary (atex_node, tf_warning_or_error,
7935 arg0, arg1, arg2, NULL_TREE);
7938 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
7939 is its initializer. Generate code to handle the construction
7940 and destruction of DECL. */
7942 static void
7943 expand_static_init (tree decl, tree init)
7945 gcc_assert (VAR_P (decl));
7946 gcc_assert (TREE_STATIC (decl));
7948 /* Some variables require no dynamic initialization. */
7949 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
7951 /* Make sure the destructor is callable. */
7952 cxx_maybe_build_cleanup (decl, tf_warning_or_error);
7953 if (!init)
7954 return;
7957 if (CP_DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
7958 && !DECL_FUNCTION_SCOPE_P (decl))
7960 if (init)
7961 error ("non-local variable %qD declared %<__thread%> "
7962 "needs dynamic initialization", decl);
7963 else
7964 error ("non-local variable %qD declared %<__thread%> "
7965 "has a non-trivial destructor", decl);
7966 static bool informed;
7967 if (!informed)
7969 inform (DECL_SOURCE_LOCATION (decl),
7970 "C++11 %<thread_local%> allows dynamic initialization "
7971 "and destruction");
7972 informed = true;
7974 return;
7977 if (DECL_FUNCTION_SCOPE_P (decl))
7979 /* Emit code to perform this initialization but once. */
7980 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
7981 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
7982 tree guard, guard_addr;
7983 tree flag, begin;
7984 /* We don't need thread-safety code for thread-local vars. */
7985 bool thread_guard = (flag_threadsafe_statics
7986 && !CP_DECL_THREAD_LOCAL_P (decl));
7988 /* Emit code to perform this initialization but once. This code
7989 looks like:
7991 static <type> guard;
7992 if (!__atomic_load (guard.first_byte)) {
7993 if (__cxa_guard_acquire (&guard)) {
7994 bool flag = false;
7995 try {
7996 // Do initialization.
7997 flag = true; __cxa_guard_release (&guard);
7998 // Register variable for destruction at end of program.
7999 } catch {
8000 if (!flag) __cxa_guard_abort (&guard);
8005 Note that the `flag' variable is only set to 1 *after* the
8006 initialization is complete. This ensures that an exception,
8007 thrown during the construction, will cause the variable to
8008 reinitialized when we pass through this code again, as per:
8010 [stmt.dcl]
8012 If the initialization exits by throwing an exception, the
8013 initialization is not complete, so it will be tried again
8014 the next time control enters the declaration.
8016 This process should be thread-safe, too; multiple threads
8017 should not be able to initialize the variable more than
8018 once. */
8020 /* Create the guard variable. */
8021 guard = get_guard (decl);
8023 /* Begin the conditional initialization. */
8024 if_stmt = begin_if_stmt ();
8026 finish_if_stmt_cond (get_guard_cond (guard, thread_guard), if_stmt);
8027 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8029 if (thread_guard)
8031 tree vfntype = NULL_TREE;
8032 tree acquire_name, release_name, abort_name;
8033 tree acquire_fn, release_fn, abort_fn;
8034 guard_addr = build_address (guard);
8036 acquire_name = get_identifier ("__cxa_guard_acquire");
8037 release_name = get_identifier ("__cxa_guard_release");
8038 abort_name = get_identifier ("__cxa_guard_abort");
8039 acquire_fn = get_global_binding (acquire_name);
8040 release_fn = get_global_binding (release_name);
8041 abort_fn = get_global_binding (abort_name);
8042 if (!acquire_fn)
8043 acquire_fn = push_library_fn
8044 (acquire_name, build_function_type_list (integer_type_node,
8045 TREE_TYPE (guard_addr),
8046 NULL_TREE),
8047 NULL_TREE, ECF_NOTHROW | ECF_LEAF);
8048 if (!release_fn || !abort_fn)
8049 vfntype = build_function_type_list (void_type_node,
8050 TREE_TYPE (guard_addr),
8051 NULL_TREE);
8052 if (!release_fn)
8053 release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
8054 ECF_NOTHROW | ECF_LEAF);
8055 if (!abort_fn)
8056 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
8057 ECF_NOTHROW | ECF_LEAF);
8059 inner_if_stmt = begin_if_stmt ();
8060 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
8061 inner_if_stmt);
8063 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8064 begin = get_target_expr (boolean_false_node);
8065 flag = TARGET_EXPR_SLOT (begin);
8067 TARGET_EXPR_CLEANUP (begin)
8068 = build3 (COND_EXPR, void_type_node, flag,
8069 void_node,
8070 build_call_n (abort_fn, 1, guard_addr));
8071 CLEANUP_EH_ONLY (begin) = 1;
8073 /* Do the initialization itself. */
8074 init = add_stmt_to_compound (begin, init);
8075 init = add_stmt_to_compound
8076 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
8077 init = add_stmt_to_compound
8078 (init, build_call_n (release_fn, 1, guard_addr));
8080 else
8081 init = add_stmt_to_compound (init, set_guard (guard));
8083 /* Use atexit to register a function for destroying this static
8084 variable. */
8085 init = add_stmt_to_compound (init, register_dtor_fn (decl));
8087 finish_expr_stmt (init);
8089 if (thread_guard)
8091 finish_compound_stmt (inner_then_clause);
8092 finish_then_clause (inner_if_stmt);
8093 finish_if_stmt (inner_if_stmt);
8096 finish_compound_stmt (then_clause);
8097 finish_then_clause (if_stmt);
8098 finish_if_stmt (if_stmt);
8100 else if (CP_DECL_THREAD_LOCAL_P (decl))
8101 tls_aggregates = tree_cons (init, decl, tls_aggregates);
8102 else
8103 static_aggregates = tree_cons (init, decl, static_aggregates);
8107 /* Make TYPE a complete type based on INITIAL_VALUE.
8108 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8109 2 if there was no information (in which case assume 0 if DO_DEFAULT),
8110 3 if the initializer list is empty (in pedantic mode). */
8113 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
8115 int failure;
8116 tree type, elt_type;
8118 /* Don't get confused by a CONSTRUCTOR for some other type. */
8119 if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
8120 && !BRACE_ENCLOSED_INITIALIZER_P (initial_value)
8121 && TREE_CODE (TREE_TYPE (initial_value)) != ARRAY_TYPE)
8122 return 1;
8124 if (initial_value)
8126 unsigned HOST_WIDE_INT i;
8127 tree value;
8129 /* An array of character type can be initialized from a
8130 brace-enclosed string constant.
8132 FIXME: this code is duplicated from reshape_init. Probably
8133 we should just call reshape_init here? */
8134 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
8135 && TREE_CODE (initial_value) == CONSTRUCTOR
8136 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
8138 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
8139 tree value = (*v)[0].value;
8141 if (TREE_CODE (value) == STRING_CST
8142 && v->length () == 1)
8143 initial_value = value;
8146 /* If any of the elements are parameter packs, we can't actually
8147 complete this type now because the array size is dependent. */
8148 if (TREE_CODE (initial_value) == CONSTRUCTOR)
8150 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
8151 i, value)
8153 if (PACK_EXPANSION_P (value))
8154 return 0;
8159 failure = complete_array_type (ptype, initial_value, do_default);
8161 /* We can create the array before the element type is complete, which
8162 means that we didn't have these two bits set in the original type
8163 either. In completing the type, we are expected to propagate these
8164 bits. See also complete_type which does the same thing for arrays
8165 of fixed size. */
8166 type = *ptype;
8167 if (TYPE_DOMAIN (type))
8169 elt_type = TREE_TYPE (type);
8170 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
8171 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
8172 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
8175 return failure;
8178 /* As above, but either give an error or reject zero-size arrays, depending
8179 on COMPLAIN. */
8182 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
8183 bool do_default, tsubst_flags_t complain)
8185 int failure;
8186 bool sfinae = !(complain & tf_error);
8187 /* In SFINAE context we can't be lenient about zero-size arrays. */
8188 if (sfinae)
8189 ++pedantic;
8190 failure = cp_complete_array_type (ptype, initial_value, do_default);
8191 if (sfinae)
8192 --pedantic;
8193 if (failure)
8195 if (sfinae)
8196 /* Not an error. */;
8197 else if (failure == 1)
8198 error ("initializer fails to determine size of %qT", *ptype);
8199 else if (failure == 2)
8201 if (do_default)
8202 error ("array size missing in %qT", *ptype);
8204 else if (failure == 3)
8205 error ("zero-size array %qT", *ptype);
8206 *ptype = error_mark_node;
8208 return failure;
8211 /* Return zero if something is declared to be a member of type
8212 CTYPE when in the context of CUR_TYPE. STRING is the error
8213 message to print in that case. Otherwise, quietly return 1. */
8215 static int
8216 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
8218 if (ctype && ctype != cur_type)
8220 if (flags == DTOR_FLAG)
8221 error ("destructor for alien class %qT cannot be a member", ctype);
8222 else
8223 error ("constructor for alien class %qT cannot be a member", ctype);
8224 return 0;
8226 return 1;
8229 /* Subroutine of `grokdeclarator'. */
8231 /* Generate errors possibly applicable for a given set of specifiers.
8232 This is for ARM $7.1.2. */
8234 static void
8235 bad_specifiers (tree object,
8236 enum bad_spec_place type,
8237 int virtualp,
8238 int quals,
8239 int inlinep,
8240 int friendp,
8241 int raises)
8243 switch (type)
8245 case BSP_VAR:
8246 if (virtualp)
8247 error ("%qD declared as a %<virtual%> variable", object);
8248 if (quals)
8249 error ("%<const%> and %<volatile%> function specifiers on "
8250 "%qD invalid in variable declaration", object);
8251 break;
8252 case BSP_PARM:
8253 if (virtualp)
8254 error ("%qD declared as a %<virtual%> parameter", object);
8255 if (inlinep)
8256 error ("%qD declared as an %<inline%> parameter", object);
8257 if (quals)
8258 error ("%<const%> and %<volatile%> function specifiers on "
8259 "%qD invalid in parameter declaration", object);
8260 break;
8261 case BSP_TYPE:
8262 if (virtualp)
8263 error ("%qD declared as a %<virtual%> type", object);
8264 if (inlinep)
8265 error ("%qD declared as an %<inline%> type", object);
8266 if (quals)
8267 error ("%<const%> and %<volatile%> function specifiers on "
8268 "%qD invalid in type declaration", object);
8269 break;
8270 case BSP_FIELD:
8271 if (virtualp)
8272 error ("%qD declared as a %<virtual%> field", object);
8273 if (inlinep)
8274 error ("%qD declared as an %<inline%> field", object);
8275 if (quals)
8276 error ("%<const%> and %<volatile%> function specifiers on "
8277 "%qD invalid in field declaration", object);
8278 break;
8279 default:
8280 gcc_unreachable();
8282 if (friendp)
8283 error ("%q+D declared as a friend", object);
8284 if (raises
8285 && !flag_noexcept_type
8286 && (TREE_CODE (object) == TYPE_DECL
8287 || (!TYPE_PTRFN_P (TREE_TYPE (object))
8288 && !TYPE_REFFN_P (TREE_TYPE (object))
8289 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
8290 error ("%q+D declared with an exception specification", object);
8293 /* DECL is a member function or static data member and is presently
8294 being defined. Check that the definition is taking place in a
8295 valid namespace. */
8297 static void
8298 check_class_member_definition_namespace (tree decl)
8300 /* These checks only apply to member functions and static data
8301 members. */
8302 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
8303 /* We check for problems with specializations in pt.c in
8304 check_specialization_namespace, where we can issue better
8305 diagnostics. */
8306 if (processing_specialization)
8307 return;
8308 /* We check this in check_explicit_instantiation_namespace. */
8309 if (processing_explicit_instantiation)
8310 return;
8311 /* [class.mfct]
8313 A member function definition that appears outside of the
8314 class definition shall appear in a namespace scope enclosing
8315 the class definition.
8317 [class.static.data]
8319 The definition for a static data member shall appear in a
8320 namespace scope enclosing the member's class definition. */
8321 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
8322 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
8323 decl, DECL_CONTEXT (decl));
8326 /* Build a PARM_DECL for the "this" parameter of FN. TYPE is the
8327 METHOD_TYPE for a non-static member function; QUALS are the
8328 cv-qualifiers that apply to the function. */
8330 tree
8331 build_this_parm (tree fn, tree type, cp_cv_quals quals)
8333 tree this_type;
8334 tree qual_type;
8335 tree parm;
8336 cp_cv_quals this_quals;
8338 if (CLASS_TYPE_P (type))
8340 this_type
8341 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
8342 this_type = build_pointer_type (this_type);
8344 else
8345 this_type = type_of_this_parm (type);
8346 /* The `this' parameter is implicitly `const'; it cannot be
8347 assigned to. */
8348 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
8349 qual_type = cp_build_qualified_type (this_type, this_quals);
8350 parm = build_artificial_parm (fn, this_identifier, qual_type);
8351 cp_apply_type_quals_to_decl (this_quals, parm);
8352 return parm;
8355 /* DECL is a static member function. Complain if it was declared
8356 with function-cv-quals. */
8358 static void
8359 check_static_quals (tree decl, cp_cv_quals quals)
8361 if (quals != TYPE_UNQUALIFIED)
8362 error ("static member function %q#D declared with type qualifiers",
8363 decl);
8366 // Check that FN takes no arguments and returns bool.
8367 static void
8368 check_concept_fn (tree fn)
8370 // A constraint is nullary.
8371 if (DECL_ARGUMENTS (fn))
8372 error ("concept %q#D declared with function parameters", fn);
8374 // The declared return type of the concept shall be bool, and
8375 // it shall not be deduced from it definition.
8376 tree type = TREE_TYPE (TREE_TYPE (fn));
8377 if (is_auto (type))
8378 error ("concept %q#D declared with a deduced return type", fn);
8379 else if (type != boolean_type_node)
8380 error ("concept %q#D with non-%<bool%> return type %qT", fn, type);
8383 /* Helper function. Replace the temporary this parameter injected
8384 during cp_finish_omp_declare_simd with the real this parameter. */
8386 static tree
8387 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
8389 tree this_parm = (tree) data;
8390 if (TREE_CODE (*tp) == PARM_DECL
8391 && DECL_NAME (*tp) == this_identifier
8392 && *tp != this_parm)
8393 *tp = this_parm;
8394 else if (TYPE_P (*tp))
8395 *walk_subtrees = 0;
8396 return NULL_TREE;
8399 /* CTYPE is class type, or null if non-class.
8400 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8401 or METHOD_TYPE.
8402 DECLARATOR is the function's name.
8403 PARMS is a chain of PARM_DECLs for the function.
8404 VIRTUALP is truthvalue of whether the function is virtual or not.
8405 FLAGS are to be passed through to `grokclassfn'.
8406 QUALS are qualifiers indicating whether the function is `const'
8407 or `volatile'.
8408 RAISES is a list of exceptions that this function can raise.
8409 CHECK is 1 if we must find this method in CTYPE, 0 if we should
8410 not look, and -1 if we should not call `grokclassfn' at all.
8412 SFK is the kind of special function (if any) for the new function.
8414 Returns `NULL_TREE' if something goes wrong, after issuing
8415 applicable error messages. */
8417 static tree
8418 grokfndecl (tree ctype,
8419 tree type,
8420 tree declarator,
8421 tree parms,
8422 tree orig_declarator,
8423 tree decl_reqs,
8424 int virtualp,
8425 enum overload_flags flags,
8426 cp_cv_quals quals,
8427 cp_ref_qualifier rqual,
8428 tree raises,
8429 int check,
8430 int friendp,
8431 int publicp,
8432 int inlinep,
8433 bool deletedp,
8434 special_function_kind sfk,
8435 bool funcdef_flag,
8436 int template_count,
8437 tree in_namespace,
8438 tree* attrlist,
8439 location_t location)
8441 tree decl;
8442 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8443 tree t;
8445 // Was the concept specifier present?
8446 bool concept_p = inlinep & 4;
8448 // Concept declarations must have a corresponding definition.
8449 if (concept_p && !funcdef_flag)
8451 error ("concept %qD has no definition", declarator);
8452 return NULL_TREE;
8455 if (rqual)
8456 type = build_ref_qualified_type (type, rqual);
8457 if (raises)
8458 type = build_exception_variant (type, raises);
8460 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8462 /* Set the constraints on the declaration. */
8463 if (flag_concepts)
8465 tree tmpl_reqs = NULL_TREE;
8466 if (processing_template_decl > template_class_depth (ctype))
8467 tmpl_reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
8469 /* Adjust the required expression into a constraint. */
8470 if (decl_reqs)
8471 decl_reqs = normalize_expression (decl_reqs);
8473 tree ci = build_constraints (tmpl_reqs, decl_reqs);
8474 set_constraints (decl, ci);
8477 /* If we have an explicit location, use it, otherwise use whatever
8478 build_lang_decl used (probably input_location). */
8479 if (location != UNKNOWN_LOCATION)
8480 DECL_SOURCE_LOCATION (decl) = location;
8482 if (TREE_CODE (type) == METHOD_TYPE)
8484 tree parm = build_this_parm (decl, type, quals);
8485 DECL_CHAIN (parm) = parms;
8486 parms = parm;
8488 /* Allocate space to hold the vptr bit if needed. */
8489 SET_DECL_ALIGN (decl, MINIMUM_METHOD_BOUNDARY);
8492 DECL_ARGUMENTS (decl) = parms;
8493 for (t = parms; t; t = DECL_CHAIN (t))
8494 DECL_CONTEXT (t) = decl;
8496 /* Propagate volatile out from type to decl. */
8497 if (TYPE_VOLATILE (type))
8498 TREE_THIS_VOLATILE (decl) = 1;
8500 /* Setup decl according to sfk. */
8501 switch (sfk)
8503 case sfk_constructor:
8504 case sfk_copy_constructor:
8505 case sfk_move_constructor:
8506 DECL_CXX_CONSTRUCTOR_P (decl) = 1;
8507 DECL_NAME (decl) = ctor_identifier;
8508 break;
8509 case sfk_destructor:
8510 DECL_CXX_DESTRUCTOR_P (decl) = 1;
8511 DECL_NAME (decl) = dtor_identifier;
8512 break;
8513 default:
8514 break;
8517 if (friendp && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8519 if (funcdef_flag)
8520 error ("defining explicit specialization %qD in friend declaration",
8521 orig_declarator);
8522 else
8524 tree fns = TREE_OPERAND (orig_declarator, 0);
8525 tree args = TREE_OPERAND (orig_declarator, 1);
8527 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8529 /* Something like `template <class T> friend void f<T>()'. */
8530 error ("invalid use of template-id %qD in declaration "
8531 "of primary template",
8532 orig_declarator);
8533 return NULL_TREE;
8537 /* A friend declaration of the form friend void f<>(). Record
8538 the information in the TEMPLATE_ID_EXPR. */
8539 SET_DECL_IMPLICIT_INSTANTIATION (decl);
8541 gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
8542 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
8544 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8545 if (TREE_PURPOSE (t)
8546 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8548 error ("default arguments are not allowed in declaration "
8549 "of friend template specialization %qD",
8550 decl);
8551 return NULL_TREE;
8554 if (inlinep & 1)
8556 error ("%<inline%> is not allowed in declaration of friend "
8557 "template specialization %qD",
8558 decl);
8559 return NULL_TREE;
8564 /* If this decl has namespace scope, set that up. */
8565 if (in_namespace)
8566 set_decl_namespace (decl, in_namespace, friendp);
8567 else if (!ctype)
8568 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
8570 /* `main' and builtins have implicit 'C' linkage. */
8571 if (ctype == NULL_TREE
8572 && DECL_FILE_SCOPE_P (decl)
8573 && current_lang_name == lang_name_cplusplus
8574 && (MAIN_NAME_P (declarator)
8575 || (IDENTIFIER_LENGTH (declarator) > 10
8576 && IDENTIFIER_POINTER (declarator)[0] == '_'
8577 && IDENTIFIER_POINTER (declarator)[1] == '_'
8578 && strncmp (IDENTIFIER_POINTER (declarator)+2,
8579 "builtin_", 8) == 0)
8580 || (targetcm.cxx_implicit_extern_c
8581 && (targetcm.cxx_implicit_extern_c
8582 (IDENTIFIER_POINTER (declarator))))))
8583 SET_DECL_LANGUAGE (decl, lang_c);
8585 /* Should probably propagate const out from type to decl I bet (mrs). */
8586 if (staticp)
8588 DECL_STATIC_FUNCTION_P (decl) = 1;
8589 DECL_CONTEXT (decl) = ctype;
8592 if (deletedp)
8593 DECL_DELETED_FN (decl) = 1;
8595 if (ctype)
8597 DECL_CONTEXT (decl) = ctype;
8598 if (funcdef_flag)
8599 check_class_member_definition_namespace (decl);
8602 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8604 if (PROCESSING_REAL_TEMPLATE_DECL_P())
8605 error ("cannot declare %<::main%> to be a template");
8606 if (inlinep & 1)
8607 error ("cannot declare %<::main%> to be inline");
8608 if (inlinep & 2)
8609 error ("cannot declare %<::main%> to be constexpr");
8610 if (!publicp)
8611 error ("cannot declare %<::main%> to be static");
8612 inlinep = 0;
8613 publicp = 1;
8616 /* Members of anonymous types and local classes have no linkage; make
8617 them internal. If a typedef is made later, this will be changed. */
8618 if (ctype && (!TREE_PUBLIC (TYPE_MAIN_DECL (ctype))
8619 || decl_function_context (TYPE_MAIN_DECL (ctype))))
8620 publicp = 0;
8622 if (publicp && cxx_dialect == cxx98)
8624 /* [basic.link]: A name with no linkage (notably, the name of a class
8625 or enumeration declared in a local scope) shall not be used to
8626 declare an entity with linkage.
8628 DR 757 relaxes this restriction for C++0x. */
8629 no_linkage_error (decl);
8632 TREE_PUBLIC (decl) = publicp;
8633 if (! publicp)
8635 DECL_INTERFACE_KNOWN (decl) = 1;
8636 DECL_NOT_REALLY_EXTERN (decl) = 1;
8639 /* If the declaration was declared inline, mark it as such. */
8640 if (inlinep)
8642 DECL_DECLARED_INLINE_P (decl) = 1;
8643 if (publicp)
8644 DECL_COMDAT (decl) = 1;
8646 if (inlinep & 2)
8647 DECL_DECLARED_CONSTEXPR_P (decl) = true;
8649 // If the concept declaration specifier was found, check
8650 // that the declaration satisfies the necessary requirements.
8651 if (concept_p)
8653 DECL_DECLARED_CONCEPT_P (decl) = true;
8654 check_concept_fn (decl);
8657 DECL_EXTERNAL (decl) = 1;
8658 if (TREE_CODE (type) == FUNCTION_TYPE)
8660 if (quals || rqual)
8661 TREE_TYPE (decl) = apply_memfn_quals (TREE_TYPE (decl),
8662 TYPE_UNQUALIFIED,
8663 REF_QUAL_NONE);
8665 if (quals)
8667 error (ctype
8668 ? G_("static member function %qD cannot have cv-qualifier")
8669 : G_("non-member function %qD cannot have cv-qualifier"),
8670 decl);
8671 quals = TYPE_UNQUALIFIED;
8674 if (rqual)
8676 error (ctype
8677 ? G_("static member function %qD cannot have ref-qualifier")
8678 : G_("non-member function %qD cannot have ref-qualifier"),
8679 decl);
8680 rqual = REF_QUAL_NONE;
8684 if (deduction_guide_p (decl))
8686 if (!DECL_NAMESPACE_SCOPE_P (decl))
8688 error_at (location, "deduction guide %qD must be declared at "
8689 "namespace scope", decl);
8690 return NULL_TREE;
8692 if (funcdef_flag)
8693 error_at (location,
8694 "deduction guide %qD must not have a function body", decl);
8696 else if (IDENTIFIER_ANY_OP_P (DECL_NAME (decl))
8697 && !grok_op_properties (decl, /*complain=*/true))
8698 return NULL_TREE;
8699 else if (UDLIT_OPER_P (DECL_NAME (decl)))
8701 bool long_long_unsigned_p;
8702 bool long_double_p;
8703 const char *suffix = NULL;
8704 /* [over.literal]/6: Literal operators shall not have C linkage. */
8705 if (DECL_LANGUAGE (decl) == lang_c)
8707 error ("literal operator with C linkage");
8708 maybe_show_extern_c_location ();
8709 return NULL_TREE;
8712 if (DECL_NAMESPACE_SCOPE_P (decl))
8714 if (!check_literal_operator_args (decl, &long_long_unsigned_p,
8715 &long_double_p))
8717 error ("%qD has invalid argument list", decl);
8718 return NULL_TREE;
8721 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
8722 if (long_long_unsigned_p)
8724 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
8725 warning (0, "integer suffix %qs"
8726 " shadowed by implementation", suffix);
8728 else if (long_double_p)
8730 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
8731 warning (0, "floating point suffix %qs"
8732 " shadowed by implementation", suffix);
8735 else
8737 error ("%qD must be a non-member function", decl);
8738 return NULL_TREE;
8742 if (funcdef_flag)
8743 /* Make the init_value nonzero so pushdecl knows this is not
8744 tentative. error_mark_node is replaced later with the BLOCK. */
8745 DECL_INITIAL (decl) = error_mark_node;
8747 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
8748 TREE_NOTHROW (decl) = 1;
8750 if (flag_openmp || flag_openmp_simd || flag_cilkplus)
8752 /* Adjust "omp declare simd" attributes. */
8753 tree ods = lookup_attribute ("omp declare simd", *attrlist);
8754 if (ods)
8756 tree attr;
8757 for (attr = ods; attr;
8758 attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
8760 if (TREE_CODE (type) == METHOD_TYPE)
8761 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
8762 DECL_ARGUMENTS (decl), NULL);
8763 if (TREE_VALUE (attr) != NULL_TREE)
8765 tree cl = TREE_VALUE (TREE_VALUE (attr));
8766 cl = c_omp_declare_simd_clauses_to_numbers
8767 (DECL_ARGUMENTS (decl), cl);
8768 if (cl)
8769 TREE_VALUE (TREE_VALUE (attr)) = cl;
8770 else
8771 TREE_VALUE (attr) = NULL_TREE;
8777 /* Caller will do the rest of this. */
8778 if (check < 0)
8779 return decl;
8781 if (ctype != NULL_TREE)
8782 grokclassfn (ctype, decl, flags);
8784 /* 12.4/3 */
8785 if (cxx_dialect >= cxx11
8786 && DECL_DESTRUCTOR_P (decl)
8787 && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
8788 && !processing_template_decl)
8789 deduce_noexcept_on_destructor (decl);
8791 decl = check_explicit_specialization (orig_declarator, decl,
8792 template_count,
8793 2 * funcdef_flag +
8794 4 * (friendp != 0) +
8795 8 * concept_p);
8796 if (decl == error_mark_node)
8797 return NULL_TREE;
8799 if (DECL_STATIC_FUNCTION_P (decl))
8800 check_static_quals (decl, quals);
8802 if (attrlist)
8804 cplus_decl_attributes (&decl, *attrlist, 0);
8805 *attrlist = NULL_TREE;
8808 /* Check main's type after attributes have been applied. */
8809 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8811 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
8812 integer_type_node))
8814 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
8815 tree newtype;
8816 error ("%<::main%> must return %<int%>");
8817 newtype = build_function_type (integer_type_node, oldtypeargs);
8818 TREE_TYPE (decl) = newtype;
8820 if (warn_main)
8821 check_main_parameter_types (decl);
8824 if (ctype != NULL_TREE && check)
8826 tree old_decl = check_classfn (ctype, decl,
8827 (processing_template_decl
8828 > template_class_depth (ctype))
8829 ? current_template_parms
8830 : NULL_TREE);
8832 if (old_decl == error_mark_node)
8833 return NULL_TREE;
8835 if (old_decl)
8837 tree ok;
8838 tree pushed_scope;
8840 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
8841 /* Because grokfndecl is always supposed to return a
8842 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
8843 here. We depend on our callers to figure out that its
8844 really a template that's being returned. */
8845 old_decl = DECL_TEMPLATE_RESULT (old_decl);
8847 if (DECL_STATIC_FUNCTION_P (old_decl)
8848 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8850 /* Remove the `this' parm added by grokclassfn. */
8851 revert_static_member_fn (decl);
8852 check_static_quals (decl, quals);
8854 if (DECL_ARTIFICIAL (old_decl))
8856 error ("definition of implicitly-declared %qD", old_decl);
8857 return NULL_TREE;
8859 else if (DECL_DEFAULTED_FN (old_decl))
8861 error ("definition of explicitly-defaulted %q+D", decl);
8862 inform (DECL_SOURCE_LOCATION (old_decl),
8863 "%q#D explicitly defaulted here", old_decl);
8864 return NULL_TREE;
8867 /* Since we've smashed OLD_DECL to its
8868 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
8869 if (TREE_CODE (decl) == TEMPLATE_DECL)
8870 decl = DECL_TEMPLATE_RESULT (decl);
8872 /* Attempt to merge the declarations. This can fail, in
8873 the case of some invalid specialization declarations. */
8874 pushed_scope = push_scope (ctype);
8875 ok = duplicate_decls (decl, old_decl, friendp);
8876 if (pushed_scope)
8877 pop_scope (pushed_scope);
8878 if (!ok)
8880 error ("no %q#D member function declared in class %qT",
8881 decl, ctype);
8882 return NULL_TREE;
8884 if (ok == error_mark_node)
8885 return NULL_TREE;
8886 return old_decl;
8890 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
8891 return NULL_TREE;
8893 if (ctype == NULL_TREE || check)
8894 return decl;
8896 if (virtualp)
8897 DECL_VIRTUAL_P (decl) = 1;
8899 return decl;
8902 /* decl is a FUNCTION_DECL.
8903 specifiers are the parsed virt-specifiers.
8905 Set flags to reflect the virt-specifiers.
8907 Returns decl. */
8909 static tree
8910 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
8912 if (decl == NULL_TREE)
8913 return decl;
8914 if (specifiers & VIRT_SPEC_OVERRIDE)
8915 DECL_OVERRIDE_P (decl) = 1;
8916 if (specifiers & VIRT_SPEC_FINAL)
8917 DECL_FINAL_P (decl) = 1;
8918 return decl;
8921 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
8922 the linkage that DECL will receive in the object file. */
8924 static void
8925 set_linkage_for_static_data_member (tree decl)
8927 /* A static data member always has static storage duration and
8928 external linkage. Note that static data members are forbidden in
8929 local classes -- the only situation in which a class has
8930 non-external linkage. */
8931 TREE_PUBLIC (decl) = 1;
8932 TREE_STATIC (decl) = 1;
8933 /* For non-template classes, static data members are always put
8934 out in exactly those files where they are defined, just as
8935 with ordinary namespace-scope variables. */
8936 if (!processing_template_decl)
8937 DECL_INTERFACE_KNOWN (decl) = 1;
8940 /* Create a VAR_DECL named NAME with the indicated TYPE.
8942 If SCOPE is non-NULL, it is the class type or namespace containing
8943 the variable. If SCOPE is NULL, the variable should is created in
8944 the innermost enclosing scope. */
8946 static tree
8947 grokvardecl (tree type,
8948 tree name,
8949 tree orig_declarator,
8950 const cp_decl_specifier_seq *declspecs,
8951 int initialized,
8952 int type_quals,
8953 int inlinep,
8954 bool conceptp,
8955 int template_count,
8956 tree scope)
8958 tree decl;
8959 tree explicit_scope;
8961 gcc_assert (!name || identifier_p (name));
8963 bool constp = (type_quals & TYPE_QUAL_CONST) != 0;
8964 bool volatilep = (type_quals & TYPE_QUAL_VOLATILE) != 0;
8966 /* Compute the scope in which to place the variable, but remember
8967 whether or not that scope was explicitly specified by the user. */
8968 explicit_scope = scope;
8969 if (!scope)
8971 /* An explicit "extern" specifier indicates a namespace-scope
8972 variable. */
8973 if (declspecs->storage_class == sc_extern)
8974 scope = current_decl_namespace ();
8975 else if (!at_function_scope_p ())
8976 scope = current_scope ();
8979 if (scope
8980 && (/* If the variable is a namespace-scope variable declared in a
8981 template, we need DECL_LANG_SPECIFIC. */
8982 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
8983 /* Similarly for namespace-scope variables with language linkage
8984 other than C++. */
8985 || (TREE_CODE (scope) == NAMESPACE_DECL
8986 && current_lang_name != lang_name_cplusplus)
8987 /* Similarly for static data members. */
8988 || TYPE_P (scope)
8989 /* Similarly for explicit specializations. */
8990 || (orig_declarator
8991 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
8992 decl = build_lang_decl (VAR_DECL, name, type);
8993 else
8994 decl = build_decl (input_location, VAR_DECL, name, type);
8996 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
8997 set_decl_namespace (decl, explicit_scope, 0);
8998 else
8999 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
9001 if (declspecs->storage_class == sc_extern)
9003 DECL_THIS_EXTERN (decl) = 1;
9004 DECL_EXTERNAL (decl) = !initialized;
9007 if (DECL_CLASS_SCOPE_P (decl))
9009 set_linkage_for_static_data_member (decl);
9010 /* This function is only called with out-of-class definitions. */
9011 DECL_EXTERNAL (decl) = 0;
9012 check_class_member_definition_namespace (decl);
9014 /* At top level, either `static' or no s.c. makes a definition
9015 (perhaps tentative), and absence of `static' makes it public. */
9016 else if (toplevel_bindings_p ())
9018 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
9019 && (DECL_THIS_EXTERN (decl)
9020 || ! constp
9021 || volatilep
9022 || inlinep));
9023 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9025 /* Not at top level, only `static' makes a static definition. */
9026 else
9028 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
9029 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9032 if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
9034 if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
9036 CP_DECL_THREAD_LOCAL_P (decl) = true;
9037 if (!processing_template_decl)
9038 set_decl_tls_model (decl, decl_default_tls_model (decl));
9040 if (declspecs->gnu_thread_keyword_p)
9041 SET_DECL_GNU_TLS_P (decl);
9044 /* If the type of the decl has no linkage, make sure that we'll
9045 notice that in mark_used. */
9046 if (cxx_dialect > cxx98
9047 && decl_linkage (decl) != lk_none
9048 && DECL_LANG_SPECIFIC (decl) == NULL
9049 && !DECL_EXTERN_C_P (decl)
9050 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
9051 retrofit_lang_decl (decl);
9053 if (TREE_PUBLIC (decl))
9055 /* [basic.link]: A name with no linkage (notably, the name of a class
9056 or enumeration declared in a local scope) shall not be used to
9057 declare an entity with linkage.
9059 DR 757 relaxes this restriction for C++0x. */
9060 if (cxx_dialect < cxx11)
9061 no_linkage_error (decl);
9063 else
9064 DECL_INTERFACE_KNOWN (decl) = 1;
9066 if (DECL_NAME (decl)
9067 && MAIN_NAME_P (DECL_NAME (decl))
9068 && scope == global_namespace)
9069 error ("cannot declare %<::main%> to be a global variable");
9071 /* Check that the variable can be safely declared as a concept.
9072 Note that this also forbids explicit specializations. */
9073 if (conceptp)
9075 if (!processing_template_decl)
9077 error ("a non-template variable cannot be %<concept%>");
9078 return NULL_TREE;
9080 else
9081 DECL_DECLARED_CONCEPT_P (decl) = true;
9082 if (!same_type_ignoring_top_level_qualifiers_p (type, boolean_type_node))
9083 error_at (declspecs->locations[ds_type_spec],
9084 "concept must have type %<bool%>");
9086 else if (flag_concepts
9087 && processing_template_decl > template_class_depth (scope))
9089 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
9090 tree ci = build_constraints (reqs, NULL_TREE);
9091 set_constraints (decl, ci);
9094 // Handle explicit specializations and instantiations of variable templates.
9095 if (orig_declarator)
9096 decl = check_explicit_specialization (orig_declarator, decl,
9097 template_count, conceptp * 8);
9099 return decl != error_mark_node ? decl : NULL_TREE;
9102 /* Create and return a canonical pointer to member function type, for
9103 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
9105 tree
9106 build_ptrmemfunc_type (tree type)
9108 tree field, fields;
9109 tree t;
9111 if (type == error_mark_node)
9112 return type;
9114 /* Make sure that we always have the unqualified pointer-to-member
9115 type first. */
9116 if (cp_cv_quals quals = cp_type_quals (type))
9118 tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9119 return cp_build_qualified_type (unqual, quals);
9122 /* If a canonical type already exists for this type, use it. We use
9123 this method instead of type_hash_canon, because it only does a
9124 simple equality check on the list of field members. */
9126 t = TYPE_PTRMEMFUNC_TYPE (type);
9127 if (t)
9128 return t;
9130 t = make_node (RECORD_TYPE);
9132 /* Let the front end know this is a pointer to member function. */
9133 TYPE_PTRMEMFUNC_FLAG (t) = 1;
9135 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
9136 fields = field;
9138 field = build_decl (input_location, FIELD_DECL, delta_identifier,
9139 delta_type_node);
9140 DECL_CHAIN (field) = fields;
9141 fields = field;
9143 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
9145 /* Zap out the name so that the back end will give us the debugging
9146 information for this anonymous RECORD_TYPE. */
9147 TYPE_NAME (t) = NULL_TREE;
9149 /* Cache this pointer-to-member type so that we can find it again
9150 later. */
9151 TYPE_PTRMEMFUNC_TYPE (type) = t;
9153 if (TYPE_STRUCTURAL_EQUALITY_P (type))
9154 SET_TYPE_STRUCTURAL_EQUALITY (t);
9155 else if (TYPE_CANONICAL (type) != type)
9156 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
9158 return t;
9161 /* Create and return a pointer to data member type. */
9163 tree
9164 build_ptrmem_type (tree class_type, tree member_type)
9166 if (TREE_CODE (member_type) == METHOD_TYPE)
9168 cp_cv_quals quals = type_memfn_quals (member_type);
9169 cp_ref_qualifier rqual = type_memfn_rqual (member_type);
9170 member_type = build_memfn_type (member_type, class_type, quals, rqual);
9171 return build_ptrmemfunc_type (build_pointer_type (member_type));
9173 else
9175 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
9176 return build_offset_type (class_type, member_type);
9180 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9181 Check to see that the definition is valid. Issue appropriate error
9182 messages. Return 1 if the definition is particularly bad, or 0
9183 otherwise. */
9185 static int
9186 check_static_variable_definition (tree decl, tree type)
9188 /* Avoid redundant diagnostics on out-of-class definitions. */
9189 if (!current_class_type || !TYPE_BEING_DEFINED (current_class_type))
9190 return 0;
9191 /* Can't check yet if we don't know the type. */
9192 if (dependent_type_p (type))
9193 return 0;
9194 /* If DECL is declared constexpr, we'll do the appropriate checks
9195 in check_initializer. Similarly for inline static data members. */
9196 if (DECL_P (decl)
9197 && (DECL_DECLARED_CONSTEXPR_P (decl)
9198 || DECL_VAR_DECLARED_INLINE_P (decl)))
9199 return 0;
9200 else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9202 if (!COMPLETE_TYPE_P (type))
9203 error_at (DECL_SOURCE_LOCATION (decl),
9204 "in-class initialization of static data member %q#D of "
9205 "incomplete type", decl);
9206 else if (literal_type_p (type))
9207 permerror (DECL_SOURCE_LOCATION (decl),
9208 "%<constexpr%> needed for in-class initialization of "
9209 "static data member %q#D of non-integral type", decl);
9210 else
9211 error_at (DECL_SOURCE_LOCATION (decl),
9212 "in-class initialization of static data member %q#D of "
9213 "non-literal type", decl);
9214 return 1;
9217 /* Motion 10 at San Diego: If a static const integral data member is
9218 initialized with an integral constant expression, the initializer
9219 may appear either in the declaration (within the class), or in
9220 the definition, but not both. If it appears in the class, the
9221 member is a member constant. The file-scope definition is always
9222 required. */
9223 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
9225 error_at (DECL_SOURCE_LOCATION (decl),
9226 "invalid in-class initialization of static data member "
9227 "of non-integral type %qT",
9228 type);
9229 return 1;
9231 else if (!CP_TYPE_CONST_P (type))
9232 error_at (DECL_SOURCE_LOCATION (decl),
9233 "ISO C++ forbids in-class initialization of non-const "
9234 "static member %qD",
9235 decl);
9236 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9237 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
9238 "ISO C++ forbids initialization of member constant "
9239 "%qD of non-integral type %qT", decl, type);
9241 return 0;
9244 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
9245 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
9246 expressions out into temporary variables so that walk_tree doesn't
9247 step into them (c++/15764). */
9249 static tree
9250 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
9252 hash_set<tree> *pset = (hash_set<tree> *)data;
9253 tree expr = *expr_p;
9254 if (TREE_CODE (expr) == SAVE_EXPR)
9256 tree op = TREE_OPERAND (expr, 0);
9257 cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
9258 if (TREE_SIDE_EFFECTS (op))
9259 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
9260 *walk_subtrees = 0;
9262 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
9263 *walk_subtrees = 0;
9264 return NULL;
9267 /* Entry point for the above. */
9269 static void
9270 stabilize_vla_size (tree size)
9272 hash_set<tree> pset;
9273 /* Break out any function calls into temporary variables. */
9274 cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
9277 /* Reduce a SIZEOF_EXPR to its value. */
9279 tree
9280 fold_sizeof_expr (tree t)
9282 tree r;
9283 if (SIZEOF_EXPR_TYPE_P (t))
9284 r = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (t, 0)),
9285 SIZEOF_EXPR, false);
9286 else if (TYPE_P (TREE_OPERAND (t, 0)))
9287 r = cxx_sizeof_or_alignof_type (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9288 false);
9289 else
9290 r = cxx_sizeof_or_alignof_expr (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9291 false);
9292 if (r == error_mark_node)
9293 r = size_one_node;
9294 return r;
9297 /* Given the SIZE (i.e., number of elements) in an array, compute
9298 an appropriate index type for the array. If non-NULL, NAME is
9299 the name of the entity being declared. */
9301 tree
9302 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
9304 tree itype;
9305 tree osize = size;
9307 if (error_operand_p (size))
9308 return error_mark_node;
9310 if (!type_dependent_expression_p (size))
9312 tree type = TREE_TYPE (size);
9314 size = mark_rvalue_use (size);
9316 if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
9317 && TREE_SIDE_EFFECTS (size))
9318 /* In C++98, we mark a non-constant array bound with a magic
9319 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
9320 else
9322 size = instantiate_non_dependent_expr_sfinae (size, complain);
9324 if (CLASS_TYPE_P (type)
9325 && CLASSTYPE_LITERAL_P (type))
9327 size = build_expr_type_conversion (WANT_INT, size, true);
9328 if (!size)
9330 if (!(complain & tf_error))
9331 return error_mark_node;
9332 if (name)
9333 error ("size of array %qD has non-integral type %qT",
9334 name, type);
9335 else
9336 error ("size of array has non-integral type %qT", type);
9337 size = integer_one_node;
9339 if (size == error_mark_node)
9340 return error_mark_node;
9341 type = TREE_TYPE (size);
9344 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
9345 size = maybe_constant_value (size);
9347 if (!TREE_CONSTANT (size))
9348 size = osize;
9351 if (error_operand_p (size))
9352 return error_mark_node;
9354 /* The array bound must be an integer type. */
9355 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
9357 if (!(complain & tf_error))
9358 return error_mark_node;
9359 if (name)
9360 error ("size of array %qD has non-integral type %qT", name, type);
9361 else
9362 error ("size of array has non-integral type %qT", type);
9363 size = integer_one_node;
9364 type = TREE_TYPE (size);
9368 /* A type is dependent if it is...an array type constructed from any
9369 dependent type or whose size is specified by a constant expression
9370 that is value-dependent. */
9371 /* We can only call value_dependent_expression_p on integral constant
9372 expressions; treat non-constant expressions as dependent, too. */
9373 if (processing_template_decl
9374 && (type_dependent_expression_p (size)
9375 || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
9377 /* We cannot do any checking for a SIZE that isn't known to be
9378 constant. Just build the index type and mark that it requires
9379 structural equality checks. */
9380 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
9381 size, size_one_node));
9382 TYPE_DEPENDENT_P (itype) = 1;
9383 TYPE_DEPENDENT_P_VALID (itype) = 1;
9384 SET_TYPE_STRUCTURAL_EQUALITY (itype);
9385 return itype;
9388 if (TREE_CODE (size) != INTEGER_CST)
9390 tree folded = cp_fully_fold (size);
9391 if (TREE_CODE (folded) == INTEGER_CST)
9392 pedwarn (location_of (size), OPT_Wpedantic,
9393 "size of array is not an integral constant-expression");
9394 /* Use the folded result for VLAs, too; it will have resolved
9395 SIZEOF_EXPR. */
9396 size = folded;
9399 /* Normally, the array-bound will be a constant. */
9400 if (TREE_CODE (size) == INTEGER_CST)
9402 /* Check to see if the array bound overflowed. Make that an
9403 error, no matter how generous we're being. */
9404 constant_expression_error (size);
9406 /* An array must have a positive number of elements. */
9407 if (tree_int_cst_lt (size, integer_zero_node))
9409 if (!(complain & tf_error))
9410 return error_mark_node;
9411 if (name)
9412 error ("size of array %qD is negative", name);
9413 else
9414 error ("size of array is negative");
9415 size = integer_one_node;
9417 /* As an extension we allow zero-sized arrays. */
9418 else if (integer_zerop (size))
9420 if (!(complain & tf_error))
9421 /* We must fail if performing argument deduction (as
9422 indicated by the state of complain), so that
9423 another substitution can be found. */
9424 return error_mark_node;
9425 else if (in_system_header_at (input_location))
9426 /* Allow them in system headers because glibc uses them. */;
9427 else if (name)
9428 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
9429 else
9430 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
9433 else if (TREE_CONSTANT (size)
9434 /* We don't allow VLAs at non-function scopes, or during
9435 tentative template substitution. */
9436 || !at_function_scope_p ()
9437 || !(complain & tf_error))
9439 if (!(complain & tf_error))
9440 return error_mark_node;
9441 /* `(int) &fn' is not a valid array bound. */
9442 if (name)
9443 error ("size of array %qD is not an integral constant-expression",
9444 name);
9445 else
9446 error ("size of array is not an integral constant-expression");
9447 size = integer_one_node;
9449 else if (pedantic && warn_vla != 0)
9451 if (name)
9452 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
9453 else
9454 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
9456 else if (warn_vla > 0)
9458 if (name)
9459 warning (OPT_Wvla,
9460 "variable length array %qD is used", name);
9461 else
9462 warning (OPT_Wvla,
9463 "variable length array is used");
9466 if (processing_template_decl && !TREE_CONSTANT (size))
9467 /* A variable sized array. */
9468 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
9469 else
9471 /* Compute the index of the largest element in the array. It is
9472 one less than the number of elements in the array. We save
9473 and restore PROCESSING_TEMPLATE_DECL so that computations in
9474 cp_build_binary_op will be appropriately folded. */
9476 processing_template_decl_sentinel s;
9477 itype = cp_build_binary_op (input_location,
9478 MINUS_EXPR,
9479 cp_convert (ssizetype, size, complain),
9480 cp_convert (ssizetype, integer_one_node,
9481 complain),
9482 complain);
9483 itype = maybe_constant_value (itype);
9486 if (!TREE_CONSTANT (itype))
9488 /* A variable sized array. */
9489 itype = variable_size (itype);
9491 stabilize_vla_size (itype);
9493 if (sanitize_flags_p (SANITIZE_VLA)
9494 && current_function_decl != NULL_TREE)
9496 /* We have to add 1 -- in the ubsan routine we generate
9497 LE_EXPR rather than LT_EXPR. */
9498 tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
9499 build_one_cst (TREE_TYPE (itype)));
9500 t = ubsan_instrument_vla (input_location, t);
9501 finish_expr_stmt (t);
9504 /* Make sure that there was no overflow when creating to a signed
9505 index type. (For example, on a 32-bit machine, an array with
9506 size 2^32 - 1 is too big.) */
9507 else if (TREE_CODE (itype) == INTEGER_CST
9508 && TREE_OVERFLOW (itype))
9510 if (!(complain & tf_error))
9511 return error_mark_node;
9512 error ("overflow in array dimension");
9513 TREE_OVERFLOW (itype) = 0;
9517 /* Create and return the appropriate index type. */
9518 itype = build_index_type (itype);
9520 /* If the index type were dependent, we would have returned early, so
9521 remember that it isn't. */
9522 TYPE_DEPENDENT_P (itype) = 0;
9523 TYPE_DEPENDENT_P_VALID (itype) = 1;
9524 return itype;
9527 /* Returns the scope (if any) in which the entity declared by
9528 DECLARATOR will be located. If the entity was declared with an
9529 unqualified name, NULL_TREE is returned. */
9531 tree
9532 get_scope_of_declarator (const cp_declarator *declarator)
9534 while (declarator && declarator->kind != cdk_id)
9535 declarator = declarator->declarator;
9537 /* If the declarator-id is a SCOPE_REF, the scope in which the
9538 declaration occurs is the first operand. */
9539 if (declarator
9540 && declarator->u.id.qualifying_scope)
9541 return declarator->u.id.qualifying_scope;
9543 /* Otherwise, the declarator is not a qualified name; the entity will
9544 be declared in the current scope. */
9545 return NULL_TREE;
9548 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
9549 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9550 with this type. */
9552 static tree
9553 create_array_type_for_decl (tree name, tree type, tree size)
9555 tree itype = NULL_TREE;
9557 /* If things have already gone awry, bail now. */
9558 if (type == error_mark_node || size == error_mark_node)
9559 return error_mark_node;
9561 /* 8.3.4/1: If the type of the identifier of D contains the auto
9562 type-specifier, the program is ill-formed. */
9563 if (type_uses_auto (type))
9565 error ("%qD declared as array of %qT", name, type);
9566 return error_mark_node;
9569 /* If there are some types which cannot be array elements,
9570 issue an error-message and return. */
9571 switch (TREE_CODE (type))
9573 case VOID_TYPE:
9574 if (name)
9575 error ("declaration of %qD as array of void", name);
9576 else
9577 error ("creating array of void");
9578 return error_mark_node;
9580 case FUNCTION_TYPE:
9581 if (name)
9582 error ("declaration of %qD as array of functions", name);
9583 else
9584 error ("creating array of functions");
9585 return error_mark_node;
9587 case REFERENCE_TYPE:
9588 if (name)
9589 error ("declaration of %qD as array of references", name);
9590 else
9591 error ("creating array of references");
9592 return error_mark_node;
9594 case METHOD_TYPE:
9595 if (name)
9596 error ("declaration of %qD as array of function members", name);
9597 else
9598 error ("creating array of function members");
9599 return error_mark_node;
9601 default:
9602 break;
9605 /* [dcl.array]
9607 The constant expressions that specify the bounds of the arrays
9608 can be omitted only for the first member of the sequence. */
9609 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9611 if (name)
9612 error ("declaration of %qD as multidimensional array must "
9613 "have bounds for all dimensions except the first",
9614 name);
9615 else
9616 error ("multidimensional array must have bounds for all "
9617 "dimensions except the first");
9619 return error_mark_node;
9622 /* Figure out the index type for the array. */
9623 if (size)
9624 itype = compute_array_index_type (name, size, tf_warning_or_error);
9626 /* [dcl.array]
9627 T is called the array element type; this type shall not be [...] an
9628 abstract class type. */
9629 abstract_virtuals_error (name, type);
9631 return build_cplus_array_type (type, itype);
9634 /* Returns the smallest location != UNKNOWN_LOCATION among the
9635 three stored in LOCATIONS[ds_const], LOCATIONS[ds_volatile],
9636 and LOCATIONS[ds_restrict]. */
9638 static location_t
9639 smallest_type_quals_location (int type_quals, const location_t* locations)
9641 location_t loc = UNKNOWN_LOCATION;
9643 if (type_quals & TYPE_QUAL_CONST)
9644 loc = locations[ds_const];
9646 if ((type_quals & TYPE_QUAL_VOLATILE)
9647 && (loc == UNKNOWN_LOCATION || locations[ds_volatile] < loc))
9648 loc = locations[ds_volatile];
9650 if ((type_quals & TYPE_QUAL_RESTRICT)
9651 && (loc == UNKNOWN_LOCATION || locations[ds_restrict] < loc))
9652 loc = locations[ds_restrict];
9654 return loc;
9657 /* Check that it's OK to declare a function with the indicated TYPE
9658 and TYPE_QUALS. SFK indicates the kind of special function (if any)
9659 that this function is. OPTYPE is the type given in a conversion
9660 operator declaration, or the class type for a constructor/destructor.
9661 Returns the actual return type of the function; that may be different
9662 than TYPE if an error occurs, or for certain special functions. */
9664 static tree
9665 check_special_function_return_type (special_function_kind sfk,
9666 tree type,
9667 tree optype,
9668 int type_quals,
9669 const location_t* locations)
9671 switch (sfk)
9673 case sfk_constructor:
9674 if (type)
9675 error ("return type specification for constructor invalid");
9676 else if (type_quals != TYPE_UNQUALIFIED)
9677 error_at (smallest_type_quals_location (type_quals, locations),
9678 "qualifiers are not allowed on constructor declaration");
9680 if (targetm.cxx.cdtor_returns_this ())
9681 type = build_pointer_type (optype);
9682 else
9683 type = void_type_node;
9684 break;
9686 case sfk_destructor:
9687 if (type)
9688 error ("return type specification for destructor invalid");
9689 else if (type_quals != TYPE_UNQUALIFIED)
9690 error_at (smallest_type_quals_location (type_quals, locations),
9691 "qualifiers are not allowed on destructor declaration");
9693 /* We can't use the proper return type here because we run into
9694 problems with ambiguous bases and covariant returns. */
9695 if (targetm.cxx.cdtor_returns_this ())
9696 type = build_pointer_type (void_type_node);
9697 else
9698 type = void_type_node;
9699 break;
9701 case sfk_conversion:
9702 if (type)
9703 error ("return type specified for %<operator %T%>", optype);
9704 else if (type_quals != TYPE_UNQUALIFIED)
9705 error_at (smallest_type_quals_location (type_quals, locations),
9706 "qualifiers are not allowed on declaration of "
9707 "%<operator %T%>", optype);
9709 type = optype;
9710 break;
9712 case sfk_deduction_guide:
9713 if (type)
9714 error ("return type specified for deduction guide");
9715 else if (type_quals != TYPE_UNQUALIFIED)
9716 error_at (smallest_type_quals_location (type_quals, locations),
9717 "qualifiers are not allowed on declaration of "
9718 "deduction guide");
9719 type = make_template_placeholder (CLASSTYPE_TI_TEMPLATE (optype));
9720 for (int i = 0; i < ds_last; ++i)
9721 if (i != ds_explicit && locations[i])
9722 error_at (locations[i],
9723 "decl-specifier in declaration of deduction guide");
9724 break;
9726 default:
9727 gcc_unreachable ();
9730 return type;
9733 /* A variable or data member (whose unqualified name is IDENTIFIER)
9734 has been declared with the indicated TYPE. If the TYPE is not
9735 acceptable, issue an error message and return a type to use for
9736 error-recovery purposes. */
9738 tree
9739 check_var_type (tree identifier, tree type)
9741 if (VOID_TYPE_P (type))
9743 if (!identifier)
9744 error ("unnamed variable or field declared void");
9745 else if (identifier_p (identifier))
9747 gcc_assert (!IDENTIFIER_ANY_OP_P (identifier));
9748 error ("variable or field %qE declared void", identifier);
9750 else
9751 error ("variable or field declared void");
9752 type = error_mark_node;
9755 return type;
9758 /* Handle declaring DECL as an inline variable. */
9760 static void
9761 mark_inline_variable (tree decl)
9763 bool inlinep = true;
9764 if (! toplevel_bindings_p ())
9766 error ("%<inline%> specifier invalid for variable "
9767 "%qD declared at block scope", decl);
9768 inlinep = false;
9770 else if (cxx_dialect < cxx17)
9771 pedwarn (DECL_SOURCE_LOCATION (decl), 0,
9772 "inline variables are only available "
9773 "with -std=c++17 or -std=gnu++17");
9774 if (inlinep)
9776 retrofit_lang_decl (decl);
9777 SET_DECL_VAR_DECLARED_INLINE_P (decl);
9782 /* Assign a typedef-given name to a class or enumeration type declared
9783 as anonymous at first. This was split out of grokdeclarator
9784 because it is also used in libcc1. */
9786 void
9787 name_unnamed_type (tree type, tree decl)
9789 gcc_assert (TYPE_UNNAMED_P (type));
9791 /* Replace the anonymous name with the real name everywhere. */
9792 for (tree t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
9794 if (anon_aggrname_p (TYPE_IDENTIFIER (t)))
9795 /* We do not rename the debug info representing the
9796 unnamed tagged type because the standard says in
9797 [dcl.typedef] that the naming applies only for
9798 linkage purposes. */
9799 /*debug_hooks->set_name (t, decl);*/
9800 TYPE_NAME (t) = decl;
9803 if (TYPE_LANG_SPECIFIC (type))
9804 TYPE_WAS_UNNAMED (type) = 1;
9806 /* If this is a typedef within a template class, the nested
9807 type is a (non-primary) template. The name for the
9808 template needs updating as well. */
9809 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
9810 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
9811 = TYPE_IDENTIFIER (type);
9813 /* Adjust linkage now that we aren't unnamed anymore. */
9814 reset_type_linkage (type);
9816 /* FIXME remangle member functions; member functions of a
9817 type with external linkage have external linkage. */
9819 /* Check that our job is done, and that it would fail if we
9820 attempted to do it again. */
9821 gcc_assert (!TYPE_UNNAMED_P (type));
9824 /* Given declspecs and a declarator (abstract or otherwise), determine
9825 the name and type of the object declared and construct a DECL node
9826 for it.
9828 DECLSPECS points to the representation of declaration-specifier
9829 sequence that precedes declarator.
9831 DECL_CONTEXT says which syntactic context this declaration is in:
9832 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9833 FUNCDEF for a function definition. Like NORMAL but a few different
9834 error messages in each case. Return value may be zero meaning
9835 this definition is too screwy to try to parse.
9836 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
9837 handle member functions (which have FIELD context).
9838 Return value may be zero meaning this definition is too screwy to
9839 try to parse.
9840 PARM for a parameter declaration (either within a function prototype
9841 or before a function body). Make a PARM_DECL, or return void_type_node.
9842 TPARM for a template parameter declaration.
9843 CATCHPARM for a parameter declaration before a catch clause.
9844 TYPENAME if for a typename (in a cast or sizeof).
9845 Don't make a DECL node; just return the ..._TYPE node.
9846 FIELD for a struct or union field; make a FIELD_DECL.
9847 BITFIELD for a field with specified width.
9849 INITIALIZED is as for start_decl.
9851 ATTRLIST is a pointer to the list of attributes, which may be NULL
9852 if there are none; *ATTRLIST may be modified if attributes from inside
9853 the declarator should be applied to the declaration.
9855 When this function is called, scoping variables (such as
9856 CURRENT_CLASS_TYPE) should reflect the scope in which the
9857 declaration occurs, not the scope in which the new declaration will
9858 be placed. For example, on:
9860 void S::f() { ... }
9862 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
9863 should not be `S'.
9865 Returns a DECL (if a declarator is present), a TYPE (if there is no
9866 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
9867 error occurs. */
9869 tree
9870 grokdeclarator (const cp_declarator *declarator,
9871 cp_decl_specifier_seq *declspecs,
9872 enum decl_context decl_context,
9873 int initialized,
9874 tree* attrlist)
9876 tree type = NULL_TREE;
9877 int longlong = 0;
9878 int explicit_intN = 0;
9879 int virtualp, explicitp, friendp, inlinep, staticp;
9880 int explicit_int = 0;
9881 int explicit_char = 0;
9882 int defaulted_int = 0;
9884 tree typedef_decl = NULL_TREE;
9885 const char *name = NULL;
9886 tree typedef_type = NULL_TREE;
9887 /* True if this declarator is a function definition. */
9888 bool funcdef_flag = false;
9889 cp_declarator_kind innermost_code = cdk_error;
9890 int bitfield = 0;
9891 #if 0
9892 /* See the code below that used this. */
9893 tree decl_attr = NULL_TREE;
9894 #endif
9896 /* Keep track of what sort of function is being processed
9897 so that we can warn about default return values, or explicit
9898 return values which do not match prescribed defaults. */
9899 special_function_kind sfk = sfk_none;
9901 tree dname = NULL_TREE;
9902 tree ctor_return_type = NULL_TREE;
9903 enum overload_flags flags = NO_SPECIAL;
9904 /* cv-qualifiers that apply to the declarator, for a declaration of
9905 a member function. */
9906 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
9907 /* virt-specifiers that apply to the declarator, for a declaration of
9908 a member function. */
9909 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
9910 /* ref-qualifier that applies to the declarator, for a declaration of
9911 a member function. */
9912 cp_ref_qualifier rqual = REF_QUAL_NONE;
9913 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
9914 int type_quals = TYPE_UNQUALIFIED;
9915 tree raises = NULL_TREE;
9916 int template_count = 0;
9917 tree returned_attrs = NULL_TREE;
9918 tree parms = NULL_TREE;
9919 const cp_declarator *id_declarator;
9920 /* The unqualified name of the declarator; either an
9921 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
9922 tree unqualified_id;
9923 /* The class type, if any, in which this entity is located,
9924 or NULL_TREE if none. Note that this value may be different from
9925 the current class type; for example if an attempt is made to declare
9926 "A::f" inside "B", this value will be "A". */
9927 tree ctype = current_class_type;
9928 /* The NAMESPACE_DECL for the namespace in which this entity is
9929 located. If an unqualified name is used to declare the entity,
9930 this value will be NULL_TREE, even if the entity is located at
9931 namespace scope. */
9932 tree in_namespace = NULL_TREE;
9933 cp_storage_class storage_class;
9934 bool unsigned_p, signed_p, short_p, long_p, thread_p;
9935 bool type_was_error_mark_node = false;
9936 bool parameter_pack_p = declarator ? declarator->parameter_pack_p : false;
9937 bool template_type_arg = false;
9938 bool template_parm_flag = false;
9939 bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
9940 bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
9941 bool late_return_type_p = false;
9942 bool array_parameter_p = false;
9943 source_location saved_loc = input_location;
9944 tree reqs = NULL_TREE;
9946 signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
9947 unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
9948 short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
9949 long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
9950 longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
9951 explicit_intN = declspecs->explicit_intN_p;
9952 thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
9954 // Was concept_p specified? Note that ds_concept
9955 // implies ds_constexpr!
9956 bool concept_p = decl_spec_seq_has_spec_p (declspecs, ds_concept);
9957 if (concept_p)
9958 constexpr_p = true;
9960 if (decl_spec_seq_has_spec_p (declspecs, ds_const))
9961 type_quals |= TYPE_QUAL_CONST;
9962 if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
9963 type_quals |= TYPE_QUAL_VOLATILE;
9964 if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
9965 type_quals |= TYPE_QUAL_RESTRICT;
9967 if (decl_context == FUNCDEF)
9968 funcdef_flag = true, decl_context = NORMAL;
9969 else if (decl_context == MEMFUNCDEF)
9970 funcdef_flag = true, decl_context = FIELD;
9971 else if (decl_context == BITFIELD)
9972 bitfield = 1, decl_context = FIELD;
9973 else if (decl_context == TEMPLATE_TYPE_ARG)
9974 template_type_arg = true, decl_context = TYPENAME;
9975 else if (decl_context == TPARM)
9976 template_parm_flag = true, decl_context = PARM;
9978 if (initialized > 1)
9979 funcdef_flag = true;
9981 location_t typespec_loc = smallest_type_quals_location (type_quals,
9982 declspecs->locations);
9983 if (typespec_loc == UNKNOWN_LOCATION)
9984 typespec_loc = declspecs->locations[ds_type_spec];
9985 if (typespec_loc == UNKNOWN_LOCATION)
9986 typespec_loc = input_location;
9988 /* Look inside a declarator for the name being declared
9989 and get it as a string, for an error message. */
9990 for (id_declarator = declarator;
9991 id_declarator;
9992 id_declarator = id_declarator->declarator)
9994 if (id_declarator->kind != cdk_id)
9995 innermost_code = id_declarator->kind;
9997 switch (id_declarator->kind)
9999 case cdk_function:
10000 if (id_declarator->declarator
10001 && id_declarator->declarator->kind == cdk_id)
10003 sfk = id_declarator->declarator->u.id.sfk;
10004 if (sfk == sfk_destructor)
10005 flags = DTOR_FLAG;
10007 break;
10009 case cdk_id:
10011 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
10012 tree decl = id_declarator->u.id.unqualified_name;
10013 if (!decl)
10014 break;
10015 if (qualifying_scope)
10017 if (at_function_scope_p ())
10019 /* [dcl.meaning]
10021 A declarator-id shall not be qualified except
10022 for ...
10024 None of the cases are permitted in block
10025 scope. */
10026 if (qualifying_scope == global_namespace)
10027 error ("invalid use of qualified-name %<::%D%>",
10028 decl);
10029 else if (TYPE_P (qualifying_scope))
10030 error ("invalid use of qualified-name %<%T::%D%>",
10031 qualifying_scope, decl);
10032 else
10033 error ("invalid use of qualified-name %<%D::%D%>",
10034 qualifying_scope, decl);
10035 return error_mark_node;
10037 else if (TYPE_P (qualifying_scope))
10039 ctype = qualifying_scope;
10040 if (!MAYBE_CLASS_TYPE_P (ctype))
10042 error ("%q#T is not a class or a namespace", ctype);
10043 ctype = NULL_TREE;
10045 else if (innermost_code != cdk_function
10046 && current_class_type
10047 && !uniquely_derived_from_p (ctype,
10048 current_class_type))
10050 error ("invalid use of qualified-name %<%T::%D%>",
10051 qualifying_scope, decl);
10052 return error_mark_node;
10055 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
10056 in_namespace = qualifying_scope;
10058 switch (TREE_CODE (decl))
10060 case BIT_NOT_EXPR:
10062 if (innermost_code != cdk_function)
10064 error ("declaration of %qD as non-function", decl);
10065 return error_mark_node;
10067 else if (!qualifying_scope
10068 && !(current_class_type && at_class_scope_p ()))
10070 error ("declaration of %qD as non-member", decl);
10071 return error_mark_node;
10074 tree type = TREE_OPERAND (decl, 0);
10075 if (TYPE_P (type))
10076 type = constructor_name (type);
10077 name = identifier_to_locale (IDENTIFIER_POINTER (type));
10078 dname = decl;
10080 break;
10082 case TEMPLATE_ID_EXPR:
10084 tree fns = TREE_OPERAND (decl, 0);
10086 dname = fns;
10087 if (!identifier_p (dname))
10088 dname = OVL_NAME (dname);
10090 /* Fall through. */
10092 case IDENTIFIER_NODE:
10093 if (identifier_p (decl))
10094 dname = decl;
10096 if (IDENTIFIER_KEYWORD_P (dname))
10098 error ("declarator-id missing; using reserved word %qD",
10099 dname);
10100 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10102 else if (!IDENTIFIER_CONV_OP_P (dname))
10103 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10104 else
10106 gcc_assert (flags == NO_SPECIAL);
10107 flags = TYPENAME_FLAG;
10108 sfk = sfk_conversion;
10109 tree glob = get_global_binding (dname);
10110 if (glob && TREE_CODE (glob) == TYPE_DECL)
10111 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10112 else
10113 name = "<invalid operator>";
10115 break;
10117 default:
10118 gcc_unreachable ();
10120 break;
10123 case cdk_array:
10124 case cdk_pointer:
10125 case cdk_reference:
10126 case cdk_ptrmem:
10127 break;
10129 case cdk_decomp:
10130 name = "structured binding";
10131 break;
10133 case cdk_error:
10134 return error_mark_node;
10136 default:
10137 gcc_unreachable ();
10139 if (id_declarator->kind == cdk_id)
10140 break;
10143 /* [dcl.fct.edf]
10145 The declarator in a function-definition shall have the form
10146 D1 ( parameter-declaration-clause) ... */
10147 if (funcdef_flag && innermost_code != cdk_function)
10149 error ("function definition does not declare parameters");
10150 return error_mark_node;
10153 if (flags == TYPENAME_FLAG
10154 && innermost_code != cdk_function
10155 && ! (ctype && !declspecs->any_specifiers_p))
10157 error ("declaration of %qD as non-function", dname);
10158 return error_mark_node;
10161 if (dname && identifier_p (dname))
10163 if (UDLIT_OPER_P (dname)
10164 && innermost_code != cdk_function)
10166 error ("declaration of %qD as non-function", dname);
10167 return error_mark_node;
10170 if (IDENTIFIER_ANY_OP_P (dname))
10172 if (typedef_p)
10174 error ("declaration of %qD as %<typedef%>", dname);
10175 return error_mark_node;
10177 else if (decl_context == PARM || decl_context == CATCHPARM)
10179 error ("declaration of %qD as parameter", dname);
10180 return error_mark_node;
10185 /* Anything declared one level down from the top level
10186 must be one of the parameters of a function
10187 (because the body is at least two levels down). */
10189 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
10190 by not allowing C++ class definitions to specify their parameters
10191 with xdecls (must be spec.d in the parmlist).
10193 Since we now wait to push a class scope until we are sure that
10194 we are in a legitimate method context, we must set oldcname
10195 explicitly (since current_class_name is not yet alive).
10197 We also want to avoid calling this a PARM if it is in a namespace. */
10199 if (decl_context == NORMAL && !toplevel_bindings_p ())
10201 cp_binding_level *b = current_binding_level;
10202 current_binding_level = b->level_chain;
10203 if (current_binding_level != 0 && toplevel_bindings_p ())
10204 decl_context = PARM;
10205 current_binding_level = b;
10208 if (name == NULL)
10209 name = decl_context == PARM ? "parameter" : "type name";
10211 if (concept_p && typedef_p)
10213 error ("%<concept%> cannot appear in a typedef declaration");
10214 return error_mark_node;
10217 if (constexpr_p && typedef_p)
10219 error ("%<constexpr%> cannot appear in a typedef declaration");
10220 return error_mark_node;
10223 /* If there were multiple types specified in the decl-specifier-seq,
10224 issue an error message. */
10225 if (declspecs->multiple_types_p)
10227 error ("two or more data types in declaration of %qs", name);
10228 return error_mark_node;
10231 if (declspecs->conflicting_specifiers_p)
10233 error ("conflicting specifiers in declaration of %qs", name);
10234 return error_mark_node;
10237 /* Extract the basic type from the decl-specifier-seq. */
10238 type = declspecs->type;
10239 if (type == error_mark_node)
10241 type = NULL_TREE;
10242 type_was_error_mark_node = true;
10244 /* If the entire declaration is itself tagged as deprecated then
10245 suppress reports of deprecated items. */
10246 if (type && TREE_DEPRECATED (type)
10247 && deprecated_state != DEPRECATED_SUPPRESS)
10248 warn_deprecated_use (type, NULL_TREE);
10249 if (type && TREE_CODE (type) == TYPE_DECL)
10251 typedef_decl = type;
10252 type = TREE_TYPE (typedef_decl);
10253 if (TREE_DEPRECATED (type)
10254 && DECL_ARTIFICIAL (typedef_decl)
10255 && deprecated_state != DEPRECATED_SUPPRESS)
10256 warn_deprecated_use (type, NULL_TREE);
10258 /* No type at all: default to `int', and set DEFAULTED_INT
10259 because it was not a user-defined typedef. */
10260 if (type == NULL_TREE)
10262 if (signed_p || unsigned_p || long_p || short_p)
10264 /* These imply 'int'. */
10265 type = integer_type_node;
10266 defaulted_int = 1;
10268 /* If we just have "complex", it is equivalent to "complex double". */
10269 else if (!longlong && !explicit_intN
10270 && decl_spec_seq_has_spec_p (declspecs, ds_complex))
10272 type = double_type_node;
10273 pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
10274 "ISO C++ does not support plain %<complex%> meaning "
10275 "%<double complex%>");
10278 /* Gather flags. */
10279 explicit_int = declspecs->explicit_int_p;
10280 explicit_char = declspecs->explicit_char_p;
10282 #if 0
10283 /* See the code below that used this. */
10284 if (typedef_decl)
10285 decl_attr = DECL_ATTRIBUTES (typedef_decl);
10286 #endif
10287 typedef_type = type;
10289 if (sfk == sfk_conversion || sfk == sfk_deduction_guide)
10290 ctor_return_type = TREE_TYPE (dname);
10291 else
10292 ctor_return_type = ctype;
10294 if (sfk != sfk_none)
10296 type = check_special_function_return_type (sfk, type,
10297 ctor_return_type,
10298 type_quals,
10299 declspecs->locations);
10300 type_quals = TYPE_UNQUALIFIED;
10302 else if (type == NULL_TREE)
10304 int is_main;
10306 explicit_int = -1;
10308 /* We handle `main' specially here, because 'main () { }' is so
10309 common. With no options, it is allowed. With -Wreturn-type,
10310 it is a warning. It is only an error with -pedantic-errors. */
10311 is_main = (funcdef_flag
10312 && dname && identifier_p (dname)
10313 && MAIN_NAME_P (dname)
10314 && ctype == NULL_TREE
10315 && in_namespace == NULL_TREE
10316 && current_namespace == global_namespace);
10318 if (type_was_error_mark_node)
10319 /* We've already issued an error, don't complain more. */;
10320 else if (in_system_header_at (input_location) || flag_ms_extensions)
10321 /* Allow it, sigh. */;
10322 else if (! is_main)
10323 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
10324 else if (pedantic)
10325 pedwarn (input_location, OPT_Wpedantic,
10326 "ISO C++ forbids declaration of %qs with no type", name);
10327 else
10328 warning (OPT_Wreturn_type,
10329 "ISO C++ forbids declaration of %qs with no type", name);
10331 if (type_was_error_mark_node && template_parm_flag)
10332 /* FIXME we should be able to propagate the error_mark_node as is
10333 for other contexts too. */
10334 type = error_mark_node;
10335 else
10336 type = integer_type_node;
10339 ctype = NULL_TREE;
10341 if (explicit_intN)
10343 if (! int_n_enabled_p[declspecs->int_n_idx])
10345 error ("%<__int%d%> is not supported by this target",
10346 int_n_data[declspecs->int_n_idx].bitsize);
10347 explicit_intN = false;
10349 else if (pedantic && ! in_system_header_at (input_location))
10350 pedwarn (input_location, OPT_Wpedantic,
10351 "ISO C++ does not support %<__int%d%> for %qs",
10352 int_n_data[declspecs->int_n_idx].bitsize, name);
10355 /* Now process the modifiers that were specified
10356 and check for invalid combinations. */
10358 /* Long double is a special combination. */
10359 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
10361 long_p = false;
10362 type = cp_build_qualified_type (long_double_type_node,
10363 cp_type_quals (type));
10366 /* Check all other uses of type modifiers. */
10368 if (unsigned_p || signed_p || long_p || short_p)
10370 int ok = 0;
10372 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
10373 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
10374 else if (signed_p && unsigned_p)
10375 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
10376 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
10377 error ("%<long long%> invalid for %qs", name);
10378 else if (long_p && TREE_CODE (type) == REAL_TYPE)
10379 error ("%<long%> invalid for %qs", name);
10380 else if (short_p && TREE_CODE (type) == REAL_TYPE)
10381 error ("%<short%> invalid for %qs", name);
10382 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
10383 error ("%<long%> or %<short%> invalid for %qs", name);
10384 else if ((long_p || short_p || explicit_char || explicit_int) && explicit_intN)
10385 error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
10386 else if ((long_p || short_p) && explicit_char)
10387 error ("%<long%> or %<short%> specified with char for %qs", name);
10388 else if (long_p && short_p)
10389 error ("%<long%> and %<short%> specified together for %qs", name);
10390 else if (type == char16_type_node || type == char32_type_node)
10392 if (signed_p || unsigned_p)
10393 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
10394 else if (short_p || long_p)
10395 error ("%<short%> or %<long%> invalid for %qs", name);
10397 else
10399 ok = 1;
10400 if (!explicit_int && !defaulted_int && !explicit_char && !explicit_intN && pedantic)
10402 pedwarn (input_location, OPT_Wpedantic,
10403 "long, short, signed or unsigned used invalidly for %qs",
10404 name);
10405 if (flag_pedantic_errors)
10406 ok = 0;
10410 /* Discard the type modifiers if they are invalid. */
10411 if (! ok)
10413 unsigned_p = false;
10414 signed_p = false;
10415 long_p = false;
10416 short_p = false;
10417 longlong = 0;
10421 /* Decide whether an integer type is signed or not.
10422 Optionally treat bitfields as signed by default. */
10423 if (unsigned_p
10424 /* [class.bit]
10426 It is implementation-defined whether a plain (neither
10427 explicitly signed or unsigned) char, short, int, or long
10428 bit-field is signed or unsigned.
10430 Naturally, we extend this to long long as well. Note that
10431 this does not include wchar_t. */
10432 || (bitfield && !flag_signed_bitfields
10433 && !signed_p
10434 /* A typedef for plain `int' without `signed' can be
10435 controlled just like plain `int', but a typedef for
10436 `signed int' cannot be so controlled. */
10437 && !(typedef_decl
10438 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
10439 && TREE_CODE (type) == INTEGER_TYPE
10440 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
10442 if (explicit_intN)
10443 type = int_n_trees[declspecs->int_n_idx].unsigned_type;
10444 else if (longlong)
10445 type = long_long_unsigned_type_node;
10446 else if (long_p)
10447 type = long_unsigned_type_node;
10448 else if (short_p)
10449 type = short_unsigned_type_node;
10450 else if (type == char_type_node)
10451 type = unsigned_char_type_node;
10452 else if (typedef_decl)
10453 type = unsigned_type_for (type);
10454 else
10455 type = unsigned_type_node;
10457 else if (signed_p && type == char_type_node)
10458 type = signed_char_type_node;
10459 else if (explicit_intN)
10460 type = int_n_trees[declspecs->int_n_idx].signed_type;
10461 else if (longlong)
10462 type = long_long_integer_type_node;
10463 else if (long_p)
10464 type = long_integer_type_node;
10465 else if (short_p)
10466 type = short_integer_type_node;
10468 if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
10470 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10471 error ("complex invalid for %qs", name);
10472 /* If a modifier is specified, the resulting complex is the complex
10473 form of TYPE. E.g, "complex short" is "complex short int". */
10474 else if (type == integer_type_node)
10475 type = complex_integer_type_node;
10476 else if (type == float_type_node)
10477 type = complex_float_type_node;
10478 else if (type == double_type_node)
10479 type = complex_double_type_node;
10480 else if (type == long_double_type_node)
10481 type = complex_long_double_type_node;
10482 else
10483 type = build_complex_type (type);
10486 /* If we're using the injected-class-name to form a compound type or a
10487 declaration, replace it with the underlying class so we don't get
10488 redundant typedefs in the debug output. But if we are returning the
10489 type unchanged, leave it alone so that it's available to
10490 maybe_get_template_decl_from_type_decl. */
10491 if (CLASS_TYPE_P (type)
10492 && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
10493 && type == TREE_TYPE (TYPE_NAME (type))
10494 && (declarator || type_quals))
10495 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
10497 type_quals |= cp_type_quals (type);
10498 type = cp_build_qualified_type_real
10499 (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
10500 || declspecs->decltype_p)
10501 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
10502 /* We might have ignored or rejected some of the qualifiers. */
10503 type_quals = cp_type_quals (type);
10505 if (cxx_dialect >= cxx17 && type && is_auto (type)
10506 && innermost_code != cdk_function
10507 && id_declarator && declarator != id_declarator)
10508 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (type))
10510 error_at (typespec_loc, "template placeholder type %qT must be followed "
10511 "by a simple declarator-id", type);
10512 inform (DECL_SOURCE_LOCATION (tmpl), "%qD declared here", tmpl);
10515 staticp = 0;
10516 inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
10517 virtualp = decl_spec_seq_has_spec_p (declspecs, ds_virtual);
10518 explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
10520 storage_class = declspecs->storage_class;
10521 if (storage_class == sc_static)
10522 staticp = 1 + (decl_context == FIELD);
10524 if (virtualp)
10526 if (staticp == 2)
10528 error ("member %qD cannot be declared both %<virtual%> "
10529 "and %<static%>", dname);
10530 storage_class = sc_none;
10531 staticp = 0;
10533 if (constexpr_p)
10534 error ("member %qD cannot be declared both %<virtual%> "
10535 "and %<constexpr%>", dname);
10537 friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
10539 /* Issue errors about use of storage classes for parameters. */
10540 if (decl_context == PARM)
10542 if (typedef_p)
10544 error ("typedef declaration invalid in parameter declaration");
10545 return error_mark_node;
10547 else if (template_parm_flag && storage_class != sc_none)
10549 error ("storage class specified for template parameter %qs", name);
10550 return error_mark_node;
10552 else if (storage_class == sc_static
10553 || storage_class == sc_extern
10554 || thread_p)
10555 error ("storage class specifiers invalid in parameter declarations");
10557 /* Function parameters cannot be concept. */
10558 if (concept_p)
10559 error ("a parameter cannot be declared %<concept%>");
10560 /* Function parameters cannot be constexpr. If we saw one, moan
10561 and pretend it wasn't there. */
10562 else if (constexpr_p)
10564 error ("a parameter cannot be declared %<constexpr%>");
10565 constexpr_p = 0;
10569 /* Give error if `virtual' is used outside of class declaration. */
10570 if (virtualp
10571 && (current_class_name == NULL_TREE || decl_context != FIELD))
10573 error_at (declspecs->locations[ds_virtual],
10574 "%<virtual%> outside class declaration");
10575 virtualp = 0;
10578 if (innermost_code == cdk_decomp)
10580 location_t loc = (declarator->kind == cdk_reference
10581 ? declarator->declarator->id_loc : declarator->id_loc);
10582 if (inlinep)
10583 error_at (declspecs->locations[ds_inline],
10584 "structured binding declaration cannot be %<inline%>");
10585 if (typedef_p)
10586 error_at (declspecs->locations[ds_typedef],
10587 "structured binding declaration cannot be %<typedef%>");
10588 if (constexpr_p)
10589 error_at (declspecs->locations[ds_constexpr], "structured "
10590 "binding declaration cannot be %<constexpr%>");
10591 if (thread_p)
10592 error_at (declspecs->locations[ds_thread],
10593 "structured binding declaration cannot be %qs",
10594 declspecs->gnu_thread_keyword_p
10595 ? "__thread" : "thread_local");
10596 if (concept_p)
10597 error_at (declspecs->locations[ds_concept],
10598 "structured binding declaration cannot be %<concept%>");
10599 switch (storage_class)
10601 case sc_none:
10602 break;
10603 case sc_register:
10604 error_at (loc, "structured binding declaration cannot be "
10605 "%<register%>");
10606 break;
10607 case sc_static:
10608 error_at (loc, "structured binding declaration cannot be "
10609 "%<static%>");
10610 break;
10611 case sc_extern:
10612 error_at (loc, "structured binding declaration cannot be "
10613 "%<extern%>");
10614 break;
10615 case sc_mutable:
10616 error_at (loc, "structured binding declaration cannot be "
10617 "%<mutable%>");
10618 break;
10619 case sc_auto:
10620 error_at (loc, "structured binding declaration cannot be "
10621 "C++98 %<auto%>");
10622 break;
10623 default:
10624 gcc_unreachable ();
10626 if (TREE_CODE (type) != TEMPLATE_TYPE_PARM
10627 || TYPE_IDENTIFIER (type) != auto_identifier)
10629 if (type != error_mark_node)
10631 error_at (loc, "structured binding declaration cannot have "
10632 "type %qT", type);
10633 inform (loc,
10634 "type must be cv-qualified %<auto%> or reference to "
10635 "cv-qualified %<auto%>");
10637 type = build_qualified_type (make_auto (), type_quals);
10638 declspecs->type = type;
10640 inlinep = 0;
10641 typedef_p = 0;
10642 constexpr_p = 0;
10643 thread_p = 0;
10644 concept_p = 0;
10645 storage_class = sc_none;
10646 staticp = 0;
10647 declspecs->storage_class = sc_none;
10648 declspecs->locations[ds_thread] = UNKNOWN_LOCATION;
10651 /* Static anonymous unions are dealt with here. */
10652 if (staticp && decl_context == TYPENAME
10653 && declspecs->type
10654 && ANON_AGGR_TYPE_P (declspecs->type))
10655 decl_context = FIELD;
10657 /* Warn about storage classes that are invalid for certain
10658 kinds of declarations (parameters, typenames, etc.). */
10659 if (thread_p
10660 && ((storage_class
10661 && storage_class != sc_extern
10662 && storage_class != sc_static)
10663 || typedef_p))
10665 error ("multiple storage classes in declaration of %qs", name);
10666 thread_p = false;
10668 if (decl_context != NORMAL
10669 && ((storage_class != sc_none
10670 && storage_class != sc_mutable)
10671 || thread_p))
10673 if ((decl_context == PARM || decl_context == CATCHPARM)
10674 && (storage_class == sc_register
10675 || storage_class == sc_auto))
10677 else if (typedef_p)
10679 else if (decl_context == FIELD
10680 /* C++ allows static class elements. */
10681 && storage_class == sc_static)
10682 /* C++ also allows inlines and signed and unsigned elements,
10683 but in those cases we don't come in here. */
10685 else
10687 if (decl_context == FIELD)
10688 error ("storage class specified for %qs", name);
10689 else
10691 if (decl_context == PARM || decl_context == CATCHPARM)
10692 error ("storage class specified for parameter %qs", name);
10693 else
10694 error ("storage class specified for typename");
10696 if (storage_class == sc_register
10697 || storage_class == sc_auto
10698 || storage_class == sc_extern
10699 || thread_p)
10700 storage_class = sc_none;
10703 else if (storage_class == sc_extern && funcdef_flag
10704 && ! toplevel_bindings_p ())
10705 error ("nested function %qs declared %<extern%>", name);
10706 else if (toplevel_bindings_p ())
10708 if (storage_class == sc_auto)
10709 error ("top-level declaration of %qs specifies %<auto%>", name);
10711 else if (thread_p
10712 && storage_class != sc_extern
10713 && storage_class != sc_static)
10715 if (declspecs->gnu_thread_keyword_p)
10716 pedwarn (input_location, 0, "function-scope %qs implicitly auto and "
10717 "declared %<__thread%>", name);
10719 /* When thread_local is applied to a variable of block scope the
10720 storage-class-specifier static is implied if it does not appear
10721 explicitly. */
10722 storage_class = declspecs->storage_class = sc_static;
10723 staticp = 1;
10726 if (storage_class && friendp)
10728 error ("storage class specifiers invalid in friend function declarations");
10729 storage_class = sc_none;
10730 staticp = 0;
10733 if (!id_declarator)
10734 unqualified_id = NULL_TREE;
10735 else
10737 unqualified_id = id_declarator->u.id.unqualified_name;
10738 switch (TREE_CODE (unqualified_id))
10740 case BIT_NOT_EXPR:
10741 unqualified_id = TREE_OPERAND (unqualified_id, 0);
10742 if (TYPE_P (unqualified_id))
10743 unqualified_id = constructor_name (unqualified_id);
10744 break;
10746 case IDENTIFIER_NODE:
10747 case TEMPLATE_ID_EXPR:
10748 break;
10750 default:
10751 gcc_unreachable ();
10755 if (declspecs->std_attributes)
10757 /* Apply the c++11 attributes to the type preceding them. */
10758 input_location = declspecs->locations[ds_std_attribute];
10759 decl_attributes (&type, declspecs->std_attributes, 0);
10760 input_location = saved_loc;
10763 /* Determine the type of the entity declared by recurring on the
10764 declarator. */
10765 for (; declarator; declarator = declarator->declarator)
10767 const cp_declarator *inner_declarator;
10768 tree attrs;
10770 if (type == error_mark_node)
10771 return error_mark_node;
10773 attrs = declarator->attributes;
10774 if (attrs)
10776 int attr_flags;
10778 attr_flags = 0;
10779 if (declarator == NULL || declarator->kind == cdk_id)
10780 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
10781 if (declarator->kind == cdk_function)
10782 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
10783 if (declarator->kind == cdk_array)
10784 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
10785 returned_attrs = decl_attributes (&type,
10786 chainon (returned_attrs, attrs),
10787 attr_flags);
10790 /* We don't want to warn in parmeter context because we don't
10791 yet know if the parse will succeed, and this might turn out
10792 to be a constructor call. */
10793 if (decl_context != PARM
10794 && declarator->parenthesized != UNKNOWN_LOCATION)
10795 warning_at (declarator->parenthesized, OPT_Wparentheses,
10796 "unnecessary parentheses in declaration of %qs", name);
10797 if (declarator->kind == cdk_id || declarator->kind == cdk_decomp)
10798 break;
10800 inner_declarator = declarator->declarator;
10802 switch (declarator->kind)
10804 case cdk_array:
10805 type = create_array_type_for_decl (dname, type,
10806 declarator->u.array.bounds);
10807 if (!valid_array_size_p (input_location, type, dname))
10808 type = error_mark_node;
10810 if (declarator->std_attributes)
10811 /* [dcl.array]/1:
10813 The optional attribute-specifier-seq appertains to the
10814 array. */
10815 returned_attrs = chainon (returned_attrs,
10816 declarator->std_attributes);
10817 break;
10819 case cdk_function:
10821 tree arg_types;
10822 int funcdecl_p;
10824 /* Declaring a function type. */
10826 input_location = declspecs->locations[ds_type_spec];
10827 abstract_virtuals_error (ACU_RETURN, type);
10828 input_location = saved_loc;
10830 /* Pick up type qualifiers which should be applied to `this'. */
10831 memfn_quals = declarator->u.function.qualifiers;
10832 /* Pick up virt-specifiers. */
10833 virt_specifiers = declarator->u.function.virt_specifiers;
10834 /* And ref-qualifier, too */
10835 rqual = declarator->u.function.ref_qualifier;
10836 /* And tx-qualifier. */
10837 tree tx_qual = declarator->u.function.tx_qualifier;
10838 /* Pick up the exception specifications. */
10839 raises = declarator->u.function.exception_specification;
10840 /* If the exception-specification is ill-formed, let's pretend
10841 there wasn't one. */
10842 if (raises == error_mark_node)
10843 raises = NULL_TREE;
10845 if (reqs)
10846 error_at (location_of (reqs), "requires-clause on return type");
10847 reqs = declarator->u.function.requires_clause;
10849 /* Say it's a definition only for the CALL_EXPR
10850 closest to the identifier. */
10851 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
10853 /* Handle a late-specified return type. */
10854 tree late_return_type = declarator->u.function.late_return_type;
10855 if (funcdecl_p)
10857 if (tree auto_node = type_uses_auto (type))
10859 if (!late_return_type)
10861 if (current_class_type
10862 && LAMBDA_TYPE_P (current_class_type))
10863 /* OK for C++11 lambdas. */;
10864 else if (cxx_dialect < cxx14)
10866 error ("%qs function uses "
10867 "%<auto%> type specifier without trailing "
10868 "return type", name);
10869 inform (input_location, "deduced return type "
10870 "only available with -std=c++14 or "
10871 "-std=gnu++14");
10873 else if (virtualp)
10875 error ("virtual function cannot "
10876 "have deduced return type");
10877 virtualp = false;
10880 else if (!is_auto (type) && sfk != sfk_conversion)
10882 error ("%qs function with trailing return type has"
10883 " %qT as its type rather than plain %<auto%>",
10884 name, type);
10885 return error_mark_node;
10887 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node))
10889 if (!late_return_type)
10891 if (dguide_name_p (unqualified_id))
10892 error_at (declarator->id_loc, "deduction guide "
10893 "for %qT must have trailing return "
10894 "type", TREE_TYPE (tmpl));
10895 else
10896 error_at (declarator->id_loc, "deduced class "
10897 "type %qT in function return type",
10898 type);
10899 inform (DECL_SOURCE_LOCATION (tmpl),
10900 "%qD declared here", tmpl);
10902 else if (CLASS_TYPE_P (late_return_type)
10903 && CLASSTYPE_TEMPLATE_INFO (late_return_type)
10904 && (CLASSTYPE_TI_TEMPLATE (late_return_type)
10905 == tmpl))
10906 /* OK */;
10907 else
10908 error ("trailing return type %qT of deduction guide "
10909 "is not a specialization of %qT",
10910 late_return_type, TREE_TYPE (tmpl));
10913 else if (late_return_type
10914 && sfk != sfk_conversion)
10916 if (cxx_dialect < cxx11)
10917 /* Not using maybe_warn_cpp0x because this should
10918 always be an error. */
10919 error ("trailing return type only available with "
10920 "-std=c++11 or -std=gnu++11");
10921 else
10922 error ("%qs function with trailing return type not "
10923 "declared with %<auto%> type specifier", name);
10924 return error_mark_node;
10927 type = splice_late_return_type (type, late_return_type);
10928 if (type == error_mark_node)
10929 return error_mark_node;
10931 if (late_return_type)
10933 late_return_type_p = true;
10934 type_quals = cp_type_quals (type);
10937 if (type_quals != TYPE_UNQUALIFIED)
10939 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
10940 warning_at (typespec_loc, OPT_Wignored_qualifiers, "type "
10941 "qualifiers ignored on function return type");
10942 /* We now know that the TYPE_QUALS don't apply to the
10943 decl, but to its return type. */
10944 type_quals = TYPE_UNQUALIFIED;
10947 /* Error about some types functions can't return. */
10949 if (TREE_CODE (type) == FUNCTION_TYPE)
10951 error_at (typespec_loc, "%qs declared as function returning "
10952 "a function", name);
10953 return error_mark_node;
10955 if (TREE_CODE (type) == ARRAY_TYPE)
10957 error_at (typespec_loc, "%qs declared as function returning "
10958 "an array", name);
10959 return error_mark_node;
10962 if (ctype == NULL_TREE
10963 && decl_context == FIELD
10964 && funcdecl_p
10965 && friendp == 0)
10966 ctype = current_class_type;
10968 if (ctype && (sfk == sfk_constructor
10969 || sfk == sfk_destructor))
10971 /* We are within a class's scope. If our declarator name
10972 is the same as the class name, and we are defining
10973 a function, then it is a constructor/destructor, and
10974 therefore returns a void type. */
10976 /* ISO C++ 12.4/2. A destructor may not be declared
10977 const or volatile. A destructor may not be static.
10978 A destructor may not be declared with ref-qualifier.
10980 ISO C++ 12.1. A constructor may not be declared
10981 const or volatile. A constructor may not be
10982 virtual. A constructor may not be static.
10983 A constructor may not be declared with ref-qualifier. */
10984 if (staticp == 2)
10985 error ((flags == DTOR_FLAG)
10986 ? G_("destructor cannot be static member function")
10987 : G_("constructor cannot be static member function"));
10988 if (memfn_quals)
10990 error ((flags == DTOR_FLAG)
10991 ? G_("destructors may not be cv-qualified")
10992 : G_("constructors may not be cv-qualified"));
10993 memfn_quals = TYPE_UNQUALIFIED;
10996 if (rqual)
10998 maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
10999 error ((flags == DTOR_FLAG)
11000 ? G_("destructors may not be ref-qualified")
11001 : G_("constructors may not be ref-qualified"));
11002 rqual = REF_QUAL_NONE;
11005 if (decl_context == FIELD
11006 && !member_function_or_else (ctype,
11007 current_class_type,
11008 flags))
11009 return error_mark_node;
11011 if (flags != DTOR_FLAG)
11013 /* It's a constructor. */
11014 if (explicitp == 1)
11015 explicitp = 2;
11016 if (virtualp)
11018 permerror (input_location,
11019 "constructors cannot be declared %<virtual%>");
11020 virtualp = 0;
11022 if (decl_context == FIELD
11023 && sfk != sfk_constructor)
11024 return error_mark_node;
11026 if (decl_context == FIELD)
11027 staticp = 0;
11029 else if (friendp)
11031 if (virtualp)
11033 /* Cannot be both friend and virtual. */
11034 error ("virtual functions cannot be friends");
11035 friendp = 0;
11037 if (decl_context == NORMAL)
11038 error ("friend declaration not in class definition");
11039 if (current_function_decl && funcdef_flag)
11040 error ("can%'t define friend function %qs in a local "
11041 "class definition",
11042 name);
11044 else if (ctype && sfk == sfk_conversion)
11046 if (explicitp == 1)
11048 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
11049 explicitp = 2;
11051 if (late_return_type_p)
11052 error ("a conversion function cannot have a trailing return type");
11054 else if (sfk == sfk_deduction_guide)
11056 if (explicitp == 1)
11057 explicitp = 2;
11060 arg_types = grokparms (declarator->u.function.parameters,
11061 &parms);
11063 if (inner_declarator
11064 && inner_declarator->kind == cdk_id
11065 && inner_declarator->u.id.sfk == sfk_destructor
11066 && arg_types != void_list_node)
11068 error ("destructors may not have parameters");
11069 arg_types = void_list_node;
11070 parms = NULL_TREE;
11073 type = build_function_type (type, arg_types);
11075 tree attrs = declarator->std_attributes;
11076 if (tx_qual)
11078 tree att = build_tree_list (tx_qual, NULL_TREE);
11079 /* transaction_safe applies to the type, but
11080 transaction_safe_dynamic applies to the function. */
11081 if (is_attribute_p ("transaction_safe", tx_qual))
11082 attrs = chainon (attrs, att);
11083 else
11084 returned_attrs = chainon (returned_attrs, att);
11086 if (attrs)
11087 /* [dcl.fct]/2:
11089 The optional attribute-specifier-seq appertains to
11090 the function type. */
11091 decl_attributes (&type, attrs, 0);
11093 if (raises)
11094 type = build_exception_variant (type, raises);
11096 break;
11098 case cdk_pointer:
11099 case cdk_reference:
11100 case cdk_ptrmem:
11101 /* Filter out pointers-to-references and references-to-references.
11102 We can get these if a TYPE_DECL is used. */
11104 if (TREE_CODE (type) == REFERENCE_TYPE)
11106 if (declarator->kind != cdk_reference)
11108 error ("cannot declare pointer to %q#T", type);
11109 type = TREE_TYPE (type);
11112 /* In C++0x, we allow reference to reference declarations
11113 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
11114 and template type arguments [14.3.1/4 temp.arg.type]. The
11115 check for direct reference to reference declarations, which
11116 are still forbidden, occurs below. Reasoning behind the change
11117 can be found in DR106, DR540, and the rvalue reference
11118 proposals. */
11119 else if (cxx_dialect == cxx98)
11121 error ("cannot declare reference to %q#T", type);
11122 type = TREE_TYPE (type);
11125 else if (VOID_TYPE_P (type))
11127 if (declarator->kind == cdk_reference)
11128 error ("cannot declare reference to %q#T", type);
11129 else if (declarator->kind == cdk_ptrmem)
11130 error ("cannot declare pointer to %q#T member", type);
11133 /* We now know that the TYPE_QUALS don't apply to the decl,
11134 but to the target of the pointer. */
11135 type_quals = TYPE_UNQUALIFIED;
11137 /* This code used to handle METHOD_TYPE, but I don't think it's
11138 possible to get it here anymore. */
11139 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11140 if (declarator->kind == cdk_ptrmem
11141 && TREE_CODE (type) == FUNCTION_TYPE)
11143 memfn_quals |= type_memfn_quals (type);
11144 type = build_memfn_type (type,
11145 declarator->u.pointer.class_type,
11146 memfn_quals,
11147 rqual);
11148 if (type == error_mark_node)
11149 return error_mark_node;
11151 rqual = REF_QUAL_NONE;
11152 memfn_quals = TYPE_UNQUALIFIED;
11155 if (TREE_CODE (type) == FUNCTION_TYPE
11156 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
11157 || type_memfn_rqual (type) != REF_QUAL_NONE))
11158 error (declarator->kind == cdk_reference
11159 ? G_("cannot declare reference to qualified function type %qT")
11160 : G_("cannot declare pointer to qualified function type %qT"),
11161 type);
11163 /* When the pointed-to type involves components of variable size,
11164 care must be taken to ensure that the size evaluation code is
11165 emitted early enough to dominate all the possible later uses
11166 and late enough for the variables on which it depends to have
11167 been assigned.
11169 This is expected to happen automatically when the pointed-to
11170 type has a name/declaration of it's own, but special attention
11171 is required if the type is anonymous.
11173 We handle the NORMAL and FIELD contexts here by inserting a
11174 dummy statement that just evaluates the size at a safe point
11175 and ensures it is not deferred until e.g. within a deeper
11176 conditional context (c++/43555).
11178 We expect nothing to be needed here for PARM or TYPENAME.
11179 Evaluating the size at this point for TYPENAME would
11180 actually be incorrect, as we might be in the middle of an
11181 expression with side effects on the pointed-to type size
11182 "arguments" prior to the pointer declaration point and the
11183 size evaluation could end up prior to the side effects. */
11185 if (!TYPE_NAME (type)
11186 && (decl_context == NORMAL || decl_context == FIELD)
11187 && at_function_scope_p ()
11188 && variably_modified_type_p (type, NULL_TREE))
11190 TYPE_NAME (type) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
11191 NULL_TREE, type);
11192 add_decl_expr (TYPE_NAME (type));
11195 if (declarator->kind == cdk_reference)
11197 /* In C++0x, the type we are creating a reference to might be
11198 a typedef which is itself a reference type. In that case,
11199 we follow the reference collapsing rules in
11200 [7.1.3/8 dcl.typedef] to create the final reference type:
11202 "If a typedef TD names a type that is a reference to a type
11203 T, an attempt to create the type 'lvalue reference to cv TD'
11204 creates the type 'lvalue reference to T,' while an attempt
11205 to create the type "rvalue reference to cv TD' creates the
11206 type TD."
11208 if (VOID_TYPE_P (type))
11209 /* We already gave an error. */;
11210 else if (TREE_CODE (type) == REFERENCE_TYPE)
11212 if (declarator->u.reference.rvalue_ref)
11213 /* Leave type alone. */;
11214 else
11215 type = cp_build_reference_type (TREE_TYPE (type), false);
11217 else
11218 type = cp_build_reference_type
11219 (type, declarator->u.reference.rvalue_ref);
11221 /* In C++0x, we need this check for direct reference to
11222 reference declarations, which are forbidden by
11223 [8.3.2/5 dcl.ref]. Reference to reference declarations
11224 are only allowed indirectly through typedefs and template
11225 type arguments. Example:
11227 void foo(int & &); // invalid ref-to-ref decl
11229 typedef int & int_ref;
11230 void foo(int_ref &); // valid ref-to-ref decl
11232 if (inner_declarator && inner_declarator->kind == cdk_reference)
11233 error ("cannot declare reference to %q#T, which is not "
11234 "a typedef or a template type argument", type);
11236 else if (TREE_CODE (type) == METHOD_TYPE)
11237 type = build_ptrmemfunc_type (build_pointer_type (type));
11238 else if (declarator->kind == cdk_ptrmem)
11240 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
11241 != NAMESPACE_DECL);
11242 if (declarator->u.pointer.class_type == error_mark_node)
11243 /* We will already have complained. */
11244 type = error_mark_node;
11245 else
11246 type = build_ptrmem_type (declarator->u.pointer.class_type,
11247 type);
11249 else
11250 type = build_pointer_type (type);
11252 /* Process a list of type modifier keywords (such as
11253 const or volatile) that were given inside the `*' or `&'. */
11255 if (declarator->u.pointer.qualifiers)
11257 type
11258 = cp_build_qualified_type (type,
11259 declarator->u.pointer.qualifiers);
11260 type_quals = cp_type_quals (type);
11263 /* Apply C++11 attributes to the pointer, and not to the
11264 type pointed to. This is unlike what is done for GNU
11265 attributes above. It is to comply with [dcl.ptr]/1:
11267 [the optional attribute-specifier-seq (7.6.1) appertains
11268 to the pointer and not to the object pointed to]. */
11269 if (declarator->std_attributes)
11270 decl_attributes (&type, declarator->std_attributes,
11273 ctype = NULL_TREE;
11274 break;
11276 case cdk_error:
11277 break;
11279 default:
11280 gcc_unreachable ();
11284 /* A `constexpr' specifier used in an object declaration declares
11285 the object as `const'. */
11286 if (constexpr_p && innermost_code != cdk_function)
11288 /* DR1688 says that a `constexpr' specifier in combination with
11289 `volatile' is valid. */
11291 if (TREE_CODE (type) != REFERENCE_TYPE)
11293 type_quals |= TYPE_QUAL_CONST;
11294 type = cp_build_qualified_type (type, type_quals);
11298 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
11299 && TREE_CODE (type) != FUNCTION_TYPE
11300 && TREE_CODE (type) != METHOD_TYPE
11301 && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
11303 error ("template-id %qD used as a declarator",
11304 unqualified_id);
11305 unqualified_id = dname;
11308 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
11309 qualified with a class-name, turn it into a METHOD_TYPE, unless
11310 we know that the function is static. We take advantage of this
11311 opportunity to do other processing that pertains to entities
11312 explicitly declared to be class members. Note that if DECLARATOR
11313 is non-NULL, we know it is a cdk_id declarator; otherwise, we
11314 would not have exited the loop above. */
11315 if (declarator
11316 && declarator->kind == cdk_id
11317 && declarator->u.id.qualifying_scope
11318 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
11320 ctype = declarator->u.id.qualifying_scope;
11321 ctype = TYPE_MAIN_VARIANT (ctype);
11322 template_count = num_template_headers_for_class (ctype);
11324 if (ctype == current_class_type)
11326 if (friendp)
11328 permerror (input_location, "member functions are implicitly "
11329 "friends of their class");
11330 friendp = 0;
11332 else
11333 permerror (declarator->id_loc,
11334 "extra qualification %<%T::%> on member %qs",
11335 ctype, name);
11337 else if (/* If the qualifying type is already complete, then we
11338 can skip the following checks. */
11339 !COMPLETE_TYPE_P (ctype)
11340 && (/* If the function is being defined, then
11341 qualifying type must certainly be complete. */
11342 funcdef_flag
11343 /* A friend declaration of "T::f" is OK, even if
11344 "T" is a template parameter. But, if this
11345 function is not a friend, the qualifying type
11346 must be a class. */
11347 || (!friendp && !CLASS_TYPE_P (ctype))
11348 /* For a declaration, the type need not be
11349 complete, if either it is dependent (since there
11350 is no meaningful definition of complete in that
11351 case) or the qualifying class is currently being
11352 defined. */
11353 || !(dependent_type_p (ctype)
11354 || currently_open_class (ctype)))
11355 /* Check that the qualifying type is complete. */
11356 && !complete_type_or_else (ctype, NULL_TREE))
11357 return error_mark_node;
11358 else if (TREE_CODE (type) == FUNCTION_TYPE)
11360 if (current_class_type
11361 && (!friendp || funcdef_flag || initialized))
11363 error (funcdef_flag || initialized
11364 ? G_("cannot define member function %<%T::%s%> "
11365 "within %qT")
11366 : G_("cannot declare member function %<%T::%s%> "
11367 "within %qT"),
11368 ctype, name, current_class_type);
11369 return error_mark_node;
11372 else if (typedef_p && current_class_type)
11374 error ("cannot declare member %<%T::%s%> within %qT",
11375 ctype, name, current_class_type);
11376 return error_mark_node;
11380 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
11381 ctype = current_class_type;
11383 /* Now TYPE has the actual type. */
11385 if (returned_attrs)
11387 if (attrlist)
11388 *attrlist = chainon (returned_attrs, *attrlist);
11389 else
11390 attrlist = &returned_attrs;
11393 if (declarator
11394 && declarator->kind == cdk_id
11395 && declarator->std_attributes
11396 && attrlist != NULL)
11397 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
11398 a declarator-id appertains to the entity that is declared. */
11399 *attrlist = chainon (*attrlist, declarator->std_attributes);
11401 /* Handle parameter packs. */
11402 if (parameter_pack_p)
11404 if (decl_context == PARM)
11405 /* Turn the type into a pack expansion.*/
11406 type = make_pack_expansion (type);
11407 else
11408 error ("non-parameter %qs cannot be a parameter pack", name);
11411 if ((decl_context == FIELD || decl_context == PARM)
11412 && !processing_template_decl
11413 && variably_modified_type_p (type, NULL_TREE))
11415 if (decl_context == FIELD)
11416 error ("data member may not have variably modified type %qT", type);
11417 else
11418 error ("parameter may not have variably modified type %qT", type);
11419 type = error_mark_node;
11422 if (explicitp == 1 || (explicitp && friendp))
11424 /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
11425 in the declaration of a constructor or conversion function within
11426 a class definition. */
11427 if (!current_class_type)
11428 error_at (declspecs->locations[ds_explicit],
11429 "%<explicit%> outside class declaration");
11430 else if (friendp)
11431 error_at (declspecs->locations[ds_explicit],
11432 "%<explicit%> in friend declaration");
11433 else
11434 error_at (declspecs->locations[ds_explicit],
11435 "only declarations of constructors and conversion operators "
11436 "can be %<explicit%>");
11437 explicitp = 0;
11440 if (storage_class == sc_mutable)
11442 if (decl_context != FIELD || friendp)
11444 error ("non-member %qs cannot be declared %<mutable%>", name);
11445 storage_class = sc_none;
11447 else if (decl_context == TYPENAME || typedef_p)
11449 error ("non-object member %qs cannot be declared %<mutable%>", name);
11450 storage_class = sc_none;
11452 else if (TREE_CODE (type) == FUNCTION_TYPE
11453 || TREE_CODE (type) == METHOD_TYPE)
11455 error ("function %qs cannot be declared %<mutable%>", name);
11456 storage_class = sc_none;
11458 else if (staticp)
11460 error ("static %qs cannot be declared %<mutable%>", name);
11461 storage_class = sc_none;
11463 else if (type_quals & TYPE_QUAL_CONST)
11465 error ("const %qs cannot be declared %<mutable%>", name);
11466 storage_class = sc_none;
11468 else if (TREE_CODE (type) == REFERENCE_TYPE)
11470 permerror (input_location, "reference %qs cannot be declared "
11471 "%<mutable%>", name);
11472 storage_class = sc_none;
11476 /* If this is declaring a typedef name, return a TYPE_DECL. */
11477 if (typedef_p && decl_context != TYPENAME)
11479 tree decl;
11481 /* This declaration:
11483 typedef void f(int) const;
11485 declares a function type which is not a member of any
11486 particular class, but which is cv-qualified; for
11487 example "f S::*" declares a pointer to a const-qualified
11488 member function of S. We record the cv-qualification in the
11489 function type. */
11490 if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
11492 type = apply_memfn_quals (type, memfn_quals, rqual);
11494 /* We have now dealt with these qualifiers. */
11495 memfn_quals = TYPE_UNQUALIFIED;
11496 rqual = REF_QUAL_NONE;
11499 if (type_uses_auto (type))
11501 error ("typedef declared %<auto%>");
11502 type = error_mark_node;
11505 if (reqs)
11506 error_at (location_of (reqs), "requires-clause on typedef");
11508 if (decl_context == FIELD)
11509 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
11510 else
11511 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
11512 if (id_declarator && declarator->u.id.qualifying_scope) {
11513 error_at (DECL_SOURCE_LOCATION (decl),
11514 "typedef name may not be a nested-name-specifier");
11515 TREE_TYPE (decl) = error_mark_node;
11518 if (decl_context != FIELD)
11520 if (!current_function_decl)
11521 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
11522 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
11523 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
11524 (current_function_decl)))
11525 /* The TYPE_DECL is "abstract" because there will be
11526 clones of this constructor/destructor, and there will
11527 be copies of this TYPE_DECL generated in those
11528 clones. The decloning optimization (for space) may
11529 revert this subsequently if it determines that
11530 the clones should share a common implementation. */
11531 DECL_ABSTRACT_P (decl) = true;
11533 else if (current_class_type
11534 && constructor_name_p (unqualified_id, current_class_type))
11535 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
11536 "as enclosing class",
11537 unqualified_id);
11539 /* If the user declares "typedef struct {...} foo" then the
11540 struct will have an anonymous name. Fill that name in now.
11541 Nothing can refer to it, so nothing needs know about the name
11542 change. */
11543 if (type != error_mark_node
11544 && unqualified_id
11545 && TYPE_NAME (type)
11546 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11547 && TYPE_UNNAMED_P (type)
11548 && declspecs->type_definition_p
11549 && attributes_naming_typedef_ok (*attrlist)
11550 && cp_type_quals (type) == TYPE_UNQUALIFIED)
11551 name_unnamed_type (type, decl);
11553 if (signed_p
11554 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11555 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11557 bad_specifiers (decl, BSP_TYPE, virtualp,
11558 memfn_quals != TYPE_UNQUALIFIED,
11559 inlinep, friendp, raises != NULL_TREE);
11561 if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
11562 /* Acknowledge that this was written:
11563 `using analias = atype;'. */
11564 TYPE_DECL_ALIAS_P (decl) = 1;
11566 return decl;
11569 /* Detect the case of an array type of unspecified size
11570 which came, as such, direct from a typedef name.
11571 We must copy the type, so that the array's domain can be
11572 individually set by the object's initializer. */
11574 if (type && typedef_type
11575 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
11576 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
11577 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
11579 /* Detect where we're using a typedef of function type to declare a
11580 function. PARMS will not be set, so we must create it now. */
11582 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
11584 tree decls = NULL_TREE;
11585 tree args;
11587 for (args = TYPE_ARG_TYPES (type);
11588 args && args != void_list_node;
11589 args = TREE_CHAIN (args))
11591 tree decl = cp_build_parm_decl (NULL_TREE, NULL_TREE,
11592 TREE_VALUE (args));
11594 DECL_CHAIN (decl) = decls;
11595 decls = decl;
11598 parms = nreverse (decls);
11600 if (decl_context != TYPENAME)
11602 /* The qualifiers on the function type become the qualifiers on
11603 the non-static member function. */
11604 memfn_quals |= type_memfn_quals (type);
11605 rqual = type_memfn_rqual (type);
11606 type_quals = TYPE_UNQUALIFIED;
11610 /* If this is a type name (such as, in a cast or sizeof),
11611 compute the type and return it now. */
11613 if (decl_context == TYPENAME)
11615 /* Note that here we don't care about type_quals. */
11617 /* Special case: "friend class foo" looks like a TYPENAME context. */
11618 if (friendp)
11620 if (inlinep)
11622 error ("%<inline%> specified for friend class declaration");
11623 inlinep = 0;
11626 if (!current_aggr)
11628 /* Don't allow friend declaration without a class-key. */
11629 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11630 permerror (input_location, "template parameters cannot be friends");
11631 else if (TREE_CODE (type) == TYPENAME_TYPE)
11632 permerror (input_location, "friend declaration requires class-key, "
11633 "i.e. %<friend class %T::%D%>",
11634 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
11635 else
11636 permerror (input_location, "friend declaration requires class-key, "
11637 "i.e. %<friend %#T%>",
11638 type);
11641 /* Only try to do this stuff if we didn't already give up. */
11642 if (type != integer_type_node)
11644 /* A friendly class? */
11645 if (current_class_type)
11646 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
11647 /*complain=*/true);
11648 else
11649 error ("trying to make class %qT a friend of global scope",
11650 type);
11652 type = void_type_node;
11655 else if (memfn_quals || rqual)
11657 if (ctype == NULL_TREE
11658 && TREE_CODE (type) == METHOD_TYPE)
11659 ctype = TYPE_METHOD_BASETYPE (type);
11661 if (ctype)
11662 type = build_memfn_type (type, ctype, memfn_quals, rqual);
11663 /* Core issue #547: need to allow this in template type args.
11664 Allow it in general in C++11 for alias-declarations. */
11665 else if ((template_type_arg || cxx_dialect >= cxx11)
11666 && TREE_CODE (type) == FUNCTION_TYPE)
11667 type = apply_memfn_quals (type, memfn_quals, rqual);
11668 else
11669 error ("invalid qualifiers on non-member function type");
11672 if (reqs)
11673 error_at (location_of (reqs), "requires-clause on type-id");
11675 return type;
11677 else if (unqualified_id == NULL_TREE && decl_context != PARM
11678 && decl_context != CATCHPARM
11679 && TREE_CODE (type) != UNION_TYPE
11680 && ! bitfield
11681 && innermost_code != cdk_decomp)
11683 error ("abstract declarator %qT used as declaration", type);
11684 return error_mark_node;
11687 if (!FUNC_OR_METHOD_TYPE_P (type))
11689 /* Only functions may be declared using an operator-function-id. */
11690 if (dname && IDENTIFIER_ANY_OP_P (dname))
11692 error ("declaration of %qD as non-function", dname);
11693 return error_mark_node;
11696 if (reqs)
11697 error_at (location_of (reqs),
11698 "requires-clause on declaration of non-function type %qT",
11699 type);
11702 /* We don't check parameter types here because we can emit a better
11703 error message later. */
11704 if (decl_context != PARM)
11706 type = check_var_type (unqualified_id, type);
11707 if (type == error_mark_node)
11708 return error_mark_node;
11711 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11712 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
11714 if (decl_context == PARM || decl_context == CATCHPARM)
11716 if (ctype || in_namespace)
11717 error ("cannot use %<::%> in parameter declaration");
11719 if (type_uses_auto (type)
11720 && !(cxx_dialect >= cxx17 && template_parm_flag))
11722 if (cxx_dialect >= cxx14)
11723 error ("%<auto%> parameter not permitted in this context");
11724 else
11725 error ("parameter declared %<auto%>");
11726 type = error_mark_node;
11729 /* A parameter declared as an array of T is really a pointer to T.
11730 One declared as a function is really a pointer to a function.
11731 One declared as a member is really a pointer to member. */
11733 if (TREE_CODE (type) == ARRAY_TYPE)
11735 /* Transfer const-ness of array into that of type pointed to. */
11736 type = build_pointer_type (TREE_TYPE (type));
11737 type_quals = TYPE_UNQUALIFIED;
11738 array_parameter_p = true;
11740 else if (TREE_CODE (type) == FUNCTION_TYPE)
11741 type = build_pointer_type (type);
11744 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
11745 && !(identifier_p (unqualified_id)
11746 && IDENTIFIER_NEWDEL_OP_P (unqualified_id)))
11748 cp_cv_quals real_quals = memfn_quals;
11749 if (cxx_dialect < cxx14 && constexpr_p
11750 && sfk != sfk_constructor && sfk != sfk_destructor)
11751 real_quals |= TYPE_QUAL_CONST;
11752 type = build_memfn_type (type, ctype, real_quals, rqual);
11756 tree decl = NULL_TREE;
11758 if (decl_context == PARM)
11760 decl = cp_build_parm_decl (NULL_TREE, unqualified_id, type);
11761 DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
11763 bad_specifiers (decl, BSP_PARM, virtualp,
11764 memfn_quals != TYPE_UNQUALIFIED,
11765 inlinep, friendp, raises != NULL_TREE);
11767 else if (decl_context == FIELD)
11769 if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE)
11770 if (tree auto_node = type_uses_auto (type))
11772 location_t loc = declspecs->locations[ds_type_spec];
11773 if (CLASS_PLACEHOLDER_TEMPLATE (auto_node))
11774 error_at (loc, "invalid use of template-name %qE without an "
11775 "argument list",
11776 CLASS_PLACEHOLDER_TEMPLATE (auto_node));
11777 else
11778 error_at (loc, "non-static data member declared with "
11779 "placeholder %qT", auto_node);
11780 type = error_mark_node;
11783 /* The C99 flexible array extension. */
11784 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
11785 && TYPE_DOMAIN (type) == NULL_TREE)
11787 if (ctype
11788 && (TREE_CODE (ctype) == UNION_TYPE
11789 || TREE_CODE (ctype) == QUAL_UNION_TYPE))
11791 error ("flexible array member in union");
11792 type = error_mark_node;
11794 else
11796 /* Array is a flexible member. */
11797 if (in_system_header_at (input_location))
11798 /* Do not warn on flexible array members in system
11799 headers because glibc uses them. */;
11800 else if (name)
11801 pedwarn (input_location, OPT_Wpedantic,
11802 "ISO C++ forbids flexible array member %qs", name);
11803 else
11804 pedwarn (input_location, OPT_Wpedantic,
11805 "ISO C++ forbids flexible array members");
11807 /* Flexible array member has a null domain. */
11808 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
11812 if (type == error_mark_node)
11814 /* Happens when declaring arrays of sizes which
11815 are error_mark_node, for example. */
11816 decl = NULL_TREE;
11818 else if (in_namespace && !friendp)
11820 /* Something like struct S { int N::j; }; */
11821 error ("invalid use of %<::%>");
11822 return error_mark_node;
11824 else if (TREE_CODE (type) == FUNCTION_TYPE
11825 || TREE_CODE (type) == METHOD_TYPE)
11827 int publicp = 0;
11828 tree function_context;
11830 if (friendp == 0)
11832 /* This should never happen in pure C++ (the check
11833 could be an assert). It could happen in
11834 Objective-C++ if someone writes invalid code that
11835 uses a function declaration for an instance
11836 variable or property (instance variables and
11837 properties are parsed as FIELD_DECLs, but they are
11838 part of an Objective-C class, not a C++ class).
11839 That code is invalid and is caught by this
11840 check. */
11841 if (!ctype)
11843 error ("declaration of function %qD in invalid context",
11844 unqualified_id);
11845 return error_mark_node;
11848 /* ``A union may [ ... ] not [ have ] virtual functions.''
11849 ARM 9.5 */
11850 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11852 error ("function %qD declared %<virtual%> inside a union",
11853 unqualified_id);
11854 return error_mark_node;
11857 if (virtualp
11858 && identifier_p (unqualified_id)
11859 && IDENTIFIER_NEWDEL_OP_P (unqualified_id))
11861 error ("%qD cannot be declared %<virtual%>, since it "
11862 "is always static", unqualified_id);
11863 virtualp = 0;
11867 /* Check that the name used for a destructor makes sense. */
11868 if (sfk == sfk_destructor)
11870 tree uqname = id_declarator->u.id.unqualified_name;
11872 if (!ctype)
11874 gcc_assert (friendp);
11875 error ("expected qualified name in friend declaration "
11876 "for destructor %qD", uqname);
11877 return error_mark_node;
11880 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
11882 error ("declaration of %qD as member of %qT",
11883 uqname, ctype);
11884 return error_mark_node;
11886 if (concept_p)
11888 error ("a destructor cannot be %<concept%>");
11889 return error_mark_node;
11891 if (constexpr_p)
11893 error ("a destructor cannot be %<constexpr%>");
11894 return error_mark_node;
11897 else if (sfk == sfk_constructor && friendp && !ctype)
11899 error ("expected qualified name in friend declaration "
11900 "for constructor %qD",
11901 id_declarator->u.id.unqualified_name);
11902 return error_mark_node;
11904 if (sfk == sfk_constructor)
11905 if (concept_p)
11907 error ("a constructor cannot be %<concept%>");
11908 return error_mark_node;
11910 if (concept_p)
11912 error ("a concept cannot be a member function");
11913 concept_p = false;
11916 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
11918 tree tmpl = TREE_OPERAND (unqualified_id, 0);
11919 if (variable_template_p (tmpl))
11921 error ("specialization of variable template %qD "
11922 "declared as function", tmpl);
11923 inform (DECL_SOURCE_LOCATION (tmpl),
11924 "variable template declared here");
11925 return error_mark_node;
11929 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
11930 function_context = (ctype != NULL_TREE) ?
11931 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
11932 publicp = (! friendp || ! staticp)
11933 && function_context == NULL_TREE;
11935 if (late_return_type_p)
11936 TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
11938 decl = grokfndecl (ctype, type,
11939 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
11940 ? unqualified_id : dname,
11941 parms,
11942 unqualified_id,
11943 reqs,
11944 virtualp, flags, memfn_quals, rqual, raises,
11945 friendp ? -1 : 0, friendp, publicp,
11946 inlinep | (2 * constexpr_p) | (4 * concept_p),
11947 initialized == SD_DELETED, sfk,
11948 funcdef_flag, template_count, in_namespace,
11949 attrlist, declarator->id_loc);
11950 decl = set_virt_specifiers (decl, virt_specifiers);
11951 if (decl == NULL_TREE)
11952 return error_mark_node;
11953 #if 0
11954 /* This clobbers the attrs stored in `decl' from `attrlist'. */
11955 /* The decl and setting of decl_attr is also turned off. */
11956 decl = build_decl_attribute_variant (decl, decl_attr);
11957 #endif
11959 /* [class.conv.ctor]
11961 A constructor declared without the function-specifier
11962 explicit that can be called with a single parameter
11963 specifies a conversion from the type of its first
11964 parameter to the type of its class. Such a constructor
11965 is called a converting constructor. */
11966 if (explicitp == 2)
11967 DECL_NONCONVERTING_P (decl) = 1;
11969 else if (!staticp && !dependent_type_p (type)
11970 && !COMPLETE_TYPE_P (complete_type (type))
11971 && (!complete_or_array_type_p (type)
11972 || initialized == 0))
11974 if (TREE_CODE (type) != ARRAY_TYPE
11975 || !COMPLETE_TYPE_P (TREE_TYPE (type)))
11977 if (unqualified_id)
11979 error ("field %qD has incomplete type %qT",
11980 unqualified_id, type);
11981 cxx_incomplete_type_inform (strip_array_types (type));
11983 else
11984 error ("name %qT has incomplete type", type);
11986 type = error_mark_node;
11987 decl = NULL_TREE;
11990 else
11992 if (friendp)
11994 error ("%qE is neither function nor member function; "
11995 "cannot be declared friend", unqualified_id);
11996 friendp = 0;
11998 decl = NULL_TREE;
12001 if (friendp)
12003 /* Friends are treated specially. */
12004 if (ctype == current_class_type)
12005 ; /* We already issued a permerror. */
12006 else if (decl && DECL_NAME (decl))
12008 if (template_class_depth (current_class_type) == 0)
12010 decl = check_explicit_specialization
12011 (unqualified_id, decl, template_count,
12012 2 * funcdef_flag + 4);
12013 if (decl == error_mark_node)
12014 return error_mark_node;
12017 decl = do_friend (ctype, unqualified_id, decl,
12018 *attrlist, flags,
12019 funcdef_flag);
12020 return decl;
12022 else
12023 return error_mark_node;
12026 /* Structure field. It may not be a function, except for C++. */
12028 if (decl == NULL_TREE)
12030 if (staticp)
12032 /* C++ allows static class members. All other work
12033 for this is done by grokfield. */
12034 decl = build_lang_decl_loc (declarator
12035 ? declarator->id_loc
12036 : input_location,
12037 VAR_DECL, unqualified_id, type);
12038 set_linkage_for_static_data_member (decl);
12039 if (concept_p)
12040 error ("static data member %qE declared %<concept%>",
12041 unqualified_id);
12042 else if (constexpr_p && !initialized)
12044 error ("constexpr static data member %qD must have an "
12045 "initializer", decl);
12046 constexpr_p = false;
12049 if (inlinep)
12050 mark_inline_variable (decl);
12052 if (!DECL_VAR_DECLARED_INLINE_P (decl)
12053 && !(cxx_dialect >= cxx17 && constexpr_p))
12054 /* Even if there is an in-class initialization, DECL
12055 is considered undefined until an out-of-class
12056 definition is provided, unless this is an inline
12057 variable. */
12058 DECL_EXTERNAL (decl) = 1;
12060 if (thread_p)
12062 CP_DECL_THREAD_LOCAL_P (decl) = true;
12063 if (!processing_template_decl)
12064 set_decl_tls_model (decl, decl_default_tls_model (decl));
12065 if (declspecs->gnu_thread_keyword_p)
12066 SET_DECL_GNU_TLS_P (decl);
12069 else
12071 if (concept_p)
12072 error ("non-static data member %qE declared %<concept%>",
12073 unqualified_id);
12074 else if (constexpr_p)
12076 error ("non-static data member %qE declared %<constexpr%>",
12077 unqualified_id);
12078 constexpr_p = false;
12080 decl = build_decl (input_location,
12081 FIELD_DECL, unqualified_id, type);
12082 DECL_NONADDRESSABLE_P (decl) = bitfield;
12083 if (bitfield && !unqualified_id)
12084 TREE_NO_WARNING (decl) = 1;
12086 if (storage_class == sc_mutable)
12088 DECL_MUTABLE_P (decl) = 1;
12089 storage_class = sc_none;
12092 if (initialized)
12094 /* An attempt is being made to initialize a non-static
12095 member. This is new in C++11. */
12096 maybe_warn_cpp0x (CPP0X_NSDMI);
12098 /* If this has been parsed with static storage class, but
12099 errors forced staticp to be cleared, ensure NSDMI is
12100 not present. */
12101 if (declspecs->storage_class == sc_static)
12102 DECL_INITIAL (decl) = error_mark_node;
12106 bad_specifiers (decl, BSP_FIELD, virtualp,
12107 memfn_quals != TYPE_UNQUALIFIED,
12108 staticp ? false : inlinep, friendp,
12109 raises != NULL_TREE);
12112 else if (TREE_CODE (type) == FUNCTION_TYPE
12113 || TREE_CODE (type) == METHOD_TYPE)
12115 tree original_name;
12116 int publicp = 0;
12118 if (!unqualified_id)
12119 return error_mark_node;
12121 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12122 original_name = dname;
12123 else
12124 original_name = unqualified_id;
12125 // FIXME:gcc_assert (original_name == dname);
12127 if (storage_class == sc_auto)
12128 error ("storage class %<auto%> invalid for function %qs", name);
12129 else if (storage_class == sc_register)
12130 error ("storage class %<register%> invalid for function %qs", name);
12131 else if (thread_p)
12133 if (declspecs->gnu_thread_keyword_p)
12134 error ("storage class %<__thread%> invalid for function %qs",
12135 name);
12136 else
12137 error ("storage class %<thread_local%> invalid for function %qs",
12138 name);
12141 if (virt_specifiers)
12142 error ("virt-specifiers in %qs not allowed outside a class definition", name);
12143 /* Function declaration not at top level.
12144 Storage classes other than `extern' are not allowed
12145 and `extern' makes no difference. */
12146 if (! toplevel_bindings_p ()
12147 && (storage_class == sc_static
12148 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
12149 && pedantic)
12151 if (storage_class == sc_static)
12152 pedwarn (input_location, OPT_Wpedantic,
12153 "%<static%> specifier invalid for function %qs "
12154 "declared out of global scope", name);
12155 else
12156 pedwarn (input_location, OPT_Wpedantic,
12157 "%<inline%> specifier invalid for function %qs "
12158 "declared out of global scope", name);
12161 if (ctype == NULL_TREE)
12163 if (virtualp)
12165 error ("virtual non-class function %qs", name);
12166 virtualp = 0;
12168 else if (sfk == sfk_constructor
12169 || sfk == sfk_destructor)
12171 error (funcdef_flag
12172 ? G_("%qs defined in a non-class scope")
12173 : G_("%qs declared in a non-class scope"), name);
12174 sfk = sfk_none;
12178 /* Record whether the function is public. */
12179 publicp = (ctype != NULL_TREE
12180 || storage_class != sc_static);
12182 if (late_return_type_p)
12183 TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
12185 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
12186 reqs, virtualp, flags, memfn_quals, rqual, raises,
12187 1, friendp,
12188 publicp,
12189 inlinep | (2 * constexpr_p) | (4 * concept_p),
12190 initialized == SD_DELETED,
12191 sfk,
12192 funcdef_flag,
12193 template_count, in_namespace, attrlist,
12194 declarator->id_loc);
12195 if (decl == NULL_TREE)
12196 return error_mark_node;
12198 if (explicitp == 2)
12199 DECL_NONCONVERTING_P (decl) = 1;
12200 if (staticp == 1)
12202 int invalid_static = 0;
12204 /* Don't allow a static member function in a class, and forbid
12205 declaring main to be static. */
12206 if (TREE_CODE (type) == METHOD_TYPE)
12208 permerror (input_location, "cannot declare member function %qD to have "
12209 "static linkage", decl);
12210 invalid_static = 1;
12212 else if (current_function_decl)
12214 /* 7.1.1: There can be no static function declarations within a
12215 block. */
12216 error ("cannot declare static function inside another function");
12217 invalid_static = 1;
12220 if (invalid_static)
12222 staticp = 0;
12223 storage_class = sc_none;
12227 else
12229 /* It's a variable. */
12231 /* An uninitialized decl with `extern' is a reference. */
12232 decl = grokvardecl (type, dname, unqualified_id,
12233 declspecs,
12234 initialized,
12235 type_quals,
12236 inlinep,
12237 concept_p,
12238 template_count,
12239 ctype ? ctype : in_namespace);
12240 if (decl == NULL_TREE)
12241 return error_mark_node;
12243 bad_specifiers (decl, BSP_VAR, virtualp,
12244 memfn_quals != TYPE_UNQUALIFIED,
12245 inlinep, friendp, raises != NULL_TREE);
12247 if (ctype)
12249 DECL_CONTEXT (decl) = ctype;
12250 if (staticp == 1)
12252 permerror (input_location, "%<static%> may not be used when defining "
12253 "(as opposed to declaring) a static data member");
12254 staticp = 0;
12255 storage_class = sc_none;
12257 if (storage_class == sc_register && TREE_STATIC (decl))
12259 error ("static member %qD declared %<register%>", decl);
12260 storage_class = sc_none;
12262 if (storage_class == sc_extern && pedantic)
12264 pedwarn (input_location, OPT_Wpedantic,
12265 "cannot explicitly declare member %q#D to have "
12266 "extern linkage", decl);
12267 storage_class = sc_none;
12270 else if (constexpr_p && DECL_EXTERNAL (decl))
12272 error ("declaration of constexpr variable %qD is not a definition",
12273 decl);
12274 constexpr_p = false;
12277 if (inlinep)
12278 mark_inline_variable (decl);
12279 if (innermost_code == cdk_decomp)
12281 gcc_assert (declarator && declarator->kind == cdk_decomp);
12282 DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
12283 DECL_ARTIFICIAL (decl) = 1;
12284 fit_decomposition_lang_decl (decl, NULL_TREE);
12288 if (VAR_P (decl) && !initialized)
12289 if (tree auto_node = type_uses_auto (type))
12290 if (!CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12292 location_t loc = declspecs->locations[ds_type_spec];
12293 error_at (loc, "declaration of %q#D has no initializer", decl);
12294 TREE_TYPE (decl) = error_mark_node;
12297 if (storage_class == sc_extern && initialized && !funcdef_flag)
12299 if (toplevel_bindings_p ())
12301 /* It's common practice (and completely valid) to have a const
12302 be initialized and declared extern. */
12303 if (!(type_quals & TYPE_QUAL_CONST))
12304 warning (0, "%qs initialized and declared %<extern%>", name);
12306 else
12308 error ("%qs has both %<extern%> and initializer", name);
12309 return error_mark_node;
12313 /* Record `register' declaration for warnings on &
12314 and in case doing stupid register allocation. */
12316 if (storage_class == sc_register)
12318 DECL_REGISTER (decl) = 1;
12319 /* Warn about register storage specifiers on PARM_DECLs. */
12320 if (TREE_CODE (decl) == PARM_DECL)
12322 if (cxx_dialect >= cxx17)
12323 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12324 "ISO C++17 does not allow %<register%> storage "
12325 "class specifier");
12326 else
12327 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12328 "%<register%> storage class specifier used");
12331 else if (storage_class == sc_extern)
12332 DECL_THIS_EXTERN (decl) = 1;
12333 else if (storage_class == sc_static)
12334 DECL_THIS_STATIC (decl) = 1;
12336 /* Set constexpr flag on vars (functions got it in grokfndecl). */
12337 if (constexpr_p && VAR_P (decl))
12338 DECL_DECLARED_CONSTEXPR_P (decl) = true;
12340 /* Record constancy and volatility on the DECL itself . There's
12341 no need to do this when processing a template; we'll do this
12342 for the instantiated declaration based on the type of DECL. */
12343 if (!processing_template_decl)
12344 cp_apply_type_quals_to_decl (type_quals, decl);
12346 return decl;
12350 /* Subroutine of start_function. Ensure that each of the parameter
12351 types (as listed in PARMS) is complete, as is required for a
12352 function definition. */
12354 static void
12355 require_complete_types_for_parms (tree parms)
12357 for (; parms; parms = DECL_CHAIN (parms))
12359 if (dependent_type_p (TREE_TYPE (parms)))
12360 continue;
12361 if (!VOID_TYPE_P (TREE_TYPE (parms))
12362 && complete_type_or_else (TREE_TYPE (parms), parms))
12364 relayout_decl (parms);
12365 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
12367 maybe_warn_parm_abi (TREE_TYPE (parms),
12368 DECL_SOURCE_LOCATION (parms));
12370 else
12371 /* grokparms or complete_type_or_else will have already issued
12372 an error. */
12373 TREE_TYPE (parms) = error_mark_node;
12377 /* Returns nonzero if T is a local variable. */
12380 local_variable_p (const_tree t)
12382 if ((VAR_P (t)
12383 /* A VAR_DECL with a context that is a _TYPE is a static data
12384 member. */
12385 && !TYPE_P (CP_DECL_CONTEXT (t))
12386 /* Any other non-local variable must be at namespace scope. */
12387 && !DECL_NAMESPACE_SCOPE_P (t))
12388 || (TREE_CODE (t) == PARM_DECL))
12389 return 1;
12391 return 0;
12394 /* Like local_variable_p, but suitable for use as a tree-walking
12395 function. */
12397 static tree
12398 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
12399 void * /*data*/)
12401 if (local_variable_p (*tp)
12402 && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
12403 return *tp;
12404 else if (TYPE_P (*tp))
12405 *walk_subtrees = 0;
12407 return NULL_TREE;
12410 /* Check that ARG, which is a default-argument expression for a
12411 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
12412 something goes wrong. DECL may also be a _TYPE node, rather than a
12413 DECL, if there is no DECL available. */
12415 tree
12416 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
12418 tree var;
12419 tree decl_type;
12421 if (TREE_CODE (arg) == DEFAULT_ARG)
12422 /* We get a DEFAULT_ARG when looking at an in-class declaration
12423 with a default argument. Ignore the argument for now; we'll
12424 deal with it after the class is complete. */
12425 return arg;
12427 if (TYPE_P (decl))
12429 decl_type = decl;
12430 decl = NULL_TREE;
12432 else
12433 decl_type = TREE_TYPE (decl);
12435 if (arg == error_mark_node
12436 || decl == error_mark_node
12437 || TREE_TYPE (arg) == error_mark_node
12438 || decl_type == error_mark_node)
12439 /* Something already went wrong. There's no need to check
12440 further. */
12441 return error_mark_node;
12443 /* [dcl.fct.default]
12445 A default argument expression is implicitly converted to the
12446 parameter type. */
12447 ++cp_unevaluated_operand;
12448 perform_implicit_conversion_flags (decl_type, arg, complain,
12449 LOOKUP_IMPLICIT);
12450 --cp_unevaluated_operand;
12452 /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
12453 the call sites. */
12454 if (TYPE_PTR_OR_PTRMEM_P (decl_type)
12455 && null_ptr_cst_p (arg))
12456 return nullptr_node;
12458 /* [dcl.fct.default]
12460 Local variables shall not be used in default argument
12461 expressions.
12463 The keyword `this' shall not be used in a default argument of a
12464 member function. */
12465 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
12466 if (var)
12468 if (complain & tf_warning_or_error)
12470 if (DECL_NAME (var) == this_identifier)
12471 permerror (input_location, "default argument %qE uses %qD",
12472 arg, var);
12473 else
12474 error ("default argument %qE uses local variable %qD", arg, var);
12476 return error_mark_node;
12479 /* All is well. */
12480 return arg;
12483 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
12485 static tree
12486 type_is_deprecated (tree type)
12488 enum tree_code code;
12489 if (TREE_DEPRECATED (type))
12490 return type;
12491 if (TYPE_NAME (type))
12493 if (TREE_DEPRECATED (TYPE_NAME (type)))
12494 return type;
12495 else
12496 return NULL_TREE;
12499 /* Do warn about using typedefs to a deprecated class. */
12500 if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
12501 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
12503 code = TREE_CODE (type);
12505 if (code == POINTER_TYPE || code == REFERENCE_TYPE
12506 || code == OFFSET_TYPE || code == FUNCTION_TYPE
12507 || code == METHOD_TYPE || code == ARRAY_TYPE)
12508 return type_is_deprecated (TREE_TYPE (type));
12510 if (TYPE_PTRMEMFUNC_P (type))
12511 return type_is_deprecated
12512 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
12514 return NULL_TREE;
12517 /* Decode the list of parameter types for a function type.
12518 Given the list of things declared inside the parens,
12519 return a list of types.
12521 If this parameter does not end with an ellipsis, we append
12522 void_list_node.
12524 *PARMS is set to the chain of PARM_DECLs created. */
12526 tree
12527 grokparms (tree parmlist, tree *parms)
12529 tree result = NULL_TREE;
12530 tree decls = NULL_TREE;
12531 tree parm;
12532 int any_error = 0;
12534 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
12536 tree type = NULL_TREE;
12537 tree init = TREE_PURPOSE (parm);
12538 tree decl = TREE_VALUE (parm);
12540 if (parm == void_list_node)
12541 break;
12543 if (! decl || TREE_TYPE (decl) == error_mark_node)
12544 continue;
12546 type = TREE_TYPE (decl);
12547 if (VOID_TYPE_P (type))
12549 if (same_type_p (type, void_type_node)
12550 && !init
12551 && !DECL_NAME (decl) && !result
12552 && TREE_CHAIN (parm) == void_list_node)
12553 /* DR 577: A parameter list consisting of a single
12554 unnamed parameter of non-dependent type 'void'. */
12555 break;
12556 else if (cv_qualified_p (type))
12557 error_at (DECL_SOURCE_LOCATION (decl),
12558 "invalid use of cv-qualified type %qT in "
12559 "parameter declaration", type);
12560 else
12561 error_at (DECL_SOURCE_LOCATION (decl),
12562 "invalid use of type %<void%> in parameter "
12563 "declaration");
12564 /* It's not a good idea to actually create parameters of
12565 type `void'; other parts of the compiler assume that a
12566 void type terminates the parameter list. */
12567 type = error_mark_node;
12568 TREE_TYPE (decl) = error_mark_node;
12571 if (type != error_mark_node)
12573 if (deprecated_state != DEPRECATED_SUPPRESS)
12575 tree deptype = type_is_deprecated (type);
12576 if (deptype)
12577 warn_deprecated_use (deptype, NULL_TREE);
12580 /* Top-level qualifiers on the parameters are
12581 ignored for function types. */
12582 type = cp_build_qualified_type (type, 0);
12583 if (TREE_CODE (type) == METHOD_TYPE)
12585 error ("parameter %qD invalidly declared method type", decl);
12586 type = build_pointer_type (type);
12587 TREE_TYPE (decl) = type;
12589 else if (abstract_virtuals_error (decl, type))
12590 any_error = 1; /* Seems like a good idea. */
12591 else if (cxx_dialect < cxx17 && POINTER_TYPE_P (type))
12593 /* Before C++17 DR 393:
12594 [dcl.fct]/6, parameter types cannot contain pointers
12595 (references) to arrays of unknown bound. */
12596 tree t = TREE_TYPE (type);
12597 int ptr = TYPE_PTR_P (type);
12599 while (1)
12601 if (TYPE_PTR_P (t))
12602 ptr = 1;
12603 else if (TREE_CODE (t) != ARRAY_TYPE)
12604 break;
12605 else if (!TYPE_DOMAIN (t))
12606 break;
12607 t = TREE_TYPE (t);
12609 if (TREE_CODE (t) == ARRAY_TYPE)
12610 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
12612 ? G_("parameter %qD includes pointer to array of "
12613 "unknown bound %qT")
12614 : G_("parameter %qD includes reference to array of "
12615 "unknown bound %qT"),
12616 decl, t);
12619 if (any_error)
12620 init = NULL_TREE;
12621 else if (init && !processing_template_decl)
12622 init = check_default_argument (decl, init, tf_warning_or_error);
12625 DECL_CHAIN (decl) = decls;
12626 decls = decl;
12627 result = tree_cons (init, type, result);
12629 decls = nreverse (decls);
12630 result = nreverse (result);
12631 if (parm)
12632 result = chainon (result, void_list_node);
12633 *parms = decls;
12635 return result;
12639 /* D is a constructor or overloaded `operator='.
12641 Let T be the class in which D is declared. Then, this function
12642 returns:
12644 -1 if D's is an ill-formed constructor or copy assignment operator
12645 whose first parameter is of type `T'.
12646 0 if D is not a copy constructor or copy assignment
12647 operator.
12648 1 if D is a copy constructor or copy assignment operator whose
12649 first parameter is a reference to non-const qualified T.
12650 2 if D is a copy constructor or copy assignment operator whose
12651 first parameter is a reference to const qualified T.
12653 This function can be used as a predicate. Positive values indicate
12654 a copy constructor and nonzero values indicate a copy assignment
12655 operator. */
12658 copy_fn_p (const_tree d)
12660 tree args;
12661 tree arg_type;
12662 int result = 1;
12664 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
12666 if (TREE_CODE (d) == TEMPLATE_DECL
12667 || (DECL_TEMPLATE_INFO (d)
12668 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
12669 /* Instantiations of template member functions are never copy
12670 functions. Note that member functions of templated classes are
12671 represented as template functions internally, and we must
12672 accept those as copy functions. */
12673 return 0;
12675 args = FUNCTION_FIRST_USER_PARMTYPE (d);
12676 if (!args)
12677 return 0;
12679 arg_type = TREE_VALUE (args);
12680 if (arg_type == error_mark_node)
12681 return 0;
12683 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
12685 /* Pass by value copy assignment operator. */
12686 result = -1;
12688 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
12689 && !TYPE_REF_IS_RVALUE (arg_type)
12690 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
12692 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
12693 result = 2;
12695 else
12696 return 0;
12698 args = TREE_CHAIN (args);
12700 if (args && args != void_list_node && !TREE_PURPOSE (args))
12701 /* There are more non-optional args. */
12702 return 0;
12704 return result;
12707 /* D is a constructor or overloaded `operator='.
12709 Let T be the class in which D is declared. Then, this function
12710 returns true when D is a move constructor or move assignment
12711 operator, false otherwise. */
12713 bool
12714 move_fn_p (const_tree d)
12716 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
12718 if (cxx_dialect == cxx98)
12719 /* There are no move constructors if we are in C++98 mode. */
12720 return false;
12722 if (TREE_CODE (d) == TEMPLATE_DECL
12723 || (DECL_TEMPLATE_INFO (d)
12724 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
12725 /* Instantiations of template member functions are never move
12726 functions. Note that member functions of templated classes are
12727 represented as template functions internally, and we must
12728 accept those as move functions. */
12729 return 0;
12731 return move_signature_fn_p (d);
12734 /* D is a constructor or overloaded `operator='.
12736 Then, this function returns true when D has the same signature as a move
12737 constructor or move assignment operator (because either it is such a
12738 ctor/op= or it is a template specialization with the same signature),
12739 false otherwise. */
12741 bool
12742 move_signature_fn_p (const_tree d)
12744 tree args;
12745 tree arg_type;
12746 bool result = false;
12748 args = FUNCTION_FIRST_USER_PARMTYPE (d);
12749 if (!args)
12750 return 0;
12752 arg_type = TREE_VALUE (args);
12753 if (arg_type == error_mark_node)
12754 return 0;
12756 if (TREE_CODE (arg_type) == REFERENCE_TYPE
12757 && TYPE_REF_IS_RVALUE (arg_type)
12758 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
12759 DECL_CONTEXT (d)))
12760 result = true;
12762 args = TREE_CHAIN (args);
12764 if (args && args != void_list_node && !TREE_PURPOSE (args))
12765 /* There are more non-optional args. */
12766 return false;
12768 return result;
12771 /* Remember any special properties of member function DECL. */
12773 void
12774 grok_special_member_properties (tree decl)
12776 tree class_type;
12778 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
12779 return;
12781 class_type = DECL_CONTEXT (decl);
12782 if (IDENTIFIER_CTOR_P (DECL_NAME (decl)))
12784 int ctor = copy_fn_p (decl);
12786 if (!DECL_ARTIFICIAL (decl))
12787 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
12789 if (ctor > 0)
12791 /* [class.copy]
12793 A non-template constructor for class X is a copy
12794 constructor if its first parameter is of type X&, const
12795 X&, volatile X& or const volatile X&, and either there
12796 are no other parameters or else all other parameters have
12797 default arguments. */
12798 TYPE_HAS_COPY_CTOR (class_type) = 1;
12799 if (user_provided_p (decl))
12800 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
12801 if (ctor > 1)
12802 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
12804 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
12805 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
12806 else if (move_fn_p (decl) && user_provided_p (decl))
12807 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
12808 else if (is_list_ctor (decl))
12809 TYPE_HAS_LIST_CTOR (class_type) = 1;
12811 if (DECL_DECLARED_CONSTEXPR_P (decl)
12812 && !ctor && !move_fn_p (decl))
12813 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
12815 else if (DECL_NAME (decl) == assign_op_identifier)
12817 /* [class.copy]
12819 A non-template assignment operator for class X is a copy
12820 assignment operator if its parameter is of type X, X&, const
12821 X&, volatile X& or const volatile X&. */
12823 int assop = copy_fn_p (decl);
12825 if (assop)
12827 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
12828 if (user_provided_p (decl))
12829 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
12830 if (assop != 1)
12831 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
12833 else if (move_fn_p (decl) && user_provided_p (decl))
12834 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
12836 else if (IDENTIFIER_CONV_OP_P (DECL_NAME (decl)))
12837 TYPE_HAS_CONVERSION (class_type) = true;
12839 /* Destructors are handled in check_methods. */
12842 /* Check a constructor DECL has the correct form. Complains
12843 if the class has a constructor of the form X(X). */
12845 bool
12846 grok_ctor_properties (const_tree ctype, const_tree decl)
12848 int ctor_parm = copy_fn_p (decl);
12850 if (ctor_parm < 0)
12852 /* [class.copy]
12854 A declaration of a constructor for a class X is ill-formed if
12855 its first parameter is of type (optionally cv-qualified) X
12856 and either there are no other parameters or else all other
12857 parameters have default arguments.
12859 We *don't* complain about member template instantiations that
12860 have this form, though; they can occur as we try to decide
12861 what constructor to use during overload resolution. Since
12862 overload resolution will never prefer such a constructor to
12863 the non-template copy constructor (which is either explicitly
12864 or implicitly defined), there's no need to worry about their
12865 existence. Theoretically, they should never even be
12866 instantiated, but that's hard to forestall. */
12867 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
12868 ctype, ctype);
12869 return false;
12872 return true;
12875 /* DECL is a declaration for an overloaded or conversion operator. If
12876 COMPLAIN is true, errors are issued for invalid declarations. */
12878 bool
12879 grok_op_properties (tree decl, bool complain)
12881 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
12882 bool methodp = TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE;
12883 tree name = DECL_NAME (decl);
12885 tree class_type = DECL_CONTEXT (decl);
12886 if (class_type && !CLASS_TYPE_P (class_type))
12887 class_type = NULL_TREE;
12889 tree_code operator_code;
12890 unsigned op_flags;
12891 if (IDENTIFIER_CONV_OP_P (name))
12893 /* Conversion operators are TYPE_EXPR for the purposes of this
12894 function. */
12895 operator_code = TYPE_EXPR;
12896 op_flags = OVL_OP_FLAG_UNARY;
12898 else
12900 const ovl_op_info_t *ovl_op = IDENTIFIER_OVL_OP_INFO (name);
12902 operator_code = ovl_op->tree_code;
12903 op_flags = ovl_op->flags;
12904 gcc_checking_assert (operator_code != ERROR_MARK);
12905 DECL_OVERLOADED_OPERATOR_CODE (decl) = operator_code;
12908 if (op_flags & OVL_OP_FLAG_ALLOC)
12910 /* operator new and operator delete are quite special. */
12911 if (class_type)
12912 switch (op_flags)
12914 case OVL_OP_FLAG_ALLOC:
12915 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
12916 break;
12918 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE:
12919 TYPE_GETS_DELETE (class_type) |= 1;
12920 break;
12922 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_VEC:
12923 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
12924 break;
12926 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE | OVL_OP_FLAG_VEC:
12927 TYPE_GETS_DELETE (class_type) |= 2;
12928 break;
12930 default:
12931 gcc_unreachable ();
12934 /* [basic.std.dynamic.allocation]/1:
12936 A program is ill-formed if an allocation function is declared
12937 in a namespace scope other than global scope or declared
12938 static in global scope.
12940 The same also holds true for deallocation functions. */
12941 if (DECL_NAMESPACE_SCOPE_P (decl))
12943 if (CP_DECL_CONTEXT (decl) != global_namespace)
12945 error ("%qD may not be declared within a namespace", decl);
12946 return false;
12949 if (!TREE_PUBLIC (decl))
12951 error ("%qD may not be declared as static", decl);
12952 return false;
12956 if (op_flags & OVL_OP_FLAG_DELETE)
12957 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
12958 else
12960 DECL_IS_OPERATOR_NEW (decl) = 1;
12961 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
12964 return true;
12967 /* An operator function must either be a non-static member function
12968 or have at least one parameter of a class, a reference to a class,
12969 an enumeration, or a reference to an enumeration. 13.4.0.6 */
12970 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
12972 if (operator_code == TYPE_EXPR
12973 || operator_code == CALL_EXPR
12974 || operator_code == COMPONENT_REF
12975 || operator_code == ARRAY_REF
12976 || operator_code == NOP_EXPR)
12978 error ("%qD must be a nonstatic member function", decl);
12979 return false;
12982 if (DECL_STATIC_FUNCTION_P (decl))
12984 error ("%qD must be either a non-static member "
12985 "function or a non-member function", decl);
12986 return false;
12989 for (tree arg = argtypes; ; arg = TREE_CHAIN (arg))
12991 if (!arg || arg == void_list_node)
12993 if (complain)
12994 error ("%qD must have an argument of class or "
12995 "enumerated type", decl);
12996 return false;
12999 tree type = non_reference (TREE_VALUE (arg));
13000 if (type == error_mark_node)
13001 return false;
13003 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
13004 because these checks are performed even on template
13005 functions. */
13006 if (MAYBE_CLASS_TYPE_P (type)
13007 || TREE_CODE (type) == ENUMERAL_TYPE)
13008 break;
13012 if (operator_code == CALL_EXPR)
13013 /* There are no further restrictions on the arguments to an overloaded
13014 "operator ()". */
13015 return true;
13017 if (operator_code == COND_EXPR)
13019 /* 13.4.0.3 */
13020 error ("ISO C++ prohibits overloading operator ?:");
13021 return false;
13024 /* Count the number of arguments and check for ellipsis. */
13025 int arity = 0;
13026 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13028 if (!arg)
13030 /* Variadic. */
13031 error ("%qD must not have variable number of arguments", decl);
13032 return false;
13034 ++arity;
13037 /* Verify correct number of arguments. */
13038 switch (op_flags)
13040 case OVL_OP_FLAG_AMBIARY:
13041 if (arity == 1)
13043 /* We have a unary instance of an ambi-ary op. Remap to the
13044 unary one. */
13045 unsigned alt = ovl_op_alternate[ovl_op_mapping [operator_code]];
13046 const ovl_op_info_t *ovl_op = &ovl_op_info[false][alt];
13047 gcc_checking_assert (ovl_op->flags == OVL_OP_FLAG_UNARY);
13048 operator_code = ovl_op->tree_code;
13049 DECL_OVERLOADED_OPERATOR_CODE (decl) = operator_code;
13051 else if (arity != 2)
13053 /* This was an ambiguous operator but is invalid. */
13054 error (methodp
13055 ? G_("%qD must have either zero or one argument")
13056 : G_("%qD must have either one or two arguments"), decl);
13057 return false;
13059 else if ((operator_code == POSTINCREMENT_EXPR
13060 || operator_code == POSTDECREMENT_EXPR)
13061 && ! processing_template_decl
13062 /* x++ and x--'s second argument must be an int. */
13063 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)),
13064 integer_type_node))
13066 error (methodp
13067 ? G_("postfix %qD must have %<int%> as its argument")
13068 : G_("postfix %qD must have %<int%> as its second argument"),
13069 decl);
13070 return false;
13072 break;
13074 case OVL_OP_FLAG_UNARY:
13075 if (arity != 1)
13077 error (methodp
13078 ? G_("%qD must have no arguments")
13079 : G_("%qD must have exactly one argument"), decl);
13080 return false;
13082 break;
13084 case OVL_OP_FLAG_BINARY:
13085 if (arity != 2)
13087 error (methodp
13088 ? G_("%qD must have exactly one argument")
13089 : G_("%qD must have exactly two arguments"), decl);
13090 return false;
13092 break;
13094 default:
13095 gcc_unreachable ();
13098 /* There can be no default arguments. */
13099 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13100 if (TREE_PURPOSE (arg))
13102 TREE_PURPOSE (arg) = NULL_TREE;
13103 if (operator_code == POSTINCREMENT_EXPR
13104 || operator_code == POSTDECREMENT_EXPR)
13105 pedwarn (input_location, OPT_Wpedantic,
13106 "%qD cannot have default arguments", decl);
13107 else
13109 error ("%qD cannot have default arguments", decl);
13110 return false;
13114 /* At this point the declaration is well-formed. It may not be
13115 sensible though. */
13117 /* Check member function warnings only on the in-class declaration.
13118 There's no point warning on an out-of-class definition. */
13119 if (class_type && class_type != current_class_type)
13120 return true;
13122 /* Warn about conversion operators that will never be used. */
13123 if (IDENTIFIER_CONV_OP_P (name)
13124 && ! DECL_TEMPLATE_INFO (decl)
13125 && warn_conversion)
13127 tree t = TREE_TYPE (name);
13128 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
13130 if (ref)
13131 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
13133 if (VOID_TYPE_P (t))
13134 warning (OPT_Wconversion,
13136 ? G_("conversion to a reference to void "
13137 "will never use a type conversion operator")
13138 : G_("conversion to void "
13139 "will never use a type conversion operator"));
13140 else if (class_type)
13142 if (t == class_type)
13143 warning (OPT_Wconversion,
13145 ? G_("conversion to a reference to the same type "
13146 "will never use a type conversion operator")
13147 : G_("conversion to the same type "
13148 "will never use a type conversion operator"));
13149 /* Don't force t to be complete here. */
13150 else if (MAYBE_CLASS_TYPE_P (t)
13151 && COMPLETE_TYPE_P (t)
13152 && DERIVED_FROM_P (t, class_type))
13153 warning (OPT_Wconversion,
13155 ? G_("conversion to a reference to a base class "
13156 "will never use a type conversion operator")
13157 : G_("conversion to a base class "
13158 "will never use a type conversion operator"));
13162 if (!warn_ecpp)
13163 return true;
13165 /* Effective C++ rules below. */
13167 /* More Effective C++ rule 7. */
13168 if (operator_code == TRUTH_ANDIF_EXPR
13169 || operator_code == TRUTH_ORIF_EXPR
13170 || operator_code == COMPOUND_EXPR)
13171 warning (OPT_Weffc__,
13172 "user-defined %qD always evaluates both arguments", decl);
13174 /* More Effective C++ rule 6. */
13175 if (operator_code == POSTINCREMENT_EXPR
13176 || operator_code == POSTDECREMENT_EXPR
13177 || operator_code == PREINCREMENT_EXPR
13178 || operator_code == PREDECREMENT_EXPR)
13180 tree arg = TREE_VALUE (argtypes);
13181 tree ret = TREE_TYPE (TREE_TYPE (decl));
13182 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
13183 arg = TREE_TYPE (arg);
13184 arg = TYPE_MAIN_VARIANT (arg);
13186 if (operator_code == PREINCREMENT_EXPR
13187 || operator_code == PREDECREMENT_EXPR)
13189 if (TREE_CODE (ret) != REFERENCE_TYPE
13190 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)), arg))
13191 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
13192 build_reference_type (arg));
13194 else
13196 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
13197 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
13201 /* Effective C++ rule 23. */
13202 if (!DECL_ASSIGNMENT_OPERATOR_P (decl)
13203 && (operator_code == PLUS_EXPR
13204 || operator_code == MINUS_EXPR
13205 || operator_code == TRUNC_DIV_EXPR
13206 || operator_code == MULT_EXPR
13207 || operator_code == TRUNC_MOD_EXPR)
13208 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
13209 warning (OPT_Weffc__, "%qD should return by value", decl);
13211 return true;
13214 /* Return a string giving the keyword associate with CODE. */
13216 static const char *
13217 tag_name (enum tag_types code)
13219 switch (code)
13221 case record_type:
13222 return "struct";
13223 case class_type:
13224 return "class";
13225 case union_type:
13226 return "union";
13227 case enum_type:
13228 return "enum";
13229 case typename_type:
13230 return "typename";
13231 default:
13232 gcc_unreachable ();
13236 /* Name lookup in an elaborated-type-specifier (after the keyword
13237 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
13238 elaborated-type-specifier is invalid, issue a diagnostic and return
13239 error_mark_node; otherwise, return the *_TYPE to which it referred.
13240 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
13242 tree
13243 check_elaborated_type_specifier (enum tag_types tag_code,
13244 tree decl,
13245 bool allow_template_p)
13247 tree type;
13249 /* In the case of:
13251 struct S { struct S *p; };
13253 name lookup will find the TYPE_DECL for the implicit "S::S"
13254 typedef. Adjust for that here. */
13255 if (DECL_SELF_REFERENCE_P (decl))
13256 decl = TYPE_NAME (TREE_TYPE (decl));
13258 type = TREE_TYPE (decl);
13260 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
13261 is false for this case as well. */
13262 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
13264 error ("using template type parameter %qT after %qs",
13265 type, tag_name (tag_code));
13266 return error_mark_node;
13268 /* Accept template template parameters. */
13269 else if (allow_template_p
13270 && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
13271 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
13273 /* [dcl.type.elab]
13275 If the identifier resolves to a typedef-name or the
13276 simple-template-id resolves to an alias template
13277 specialization, the elaborated-type-specifier is ill-formed.
13279 In other words, the only legitimate declaration to use in the
13280 elaborated type specifier is the implicit typedef created when
13281 the type is declared. */
13282 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
13283 && !DECL_SELF_REFERENCE_P (decl)
13284 && tag_code != typename_type)
13286 if (alias_template_specialization_p (type))
13287 error ("using alias template specialization %qT after %qs",
13288 type, tag_name (tag_code));
13289 else
13290 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
13291 inform (DECL_SOURCE_LOCATION (decl),
13292 "%qD has a previous declaration here", decl);
13293 return error_mark_node;
13295 else if (TREE_CODE (type) != RECORD_TYPE
13296 && TREE_CODE (type) != UNION_TYPE
13297 && tag_code != enum_type
13298 && tag_code != typename_type)
13300 error ("%qT referred to as %qs", type, tag_name (tag_code));
13301 inform (location_of (type), "%qT has a previous declaration here", type);
13302 return error_mark_node;
13304 else if (TREE_CODE (type) != ENUMERAL_TYPE
13305 && tag_code == enum_type)
13307 error ("%qT referred to as enum", type);
13308 inform (location_of (type), "%qT has a previous declaration here", type);
13309 return error_mark_node;
13311 else if (!allow_template_p
13312 && TREE_CODE (type) == RECORD_TYPE
13313 && CLASSTYPE_IS_TEMPLATE (type))
13315 /* If a class template appears as elaborated type specifier
13316 without a template header such as:
13318 template <class T> class C {};
13319 void f(class C); // No template header here
13321 then the required template argument is missing. */
13322 error ("template argument required for %<%s %T%>",
13323 tag_name (tag_code),
13324 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
13325 return error_mark_node;
13328 return type;
13331 /* Lookup NAME in elaborate type specifier in scope according to
13332 SCOPE and issue diagnostics if necessary.
13333 Return *_TYPE node upon success, NULL_TREE when the NAME is not
13334 found, and ERROR_MARK_NODE for type error. */
13336 static tree
13337 lookup_and_check_tag (enum tag_types tag_code, tree name,
13338 tag_scope scope, bool template_header_p)
13340 tree t;
13341 tree decl;
13342 if (scope == ts_global)
13344 /* First try ordinary name lookup, ignoring hidden class name
13345 injected via friend declaration. */
13346 decl = lookup_name_prefer_type (name, 2);
13347 decl = strip_using_decl (decl);
13348 /* If that fails, the name will be placed in the smallest
13349 non-class, non-function-prototype scope according to 3.3.1/5.
13350 We may already have a hidden name declared as friend in this
13351 scope. So lookup again but not ignoring hidden names.
13352 If we find one, that name will be made visible rather than
13353 creating a new tag. */
13354 if (!decl)
13355 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
13357 else
13358 decl = lookup_type_scope (name, scope);
13360 if (decl
13361 && (DECL_CLASS_TEMPLATE_P (decl)
13362 /* If scope is ts_current we're defining a class, so ignore a
13363 template template parameter. */
13364 || (scope != ts_current
13365 && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
13366 decl = DECL_TEMPLATE_RESULT (decl);
13368 if (decl && TREE_CODE (decl) == TYPE_DECL)
13370 /* Look for invalid nested type:
13371 class C {
13372 class C {};
13373 }; */
13374 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
13376 error ("%qD has the same name as the class in which it is "
13377 "declared",
13378 decl);
13379 return error_mark_node;
13382 /* Two cases we need to consider when deciding if a class
13383 template is allowed as an elaborated type specifier:
13384 1. It is a self reference to its own class.
13385 2. It comes with a template header.
13387 For example:
13389 template <class T> class C {
13390 class C *c1; // DECL_SELF_REFERENCE_P is true
13391 class D;
13393 template <class U> class C; // template_header_p is true
13394 template <class T> class C<T>::D {
13395 class C *c2; // DECL_SELF_REFERENCE_P is true
13396 }; */
13398 t = check_elaborated_type_specifier (tag_code,
13399 decl,
13400 template_header_p
13401 | DECL_SELF_REFERENCE_P (decl));
13402 if (template_header_p && t && CLASS_TYPE_P (t)
13403 && (!CLASSTYPE_TEMPLATE_INFO (t)
13404 || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))))
13406 error ("%qT is not a template", t);
13407 inform (location_of (t), "previous declaration here");
13408 if (TYPE_CLASS_SCOPE_P (t)
13409 && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t)))
13410 inform (input_location,
13411 "perhaps you want to explicitly add %<%T::%>",
13412 TYPE_CONTEXT (t));
13413 t = error_mark_node;
13416 return t;
13418 else if (decl && TREE_CODE (decl) == TREE_LIST)
13420 error ("reference to %qD is ambiguous", name);
13421 print_candidates (decl);
13422 return error_mark_node;
13424 else
13425 return NULL_TREE;
13428 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
13429 Define the tag as a forward-reference if it is not defined.
13431 If a declaration is given, process it here, and report an error if
13432 multiple declarations are not identical.
13434 SCOPE is TS_CURRENT when this is also a definition. Only look in
13435 the current frame for the name (since C++ allows new names in any
13436 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
13437 declaration. Only look beginning from the current scope outward up
13438 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
13440 TEMPLATE_HEADER_P is true when this declaration is preceded by
13441 a set of template parameters. */
13443 static tree
13444 xref_tag_1 (enum tag_types tag_code, tree name,
13445 tag_scope scope, bool template_header_p)
13447 enum tree_code code;
13448 tree context = NULL_TREE;
13450 gcc_assert (identifier_p (name));
13452 switch (tag_code)
13454 case record_type:
13455 case class_type:
13456 code = RECORD_TYPE;
13457 break;
13458 case union_type:
13459 code = UNION_TYPE;
13460 break;
13461 case enum_type:
13462 code = ENUMERAL_TYPE;
13463 break;
13464 default:
13465 gcc_unreachable ();
13468 /* In case of anonymous name, xref_tag is only called to
13469 make type node and push name. Name lookup is not required. */
13470 tree t = NULL_TREE;
13471 if (scope != ts_lambda && !anon_aggrname_p (name))
13472 t = lookup_and_check_tag (tag_code, name, scope, template_header_p);
13474 if (t == error_mark_node)
13475 return error_mark_node;
13477 if (scope != ts_current && t && current_class_type
13478 && template_class_depth (current_class_type)
13479 && template_header_p)
13481 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
13482 return t;
13484 /* Since SCOPE is not TS_CURRENT, we are not looking at a
13485 definition of this tag. Since, in addition, we are currently
13486 processing a (member) template declaration of a template
13487 class, we must be very careful; consider:
13489 template <class X>
13490 struct S1
13492 template <class U>
13493 struct S2
13494 { template <class V>
13495 friend struct S1; };
13497 Here, the S2::S1 declaration should not be confused with the
13498 outer declaration. In particular, the inner version should
13499 have a template parameter of level 2, not level 1. This
13500 would be particularly important if the member declaration
13501 were instead:
13503 template <class V = U> friend struct S1;
13505 say, when we should tsubst into `U' when instantiating
13506 S2. On the other hand, when presented with:
13508 template <class T>
13509 struct S1 {
13510 template <class U>
13511 struct S2 {};
13512 template <class U>
13513 friend struct S2;
13516 we must find the inner binding eventually. We
13517 accomplish this by making sure that the new type we
13518 create to represent this declaration has the right
13519 TYPE_CONTEXT. */
13520 context = TYPE_CONTEXT (t);
13521 t = NULL_TREE;
13524 if (! t)
13526 /* If no such tag is yet defined, create a forward-reference node
13527 and record it as the "definition".
13528 When a real declaration of this type is found,
13529 the forward-reference will be altered into a real type. */
13530 if (code == ENUMERAL_TYPE)
13532 error ("use of enum %q#D without previous declaration", name);
13533 return error_mark_node;
13535 else
13537 t = make_class_type (code);
13538 TYPE_CONTEXT (t) = context;
13539 if (scope == ts_lambda)
13540 /* Mark it as a lambda type. */
13541 CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
13542 t = pushtag (name, t, scope);
13545 else
13547 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
13549 /* Check that we aren't trying to overload a class with different
13550 constraints. */
13551 tree constr = NULL_TREE;
13552 if (current_template_parms)
13554 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
13555 constr = build_constraints (reqs, NULL_TREE);
13557 if (!redeclare_class_template (t, current_template_parms, constr))
13558 return error_mark_node;
13560 else if (!processing_template_decl
13561 && CLASS_TYPE_P (t)
13562 && CLASSTYPE_IS_TEMPLATE (t))
13564 error ("redeclaration of %qT as a non-template", t);
13565 inform (location_of (t), "previous declaration %qD", t);
13566 return error_mark_node;
13569 /* Make injected friend class visible. */
13570 if (scope != ts_within_enclosing_non_class && TYPE_HIDDEN_P (t))
13572 tree decl = TYPE_NAME (t);
13574 DECL_ANTICIPATED (decl) = false;
13575 DECL_FRIEND_P (decl) = false;
13577 if (TYPE_TEMPLATE_INFO (t))
13579 tree tmpl = TYPE_TI_TEMPLATE (t);
13580 DECL_ANTICIPATED (tmpl) = false;
13581 DECL_FRIEND_P (tmpl) = false;
13586 return t;
13589 /* Wrapper for xref_tag_1. */
13591 tree
13592 xref_tag (enum tag_types tag_code, tree name,
13593 tag_scope scope, bool template_header_p)
13595 tree ret;
13596 bool subtime;
13597 subtime = timevar_cond_start (TV_NAME_LOOKUP);
13598 ret = xref_tag_1 (tag_code, name, scope, template_header_p);
13599 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
13600 return ret;
13604 tree
13605 xref_tag_from_type (tree old, tree id, tag_scope scope)
13607 enum tag_types tag_kind;
13609 if (TREE_CODE (old) == RECORD_TYPE)
13610 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
13611 else
13612 tag_kind = union_type;
13614 if (id == NULL_TREE)
13615 id = TYPE_IDENTIFIER (old);
13617 return xref_tag (tag_kind, id, scope, false);
13620 /* Create the binfo hierarchy for REF with (possibly NULL) base list
13621 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
13622 access_* node, and the TREE_VALUE is the type of the base-class.
13623 Non-NULL TREE_TYPE indicates virtual inheritance. */
13625 void
13626 xref_basetypes (tree ref, tree base_list)
13628 tree *basep;
13629 tree binfo, base_binfo;
13630 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
13631 unsigned max_bases = 0; /* Maximum direct bases. */
13632 unsigned max_dvbases = 0; /* Maximum direct virtual bases. */
13633 int i;
13634 tree default_access;
13635 tree igo_prev; /* Track Inheritance Graph Order. */
13637 if (ref == error_mark_node)
13638 return;
13640 /* The base of a derived class is private by default, all others are
13641 public. */
13642 default_access = (TREE_CODE (ref) == RECORD_TYPE
13643 && CLASSTYPE_DECLARED_CLASS (ref)
13644 ? access_private_node : access_public_node);
13646 /* First, make sure that any templates in base-classes are
13647 instantiated. This ensures that if we call ourselves recursively
13648 we do not get confused about which classes are marked and which
13649 are not. */
13650 basep = &base_list;
13651 while (*basep)
13653 tree basetype = TREE_VALUE (*basep);
13655 /* The dependent_type_p call below should really be dependent_scope_p
13656 so that we give a hard error about using an incomplete type as a
13657 base, but we allow it with a pedwarn for backward
13658 compatibility. */
13659 if (processing_template_decl
13660 && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
13661 cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
13662 if (!dependent_type_p (basetype)
13663 && !complete_type_or_else (basetype, NULL))
13664 /* An incomplete type. Remove it from the list. */
13665 *basep = TREE_CHAIN (*basep);
13666 else
13668 max_bases++;
13669 if (TREE_TYPE (*basep))
13670 max_dvbases++;
13671 if (CLASS_TYPE_P (basetype))
13672 max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
13673 basep = &TREE_CHAIN (*basep);
13676 max_vbases += max_dvbases;
13678 TYPE_MARKED_P (ref) = 1;
13680 /* The binfo slot should be empty, unless this is an (ill-formed)
13681 redefinition. */
13682 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
13684 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
13686 binfo = make_tree_binfo (max_bases);
13688 TYPE_BINFO (ref) = binfo;
13689 BINFO_OFFSET (binfo) = size_zero_node;
13690 BINFO_TYPE (binfo) = ref;
13692 /* Apply base-class info set up to the variants of this type. */
13693 fixup_type_variants (ref);
13695 if (max_bases)
13697 vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
13698 /* A C++98 POD cannot have base classes. */
13699 CLASSTYPE_NON_LAYOUT_POD_P (ref) = true;
13701 if (TREE_CODE (ref) == UNION_TYPE)
13702 error ("derived union %qT invalid", ref);
13705 if (max_bases > 1)
13706 warning (OPT_Wmultiple_inheritance,
13707 "%qT defined with multiple direct bases", ref);
13709 if (max_vbases)
13711 /* An aggregate can't have virtual base classes. */
13712 CLASSTYPE_NON_AGGREGATE (ref) = true;
13714 vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
13716 if (max_dvbases)
13717 warning (OPT_Wvirtual_inheritance,
13718 "%qT defined with direct virtual base", ref);
13721 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
13723 tree access = TREE_PURPOSE (base_list);
13724 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
13725 tree basetype = TREE_VALUE (base_list);
13727 if (access == access_default_node)
13728 access = default_access;
13730 /* Before C++17, an aggregate cannot have base classes. In C++17, an
13731 aggregate can't have virtual, private, or protected base classes. */
13732 if (cxx_dialect < cxx17
13733 || access != access_public_node
13734 || via_virtual)
13735 CLASSTYPE_NON_AGGREGATE (ref) = true;
13737 if (PACK_EXPANSION_P (basetype))
13738 basetype = PACK_EXPANSION_PATTERN (basetype);
13739 if (TREE_CODE (basetype) == TYPE_DECL)
13740 basetype = TREE_TYPE (basetype);
13741 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
13743 error ("base type %qT fails to be a struct or class type",
13744 basetype);
13745 goto dropped_base;
13748 base_binfo = NULL_TREE;
13749 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
13751 base_binfo = TYPE_BINFO (basetype);
13752 /* The original basetype could have been a typedef'd type. */
13753 basetype = BINFO_TYPE (base_binfo);
13755 /* Inherit flags from the base. */
13756 TYPE_HAS_NEW_OPERATOR (ref)
13757 |= TYPE_HAS_NEW_OPERATOR (basetype);
13758 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
13759 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
13760 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
13761 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
13762 CLASSTYPE_DIAMOND_SHAPED_P (ref)
13763 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
13764 CLASSTYPE_REPEATED_BASE_P (ref)
13765 |= CLASSTYPE_REPEATED_BASE_P (basetype);
13768 /* We must do this test after we've seen through a typedef
13769 type. */
13770 if (TYPE_MARKED_P (basetype))
13772 if (basetype == ref)
13773 error ("recursive type %qT undefined", basetype);
13774 else
13775 error ("duplicate base type %qT invalid", basetype);
13776 goto dropped_base;
13779 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
13780 /* Regenerate the pack expansion for the bases. */
13781 basetype = make_pack_expansion (basetype);
13783 TYPE_MARKED_P (basetype) = 1;
13785 base_binfo = copy_binfo (base_binfo, basetype, ref,
13786 &igo_prev, via_virtual);
13787 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
13788 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
13790 BINFO_BASE_APPEND (binfo, base_binfo);
13791 BINFO_BASE_ACCESS_APPEND (binfo, access);
13792 continue;
13794 dropped_base:
13795 /* Update max_vbases to reflect the reality that we are dropping
13796 this base: if it reaches zero we want to undo the vec_alloc
13797 above to avoid inconsistencies during error-recovery: eg, in
13798 build_special_member_call, CLASSTYPE_VBASECLASSES non null
13799 and vtt null (c++/27952). */
13800 if (via_virtual)
13801 max_vbases--;
13802 if (CLASS_TYPE_P (basetype))
13803 max_vbases
13804 -= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
13807 if (CLASSTYPE_VBASECLASSES (ref)
13808 && max_vbases == 0)
13809 vec_free (CLASSTYPE_VBASECLASSES (ref));
13811 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
13812 /* If we didn't get max_vbases vbases, we must have shared at
13813 least one of them, and are therefore diamond shaped. */
13814 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
13816 /* Unmark all the types. */
13817 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
13818 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
13819 TYPE_MARKED_P (ref) = 0;
13821 /* Now see if we have a repeated base type. */
13822 if (!CLASSTYPE_REPEATED_BASE_P (ref))
13824 for (base_binfo = binfo; base_binfo;
13825 base_binfo = TREE_CHAIN (base_binfo))
13827 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
13829 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
13830 break;
13832 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
13834 for (base_binfo = binfo; base_binfo;
13835 base_binfo = TREE_CHAIN (base_binfo))
13836 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
13837 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
13838 else
13839 break;
13844 /* Copies the enum-related properties from type SRC to type DST.
13845 Used with the underlying type of an enum and the enum itself. */
13846 static void
13847 copy_type_enum (tree dst, tree src)
13849 tree t;
13850 for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
13852 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
13853 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
13854 TYPE_SIZE (t) = TYPE_SIZE (src);
13855 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
13856 SET_TYPE_MODE (dst, TYPE_MODE (src));
13857 TYPE_PRECISION (t) = TYPE_PRECISION (src);
13858 unsigned valign = TYPE_ALIGN (src);
13859 if (TYPE_USER_ALIGN (t))
13860 valign = MAX (valign, TYPE_ALIGN (t));
13861 else
13862 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
13863 SET_TYPE_ALIGN (t, valign);
13864 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
13868 /* Begin compiling the definition of an enumeration type.
13869 NAME is its name,
13871 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
13873 UNDERLYING_TYPE is the type that will be used as the storage for
13874 the enumeration type. This should be NULL_TREE if no storage type
13875 was specified.
13877 ATTRIBUTES are any attributes specified after the enum-key.
13879 SCOPED_ENUM_P is true if this is a scoped enumeration type.
13881 if IS_NEW is not NULL, gets TRUE iff a new type is created.
13883 Returns the type object, as yet incomplete.
13884 Also records info about it so that build_enumerator
13885 may be used to declare the individual values as they are read. */
13887 tree
13888 start_enum (tree name, tree enumtype, tree underlying_type,
13889 tree attributes, bool scoped_enum_p, bool *is_new)
13891 tree prevtype = NULL_TREE;
13892 gcc_assert (identifier_p (name));
13894 if (is_new)
13895 *is_new = false;
13896 /* [C++0x dcl.enum]p5:
13898 If not explicitly specified, the underlying type of a scoped
13899 enumeration type is int. */
13900 if (!underlying_type && scoped_enum_p)
13901 underlying_type = integer_type_node;
13903 if (underlying_type)
13904 underlying_type = cv_unqualified (underlying_type);
13906 /* If this is the real definition for a previous forward reference,
13907 fill in the contents in the same object that used to be the
13908 forward reference. */
13909 if (!enumtype)
13910 enumtype = lookup_and_check_tag (enum_type, name,
13911 /*tag_scope=*/ts_current,
13912 /*template_header_p=*/false);
13914 /* In case of a template_decl, the only check that should be deferred
13915 to instantiation time is the comparison of underlying types. */
13916 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
13918 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
13920 error_at (input_location, "scoped/unscoped mismatch "
13921 "in enum %q#T", enumtype);
13922 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
13923 "previous definition here");
13924 enumtype = error_mark_node;
13926 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
13928 error_at (input_location, "underlying type mismatch "
13929 "in enum %q#T", enumtype);
13930 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
13931 "previous definition here");
13932 enumtype = error_mark_node;
13934 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
13935 && !dependent_type_p (underlying_type)
13936 && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
13937 && !same_type_p (underlying_type,
13938 ENUM_UNDERLYING_TYPE (enumtype)))
13940 error_at (input_location, "different underlying type "
13941 "in enum %q#T", enumtype);
13942 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
13943 "previous definition here");
13944 underlying_type = NULL_TREE;
13948 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
13949 || processing_template_decl)
13951 /* In case of error, make a dummy enum to allow parsing to
13952 continue. */
13953 if (enumtype == error_mark_node)
13955 name = make_anon_name ();
13956 enumtype = NULL_TREE;
13959 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
13960 of an opaque enum, or an opaque enum of an already defined
13961 enumeration (C++0x only).
13962 In any other case, it'll be NULL_TREE. */
13963 if (!enumtype)
13965 if (is_new)
13966 *is_new = true;
13968 prevtype = enumtype;
13970 /* Do not push the decl more than once, unless we need to
13971 compare underlying types at instantiation time */
13972 if (!enumtype
13973 || TREE_CODE (enumtype) != ENUMERAL_TYPE
13974 || (underlying_type
13975 && dependent_type_p (underlying_type))
13976 || (ENUM_UNDERLYING_TYPE (enumtype)
13977 && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
13979 enumtype = cxx_make_type (ENUMERAL_TYPE);
13980 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
13982 /* std::byte aliases anything. */
13983 if (enumtype != error_mark_node
13984 && TYPE_CONTEXT (enumtype) == std_node
13985 && !strcmp ("byte", TYPE_NAME_STRING (enumtype)))
13986 TYPE_ALIAS_SET (enumtype) = 0;
13988 else
13989 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
13990 false);
13992 if (enumtype == error_mark_node)
13993 return error_mark_node;
13995 /* The enum is considered opaque until the opening '{' of the
13996 enumerator list. */
13997 SET_OPAQUE_ENUM_P (enumtype, true);
13998 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
14001 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
14003 cplus_decl_attributes (&enumtype, attributes, (int)ATTR_FLAG_TYPE_IN_PLACE);
14005 if (underlying_type)
14007 if (ENUM_UNDERLYING_TYPE (enumtype))
14008 /* We already checked that it matches, don't change it to a different
14009 typedef variant. */;
14010 else if (CP_INTEGRAL_TYPE_P (underlying_type))
14012 copy_type_enum (enumtype, underlying_type);
14013 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14015 else if (dependent_type_p (underlying_type))
14016 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14017 else
14018 error ("underlying type %qT of %qT must be an integral type",
14019 underlying_type, enumtype);
14022 /* If into a template class, the returned enum is always the first
14023 declaration (opaque or not) seen. This way all the references to
14024 this type will be to the same declaration. The following ones are used
14025 only to check for definition errors. */
14026 if (prevtype && processing_template_decl)
14027 return prevtype;
14028 else
14029 return enumtype;
14032 /* After processing and defining all the values of an enumeration type,
14033 install their decls in the enumeration type.
14034 ENUMTYPE is the type object. */
14036 void
14037 finish_enum_value_list (tree enumtype)
14039 tree values;
14040 tree underlying_type;
14041 tree decl;
14042 tree value;
14043 tree minnode, maxnode;
14044 tree t;
14046 bool fixed_underlying_type_p
14047 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
14049 /* We built up the VALUES in reverse order. */
14050 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
14052 /* For an enum defined in a template, just set the type of the values;
14053 all further processing is postponed until the template is
14054 instantiated. We need to set the type so that tsubst of a CONST_DECL
14055 works. */
14056 if (processing_template_decl)
14058 for (values = TYPE_VALUES (enumtype);
14059 values;
14060 values = TREE_CHAIN (values))
14061 TREE_TYPE (TREE_VALUE (values)) = enumtype;
14062 return;
14065 /* Determine the minimum and maximum values of the enumerators. */
14066 if (TYPE_VALUES (enumtype))
14068 minnode = maxnode = NULL_TREE;
14070 for (values = TYPE_VALUES (enumtype);
14071 values;
14072 values = TREE_CHAIN (values))
14074 decl = TREE_VALUE (values);
14076 /* [dcl.enum]: Following the closing brace of an enum-specifier,
14077 each enumerator has the type of its enumeration. Prior to the
14078 closing brace, the type of each enumerator is the type of its
14079 initializing value. */
14080 TREE_TYPE (decl) = enumtype;
14082 /* Update the minimum and maximum values, if appropriate. */
14083 value = DECL_INITIAL (decl);
14084 if (value == error_mark_node)
14085 value = integer_zero_node;
14086 /* Figure out what the minimum and maximum values of the
14087 enumerators are. */
14088 if (!minnode)
14089 minnode = maxnode = value;
14090 else if (tree_int_cst_lt (maxnode, value))
14091 maxnode = value;
14092 else if (tree_int_cst_lt (value, minnode))
14093 minnode = value;
14096 else
14097 /* [dcl.enum]
14099 If the enumerator-list is empty, the underlying type is as if
14100 the enumeration had a single enumerator with value 0. */
14101 minnode = maxnode = integer_zero_node;
14103 if (!fixed_underlying_type_p)
14105 /* Compute the number of bits require to represent all values of the
14106 enumeration. We must do this before the type of MINNODE and
14107 MAXNODE are transformed, since tree_int_cst_min_precision relies
14108 on the TREE_TYPE of the value it is passed. */
14109 signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
14110 int lowprec = tree_int_cst_min_precision (minnode, sgn);
14111 int highprec = tree_int_cst_min_precision (maxnode, sgn);
14112 int precision = MAX (lowprec, highprec);
14113 unsigned int itk;
14114 bool use_short_enum;
14116 /* Determine the underlying type of the enumeration.
14118 [dcl.enum]
14120 The underlying type of an enumeration is an integral type that
14121 can represent all the enumerator values defined in the
14122 enumeration. It is implementation-defined which integral type is
14123 used as the underlying type for an enumeration except that the
14124 underlying type shall not be larger than int unless the value of
14125 an enumerator cannot fit in an int or unsigned int.
14127 We use "int" or an "unsigned int" as the underlying type, even if
14128 a smaller integral type would work, unless the user has
14129 explicitly requested that we use the smallest possible type. The
14130 user can request that for all enumerations with a command line
14131 flag, or for just one enumeration with an attribute. */
14133 use_short_enum = flag_short_enums
14134 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
14136 /* If the precision of the type was specified with an attribute and it
14137 was too small, give an error. Otherwise, use it. */
14138 if (TYPE_PRECISION (enumtype))
14140 if (precision > TYPE_PRECISION (enumtype))
14141 error ("specified mode too small for enumeral values");
14142 else
14144 use_short_enum = true;
14145 precision = TYPE_PRECISION (enumtype);
14149 for (itk = (use_short_enum ? itk_char : itk_int);
14150 itk != itk_none;
14151 itk++)
14153 underlying_type = integer_types[itk];
14154 if (underlying_type != NULL_TREE
14155 && TYPE_PRECISION (underlying_type) >= precision
14156 && TYPE_SIGN (underlying_type) == sgn)
14157 break;
14159 if (itk == itk_none)
14161 /* DR 377
14163 IF no integral type can represent all the enumerator values, the
14164 enumeration is ill-formed. */
14165 error ("no integral type can represent all of the enumerator values "
14166 "for %qT", enumtype);
14167 precision = TYPE_PRECISION (long_long_integer_type_node);
14168 underlying_type = integer_types[itk_unsigned_long_long];
14171 /* [dcl.enum]
14173 The value of sizeof() applied to an enumeration type, an object
14174 of an enumeration type, or an enumerator, is the value of sizeof()
14175 applied to the underlying type. */
14176 copy_type_enum (enumtype, underlying_type);
14178 /* Compute the minimum and maximum values for the type.
14180 [dcl.enum]
14182 For an enumeration where emin is the smallest enumerator and emax
14183 is the largest, the values of the enumeration are the values of the
14184 underlying type in the range bmin to bmax, where bmin and bmax are,
14185 respectively, the smallest and largest values of the smallest bit-
14186 field that can store emin and emax. */
14188 /* The middle-end currently assumes that types with TYPE_PRECISION
14189 narrower than their underlying type are suitably zero or sign
14190 extended to fill their mode. Similarly, it assumes that the front
14191 end assures that a value of a particular type must be within
14192 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
14194 We used to set these fields based on bmin and bmax, but that led
14195 to invalid assumptions like optimizing away bounds checking. So
14196 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
14197 TYPE_MAX_VALUE to the values for the mode above and only restrict
14198 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
14199 ENUM_UNDERLYING_TYPE (enumtype)
14200 = build_distinct_type_copy (underlying_type);
14201 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
14202 set_min_and_max_values_for_integral_type
14203 (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
14205 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
14206 if (flag_strict_enums)
14207 set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
14209 else
14210 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
14212 /* Convert each of the enumerators to the type of the underlying
14213 type of the enumeration. */
14214 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
14216 location_t saved_location;
14218 decl = TREE_VALUE (values);
14219 saved_location = input_location;
14220 input_location = DECL_SOURCE_LOCATION (decl);
14221 if (fixed_underlying_type_p)
14222 /* If the enumeration type has a fixed underlying type, we
14223 already checked all of the enumerator values. */
14224 value = DECL_INITIAL (decl);
14225 else
14226 value = perform_implicit_conversion (underlying_type,
14227 DECL_INITIAL (decl),
14228 tf_warning_or_error);
14229 input_location = saved_location;
14231 /* Do not clobber shared ints. */
14232 if (value != error_mark_node)
14234 value = copy_node (value);
14236 TREE_TYPE (value) = enumtype;
14238 DECL_INITIAL (decl) = value;
14241 /* Fix up all variant types of this enum type. */
14242 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
14243 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
14245 if (at_class_scope_p ()
14246 && COMPLETE_TYPE_P (current_class_type)
14247 && UNSCOPED_ENUM_P (enumtype))
14249 insert_late_enum_def_bindings (current_class_type, enumtype);
14250 /* TYPE_FIELDS needs fixup. */
14251 fixup_type_variants (current_class_type);
14254 /* Finish debugging output for this type. */
14255 rest_of_type_compilation (enumtype, namespace_bindings_p ());
14257 /* Each enumerator now has the type of its enumeration. Clear the cache
14258 so that this change in types doesn't confuse us later on. */
14259 clear_cv_and_fold_caches ();
14262 /* Finishes the enum type. This is called only the first time an
14263 enumeration is seen, be it opaque or odinary.
14264 ENUMTYPE is the type object. */
14266 void
14267 finish_enum (tree enumtype)
14269 if (processing_template_decl)
14271 if (at_function_scope_p ())
14272 add_stmt (build_min (TAG_DEFN, enumtype));
14273 return;
14276 /* If this is a forward declaration, there should not be any variants,
14277 though we can get a variant in the middle of an enum-specifier with
14278 wacky code like 'enum E { e = sizeof(const E*) };' */
14279 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
14280 && (TYPE_VALUES (enumtype)
14281 || !TYPE_NEXT_VARIANT (enumtype)));
14284 /* Build and install a CONST_DECL for an enumeration constant of the
14285 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
14286 Apply ATTRIBUTES if available. LOC is the location of NAME.
14287 Assignment of sequential values by default is handled here. */
14289 void
14290 build_enumerator (tree name, tree value, tree enumtype, tree attributes,
14291 location_t loc)
14293 tree decl;
14294 tree context;
14295 tree type;
14297 /* scalar_constant_value will pull out this expression, so make sure
14298 it's folded as appropriate. */
14299 if (processing_template_decl)
14300 value = fold_non_dependent_expr (value);
14302 /* If the VALUE was erroneous, pretend it wasn't there; that will
14303 result in the enum being assigned the next value in sequence. */
14304 if (value == error_mark_node)
14305 value = NULL_TREE;
14307 /* Remove no-op casts from the value. */
14308 if (value)
14309 STRIP_TYPE_NOPS (value);
14311 if (! processing_template_decl)
14313 /* Validate and default VALUE. */
14314 if (value != NULL_TREE)
14316 if (!ENUM_UNDERLYING_TYPE (enumtype))
14318 tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
14319 value, true);
14320 if (tmp_value)
14321 value = tmp_value;
14323 else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14324 (TREE_TYPE (value)))
14325 value = perform_implicit_conversion_flags
14326 (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
14327 LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
14329 if (value == error_mark_node)
14330 value = NULL_TREE;
14332 if (value != NULL_TREE)
14334 if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14335 (TREE_TYPE (value)))
14337 error ("enumerator value for %qD must have integral or "
14338 "unscoped enumeration type", name);
14339 value = NULL_TREE;
14341 else
14343 value = cxx_constant_value (value);
14345 if (TREE_CODE (value) != INTEGER_CST)
14347 error ("enumerator value for %qD is not an integer "
14348 "constant", name);
14349 value = NULL_TREE;
14355 /* Default based on previous value. */
14356 if (value == NULL_TREE)
14358 if (TYPE_VALUES (enumtype))
14360 tree prev_value;
14361 bool overflowed;
14363 /* C++03 7.2/4: If no initializer is specified for the first
14364 enumerator, the type is an unspecified integral
14365 type. Otherwise the type is the same as the type of the
14366 initializing value of the preceding enumerator unless the
14367 incremented value is not representable in that type, in
14368 which case the type is an unspecified integral type
14369 sufficient to contain the incremented value. */
14370 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
14371 if (error_operand_p (prev_value))
14372 value = error_mark_node;
14373 else
14375 tree type = TREE_TYPE (prev_value);
14376 signop sgn = TYPE_SIGN (type);
14377 widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
14378 &overflowed);
14379 if (!overflowed)
14381 bool pos = !wi::neg_p (wi, sgn);
14382 if (!wi::fits_to_tree_p (wi, type))
14384 unsigned int itk;
14385 for (itk = itk_int; itk != itk_none; itk++)
14387 type = integer_types[itk];
14388 if (type != NULL_TREE
14389 && (pos || !TYPE_UNSIGNED (type))
14390 && wi::fits_to_tree_p (wi, type))
14391 break;
14393 if (type && cxx_dialect < cxx11
14394 && itk > itk_unsigned_long)
14395 pedwarn (input_location, OPT_Wlong_long,
14396 pos ? G_("\
14397 incremented enumerator value is too large for %<unsigned long%>") : G_("\
14398 incremented enumerator value is too large for %<long%>"));
14400 if (type == NULL_TREE)
14401 overflowed = true;
14402 else
14403 value = wide_int_to_tree (type, wi);
14406 if (overflowed)
14408 error ("overflow in enumeration values at %qD", name);
14409 value = error_mark_node;
14413 else
14414 value = integer_zero_node;
14417 /* Remove no-op casts from the value. */
14418 STRIP_TYPE_NOPS (value);
14420 /* If the underlying type of the enum is fixed, check whether
14421 the enumerator values fits in the underlying type. If it
14422 does not fit, the program is ill-formed [C++0x dcl.enum]. */
14423 if (ENUM_UNDERLYING_TYPE (enumtype)
14424 && value
14425 && TREE_CODE (value) == INTEGER_CST)
14427 if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
14428 error ("enumerator value %qE is outside the range of underlying "
14429 "type %qT", value, ENUM_UNDERLYING_TYPE (enumtype));
14431 /* Convert the value to the appropriate type. */
14432 value = fold_convert (ENUM_UNDERLYING_TYPE (enumtype), value);
14436 /* C++ associates enums with global, function, or class declarations. */
14437 context = current_scope ();
14439 /* Build the actual enumeration constant. Note that the enumeration
14440 constants have the underlying type of the enum (if it is fixed)
14441 or the type of their initializer (if the underlying type of the
14442 enum is not fixed):
14444 [ C++0x dcl.enum ]
14446 If the underlying type is fixed, the type of each enumerator
14447 prior to the closing brace is the underlying type; if the
14448 initializing value of an enumerator cannot be represented by
14449 the underlying type, the program is ill-formed. If the
14450 underlying type is not fixed, the type of each enumerator is
14451 the type of its initializing value.
14453 If the underlying type is not fixed, it will be computed by
14454 finish_enum and we will reset the type of this enumerator. Of
14455 course, if we're processing a template, there may be no value. */
14456 type = value ? TREE_TYPE (value) : NULL_TREE;
14458 decl = build_decl (loc, CONST_DECL, name, type);
14460 DECL_CONTEXT (decl) = enumtype;
14461 TREE_CONSTANT (decl) = 1;
14462 TREE_READONLY (decl) = 1;
14463 DECL_INITIAL (decl) = value;
14465 if (attributes)
14466 cplus_decl_attributes (&decl, attributes, 0);
14468 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
14470 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
14471 on the TYPE_FIELDS list for `S'. (That's so that you can say
14472 things like `S::i' later.) */
14474 /* The enumerator may be getting declared outside of its enclosing
14475 class, like so:
14477 class S { public: enum E : int; }; enum S::E : int { i = 7; };
14479 For which case we need to make sure that the access of `S::i'
14480 matches the access of `S::E'. */
14481 tree saved_cas = current_access_specifier;
14482 if (TREE_PRIVATE (TYPE_NAME (enumtype)))
14483 current_access_specifier = access_private_node;
14484 else if (TREE_PROTECTED (TYPE_NAME (enumtype)))
14485 current_access_specifier = access_protected_node;
14486 else
14487 current_access_specifier = access_public_node;
14489 finish_member_declaration (decl);
14491 current_access_specifier = saved_cas;
14493 else
14494 pushdecl (decl);
14496 /* Add this enumeration constant to the list for this type. */
14497 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
14500 /* Look for an enumerator with the given NAME within the enumeration
14501 type ENUMTYPE. This routine is used primarily for qualified name
14502 lookup into an enumerator in C++0x, e.g.,
14504 enum class Color { Red, Green, Blue };
14506 Color color = Color::Red;
14508 Returns the value corresponding to the enumerator, or
14509 NULL_TREE if no such enumerator was found. */
14510 tree
14511 lookup_enumerator (tree enumtype, tree name)
14513 tree e;
14514 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
14516 e = purpose_member (name, TYPE_VALUES (enumtype));
14517 return e? TREE_VALUE (e) : NULL_TREE;
14521 /* We're defining DECL. Make sure that its type is OK. */
14523 static void
14524 check_function_type (tree decl, tree current_function_parms)
14526 tree fntype = TREE_TYPE (decl);
14527 tree return_type = complete_type (TREE_TYPE (fntype));
14529 /* In a function definition, arg types must be complete. */
14530 require_complete_types_for_parms (current_function_parms);
14532 if (dependent_type_p (return_type)
14533 || type_uses_auto (return_type))
14534 return;
14535 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
14537 tree args = TYPE_ARG_TYPES (fntype);
14539 error ("return type %q#T is incomplete", return_type);
14541 /* Make it return void instead. */
14542 if (TREE_CODE (fntype) == METHOD_TYPE)
14543 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
14544 void_type_node,
14545 TREE_CHAIN (args));
14546 else
14547 fntype = build_function_type (void_type_node, args);
14548 fntype
14549 = build_exception_variant (fntype,
14550 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
14551 fntype = (cp_build_type_attribute_variant
14552 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
14553 TREE_TYPE (decl) = fntype;
14555 else
14557 abstract_virtuals_error (decl, TREE_TYPE (fntype));
14558 maybe_warn_parm_abi (TREE_TYPE (fntype),
14559 DECL_SOURCE_LOCATION (decl));
14563 /* True iff FN is an implicitly-defined default constructor. */
14565 static bool
14566 implicit_default_ctor_p (tree fn)
14568 return (DECL_CONSTRUCTOR_P (fn)
14569 && !user_provided_p (fn)
14570 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)));
14573 /* Clobber the contents of *this to let the back end know that the object
14574 storage is dead when we enter the constructor or leave the destructor. */
14576 static tree
14577 build_clobber_this ()
14579 /* Clobbering an empty base is pointless, and harmful if its one byte
14580 TYPE_SIZE overlays real data. */
14581 if (is_empty_class (current_class_type))
14582 return void_node;
14584 /* If we have virtual bases, clobber the whole object, but only if we're in
14585 charge. If we don't have virtual bases, clobber the as-base type so we
14586 don't mess with tail padding. */
14587 bool vbases = CLASSTYPE_VBASECLASSES (current_class_type);
14589 tree ctype = current_class_type;
14590 if (!vbases)
14591 ctype = CLASSTYPE_AS_BASE (ctype);
14593 tree clobber = build_constructor (ctype, NULL);
14594 TREE_THIS_VOLATILE (clobber) = true;
14596 tree thisref = current_class_ref;
14597 if (ctype != current_class_type)
14599 thisref = build_nop (build_reference_type (ctype), current_class_ptr);
14600 thisref = convert_from_reference (thisref);
14603 tree exprstmt = build2 (MODIFY_EXPR, void_type_node, thisref, clobber);
14604 if (vbases)
14605 exprstmt = build_if_in_charge (exprstmt);
14607 return exprstmt;
14610 /* Create the FUNCTION_DECL for a function definition.
14611 DECLSPECS and DECLARATOR are the parts of the declaration;
14612 they describe the function's name and the type it returns,
14613 but twisted together in a fashion that parallels the syntax of C.
14615 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
14616 DECLARATOR is really the DECL for the function we are about to
14617 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
14618 indicating that the function is an inline defined in-class.
14620 This function creates a binding context for the function body
14621 as well as setting up the FUNCTION_DECL in current_function_decl.
14623 For C++, we must first check whether that datum makes any sense.
14624 For example, "class A local_a(1,2);" means that variable local_a
14625 is an aggregate of type A, which should have a constructor
14626 applied to it with the argument list [1, 2].
14628 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
14629 or may be a BLOCK if the function has been defined previously
14630 in this translation unit. On exit, DECL_INITIAL (decl1) will be
14631 error_mark_node if the function has never been defined, or
14632 a BLOCK if the function has been defined somewhere. */
14634 bool
14635 start_preparsed_function (tree decl1, tree attrs, int flags)
14637 tree ctype = NULL_TREE;
14638 tree fntype;
14639 tree restype;
14640 int doing_friend = 0;
14641 cp_binding_level *bl;
14642 tree current_function_parms;
14643 struct c_fileinfo *finfo
14644 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
14645 bool honor_interface;
14647 /* Sanity check. */
14648 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
14649 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
14651 fntype = TREE_TYPE (decl1);
14652 if (TREE_CODE (fntype) == METHOD_TYPE)
14653 ctype = TYPE_METHOD_BASETYPE (fntype);
14655 /* ISO C++ 11.4/5. A friend function defined in a class is in
14656 the (lexical) scope of the class in which it is defined. */
14657 if (!ctype && DECL_FRIEND_P (decl1))
14659 ctype = DECL_FRIEND_CONTEXT (decl1);
14661 /* CTYPE could be null here if we're dealing with a template;
14662 for example, `inline friend float foo()' inside a template
14663 will have no CTYPE set. */
14664 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
14665 ctype = NULL_TREE;
14666 else
14667 doing_friend = 1;
14670 if (DECL_DECLARED_INLINE_P (decl1)
14671 && lookup_attribute ("noinline", attrs))
14672 warning_at (DECL_SOURCE_LOCATION (decl1), 0,
14673 "inline function %qD given attribute noinline", decl1);
14675 /* Handle gnu_inline attribute. */
14676 if (GNU_INLINE_P (decl1))
14678 DECL_EXTERNAL (decl1) = 1;
14679 DECL_NOT_REALLY_EXTERN (decl1) = 0;
14680 DECL_INTERFACE_KNOWN (decl1) = 1;
14681 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
14684 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
14685 /* This is a constructor, we must ensure that any default args
14686 introduced by this definition are propagated to the clones
14687 now. The clones are used directly in overload resolution. */
14688 adjust_clone_args (decl1);
14690 /* Sometimes we don't notice that a function is a static member, and
14691 build a METHOD_TYPE for it. Fix that up now. */
14692 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
14693 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
14695 /* Set up current_class_type, and enter the scope of the class, if
14696 appropriate. */
14697 if (ctype)
14698 push_nested_class (ctype);
14699 else if (DECL_STATIC_FUNCTION_P (decl1))
14700 push_nested_class (DECL_CONTEXT (decl1));
14702 /* Now that we have entered the scope of the class, we must restore
14703 the bindings for any template parameters surrounding DECL1, if it
14704 is an inline member template. (Order is important; consider the
14705 case where a template parameter has the same name as a field of
14706 the class.) It is not until after this point that
14707 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
14708 if (flags & SF_INCLASS_INLINE)
14709 maybe_begin_member_template_processing (decl1);
14711 /* Effective C++ rule 15. */
14712 if (warn_ecpp
14713 && DECL_ASSIGNMENT_OPERATOR_P (decl1)
14714 && DECL_OVERLOADED_OPERATOR_IS (decl1, NOP_EXPR)
14715 && VOID_TYPE_P (TREE_TYPE (fntype)))
14716 warning (OPT_Weffc__,
14717 "%<operator=%> should return a reference to %<*this%>");
14719 /* Make the init_value nonzero so pushdecl knows this is not tentative.
14720 error_mark_node is replaced below (in poplevel) with the BLOCK. */
14721 if (!DECL_INITIAL (decl1))
14722 DECL_INITIAL (decl1) = error_mark_node;
14724 /* This function exists in static storage.
14725 (This does not mean `static' in the C sense!) */
14726 TREE_STATIC (decl1) = 1;
14728 /* We must call push_template_decl after current_class_type is set
14729 up. (If we are processing inline definitions after exiting a
14730 class scope, current_class_type will be NULL_TREE until set above
14731 by push_nested_class.) */
14732 if (processing_template_decl)
14734 tree newdecl1 = push_template_decl (decl1);
14735 if (newdecl1 == error_mark_node)
14737 if (ctype || DECL_STATIC_FUNCTION_P (decl1))
14738 pop_nested_class ();
14739 return false;
14741 decl1 = newdecl1;
14744 /* Make sure the parameter and return types are reasonable. When
14745 you declare a function, these types can be incomplete, but they
14746 must be complete when you define the function. */
14747 check_function_type (decl1, DECL_ARGUMENTS (decl1));
14749 /* Build the return declaration for the function. */
14750 restype = TREE_TYPE (fntype);
14752 if (DECL_RESULT (decl1) == NULL_TREE)
14754 tree resdecl;
14756 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
14757 DECL_ARTIFICIAL (resdecl) = 1;
14758 DECL_IGNORED_P (resdecl) = 1;
14759 DECL_RESULT (decl1) = resdecl;
14761 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
14764 /* Record the decl so that the function name is defined.
14765 If we already have a decl for this name, and it is a FUNCTION_DECL,
14766 use the old decl. */
14767 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
14769 /* A specialization is not used to guide overload resolution. */
14770 if (!DECL_FUNCTION_MEMBER_P (decl1)
14771 && !(DECL_USE_TEMPLATE (decl1) &&
14772 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
14774 tree olddecl = pushdecl (decl1);
14776 if (olddecl == error_mark_node)
14777 /* If something went wrong when registering the declaration,
14778 use DECL1; we have to have a FUNCTION_DECL to use when
14779 parsing the body of the function. */
14781 else
14783 /* Otherwise, OLDDECL is either a previous declaration
14784 of the same function or DECL1 itself. */
14786 if (warn_missing_declarations
14787 && olddecl == decl1
14788 && !DECL_MAIN_P (decl1)
14789 && TREE_PUBLIC (decl1)
14790 && !DECL_DECLARED_INLINE_P (decl1))
14792 tree context;
14794 /* Check whether DECL1 is in an anonymous
14795 namespace. */
14796 for (context = DECL_CONTEXT (decl1);
14797 context;
14798 context = DECL_CONTEXT (context))
14800 if (TREE_CODE (context) == NAMESPACE_DECL
14801 && DECL_NAME (context) == NULL_TREE)
14802 break;
14805 if (context == NULL)
14806 warning_at (DECL_SOURCE_LOCATION (decl1),
14807 OPT_Wmissing_declarations,
14808 "no previous declaration for %qD", decl1);
14811 decl1 = olddecl;
14814 else
14816 /* We need to set the DECL_CONTEXT. */
14817 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
14818 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
14820 fntype = TREE_TYPE (decl1);
14821 restype = TREE_TYPE (fntype);
14823 /* If #pragma weak applies, mark the decl appropriately now.
14824 The pragma only applies to global functions. Because
14825 determining whether or not the #pragma applies involves
14826 computing the mangled name for the declaration, we cannot
14827 apply the pragma until after we have merged this declaration
14828 with any previous declarations; if the original declaration
14829 has a linkage specification, that specification applies to
14830 the definition as well, and may affect the mangled name. */
14831 if (DECL_FILE_SCOPE_P (decl1))
14832 maybe_apply_pragma_weak (decl1);
14835 /* We are now in the scope of the function being defined. */
14836 current_function_decl = decl1;
14838 /* Save the parm names or decls from this function's declarator
14839 where store_parm_decls will find them. */
14840 current_function_parms = DECL_ARGUMENTS (decl1);
14842 /* Let the user know we're compiling this function. */
14843 announce_function (decl1);
14845 gcc_assert (DECL_INITIAL (decl1));
14847 /* This function may already have been parsed, in which case just
14848 return; our caller will skip over the body without parsing. */
14849 if (DECL_INITIAL (decl1) != error_mark_node)
14850 return true;
14852 /* Initialize RTL machinery. We cannot do this until
14853 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
14854 even when processing a template; this is how we get
14855 CFUN set up, and our per-function variables initialized.
14856 FIXME factor out the non-RTL stuff. */
14857 bl = current_binding_level;
14858 allocate_struct_function (decl1, processing_template_decl);
14860 /* Initialize the language data structures. Whenever we start
14861 a new function, we destroy temporaries in the usual way. */
14862 cfun->language = ggc_cleared_alloc<language_function> ();
14863 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
14864 current_binding_level = bl;
14866 if (!processing_template_decl && type_uses_auto (restype))
14868 FNDECL_USED_AUTO (decl1) = true;
14869 current_function_auto_return_pattern = restype;
14872 /* Start the statement-tree, start the tree now. */
14873 DECL_SAVED_TREE (decl1) = push_stmt_list ();
14875 /* If we are (erroneously) defining a function that we have already
14876 defined before, wipe out what we knew before. */
14877 if (!DECL_PENDING_INLINE_P (decl1))
14878 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
14880 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
14882 /* We know that this was set up by `grokclassfn'. We do not
14883 wait until `store_parm_decls', since evil parse errors may
14884 never get us to that point. Here we keep the consistency
14885 between `current_class_type' and `current_class_ptr'. */
14886 tree t = DECL_ARGUMENTS (decl1);
14888 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
14889 gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
14891 cp_function_chain->x_current_class_ref
14892 = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
14893 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
14894 cp_function_chain->x_current_class_ptr = t;
14896 /* Constructors and destructors need to know whether they're "in
14897 charge" of initializing virtual base classes. */
14898 t = DECL_CHAIN (t);
14899 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
14901 current_in_charge_parm = t;
14902 t = DECL_CHAIN (t);
14904 if (DECL_HAS_VTT_PARM_P (decl1))
14906 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
14907 current_vtt_parm = t;
14911 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
14912 /* Implicitly-defined methods (like the
14913 destructor for a class in which no destructor
14914 is explicitly declared) must not be defined
14915 until their definition is needed. So, we
14916 ignore interface specifications for
14917 compiler-generated functions. */
14918 && !DECL_ARTIFICIAL (decl1));
14920 if (processing_template_decl)
14921 /* Don't mess with interface flags. */;
14922 else if (DECL_INTERFACE_KNOWN (decl1))
14924 tree ctx = decl_function_context (decl1);
14926 if (DECL_NOT_REALLY_EXTERN (decl1))
14927 DECL_EXTERNAL (decl1) = 0;
14929 if (ctx != NULL_TREE && vague_linkage_p (ctx))
14930 /* This is a function in a local class in an extern inline
14931 or template function. */
14932 comdat_linkage (decl1);
14934 /* If this function belongs to an interface, it is public.
14935 If it belongs to someone else's interface, it is also external.
14936 This only affects inlines and template instantiations. */
14937 else if (!finfo->interface_unknown && honor_interface)
14939 if (DECL_DECLARED_INLINE_P (decl1)
14940 || DECL_TEMPLATE_INSTANTIATION (decl1))
14942 DECL_EXTERNAL (decl1)
14943 = (finfo->interface_only
14944 || (DECL_DECLARED_INLINE_P (decl1)
14945 && ! flag_implement_inlines
14946 && !DECL_VINDEX (decl1)));
14948 /* For WIN32 we also want to put these in linkonce sections. */
14949 maybe_make_one_only (decl1);
14951 else
14952 DECL_EXTERNAL (decl1) = 0;
14953 DECL_INTERFACE_KNOWN (decl1) = 1;
14954 /* If this function is in an interface implemented in this file,
14955 make sure that the back end knows to emit this function
14956 here. */
14957 if (!DECL_EXTERNAL (decl1))
14958 mark_needed (decl1);
14960 else if (finfo->interface_unknown && finfo->interface_only
14961 && honor_interface)
14963 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
14964 interface, we will have both finfo->interface_unknown and
14965 finfo->interface_only set. In that case, we don't want to
14966 use the normal heuristics because someone will supply a
14967 #pragma implementation elsewhere, and deducing it here would
14968 produce a conflict. */
14969 comdat_linkage (decl1);
14970 DECL_EXTERNAL (decl1) = 0;
14971 DECL_INTERFACE_KNOWN (decl1) = 1;
14972 DECL_DEFER_OUTPUT (decl1) = 1;
14974 else
14976 /* This is a definition, not a reference.
14977 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
14978 if (!GNU_INLINE_P (decl1))
14979 DECL_EXTERNAL (decl1) = 0;
14981 if ((DECL_DECLARED_INLINE_P (decl1)
14982 || DECL_TEMPLATE_INSTANTIATION (decl1))
14983 && ! DECL_INTERFACE_KNOWN (decl1))
14984 DECL_DEFER_OUTPUT (decl1) = 1;
14985 else
14986 DECL_INTERFACE_KNOWN (decl1) = 1;
14989 /* Determine the ELF visibility attribute for the function. We must not
14990 do this before calling "pushdecl", as we must allow "duplicate_decls"
14991 to merge any attributes appropriately. We also need to wait until
14992 linkage is set. */
14993 if (!DECL_CLONED_FUNCTION_P (decl1))
14994 determine_visibility (decl1);
14996 if (!processing_template_decl)
14997 maybe_instantiate_noexcept (decl1);
14999 begin_scope (sk_function_parms, decl1);
15001 ++function_depth;
15003 if (DECL_DESTRUCTOR_P (decl1)
15004 || (DECL_CONSTRUCTOR_P (decl1)
15005 && targetm.cxx.cdtor_returns_this ()))
15007 cdtor_label = create_artificial_label (input_location);
15008 LABEL_DECL_CDTOR (cdtor_label) = true;
15011 start_fname_decls ();
15013 store_parm_decls (current_function_parms);
15015 if (!processing_template_decl
15016 && (flag_lifetime_dse > 1)
15017 && DECL_CONSTRUCTOR_P (decl1)
15018 && !DECL_CLONED_FUNCTION_P (decl1)
15019 /* Clobbering an empty base is harmful if it overlays real data. */
15020 && !is_empty_class (current_class_type)
15021 /* We can't clobber safely for an implicitly-defined default constructor
15022 because part of the initialization might happen before we enter the
15023 constructor, via AGGR_INIT_ZERO_FIRST (c++/68006). */
15024 && !implicit_default_ctor_p (decl1))
15025 finish_expr_stmt (build_clobber_this ());
15027 if (!processing_template_decl
15028 && DECL_CONSTRUCTOR_P (decl1)
15029 && sanitize_flags_p (SANITIZE_VPTR)
15030 && !DECL_CLONED_FUNCTION_P (decl1)
15031 && !implicit_default_ctor_p (decl1))
15032 cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr);
15034 start_lambda_scope (decl1);
15036 return true;
15040 /* Like start_preparsed_function, except that instead of a
15041 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
15043 Returns true on success. If the DECLARATOR is not suitable
15044 for a function, we return false, which tells the parser to
15045 skip the entire function. */
15047 bool
15048 start_function (cp_decl_specifier_seq *declspecs,
15049 const cp_declarator *declarator,
15050 tree attrs)
15052 tree decl1;
15054 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
15055 invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION, decl1);
15056 if (decl1 == error_mark_node)
15057 return false;
15058 /* If the declarator is not suitable for a function definition,
15059 cause a syntax error. */
15060 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
15062 error ("invalid function declaration");
15063 return false;
15066 if (DECL_MAIN_P (decl1))
15067 /* main must return int. grokfndecl should have corrected it
15068 (and issued a diagnostic) if the user got it wrong. */
15069 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
15070 integer_type_node));
15072 return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
15075 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
15076 FN. */
15078 static bool
15079 use_eh_spec_block (tree fn)
15081 return (flag_exceptions && flag_enforce_eh_specs
15082 && !processing_template_decl
15083 && !type_throw_all_p (TREE_TYPE (fn))
15084 /* We insert the EH_SPEC_BLOCK only in the original
15085 function; then, it is copied automatically to the
15086 clones. */
15087 && !DECL_CLONED_FUNCTION_P (fn)
15088 /* Implicitly-generated constructors and destructors have
15089 exception specifications. However, those specifications
15090 are the union of the possible exceptions specified by the
15091 constructors/destructors for bases and members, so no
15092 unallowed exception will ever reach this function. By
15093 not creating the EH_SPEC_BLOCK we save a little memory,
15094 and we avoid spurious warnings about unreachable
15095 code. */
15096 && !DECL_DEFAULTED_FN (fn));
15099 /* Store the parameter declarations into the current function declaration.
15100 This is called after parsing the parameter declarations, before
15101 digesting the body of the function.
15103 Also install to binding contour return value identifier, if any. */
15105 static void
15106 store_parm_decls (tree current_function_parms)
15108 tree fndecl = current_function_decl;
15109 tree parm;
15111 /* This is a chain of any other decls that came in among the parm
15112 declarations. If a parm is declared with enum {foo, bar} x;
15113 then CONST_DECLs for foo and bar are put here. */
15114 tree nonparms = NULL_TREE;
15116 if (current_function_parms)
15118 /* This case is when the function was defined with an ANSI prototype.
15119 The parms already have decls, so we need not do anything here
15120 except record them as in effect
15121 and complain if any redundant old-style parm decls were written. */
15123 tree specparms = current_function_parms;
15124 tree next;
15126 /* Must clear this because it might contain TYPE_DECLs declared
15127 at class level. */
15128 current_binding_level->names = NULL;
15130 /* If we're doing semantic analysis, then we'll call pushdecl
15131 for each of these. We must do them in reverse order so that
15132 they end in the correct forward order. */
15133 specparms = nreverse (specparms);
15135 for (parm = specparms; parm; parm = next)
15137 next = DECL_CHAIN (parm);
15138 if (TREE_CODE (parm) == PARM_DECL)
15139 pushdecl (parm);
15140 else
15142 /* If we find an enum constant or a type tag,
15143 put it aside for the moment. */
15144 TREE_CHAIN (parm) = NULL_TREE;
15145 nonparms = chainon (nonparms, parm);
15149 /* Get the decls in their original chain order and record in the
15150 function. This is all and only the PARM_DECLs that were
15151 pushed into scope by the loop above. */
15152 DECL_ARGUMENTS (fndecl) = get_local_decls ();
15154 else
15155 DECL_ARGUMENTS (fndecl) = NULL_TREE;
15157 /* Now store the final chain of decls for the arguments
15158 as the decl-chain of the current lexical scope.
15159 Put the enumerators in as well, at the front so that
15160 DECL_ARGUMENTS is not modified. */
15161 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
15163 if (use_eh_spec_block (current_function_decl))
15164 current_eh_spec_block = begin_eh_spec_block ();
15168 /* We have finished doing semantic analysis on DECL, but have not yet
15169 generated RTL for its body. Save away our current state, so that
15170 when we want to generate RTL later we know what to do. */
15172 static void
15173 save_function_data (tree decl)
15175 struct language_function *f;
15177 /* Save the language-specific per-function data so that we can
15178 get it back when we really expand this function. */
15179 gcc_assert (!DECL_PENDING_INLINE_P (decl));
15181 /* Make a copy. */
15182 f = ggc_alloc<language_function> ();
15183 memcpy (f, cp_function_chain, sizeof (struct language_function));
15184 DECL_SAVED_FUNCTION_DATA (decl) = f;
15186 /* Clear out the bits we don't need. */
15187 f->base.x_stmt_tree.x_cur_stmt_list = NULL;
15188 f->bindings = NULL;
15189 f->x_local_names = NULL;
15190 f->base.local_typedefs = NULL;
15194 /* Set the return value of the constructor (if present). */
15196 static void
15197 finish_constructor_body (void)
15199 tree val;
15200 tree exprstmt;
15202 if (targetm.cxx.cdtor_returns_this ())
15204 /* Any return from a constructor will end up here. */
15205 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15207 val = DECL_ARGUMENTS (current_function_decl);
15208 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15209 DECL_RESULT (current_function_decl), val);
15210 /* Return the address of the object. */
15211 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15212 add_stmt (exprstmt);
15216 /* Do all the processing for the beginning of a destructor; set up the
15217 vtable pointers and cleanups for bases and members. */
15219 static void
15220 begin_destructor_body (void)
15222 tree compound_stmt;
15224 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
15225 issued an error message. We still want to try to process the
15226 body of the function, but initialize_vtbl_ptrs will crash if
15227 TYPE_BINFO is NULL. */
15228 if (COMPLETE_TYPE_P (current_class_type))
15230 compound_stmt = begin_compound_stmt (0);
15231 /* Make all virtual function table pointers in non-virtual base
15232 classes point to CURRENT_CLASS_TYPE's virtual function
15233 tables. */
15234 initialize_vtbl_ptrs (current_class_ptr);
15235 finish_compound_stmt (compound_stmt);
15237 if (flag_lifetime_dse
15238 /* Clobbering an empty base is harmful if it overlays real data. */
15239 && !is_empty_class (current_class_type))
15240 finish_decl_cleanup (NULL_TREE, build_clobber_this ());
15242 /* And insert cleanups for our bases and members so that they
15243 will be properly destroyed if we throw. */
15244 push_base_cleanups ();
15248 /* At the end of every destructor we generate code to delete the object if
15249 necessary. Do that now. */
15251 static void
15252 finish_destructor_body (void)
15254 tree exprstmt;
15256 /* Any return from a destructor will end up here; that way all base
15257 and member cleanups will be run when the function returns. */
15258 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15260 if (targetm.cxx.cdtor_returns_this ())
15262 tree val;
15264 val = DECL_ARGUMENTS (current_function_decl);
15265 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15266 DECL_RESULT (current_function_decl), val);
15267 /* Return the address of the object. */
15268 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15269 add_stmt (exprstmt);
15273 /* Do the necessary processing for the beginning of a function body, which
15274 in this case includes member-initializers, but not the catch clauses of
15275 a function-try-block. Currently, this means opening a binding level
15276 for the member-initializers (in a ctor), member cleanups (in a dtor),
15277 and capture proxies (in a lambda operator()). */
15279 tree
15280 begin_function_body (void)
15282 tree stmt;
15284 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
15285 return NULL_TREE;
15287 if (processing_template_decl)
15288 /* Do nothing now. */;
15289 else
15290 /* Always keep the BLOCK node associated with the outermost pair of
15291 curly braces of a function. These are needed for correct
15292 operation of dwarfout.c. */
15293 keep_next_level (true);
15295 stmt = begin_compound_stmt (BCS_FN_BODY);
15297 if (processing_template_decl)
15298 /* Do nothing now. */;
15299 else if (DECL_DESTRUCTOR_P (current_function_decl))
15300 begin_destructor_body ();
15302 return stmt;
15305 /* Do the processing for the end of a function body. Currently, this means
15306 closing out the cleanups for fully-constructed bases and members, and in
15307 the case of the destructor, deleting the object if desired. Again, this
15308 is only meaningful for [cd]tors, since they are the only functions where
15309 there is a significant distinction between the main body and any
15310 function catch clauses. Handling, say, main() return semantics here
15311 would be wrong, as flowing off the end of a function catch clause for
15312 main() would also need to return 0. */
15314 void
15315 finish_function_body (tree compstmt)
15317 if (compstmt == NULL_TREE)
15318 return;
15320 /* Close the block. */
15321 finish_compound_stmt (compstmt);
15323 if (processing_template_decl)
15324 /* Do nothing now. */;
15325 else if (DECL_CONSTRUCTOR_P (current_function_decl))
15326 finish_constructor_body ();
15327 else if (DECL_DESTRUCTOR_P (current_function_decl))
15328 finish_destructor_body ();
15331 /* Given a function, returns the BLOCK corresponding to the outermost level
15332 of curly braces, skipping the artificial block created for constructor
15333 initializers. */
15335 tree
15336 outer_curly_brace_block (tree fndecl)
15338 tree block = DECL_INITIAL (fndecl);
15339 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15340 return block;
15341 block = BLOCK_SUBBLOCKS (block);
15342 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15343 return block;
15344 block = BLOCK_SUBBLOCKS (block);
15345 gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
15346 return block;
15349 /* If FNDECL is a class's key method, add the class to the list of
15350 keyed classes that should be emitted. */
15352 static void
15353 record_key_method_defined (tree fndecl)
15355 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
15356 && DECL_VIRTUAL_P (fndecl)
15357 && !processing_template_decl)
15359 tree fnclass = DECL_CONTEXT (fndecl);
15360 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
15361 vec_safe_push (keyed_classes, fnclass);
15365 /* Subroutine of finish_function.
15366 Save the body of constexpr functions for possible
15367 future compile time evaluation. */
15369 static void
15370 maybe_save_function_definition (tree fun)
15372 if (!processing_template_decl
15373 && DECL_DECLARED_CONSTEXPR_P (fun)
15374 && !cp_function_chain->invalid_constexpr
15375 && !DECL_CLONED_FUNCTION_P (fun))
15376 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
15379 /* Finish up a function declaration and compile that function
15380 all the way to assembler language output. The free the storage
15381 for the function definition. INLINE_P is TRUE if we just
15382 finished processing the body of an in-class inline function
15383 definition. (This processing will have taken place after the
15384 class definition is complete.) */
15386 tree
15387 finish_function (bool inline_p)
15389 tree fndecl = current_function_decl;
15390 tree fntype, ctype = NULL_TREE;
15392 /* When we get some parse errors, we can end up without a
15393 current_function_decl, so cope. */
15394 if (fndecl == NULL_TREE)
15395 return error_mark_node;
15397 finish_lambda_scope ();
15399 if (c_dialect_objc ())
15400 objc_finish_function ();
15402 record_key_method_defined (fndecl);
15404 fntype = TREE_TYPE (fndecl);
15406 /* TREE_READONLY (fndecl) = 1;
15407 This caused &foo to be of type ptr-to-const-function
15408 which then got a warning when stored in a ptr-to-function variable. */
15410 gcc_assert (building_stmt_list_p ());
15411 /* The current function is being defined, so its DECL_INITIAL should
15412 be set, and unless there's a multiple definition, it should be
15413 error_mark_node. */
15414 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
15416 /* For a cloned function, we've already got all the code we need;
15417 there's no need to add any extra bits. */
15418 if (!DECL_CLONED_FUNCTION_P (fndecl))
15420 /* Make it so that `main' always returns 0 by default. */
15421 if (DECL_MAIN_P (current_function_decl))
15422 finish_return_stmt (integer_zero_node);
15424 if (use_eh_spec_block (current_function_decl))
15425 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
15426 (TREE_TYPE (current_function_decl)),
15427 current_eh_spec_block);
15430 /* If we're saving up tree structure, tie off the function now. */
15431 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
15433 if (fn_contains_cilk_spawn_p (cfun) && !processing_template_decl)
15434 cfun->cilk_frame_decl = insert_cilk_frame (fndecl);
15436 finish_fname_decls ();
15438 /* If this function can't throw any exceptions, remember that. */
15439 if (!processing_template_decl
15440 && !cp_function_chain->can_throw
15441 && !flag_non_call_exceptions
15442 && !decl_replaceable_p (fndecl))
15443 TREE_NOTHROW (fndecl) = 1;
15445 /* This must come after expand_function_end because cleanups might
15446 have declarations (from inline functions) that need to go into
15447 this function's blocks. */
15449 /* If the current binding level isn't the outermost binding level
15450 for this function, either there is a bug, or we have experienced
15451 syntax errors and the statement tree is malformed. */
15452 if (current_binding_level->kind != sk_function_parms)
15454 /* Make sure we have already experienced errors. */
15455 gcc_assert (errorcount);
15457 /* Throw away the broken statement tree and extra binding
15458 levels. */
15459 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
15461 while (current_binding_level->kind != sk_function_parms)
15463 if (current_binding_level->kind == sk_class)
15464 pop_nested_class ();
15465 else
15466 poplevel (0, 0, 0);
15469 poplevel (1, 0, 1);
15471 /* Statements should always be full-expressions at the outermost set
15472 of curly braces for a function. */
15473 gcc_assert (stmts_are_full_exprs_p ());
15475 /* If there are no return statements in a function with auto return type,
15476 the return type is void. But if the declared type is something like
15477 auto*, this is an error. */
15478 if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
15479 && TREE_TYPE (fntype) == current_function_auto_return_pattern)
15481 if (is_auto (current_function_auto_return_pattern))
15483 apply_deduced_return_type (fndecl, void_type_node);
15484 fntype = TREE_TYPE (fndecl);
15486 else if (!current_function_returns_value
15487 && !current_function_returns_null)
15489 error ("no return statements in function returning %qT",
15490 current_function_auto_return_pattern);
15491 inform (input_location, "only plain %<auto%> return type can be "
15492 "deduced to %<void%>");
15496 // If this is a concept, check that the definition is reasonable.
15497 if (DECL_DECLARED_CONCEPT_P (fndecl))
15498 check_function_concept (fndecl);
15500 /* Lambda closure members are implicitly constexpr if possible. */
15501 if (cxx_dialect >= cxx17
15502 && LAMBDA_TYPE_P (CP_DECL_CONTEXT (fndecl)))
15503 DECL_DECLARED_CONSTEXPR_P (fndecl)
15504 = ((processing_template_decl
15505 || is_valid_constexpr_fn (fndecl, /*complain*/false))
15506 && potential_constant_expression (DECL_SAVED_TREE (fndecl)));
15508 /* Save constexpr function body before it gets munged by
15509 the NRV transformation. */
15510 maybe_save_function_definition (fndecl);
15512 /* Invoke the pre-genericize plugin before we start munging things. */
15513 if (!processing_template_decl)
15514 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
15516 /* Perform delayed folding before NRV transformation. */
15517 if (!processing_template_decl)
15518 cp_fold_function (fndecl);
15520 /* Set up the named return value optimization, if we can. Candidate
15521 variables are selected in check_return_expr. */
15522 if (current_function_return_value)
15524 tree r = current_function_return_value;
15525 tree outer;
15527 if (r != error_mark_node
15528 /* This is only worth doing for fns that return in memory--and
15529 simpler, since we don't have to worry about promoted modes. */
15530 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
15531 /* Only allow this for variables declared in the outer scope of
15532 the function so we know that their lifetime always ends with a
15533 return; see g++.dg/opt/nrv6.C. We could be more flexible if
15534 we were to do this optimization in tree-ssa. */
15535 && (outer = outer_curly_brace_block (fndecl))
15536 && chain_member (r, BLOCK_VARS (outer)))
15537 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
15539 current_function_return_value = NULL_TREE;
15542 /* Remember that we were in class scope. */
15543 if (current_class_name)
15544 ctype = current_class_type;
15546 /* Must mark the RESULT_DECL as being in this function. */
15547 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
15549 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
15550 to the FUNCTION_DECL node itself. */
15551 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
15553 /* Save away current state, if appropriate. */
15554 if (!processing_template_decl)
15555 save_function_data (fndecl);
15557 /* Complain if there's just no return statement. */
15558 if (warn_return_type
15559 && !VOID_TYPE_P (TREE_TYPE (fntype))
15560 && !dependent_type_p (TREE_TYPE (fntype))
15561 && !current_function_returns_value && !current_function_returns_null
15562 /* Don't complain if we abort or throw. */
15563 && !current_function_returns_abnormally
15564 /* Don't complain if there's an infinite loop. */
15565 && !current_function_infinite_loop
15566 /* Don't complain if we are declared noreturn. */
15567 && !TREE_THIS_VOLATILE (fndecl)
15568 && !DECL_NAME (DECL_RESULT (fndecl))
15569 && !TREE_NO_WARNING (fndecl)
15570 /* Structor return values (if any) are set by the compiler. */
15571 && !DECL_CONSTRUCTOR_P (fndecl)
15572 && !DECL_DESTRUCTOR_P (fndecl)
15573 && targetm.warn_func_return (fndecl))
15575 warning (OPT_Wreturn_type,
15576 "no return statement in function returning non-void");
15577 TREE_NO_WARNING (fndecl) = 1;
15580 /* Store the end of the function, so that we get good line number
15581 info for the epilogue. */
15582 cfun->function_end_locus = input_location;
15584 /* Complain about parameters that are only set, but never otherwise used. */
15585 if (warn_unused_but_set_parameter
15586 && !processing_template_decl
15587 && errorcount == unused_but_set_errorcount
15588 && !DECL_CLONED_FUNCTION_P (fndecl))
15590 tree decl;
15592 for (decl = DECL_ARGUMENTS (fndecl);
15593 decl;
15594 decl = DECL_CHAIN (decl))
15595 if (TREE_USED (decl)
15596 && TREE_CODE (decl) == PARM_DECL
15597 && !DECL_READ_P (decl)
15598 && DECL_NAME (decl)
15599 && !DECL_ARTIFICIAL (decl)
15600 && !TREE_NO_WARNING (decl)
15601 && !DECL_IN_SYSTEM_HEADER (decl)
15602 && TREE_TYPE (decl) != error_mark_node
15603 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
15604 && (!CLASS_TYPE_P (TREE_TYPE (decl))
15605 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
15606 warning_at (DECL_SOURCE_LOCATION (decl),
15607 OPT_Wunused_but_set_parameter,
15608 "parameter %qD set but not used", decl);
15609 unused_but_set_errorcount = errorcount;
15612 /* Complain about locally defined typedefs that are not used in this
15613 function. */
15614 maybe_warn_unused_local_typedefs ();
15616 /* Possibly warn about unused parameters. */
15617 if (warn_unused_parameter
15618 && !processing_template_decl
15619 && !DECL_CLONED_FUNCTION_P (fndecl))
15620 do_warn_unused_parameter (fndecl);
15622 /* Genericize before inlining. */
15623 if (!processing_template_decl)
15625 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
15626 cp_genericize (fndecl);
15627 /* Clear out the bits we don't need. */
15628 f->x_current_class_ptr = NULL;
15629 f->x_current_class_ref = NULL;
15630 f->x_eh_spec_block = NULL;
15631 f->x_in_charge_parm = NULL;
15632 f->x_vtt_parm = NULL;
15633 f->x_return_value = NULL;
15634 f->bindings = NULL;
15635 f->extern_decl_map = NULL;
15636 f->infinite_loops = NULL;
15638 /* Clear out the bits we don't need. */
15639 local_names = NULL;
15641 /* We're leaving the context of this function, so zap cfun. It's still in
15642 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
15643 set_cfun (NULL);
15644 current_function_decl = NULL;
15646 /* If this is an in-class inline definition, we may have to pop the
15647 bindings for the template parameters that we added in
15648 maybe_begin_member_template_processing when start_function was
15649 called. */
15650 if (inline_p)
15651 maybe_end_member_template_processing ();
15653 /* Leave the scope of the class. */
15654 if (ctype)
15655 pop_nested_class ();
15657 --function_depth;
15659 /* Clean up. */
15660 current_function_decl = NULL_TREE;
15662 invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
15663 return fndecl;
15666 /* Create the FUNCTION_DECL for a function definition.
15667 DECLSPECS and DECLARATOR are the parts of the declaration;
15668 they describe the return type and the name of the function,
15669 but twisted together in a fashion that parallels the syntax of C.
15671 This function creates a binding context for the function body
15672 as well as setting up the FUNCTION_DECL in current_function_decl.
15674 Returns a FUNCTION_DECL on success.
15676 If the DECLARATOR is not suitable for a function (it defines a datum
15677 instead), we return 0, which tells yyparse to report a parse error.
15679 May return void_type_node indicating that this method is actually
15680 a friend. See grokfield for more details.
15682 Came here with a `.pushlevel' .
15684 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
15685 CHANGES TO CODE IN `grokfield'. */
15687 tree
15688 grokmethod (cp_decl_specifier_seq *declspecs,
15689 const cp_declarator *declarator, tree attrlist)
15691 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
15692 &attrlist);
15694 if (fndecl == error_mark_node)
15695 return error_mark_node;
15697 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
15699 error ("invalid member function declaration");
15700 return error_mark_node;
15703 if (attrlist)
15704 cplus_decl_attributes (&fndecl, attrlist, 0);
15706 /* Pass friends other than inline friend functions back. */
15707 if (fndecl == void_type_node)
15708 return fndecl;
15710 if (DECL_IN_AGGR_P (fndecl))
15712 if (DECL_CLASS_SCOPE_P (fndecl))
15713 error ("%qD is already defined in class %qT", fndecl,
15714 DECL_CONTEXT (fndecl));
15715 return error_mark_node;
15718 check_template_shadow (fndecl);
15720 if (TREE_PUBLIC (fndecl))
15721 DECL_COMDAT (fndecl) = 1;
15722 DECL_DECLARED_INLINE_P (fndecl) = 1;
15723 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
15725 /* We process method specializations in finish_struct_1. */
15726 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
15728 fndecl = push_template_decl (fndecl);
15729 if (fndecl == error_mark_node)
15730 return fndecl;
15733 if (! DECL_FRIEND_P (fndecl))
15735 if (DECL_CHAIN (fndecl))
15737 fndecl = copy_node (fndecl);
15738 TREE_CHAIN (fndecl) = NULL_TREE;
15742 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
15744 DECL_IN_AGGR_P (fndecl) = 1;
15745 return fndecl;
15749 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
15750 we can lay it out later, when and if its type becomes complete.
15752 Also handle constexpr variables where the initializer involves
15753 an unlowered PTRMEM_CST because the class isn't complete yet. */
15755 void
15756 maybe_register_incomplete_var (tree var)
15758 gcc_assert (VAR_P (var));
15760 /* Keep track of variables with incomplete types. */
15761 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
15762 && DECL_EXTERNAL (var))
15764 tree inner_type = TREE_TYPE (var);
15766 while (TREE_CODE (inner_type) == ARRAY_TYPE)
15767 inner_type = TREE_TYPE (inner_type);
15768 inner_type = TYPE_MAIN_VARIANT (inner_type);
15770 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
15771 /* RTTI TD entries are created while defining the type_info. */
15772 || (TYPE_LANG_SPECIFIC (inner_type)
15773 && TYPE_BEING_DEFINED (inner_type)))
15775 incomplete_var iv = {var, inner_type};
15776 vec_safe_push (incomplete_vars, iv);
15778 else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
15779 && decl_constant_var_p (var)
15780 && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
15782 /* When the outermost open class is complete we can resolve any
15783 pointers-to-members. */
15784 tree context = outermost_open_class ();
15785 incomplete_var iv = {var, context};
15786 vec_safe_push (incomplete_vars, iv);
15791 /* Called when a class type (given by TYPE) is defined. If there are
15792 any existing VAR_DECLs whose type has been completed by this
15793 declaration, update them now. */
15795 void
15796 complete_vars (tree type)
15798 unsigned ix;
15799 incomplete_var *iv;
15801 for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
15803 if (same_type_p (type, iv->incomplete_type))
15805 tree var = iv->decl;
15806 tree type = TREE_TYPE (var);
15808 if (type != error_mark_node
15809 && (TYPE_MAIN_VARIANT (strip_array_types (type))
15810 == iv->incomplete_type))
15812 /* Complete the type of the variable. The VAR_DECL itself
15813 will be laid out in expand_expr. */
15814 complete_type (type);
15815 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
15818 /* Remove this entry from the list. */
15819 incomplete_vars->unordered_remove (ix);
15821 else
15822 ix++;
15825 /* Check for pending declarations which may have abstract type. */
15826 complete_type_check_abstract (type);
15829 /* If DECL is of a type which needs a cleanup, build and return an
15830 expression to perform that cleanup here. Return NULL_TREE if no
15831 cleanup need be done. DECL can also be a _REF when called from
15832 split_nonconstant_init_1. */
15834 tree
15835 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
15837 tree type;
15838 tree attr;
15839 tree cleanup;
15841 /* Assume no cleanup is required. */
15842 cleanup = NULL_TREE;
15844 if (error_operand_p (decl))
15845 return cleanup;
15847 /* Handle "__attribute__((cleanup))". We run the cleanup function
15848 before the destructor since the destructor is what actually
15849 terminates the lifetime of the object. */
15850 if (DECL_P (decl))
15851 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
15852 else
15853 attr = NULL_TREE;
15854 if (attr)
15856 tree id;
15857 tree fn;
15858 tree arg;
15860 /* Get the name specified by the user for the cleanup function. */
15861 id = TREE_VALUE (TREE_VALUE (attr));
15862 /* Look up the name to find the cleanup function to call. It is
15863 important to use lookup_name here because that is what is
15864 used in c-common.c:handle_cleanup_attribute when performing
15865 initial checks on the attribute. Note that those checks
15866 include ensuring that the function found is not an overloaded
15867 function, or an object with an overloaded call operator,
15868 etc.; we can rely on the fact that the function found is an
15869 ordinary FUNCTION_DECL. */
15870 fn = lookup_name (id);
15871 arg = build_address (decl);
15872 if (!mark_used (decl, complain) && !(complain & tf_error))
15873 return error_mark_node;
15874 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
15875 if (cleanup == error_mark_node)
15876 return error_mark_node;
15878 /* Handle ordinary C++ destructors. */
15879 type = TREE_TYPE (decl);
15880 if (type_build_dtor_call (type))
15882 int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
15883 tree addr;
15884 tree call;
15886 if (TREE_CODE (type) == ARRAY_TYPE)
15887 addr = decl;
15888 else
15889 addr = build_address (decl);
15891 call = build_delete (TREE_TYPE (addr), addr,
15892 sfk_complete_destructor, flags, 0, complain);
15893 if (call == error_mark_node)
15894 cleanup = error_mark_node;
15895 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
15896 /* Discard the call. */;
15897 else if (cleanup)
15898 cleanup = cp_build_compound_expr (cleanup, call, complain);
15899 else
15900 cleanup = call;
15903 /* build_delete sets the location of the destructor call to the
15904 current location, even though the destructor is going to be
15905 called later, at the end of the current scope. This can lead to
15906 a "jumpy" behavior for users of debuggers when they step around
15907 the end of the block. So let's unset the location of the
15908 destructor call instead. */
15909 protected_set_expr_location (cleanup, UNKNOWN_LOCATION);
15911 if (cleanup
15912 && DECL_P (decl)
15913 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl)))
15914 /* Treat objects with destructors as used; the destructor may do
15915 something substantive. */
15916 && !mark_used (decl, complain) && !(complain & tf_error))
15917 return error_mark_node;
15919 return cleanup;
15923 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
15924 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
15925 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
15927 tree
15928 static_fn_type (tree memfntype)
15930 tree fntype;
15931 tree args;
15933 if (TYPE_PTRMEMFUNC_P (memfntype))
15934 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
15935 if (POINTER_TYPE_P (memfntype)
15936 || TREE_CODE (memfntype) == FUNCTION_DECL)
15937 memfntype = TREE_TYPE (memfntype);
15938 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
15939 return memfntype;
15940 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
15941 args = TYPE_ARG_TYPES (memfntype);
15942 cp_ref_qualifier rqual = type_memfn_rqual (memfntype);
15943 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
15944 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype), rqual);
15945 fntype = (cp_build_type_attribute_variant
15946 (fntype, TYPE_ATTRIBUTES (memfntype)));
15947 fntype = (build_exception_variant
15948 (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
15949 if (TYPE_HAS_LATE_RETURN_TYPE (memfntype))
15950 TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
15951 return fntype;
15954 /* DECL was originally constructed as a non-static member function,
15955 but turned out to be static. Update it accordingly. */
15957 void
15958 revert_static_member_fn (tree decl)
15960 tree stype = static_fn_type (decl);
15961 cp_cv_quals quals = type_memfn_quals (stype);
15962 cp_ref_qualifier rqual = type_memfn_rqual (stype);
15964 if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
15965 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
15967 TREE_TYPE (decl) = stype;
15969 if (DECL_ARGUMENTS (decl))
15970 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
15971 DECL_STATIC_FUNCTION_P (decl) = 1;
15974 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
15975 one of the language-independent trees. */
15977 enum cp_tree_node_structure_enum
15978 cp_tree_node_structure (union lang_tree_node * t)
15980 switch (TREE_CODE (&t->generic))
15982 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
15983 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
15984 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
15985 case OVERLOAD: return TS_CP_OVERLOAD;
15986 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
15987 case PTRMEM_CST: return TS_CP_PTRMEM;
15988 case BASELINK: return TS_CP_BASELINK;
15989 case TEMPLATE_DECL: return TS_CP_TEMPLATE_DECL;
15990 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
15991 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
15992 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
15993 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
15994 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
15995 case CONSTRAINT_INFO: return TS_CP_CONSTRAINT_INFO;
15996 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
15997 default: return TS_CP_GENERIC;
16001 /* Build the void_list_node (void_type_node having been created). */
16002 tree
16003 build_void_list_node (void)
16005 tree t = build_tree_list (NULL_TREE, void_type_node);
16006 return t;
16009 bool
16010 cp_missing_noreturn_ok_p (tree decl)
16012 /* A missing noreturn is ok for the `main' function. */
16013 return DECL_MAIN_P (decl);
16016 /* Return the decl used to identify the COMDAT group into which DECL should
16017 be placed. */
16019 tree
16020 cxx_comdat_group (tree decl)
16022 /* Virtual tables, construction virtual tables, and virtual table
16023 tables all go in a single COMDAT group, named after the primary
16024 virtual table. */
16025 if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
16026 decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
16027 /* For all other DECLs, the COMDAT group is the mangled name of the
16028 declaration itself. */
16029 else
16031 while (DECL_THUNK_P (decl))
16033 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
16034 into the same section as the target function. In that case
16035 we must return target's name. */
16036 tree target = THUNK_TARGET (decl);
16037 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
16038 && DECL_SECTION_NAME (target) != NULL
16039 && DECL_ONE_ONLY (target))
16040 decl = target;
16041 else
16042 break;
16046 return decl;
16049 /* Returns the return type for FN as written by the user, which may include
16050 a placeholder for a deduced return type. */
16052 tree
16053 fndecl_declared_return_type (tree fn)
16055 fn = STRIP_TEMPLATE (fn);
16056 if (FNDECL_USED_AUTO (fn))
16058 struct language_function *f = NULL;
16059 if (DECL_STRUCT_FUNCTION (fn))
16060 f = DECL_STRUCT_FUNCTION (fn)->language;
16061 if (f == NULL)
16062 f = DECL_SAVED_FUNCTION_DATA (fn);
16063 return f->x_auto_return_pattern;
16065 return TREE_TYPE (TREE_TYPE (fn));
16068 /* Returns true iff DECL was declared with an auto type and it has
16069 not yet been deduced to a real type. */
16071 bool
16072 undeduced_auto_decl (tree decl)
16074 if (cxx_dialect < cxx11)
16075 return false;
16076 return type_uses_auto (TREE_TYPE (decl));
16079 /* Complain if DECL has an undeduced return type. */
16081 bool
16082 require_deduced_type (tree decl, tsubst_flags_t complain)
16084 if (undeduced_auto_decl (decl))
16086 if (complain & tf_error)
16087 error ("use of %qD before deduction of %<auto%>", decl);
16088 return false;
16090 return true;
16093 #include "gt-cp-decl.h"