poly_int: TYPE_VECTOR_SUBPARTS
[official-gcc.git] / gcc / cp / decl.c
blob6ba657801d9a9f752aa687cd43d93f7a530a1001
1 /* Process declarations and variables for C++ compiler.
2 Copyright (C) 1988-2018 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com)
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
22 /* Process declarations and symbol lookup for C++ front end.
23 Also constructs types; the standard scalar types at initialization,
24 and structure, union, array and enum types when they are declared. */
26 /* ??? not all decl nodes are given the most useful possible
27 line numbers. For example, the CONST_DECLs for enum values. */
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "target.h"
33 #include "c-family/c-target.h"
34 #include "cp-tree.h"
35 #include "timevar.h"
36 #include "stringpool.h"
37 #include "cgraph.h"
38 #include "stor-layout.h"
39 #include "varasm.h"
40 #include "attribs.h"
41 #include "flags.h"
42 #include "tree-iterator.h"
43 #include "decl.h"
44 #include "intl.h"
45 #include "toplev.h"
46 #include "c-family/c-objc.h"
47 #include "c-family/c-pragma.h"
48 #include "c-family/c-ubsan.h"
49 #include "debug.h"
50 #include "plugin.h"
51 #include "builtins.h"
52 #include "gimplify.h"
53 #include "asan.h"
55 /* Possible cases of bad specifiers type used by bad_specifiers. */
56 enum bad_spec_place {
57 BSP_VAR, /* variable */
58 BSP_PARM, /* parameter */
59 BSP_TYPE, /* type */
60 BSP_FIELD /* field */
63 static const char *redeclaration_error_message (tree, tree);
65 static int decl_jump_unsafe (tree);
66 static void require_complete_types_for_parms (tree);
67 static void push_local_name (tree);
68 static tree grok_reference_init (tree, tree, tree, int);
69 static tree grokvardecl (tree, tree, tree, const cp_decl_specifier_seq *,
70 int, int, int, bool, int, tree);
71 static int check_static_variable_definition (tree, tree);
72 static void record_unknown_type (tree, const char *);
73 static tree builtin_function_1 (tree, tree, bool);
74 static int member_function_or_else (tree, tree, enum overload_flags);
75 static void check_for_uninitialized_const_var (tree);
76 static tree local_variable_p_walkfn (tree *, int *, void *);
77 static const char *tag_name (enum tag_types);
78 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
79 static void maybe_deduce_size_from_array_init (tree, tree);
80 static void layout_var_decl (tree);
81 static tree check_initializer (tree, tree, int, vec<tree, va_gc> **);
82 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
83 static void save_function_data (tree);
84 static void copy_type_enum (tree , tree);
85 static void check_function_type (tree, tree);
86 static void finish_constructor_body (void);
87 static void begin_destructor_body (void);
88 static void finish_destructor_body (void);
89 static void record_key_method_defined (tree);
90 static tree create_array_type_for_decl (tree, tree, tree);
91 static tree get_atexit_node (void);
92 static tree get_dso_handle_node (void);
93 static tree start_cleanup_fn (void);
94 static void end_cleanup_fn (void);
95 static tree cp_make_fname_decl (location_t, tree, int);
96 static void initialize_predefined_identifiers (void);
97 static tree check_special_function_return_type
98 (special_function_kind, tree, tree, int, const location_t*);
99 static tree push_cp_library_fn (enum tree_code, tree, int);
100 static tree build_cp_library_fn (tree, enum tree_code, tree, int);
101 static void store_parm_decls (tree);
102 static void initialize_local_var (tree, tree);
103 static void expand_static_init (tree, tree);
105 /* The following symbols are subsumed in the cp_global_trees array, and
106 listed here individually for documentation purposes.
108 C++ extensions
109 tree wchar_decl_node;
111 tree vtable_entry_type;
112 tree delta_type_node;
113 tree __t_desc_type_node;
115 tree class_type_node;
116 tree unknown_type_node;
118 Array type `vtable_entry_type[]'
120 tree vtbl_type_node;
121 tree vtbl_ptr_type_node;
123 Namespaces,
125 tree std_node;
126 tree abi_node;
128 A FUNCTION_DECL which can call `abort'. Not necessarily the
129 one that the user will declare, but sufficient to be called
130 by routines that want to abort the program.
132 tree abort_fndecl;
134 Used by RTTI
135 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
136 tree tinfo_var_id; */
138 tree cp_global_trees[CPTI_MAX];
140 #define local_names cp_function_chain->x_local_names
142 /* A list of objects which have constructors or destructors
143 which reside in the global scope. The decl is stored in
144 the TREE_VALUE slot and the initializer is stored
145 in the TREE_PURPOSE slot. */
146 tree static_aggregates;
148 /* Like static_aggregates, but for thread_local variables. */
149 tree tls_aggregates;
151 /* -- end of C++ */
153 /* A node for the integer constant 2. */
155 tree integer_two_node;
157 /* vector of static decls. */
158 vec<tree, va_gc> *static_decls;
160 /* vector of keyed classes. */
161 vec<tree, va_gc> *keyed_classes;
163 /* Used only for jumps to as-yet undefined labels, since jumps to
164 defined labels can have their validity checked immediately. */
166 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
167 struct named_label_use_entry *next;
168 /* The binding level to which this entry is *currently* attached.
169 This is initially the binding level in which the goto appeared,
170 but is modified as scopes are closed. */
171 cp_binding_level *binding_level;
172 /* The head of the names list that was current when the goto appeared,
173 or the inner scope popped. These are the decls that will *not* be
174 skipped when jumping to the label. */
175 tree names_in_scope;
176 /* The location of the goto, for error reporting. */
177 location_t o_goto_locus;
178 /* True if an OpenMP structured block scope has been closed since
179 the goto appeared. This means that the branch from the label will
180 illegally exit an OpenMP scope. */
181 bool in_omp_scope;
184 /* A list of all LABEL_DECLs in the function that have names. Here so
185 we can clear out their names' definitions at the end of the
186 function, and so we can check the validity of jumps to these labels. */
188 struct GTY((for_user)) named_label_entry {
190 tree name; /* Name of decl. */
192 tree label_decl; /* LABEL_DECL, unless deleted local label. */
194 named_label_entry *outer; /* Outer shadowed chain. */
196 /* The binding level to which the label is *currently* attached.
197 This is initially set to the binding level in which the label
198 is defined, but is modified as scopes are closed. */
199 cp_binding_level *binding_level;
201 /* The head of the names list that was current when the label was
202 defined, or the inner scope popped. These are the decls that will
203 be skipped when jumping to the label. */
204 tree names_in_scope;
206 /* A vector of all decls from all binding levels that would be
207 crossed by a backward branch to the label. */
208 vec<tree, va_gc> *bad_decls;
210 /* A list of uses of the label, before the label is defined. */
211 named_label_use_entry *uses;
213 /* The following bits are set after the label is defined, and are
214 updated as scopes are popped. They indicate that a jump to the
215 label will illegally enter a scope of the given flavor. */
216 bool in_try_scope;
217 bool in_catch_scope;
218 bool in_omp_scope;
219 bool in_transaction_scope;
220 bool in_constexpr_if;
223 #define named_labels cp_function_chain->x_named_labels
225 /* The number of function bodies which we are currently processing.
226 (Zero if we are at namespace scope, one inside the body of a
227 function, two inside the body of a function in a local class, etc.) */
228 int function_depth;
230 /* Whether the exception-specifier is part of a function type (i.e. C++17). */
231 bool flag_noexcept_type;
233 /* States indicating how grokdeclarator() should handle declspecs marked
234 with __attribute__((deprecated)). An object declared as
235 __attribute__((deprecated)) suppresses warnings of uses of other
236 deprecated items. */
237 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
240 /* A list of VAR_DECLs whose type was incomplete at the time the
241 variable was declared. */
243 struct GTY(()) incomplete_var {
244 tree decl;
245 tree incomplete_type;
249 static GTY(()) vec<incomplete_var, va_gc> *incomplete_vars;
251 /* Returns the kind of template specialization we are currently
252 processing, given that it's declaration contained N_CLASS_SCOPES
253 explicit scope qualifications. */
255 tmpl_spec_kind
256 current_tmpl_spec_kind (int n_class_scopes)
258 int n_template_parm_scopes = 0;
259 int seen_specialization_p = 0;
260 int innermost_specialization_p = 0;
261 cp_binding_level *b;
263 /* Scan through the template parameter scopes. */
264 for (b = current_binding_level;
265 b->kind == sk_template_parms;
266 b = b->level_chain)
268 /* If we see a specialization scope inside a parameter scope,
269 then something is wrong. That corresponds to a declaration
270 like:
272 template <class T> template <> ...
274 which is always invalid since [temp.expl.spec] forbids the
275 specialization of a class member template if the enclosing
276 class templates are not explicitly specialized as well. */
277 if (b->explicit_spec_p)
279 if (n_template_parm_scopes == 0)
280 innermost_specialization_p = 1;
281 else
282 seen_specialization_p = 1;
284 else if (seen_specialization_p == 1)
285 return tsk_invalid_member_spec;
287 ++n_template_parm_scopes;
290 /* Handle explicit instantiations. */
291 if (processing_explicit_instantiation)
293 if (n_template_parm_scopes != 0)
294 /* We've seen a template parameter list during an explicit
295 instantiation. For example:
297 template <class T> template void f(int);
299 This is erroneous. */
300 return tsk_invalid_expl_inst;
301 else
302 return tsk_expl_inst;
305 if (n_template_parm_scopes < n_class_scopes)
306 /* We've not seen enough template headers to match all the
307 specialized classes present. For example:
309 template <class T> void R<T>::S<T>::f(int);
311 This is invalid; there needs to be one set of template
312 parameters for each class. */
313 return tsk_insufficient_parms;
314 else if (n_template_parm_scopes == n_class_scopes)
315 /* We're processing a non-template declaration (even though it may
316 be a member of a template class.) For example:
318 template <class T> void S<T>::f(int);
320 The `class T' matches the `S<T>', leaving no template headers
321 corresponding to the `f'. */
322 return tsk_none;
323 else if (n_template_parm_scopes > n_class_scopes + 1)
324 /* We've got too many template headers. For example:
326 template <> template <class T> void f (T);
328 There need to be more enclosing classes. */
329 return tsk_excessive_parms;
330 else
331 /* This must be a template. It's of the form:
333 template <class T> template <class U> void S<T>::f(U);
335 This is a specialization if the innermost level was a
336 specialization; otherwise it's just a definition of the
337 template. */
338 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
341 /* Exit the current scope. */
343 void
344 finish_scope (void)
346 poplevel (0, 0, 0);
349 /* When a label goes out of scope, check to see if that label was used
350 in a valid manner, and issue any appropriate warnings or errors. */
352 static void
353 check_label_used (tree label)
355 if (!processing_template_decl)
357 if (DECL_INITIAL (label) == NULL_TREE)
359 location_t location;
361 error ("label %q+D used but not defined", label);
362 location = input_location;
363 /* FIXME want (LOCATION_FILE (input_location), (line)0) */
364 /* Avoid crashing later. */
365 define_label (location, DECL_NAME (label));
367 else
368 warn_for_unused_label (label);
372 /* Helper function to sort named label entries in a vector by DECL_UID. */
374 static int
375 sort_labels (const void *a, const void *b)
377 tree label1 = *(tree const *) a;
378 tree label2 = *(tree const *) b;
380 /* DECL_UIDs can never be equal. */
381 return DECL_UID (label1) > DECL_UID (label2) ? -1 : +1;
384 /* At the end of a function, all labels declared within the function
385 go out of scope. BLOCK is the top-level block for the
386 function. */
388 static void
389 pop_labels (tree block)
391 if (!named_labels)
392 return;
394 /* We need to add the labels to the block chain, so debug
395 information is emitted. But, we want the order to be stable so
396 need to sort them first. Otherwise the debug output could be
397 randomly ordered. I guess it's mostly stable, unless the hash
398 table implementation changes. */
399 auto_vec<tree, 32> labels (named_labels->elements ());
400 hash_table<named_label_hash>::iterator end (named_labels->end ());
401 for (hash_table<named_label_hash>::iterator iter
402 (named_labels->begin ()); iter != end; ++iter)
404 named_label_entry *ent = *iter;
406 gcc_checking_assert (!ent->outer);
407 if (ent->label_decl)
408 labels.quick_push (ent->label_decl);
409 ggc_free (ent);
411 named_labels = NULL;
412 labels.qsort (sort_labels);
414 while (labels.length ())
416 tree label = labels.pop ();
418 DECL_CHAIN (label) = BLOCK_VARS (block);
419 BLOCK_VARS (block) = label;
421 check_label_used (label);
425 /* At the end of a block with local labels, restore the outer definition. */
427 static void
428 pop_local_label (tree id, tree label)
430 check_label_used (label);
431 named_label_entry **slot = named_labels->find_slot_with_hash
432 (id, IDENTIFIER_HASH_VALUE (id), NO_INSERT);
433 named_label_entry *ent = *slot;
435 if (ent->outer)
436 ent = ent->outer;
437 else
439 ent = ggc_cleared_alloc<named_label_entry> ();
440 ent->name = id;
442 *slot = ent;
445 /* The following two routines are used to interface to Objective-C++.
446 The binding level is purposely treated as an opaque type. */
448 void *
449 objc_get_current_scope (void)
451 return current_binding_level;
454 /* The following routine is used by the NeXT-style SJLJ exceptions;
455 variables get marked 'volatile' so as to not be clobbered by
456 _setjmp()/_longjmp() calls. All variables in the current scope,
457 as well as parent scopes up to (but not including) ENCLOSING_BLK
458 shall be thusly marked. */
460 void
461 objc_mark_locals_volatile (void *enclosing_blk)
463 cp_binding_level *scope;
465 for (scope = current_binding_level;
466 scope && scope != enclosing_blk;
467 scope = scope->level_chain)
469 tree decl;
471 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
472 objc_volatilize_decl (decl);
474 /* Do not climb up past the current function. */
475 if (scope->kind == sk_function_parms)
476 break;
480 /* True if B is the level for the condition of a constexpr if. */
482 static bool
483 level_for_constexpr_if (cp_binding_level *b)
485 return (b->kind == sk_cond && b->this_entity
486 && TREE_CODE (b->this_entity) == IF_STMT
487 && IF_STMT_CONSTEXPR_P (b->this_entity));
490 /* Update data for defined and undefined labels when leaving a scope. */
493 poplevel_named_label_1 (named_label_entry **slot, cp_binding_level *bl)
495 named_label_entry *ent = *slot;
496 cp_binding_level *obl = bl->level_chain;
498 if (ent->binding_level == bl)
500 tree decl;
502 /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
503 TREE_LISTs representing OVERLOADs, so be careful. */
504 for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
505 ? DECL_CHAIN (decl)
506 : TREE_CHAIN (decl)))
507 if (decl_jump_unsafe (decl))
508 vec_safe_push (ent->bad_decls, decl);
510 ent->binding_level = obl;
511 ent->names_in_scope = obl->names;
512 switch (bl->kind)
514 case sk_try:
515 ent->in_try_scope = true;
516 break;
517 case sk_catch:
518 ent->in_catch_scope = true;
519 break;
520 case sk_omp:
521 ent->in_omp_scope = true;
522 break;
523 case sk_transaction:
524 ent->in_transaction_scope = true;
525 break;
526 case sk_block:
527 if (level_for_constexpr_if (bl->level_chain))
528 ent->in_constexpr_if = true;
529 break;
530 default:
531 break;
534 else if (ent->uses)
536 struct named_label_use_entry *use;
538 for (use = ent->uses; use ; use = use->next)
539 if (use->binding_level == bl)
541 use->binding_level = obl;
542 use->names_in_scope = obl->names;
543 if (bl->kind == sk_omp)
544 use->in_omp_scope = true;
548 return 1;
551 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
552 when errors were reported, except for -Werror-unused-but-set-*. */
553 static int unused_but_set_errorcount;
555 /* Exit a binding level.
556 Pop the level off, and restore the state of the identifier-decl mappings
557 that were in effect when this level was entered.
559 If KEEP == 1, this level had explicit declarations, so
560 and create a "block" (a BLOCK node) for the level
561 to record its declarations and subblocks for symbol table output.
563 If FUNCTIONBODY is nonzero, this level is the body of a function,
564 so create a block as if KEEP were set and also clear out all
565 label names.
567 If REVERSE is nonzero, reverse the order of decls before putting
568 them into the BLOCK. */
570 tree
571 poplevel (int keep, int reverse, int functionbody)
573 tree link;
574 /* The chain of decls was accumulated in reverse order.
575 Put it into forward order, just for cleanliness. */
576 tree decls;
577 tree subblocks;
578 tree block;
579 tree decl;
580 int leaving_for_scope;
581 scope_kind kind;
582 unsigned ix;
584 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
585 restart:
587 block = NULL_TREE;
589 gcc_assert (current_binding_level->kind != sk_class
590 && current_binding_level->kind != sk_namespace);
592 if (current_binding_level->kind == sk_cleanup)
593 functionbody = 0;
594 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
596 gcc_assert (!vec_safe_length (current_binding_level->class_shadowed));
598 /* We used to use KEEP == 2 to indicate that the new block should go
599 at the beginning of the list of blocks at this binding level,
600 rather than the end. This hack is no longer used. */
601 gcc_assert (keep == 0 || keep == 1);
603 if (current_binding_level->keep)
604 keep = 1;
606 /* Any uses of undefined labels, and any defined labels, now operate
607 under constraints of next binding contour. */
608 if (cfun && !functionbody && named_labels)
609 named_labels->traverse<cp_binding_level *, poplevel_named_label_1>
610 (current_binding_level);
612 /* Get the decls in the order they were written.
613 Usually current_binding_level->names is in reverse order.
614 But parameter decls were previously put in forward order. */
616 decls = current_binding_level->names;
617 if (reverse)
619 decls = nreverse (decls);
620 current_binding_level->names = decls;
623 /* If there were any declarations or structure tags in that level,
624 or if this level is a function body,
625 create a BLOCK to record them for the life of this function. */
626 block = NULL_TREE;
627 /* Avoid function body block if possible. */
628 if (functionbody && subblocks && BLOCK_CHAIN (subblocks) == NULL_TREE)
629 keep = 0;
630 else if (keep == 1 || functionbody)
631 block = make_node (BLOCK);
632 if (block != NULL_TREE)
634 BLOCK_VARS (block) = decls;
635 BLOCK_SUBBLOCKS (block) = subblocks;
638 /* In each subblock, record that this is its superior. */
639 if (keep >= 0)
640 for (link = subblocks; link; link = BLOCK_CHAIN (link))
641 BLOCK_SUPERCONTEXT (link) = block;
643 /* We still support the old for-scope rules, whereby the variables
644 in a init statement were in scope after the for-statement ended.
645 We only use the new rules if flag_new_for_scope is nonzero. */
646 leaving_for_scope
647 = current_binding_level->kind == sk_for && flag_new_for_scope == 1;
649 /* Before we remove the declarations first check for unused variables. */
650 if ((warn_unused_variable || warn_unused_but_set_variable)
651 && current_binding_level->kind != sk_template_parms
652 && !processing_template_decl)
653 for (tree d = get_local_decls (); d; d = TREE_CHAIN (d))
655 /* There are cases where D itself is a TREE_LIST. See in
656 push_local_binding where the list of decls returned by
657 getdecls is built. */
658 decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
660 tree type = TREE_TYPE (decl);
661 if (VAR_P (decl)
662 && (! TREE_USED (decl) || !DECL_READ_P (decl))
663 && ! DECL_IN_SYSTEM_HEADER (decl)
664 /* For structured bindings, consider only real variables, not
665 subobjects. */
666 && (DECL_DECOMPOSITION_P (decl) ? !DECL_DECOMP_BASE (decl)
667 : (DECL_NAME (decl) && !DECL_ARTIFICIAL (decl)))
668 && type != error_mark_node
669 && (!CLASS_TYPE_P (type)
670 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
671 || lookup_attribute ("warn_unused",
672 TYPE_ATTRIBUTES (TREE_TYPE (decl)))))
674 if (! TREE_USED (decl))
676 if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
677 warning_at (DECL_SOURCE_LOCATION (decl),
678 OPT_Wunused_variable,
679 "unused structured binding declaration");
680 else
681 warning_at (DECL_SOURCE_LOCATION (decl),
682 OPT_Wunused_variable, "unused variable %qD", decl);
684 else if (DECL_CONTEXT (decl) == current_function_decl
685 // For -Wunused-but-set-variable leave references alone.
686 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
687 && errorcount == unused_but_set_errorcount)
689 if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
690 warning_at (DECL_SOURCE_LOCATION (decl),
691 OPT_Wunused_but_set_variable, "structured "
692 "binding declaration set but not used");
693 else
694 warning_at (DECL_SOURCE_LOCATION (decl),
695 OPT_Wunused_but_set_variable,
696 "variable %qD set but not used", decl);
697 unused_but_set_errorcount = errorcount;
702 /* Remove declarations for all the DECLs in this level. */
703 for (link = decls; link; link = TREE_CHAIN (link))
705 decl = TREE_CODE (link) == TREE_LIST ? TREE_VALUE (link) : link;
706 tree name = OVL_NAME (decl);
708 if (leaving_for_scope && VAR_P (decl)
709 /* It's hard to make this ARM compatibility hack play nicely with
710 lambdas, and it really isn't necessary in C++11 mode. */
711 && cxx_dialect < cxx11
712 && name)
714 cxx_binding *ob = outer_binding (name,
715 IDENTIFIER_BINDING (name),
716 /*class_p=*/true);
717 tree ns_binding = NULL_TREE;
718 if (!ob)
719 ns_binding = get_namespace_binding (current_namespace, name);
721 if (ob && ob->scope == current_binding_level->level_chain)
722 /* We have something like:
724 int i;
725 for (int i; ;);
727 and we are leaving the `for' scope. There's no reason to
728 keep the binding of the inner `i' in this case. */
730 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
731 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
732 /* Here, we have something like:
734 typedef int I;
736 void f () {
737 for (int I; ;);
740 We must pop the for-scope binding so we know what's a
741 type and what isn't. */
743 else
745 /* Mark this VAR_DECL as dead so that we can tell we left it
746 there only for backward compatibility. */
747 DECL_DEAD_FOR_LOCAL (link) = 1;
749 /* Keep track of what should have happened when we
750 popped the binding. */
751 if (ob && ob->value)
753 SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
754 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
757 /* Add it to the list of dead variables in the next
758 outermost binding to that we can remove these when we
759 leave that binding. */
760 vec_safe_push (
761 current_binding_level->level_chain->dead_vars_from_for,
762 link);
764 /* Although we don't pop the cxx_binding, we do clear
765 its SCOPE since the scope is going away now. */
766 IDENTIFIER_BINDING (name)->scope
767 = current_binding_level->level_chain;
769 /* Don't remove the binding. */
770 name = NULL_TREE;
773 /* Remove the binding. */
774 if (TREE_CODE (decl) == LABEL_DECL)
775 pop_local_label (name, decl);
776 else
777 pop_local_binding (name, decl);
780 /* Remove declarations for any `for' variables from inner scopes
781 that we kept around. */
782 FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->dead_vars_from_for,
783 ix, decl)
784 pop_local_binding (DECL_NAME (decl), decl);
786 /* Restore the IDENTIFIER_TYPE_VALUEs. */
787 for (link = current_binding_level->type_shadowed;
788 link; link = TREE_CHAIN (link))
789 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
791 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
792 list if a `using' declaration put them there. The debugging
793 back ends won't understand OVERLOAD, so we remove them here.
794 Because the BLOCK_VARS are (temporarily) shared with
795 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
796 popped all the bindings. Also remove undeduced 'auto' decls,
797 which LTO doesn't understand, and can't have been used by anything. */
798 if (block)
800 tree* d;
802 for (d = &BLOCK_VARS (block); *d; )
804 if (TREE_CODE (*d) == TREE_LIST
805 || (!processing_template_decl
806 && undeduced_auto_decl (*d)))
807 *d = TREE_CHAIN (*d);
808 else
809 d = &DECL_CHAIN (*d);
813 /* If the level being exited is the top level of a function,
814 check over all the labels. */
815 if (functionbody)
817 if (block)
819 /* Since this is the top level block of a function, the vars are
820 the function's parameters. Don't leave them in the BLOCK
821 because they are found in the FUNCTION_DECL instead. */
822 BLOCK_VARS (block) = 0;
823 pop_labels (block);
825 else
826 pop_labels (subblocks);
829 kind = current_binding_level->kind;
830 if (kind == sk_cleanup)
832 tree stmt;
834 /* If this is a temporary binding created for a cleanup, then we'll
835 have pushed a statement list level. Pop that, create a new
836 BIND_EXPR for the block, and insert it into the stream. */
837 stmt = pop_stmt_list (current_binding_level->statement_list);
838 stmt = c_build_bind_expr (input_location, block, stmt);
839 add_stmt (stmt);
842 leave_scope ();
843 if (functionbody)
845 /* The current function is being defined, so its DECL_INITIAL
846 should be error_mark_node. */
847 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
848 DECL_INITIAL (current_function_decl) = block ? block : subblocks;
849 if (subblocks)
851 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
853 if (BLOCK_SUBBLOCKS (subblocks))
854 BLOCK_OUTER_CURLY_BRACE_P (BLOCK_SUBBLOCKS (subblocks)) = 1;
856 else
857 BLOCK_OUTER_CURLY_BRACE_P (subblocks) = 1;
860 else if (block)
861 current_binding_level->blocks
862 = block_chainon (current_binding_level->blocks, block);
864 /* If we did not make a block for the level just exited,
865 any blocks made for inner levels
866 (since they cannot be recorded as subblocks in that level)
867 must be carried forward so they will later become subblocks
868 of something else. */
869 else if (subblocks)
870 current_binding_level->blocks
871 = block_chainon (current_binding_level->blocks, subblocks);
873 /* Each and every BLOCK node created here in `poplevel' is important
874 (e.g. for proper debugging information) so if we created one
875 earlier, mark it as "used". */
876 if (block)
877 TREE_USED (block) = 1;
879 /* All temporary bindings created for cleanups are popped silently. */
880 if (kind == sk_cleanup)
881 goto restart;
883 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
884 return block;
887 /* Call wrapup_globals_declarations for the globals in NAMESPACE. */
888 /* Diagnose odr-used extern inline variables without definitions
889 in the current TU. */
892 wrapup_namespace_globals ()
894 if (vec<tree, va_gc> *statics = static_decls)
896 tree decl;
897 unsigned int i;
898 FOR_EACH_VEC_ELT (*statics, i, decl)
900 if (warn_unused_function
901 && TREE_CODE (decl) == FUNCTION_DECL
902 && DECL_INITIAL (decl) == 0
903 && DECL_EXTERNAL (decl)
904 && !TREE_PUBLIC (decl)
905 && !DECL_ARTIFICIAL (decl)
906 && !DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
907 && !TREE_NO_WARNING (decl))
908 warning_at (DECL_SOURCE_LOCATION (decl),
909 OPT_Wunused_function,
910 "%qF declared %<static%> but never defined", decl);
912 if (VAR_P (decl)
913 && DECL_EXTERNAL (decl)
914 && DECL_INLINE_VAR_P (decl)
915 && DECL_ODR_USED (decl))
916 error_at (DECL_SOURCE_LOCATION (decl),
917 "odr-used inline variable %qD is not defined", decl);
920 /* Clear out the list, so we don't rescan next time. */
921 static_decls = NULL;
923 /* Write out any globals that need to be output. */
924 return wrapup_global_declarations (statics->address (),
925 statics->length ());
927 return 0;
930 /* In C++, you don't have to write `struct S' to refer to `S'; you
931 can just use `S'. We accomplish this by creating a TYPE_DECL as
932 if the user had written `typedef struct S S'. Create and return
933 the TYPE_DECL for TYPE. */
935 tree
936 create_implicit_typedef (tree name, tree type)
938 tree decl;
940 decl = build_decl (input_location, TYPE_DECL, name, type);
941 DECL_ARTIFICIAL (decl) = 1;
942 /* There are other implicit type declarations, like the one *within*
943 a class that allows you to write `S::S'. We must distinguish
944 amongst these. */
945 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
946 TYPE_NAME (type) = decl;
947 TYPE_STUB_DECL (type) = decl;
949 return decl;
952 /* Remember a local name for name-mangling purposes. */
954 static void
955 push_local_name (tree decl)
957 size_t i, nelts;
958 tree t, name;
960 timevar_start (TV_NAME_LOOKUP);
962 name = DECL_NAME (decl);
964 nelts = vec_safe_length (local_names);
965 for (i = 0; i < nelts; i++)
967 t = (*local_names)[i];
968 if (DECL_NAME (t) == name)
970 retrofit_lang_decl (decl);
971 DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
972 if (DECL_DISCRIMINATOR_SET_P (t))
973 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
974 else
975 DECL_DISCRIMINATOR (decl) = 1;
977 (*local_names)[i] = decl;
978 timevar_stop (TV_NAME_LOOKUP);
979 return;
983 vec_safe_push (local_names, decl);
984 timevar_stop (TV_NAME_LOOKUP);
987 /* Subroutine of duplicate_decls: return truthvalue of whether
988 or not types of these decls match.
990 For C++, we must compare the parameter list so that `int' can match
991 `int&' in a parameter position, but `int&' is not confused with
992 `const int&'. */
995 decls_match (tree newdecl, tree olddecl, bool record_versions /* = true */)
997 int types_match;
999 if (newdecl == olddecl)
1000 return 1;
1002 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
1003 /* If the two DECLs are not even the same kind of thing, we're not
1004 interested in their types. */
1005 return 0;
1007 gcc_assert (DECL_P (newdecl));
1009 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1011 tree f1 = TREE_TYPE (newdecl);
1012 tree f2 = TREE_TYPE (olddecl);
1013 tree p1 = TYPE_ARG_TYPES (f1);
1014 tree p2 = TYPE_ARG_TYPES (f2);
1015 tree r2;
1017 /* Specializations of different templates are different functions
1018 even if they have the same type. */
1019 tree t1 = (DECL_USE_TEMPLATE (newdecl)
1020 ? DECL_TI_TEMPLATE (newdecl)
1021 : NULL_TREE);
1022 tree t2 = (DECL_USE_TEMPLATE (olddecl)
1023 ? DECL_TI_TEMPLATE (olddecl)
1024 : NULL_TREE);
1025 if (t1 != t2)
1026 return 0;
1028 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1029 && ! (DECL_EXTERN_C_P (newdecl)
1030 && DECL_EXTERN_C_P (olddecl)))
1031 return 0;
1033 /* A new declaration doesn't match a built-in one unless it
1034 is also extern "C". */
1035 if (DECL_IS_BUILTIN (olddecl)
1036 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
1037 return 0;
1039 if (TREE_CODE (f1) != TREE_CODE (f2))
1040 return 0;
1042 /* A declaration with deduced return type should use its pre-deduction
1043 type for declaration matching. */
1044 r2 = fndecl_declared_return_type (olddecl);
1046 if (same_type_p (TREE_TYPE (f1), r2))
1048 if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
1049 && (DECL_BUILT_IN (olddecl)
1050 #ifndef NO_IMPLICIT_EXTERN_C
1051 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
1052 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
1053 #endif
1056 types_match = self_promoting_args_p (p1);
1057 if (p1 == void_list_node)
1058 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1060 #ifndef NO_IMPLICIT_EXTERN_C
1061 else if (!prototype_p (f1)
1062 && (DECL_EXTERN_C_P (olddecl)
1063 && DECL_IN_SYSTEM_HEADER (olddecl)
1064 && !DECL_CLASS_SCOPE_P (olddecl))
1065 && (DECL_EXTERN_C_P (newdecl)
1066 && DECL_IN_SYSTEM_HEADER (newdecl)
1067 && !DECL_CLASS_SCOPE_P (newdecl)))
1069 types_match = self_promoting_args_p (p2);
1070 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1072 #endif
1073 else
1074 types_match =
1075 compparms (p1, p2)
1076 && type_memfn_rqual (f1) == type_memfn_rqual (f2)
1077 && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1078 || comp_type_attributes (TREE_TYPE (newdecl),
1079 TREE_TYPE (olddecl)) != 0);
1081 else
1082 types_match = 0;
1084 /* The decls dont match if they correspond to two different versions
1085 of the same function. Disallow extern "C" functions to be
1086 versions for now. */
1087 if (types_match
1088 && !DECL_EXTERN_C_P (newdecl)
1089 && !DECL_EXTERN_C_P (olddecl)
1090 && record_versions
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 (simple_cst_equal (TREE_PURPOSE (t1),
1862 TREE_PURPOSE (t2)) == 1)
1864 if (permerror (input_location,
1865 "default argument given for parameter "
1866 "%d of %q#D", i, newdecl))
1867 inform (DECL_SOURCE_LOCATION (olddecl),
1868 "previous specification in %q#D here",
1869 olddecl);
1871 else
1873 error ("default argument given for parameter %d "
1874 "of %q#D", i, newdecl);
1875 inform (DECL_SOURCE_LOCATION (olddecl),
1876 "previous specification in %q#D here",
1877 olddecl);
1884 /* Do not merge an implicit typedef with an explicit one. In:
1886 class A;
1888 typedef class A A __attribute__ ((foo));
1890 the attribute should apply only to the typedef. */
1891 if (TREE_CODE (olddecl) == TYPE_DECL
1892 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1893 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1894 return NULL_TREE;
1896 /* If new decl is `static' and an `extern' was seen previously,
1897 warn about it. */
1898 warn_extern_redeclared_static (newdecl, olddecl);
1900 if (!validate_constexpr_redeclaration (olddecl, newdecl))
1901 return error_mark_node;
1903 /* We have committed to returning 1 at this point. */
1904 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1906 /* Now that functions must hold information normally held
1907 by field decls, there is extra work to do so that
1908 declaration information does not get destroyed during
1909 definition. */
1910 if (DECL_VINDEX (olddecl))
1911 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1912 if (DECL_CONTEXT (olddecl))
1913 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1914 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1915 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1916 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1917 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1918 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1919 DECL_FINAL_P (newdecl) |= DECL_FINAL_P (olddecl);
1920 DECL_OVERRIDE_P (newdecl) |= DECL_OVERRIDE_P (olddecl);
1921 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1922 if (DECL_OVERLOADED_OPERATOR_P (olddecl))
1923 DECL_OVERLOADED_OPERATOR_CODE_RAW (newdecl)
1924 = DECL_OVERLOADED_OPERATOR_CODE_RAW (olddecl);
1925 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1927 /* Optionally warn about more than one declaration for the same
1928 name, but don't warn about a function declaration followed by a
1929 definition. */
1930 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1931 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1932 /* Don't warn about extern decl followed by definition. */
1933 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1934 /* Don't warn about friends, let add_friend take care of it. */
1935 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1936 /* Don't warn about declaration followed by specialization. */
1937 && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1938 || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1940 if (warning_at (DECL_SOURCE_LOCATION (newdecl),
1941 OPT_Wredundant_decls,
1942 "redundant redeclaration of %qD in same scope",
1943 newdecl))
1944 inform (DECL_SOURCE_LOCATION (olddecl),
1945 "previous declaration of %qD", olddecl);
1948 if (!(DECL_TEMPLATE_INSTANTIATION (olddecl)
1949 && DECL_TEMPLATE_SPECIALIZATION (newdecl)))
1951 if (DECL_DELETED_FN (newdecl))
1953 error ("deleted definition of %q+D", newdecl);
1954 inform (DECL_SOURCE_LOCATION (olddecl),
1955 "previous declaration of %qD", olddecl);
1957 DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1961 /* Deal with C++: must preserve virtual function table size. */
1962 if (TREE_CODE (olddecl) == TYPE_DECL)
1964 tree newtype = TREE_TYPE (newdecl);
1965 tree oldtype = TREE_TYPE (olddecl);
1967 if (newtype != error_mark_node && oldtype != error_mark_node
1968 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1969 CLASSTYPE_FRIEND_CLASSES (newtype)
1970 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1972 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1975 /* Copy all the DECL_... slots specified in the new decl
1976 except for any that we copy here from the old type. */
1977 DECL_ATTRIBUTES (newdecl)
1978 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
1980 if (DECL_DECLARES_FUNCTION_P (olddecl) && DECL_DECLARES_FUNCTION_P (newdecl))
1982 olddecl_friend = DECL_FRIEND_P (olddecl);
1983 hidden_friend = (DECL_ANTICIPATED (olddecl)
1984 && DECL_HIDDEN_FRIEND_P (olddecl)
1985 && newdecl_is_friend);
1986 if (!hidden_friend)
1988 DECL_ANTICIPATED (olddecl) = 0;
1989 DECL_HIDDEN_FRIEND_P (olddecl) = 0;
1993 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1995 tree old_result;
1996 tree new_result;
1997 old_result = DECL_TEMPLATE_RESULT (olddecl);
1998 new_result = DECL_TEMPLATE_RESULT (newdecl);
1999 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
2000 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
2001 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
2002 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
2004 DECL_ATTRIBUTES (old_result)
2005 = (*targetm.merge_decl_attributes) (old_result, new_result);
2007 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2009 /* Per C++11 8.3.6/4, default arguments cannot be added in later
2010 declarations of a function template. */
2011 if (DECL_SOURCE_LOCATION (newdecl)
2012 != DECL_SOURCE_LOCATION (olddecl))
2013 check_redeclaration_no_default_args (newdecl);
2015 check_default_args (newdecl);
2017 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
2018 && DECL_INITIAL (new_result))
2020 if (DECL_INITIAL (old_result))
2021 DECL_UNINLINABLE (old_result) = 1;
2022 else
2023 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
2024 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
2025 DECL_NOT_REALLY_EXTERN (old_result)
2026 = DECL_NOT_REALLY_EXTERN (new_result);
2027 DECL_INTERFACE_KNOWN (old_result)
2028 = DECL_INTERFACE_KNOWN (new_result);
2029 DECL_DECLARED_INLINE_P (old_result)
2030 = DECL_DECLARED_INLINE_P (new_result);
2031 DECL_DISREGARD_INLINE_LIMITS (old_result)
2032 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2035 else
2037 DECL_DECLARED_INLINE_P (old_result)
2038 |= DECL_DECLARED_INLINE_P (new_result);
2039 DECL_DISREGARD_INLINE_LIMITS (old_result)
2040 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2041 check_redeclaration_exception_specification (newdecl, olddecl);
2045 /* If the new declaration is a definition, update the file and
2046 line information on the declaration, and also make
2047 the old declaration the same definition. */
2048 if (DECL_INITIAL (new_result) != NULL_TREE)
2050 DECL_SOURCE_LOCATION (olddecl)
2051 = DECL_SOURCE_LOCATION (old_result)
2052 = DECL_SOURCE_LOCATION (newdecl);
2053 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
2054 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2056 tree parm;
2057 DECL_ARGUMENTS (old_result)
2058 = DECL_ARGUMENTS (new_result);
2059 for (parm = DECL_ARGUMENTS (old_result); parm;
2060 parm = DECL_CHAIN (parm))
2061 DECL_CONTEXT (parm) = old_result;
2065 return olddecl;
2068 if (types_match)
2070 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2071 check_redeclaration_exception_specification (newdecl, olddecl);
2073 /* Automatically handles default parameters. */
2074 tree oldtype = TREE_TYPE (olddecl);
2075 tree newtype;
2077 /* For typedefs use the old type, as the new type's DECL_NAME points
2078 at newdecl, which will be ggc_freed. */
2079 if (TREE_CODE (newdecl) == TYPE_DECL)
2081 /* But NEWTYPE might have an attribute, honor that. */
2082 tree tem = TREE_TYPE (newdecl);
2083 newtype = oldtype;
2085 if (TYPE_USER_ALIGN (tem))
2087 if (TYPE_ALIGN (tem) > TYPE_ALIGN (newtype))
2088 SET_TYPE_ALIGN (newtype, TYPE_ALIGN (tem));
2089 TYPE_USER_ALIGN (newtype) = true;
2092 /* And remove the new type from the variants list. */
2093 if (TYPE_NAME (TREE_TYPE (newdecl)) == newdecl)
2095 tree remove = TREE_TYPE (newdecl);
2096 for (tree t = TYPE_MAIN_VARIANT (remove); ;
2097 t = TYPE_NEXT_VARIANT (t))
2098 if (TYPE_NEXT_VARIANT (t) == remove)
2100 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove);
2101 break;
2105 else
2106 /* Merge the data types specified in the two decls. */
2107 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
2109 if (VAR_P (newdecl))
2111 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
2112 /* For already initialized vars, TREE_READONLY could have been
2113 cleared in cp_finish_decl, because the var needs runtime
2114 initialization or destruction. Make sure not to set
2115 TREE_READONLY on it again. */
2116 if (DECL_INITIALIZED_P (olddecl)
2117 && !DECL_EXTERNAL (olddecl)
2118 && !TREE_READONLY (olddecl))
2119 TREE_READONLY (newdecl) = 0;
2120 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
2121 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
2122 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
2123 if (DECL_DEPENDENT_INIT_P (olddecl))
2124 SET_DECL_DEPENDENT_INIT_P (newdecl, true);
2125 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
2126 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
2127 if (DECL_CLASS_SCOPE_P (olddecl))
2128 DECL_DECLARED_CONSTEXPR_P (newdecl)
2129 |= DECL_DECLARED_CONSTEXPR_P (olddecl);
2131 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
2132 if (DECL_LANG_SPECIFIC (olddecl)
2133 && CP_DECL_THREADPRIVATE_P (olddecl))
2135 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
2136 retrofit_lang_decl (newdecl);
2137 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
2141 /* An explicit specialization of a function template or of a member
2142 function of a class template can be declared transaction_safe
2143 independently of whether the corresponding template entity is declared
2144 transaction_safe. */
2145 if (flag_tm && TREE_CODE (newdecl) == FUNCTION_DECL
2146 && DECL_TEMPLATE_INSTANTIATION (olddecl)
2147 && DECL_TEMPLATE_SPECIALIZATION (newdecl)
2148 && tx_safe_fn_type_p (newtype)
2149 && !tx_safe_fn_type_p (TREE_TYPE (newdecl)))
2150 newtype = tx_unsafe_fn_variant (newtype);
2152 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
2154 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2155 check_default_args (newdecl);
2157 /* Lay the type out, unless already done. */
2158 if (! same_type_p (newtype, oldtype)
2159 && TREE_TYPE (newdecl) != error_mark_node
2160 && !(processing_template_decl && uses_template_parms (newdecl)))
2161 layout_type (TREE_TYPE (newdecl));
2163 if ((VAR_P (newdecl)
2164 || TREE_CODE (newdecl) == PARM_DECL
2165 || TREE_CODE (newdecl) == RESULT_DECL
2166 || TREE_CODE (newdecl) == FIELD_DECL
2167 || TREE_CODE (newdecl) == TYPE_DECL)
2168 && !(processing_template_decl && uses_template_parms (newdecl)))
2169 layout_decl (newdecl, 0);
2171 /* Merge the type qualifiers. */
2172 if (TREE_READONLY (newdecl))
2173 TREE_READONLY (olddecl) = 1;
2174 if (TREE_THIS_VOLATILE (newdecl))
2175 TREE_THIS_VOLATILE (olddecl) = 1;
2176 if (TREE_NOTHROW (newdecl))
2177 TREE_NOTHROW (olddecl) = 1;
2179 /* Merge deprecatedness. */
2180 if (TREE_DEPRECATED (newdecl))
2181 TREE_DEPRECATED (olddecl) = 1;
2183 /* Preserve function specific target and optimization options */
2184 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2186 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2187 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2188 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2189 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2191 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2192 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2193 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2194 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2197 /* Merge the initialization information. */
2198 if (DECL_INITIAL (newdecl) == NULL_TREE
2199 && DECL_INITIAL (olddecl) != NULL_TREE)
2201 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2202 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2203 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2205 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2206 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2210 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2212 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2213 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2214 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2215 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
2216 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
2217 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
2218 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2219 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
2220 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
2221 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
2222 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2223 /* Keep the old RTL. */
2224 COPY_DECL_RTL (olddecl, newdecl);
2226 else if (VAR_P (newdecl)
2227 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2229 /* Keep the old RTL. We cannot keep the old RTL if the old
2230 declaration was for an incomplete object and the new
2231 declaration is not since many attributes of the RTL will
2232 change. */
2233 COPY_DECL_RTL (olddecl, newdecl);
2236 /* If cannot merge, then use the new type and qualifiers,
2237 and don't preserve the old rtl. */
2238 else
2240 /* Clean out any memory we had of the old declaration. */
2241 tree oldstatic = value_member (olddecl, static_aggregates);
2242 if (oldstatic)
2243 TREE_VALUE (oldstatic) = error_mark_node;
2245 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2246 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2247 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2248 TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2249 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2252 /* Merge the storage class information. */
2253 merge_weak (newdecl, olddecl);
2255 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2256 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2257 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2258 if (! DECL_EXTERNAL (olddecl))
2259 DECL_EXTERNAL (newdecl) = 0;
2260 if (! DECL_COMDAT (olddecl))
2261 DECL_COMDAT (newdecl) = 0;
2263 new_template_info = NULL_TREE;
2264 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2266 bool new_redefines_gnu_inline = false;
2268 if (new_defines_function
2269 && ((DECL_INTERFACE_KNOWN (olddecl)
2270 && TREE_CODE (olddecl) == FUNCTION_DECL)
2271 || (TREE_CODE (olddecl) == TEMPLATE_DECL
2272 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2273 == FUNCTION_DECL))))
2275 tree fn = olddecl;
2277 if (TREE_CODE (fn) == TEMPLATE_DECL)
2278 fn = DECL_TEMPLATE_RESULT (olddecl);
2280 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
2283 if (!new_redefines_gnu_inline)
2285 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2286 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2287 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2289 DECL_TEMPLATE_INSTANTIATED (newdecl)
2290 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
2291 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2293 /* If the OLDDECL is an instantiation and/or specialization,
2294 then the NEWDECL must be too. But, it may not yet be marked
2295 as such if the caller has created NEWDECL, but has not yet
2296 figured out that it is a redeclaration. */
2297 if (!DECL_USE_TEMPLATE (newdecl))
2298 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2300 /* Don't really know how much of the language-specific
2301 values we should copy from old to new. */
2302 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2303 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2304 DECL_INITIALIZED_IN_CLASS_P (newdecl)
2305 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2307 if (LANG_DECL_HAS_MIN (newdecl))
2309 DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2310 DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2311 if (DECL_TEMPLATE_INFO (newdecl))
2313 new_template_info = DECL_TEMPLATE_INFO (newdecl);
2314 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2315 && DECL_TEMPLATE_SPECIALIZATION (newdecl))
2316 /* Remember the presence of explicit specialization args. */
2317 TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (olddecl))
2318 = TINFO_USED_TEMPLATE_ID (new_template_info);
2320 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2322 /* Only functions have these fields. */
2323 if (DECL_DECLARES_FUNCTION_P (newdecl))
2325 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2326 DECL_BEFRIENDING_CLASSES (newdecl)
2327 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2328 DECL_BEFRIENDING_CLASSES (olddecl));
2329 /* DECL_THUNKS is only valid for virtual functions,
2330 otherwise it is a DECL_FRIEND_CONTEXT. */
2331 if (DECL_VIRTUAL_P (newdecl))
2332 SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2334 /* Only variables have this field. */
2335 else if (VAR_P (newdecl)
2336 && VAR_HAD_UNKNOWN_BOUND (olddecl))
2337 SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2340 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2342 tree parm;
2344 /* Merge parameter attributes. */
2345 tree oldarg, newarg;
2346 for (oldarg = DECL_ARGUMENTS(olddecl),
2347 newarg = DECL_ARGUMENTS(newdecl);
2348 oldarg && newarg;
2349 oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2350 DECL_ATTRIBUTES (newarg)
2351 = (*targetm.merge_decl_attributes) (oldarg, newarg);
2352 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2355 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2356 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2358 /* If newdecl is not a specialization, then it is not a
2359 template-related function at all. And that means that we
2360 should have exited above, returning 0. */
2361 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2363 if (DECL_ODR_USED (olddecl))
2364 /* From [temp.expl.spec]:
2366 If a template, a member template or the member of a class
2367 template is explicitly specialized then that
2368 specialization shall be declared before the first use of
2369 that specialization that would cause an implicit
2370 instantiation to take place, in every translation unit in
2371 which such a use occurs. */
2372 error ("explicit specialization of %qD after first use",
2373 olddecl);
2375 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2376 DECL_COMDAT (newdecl) = (TREE_PUBLIC (newdecl)
2377 && DECL_DECLARED_INLINE_P (newdecl));
2379 /* Don't propagate visibility from the template to the
2380 specialization here. We'll do that in determine_visibility if
2381 appropriate. */
2382 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2384 /* [temp.expl.spec/14] We don't inline explicit specialization
2385 just because the primary template says so. */
2387 /* But still keep DECL_DISREGARD_INLINE_LIMITS in sync with
2388 the always_inline attribute. */
2389 if (DECL_DISREGARD_INLINE_LIMITS (olddecl)
2390 && !DECL_DISREGARD_INLINE_LIMITS (newdecl))
2392 if (DECL_DECLARED_INLINE_P (newdecl))
2393 DECL_DISREGARD_INLINE_LIMITS (newdecl) = true;
2394 else
2395 DECL_ATTRIBUTES (newdecl)
2396 = remove_attribute ("always_inline",
2397 DECL_ATTRIBUTES (newdecl));
2400 else if (new_defines_function && DECL_INITIAL (olddecl))
2402 /* Never inline re-defined extern inline functions.
2403 FIXME: this could be better handled by keeping both
2404 function as separate declarations. */
2405 DECL_UNINLINABLE (newdecl) = 1;
2407 else
2409 if (DECL_PENDING_INLINE_P (olddecl))
2411 DECL_PENDING_INLINE_P (newdecl) = 1;
2412 DECL_PENDING_INLINE_INFO (newdecl)
2413 = DECL_PENDING_INLINE_INFO (olddecl);
2415 else if (DECL_PENDING_INLINE_P (newdecl))
2417 else if (DECL_SAVED_FUNCTION_DATA (newdecl) == NULL)
2418 DECL_SAVED_FUNCTION_DATA (newdecl)
2419 = DECL_SAVED_FUNCTION_DATA (olddecl);
2421 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2423 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2424 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2426 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2427 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2428 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2429 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2432 /* Preserve abstractness on cloned [cd]tors. */
2433 DECL_ABSTRACT_P (newdecl) = DECL_ABSTRACT_P (olddecl);
2435 /* Update newdecl's parms to point at olddecl. */
2436 for (parm = DECL_ARGUMENTS (newdecl); parm;
2437 parm = DECL_CHAIN (parm))
2438 DECL_CONTEXT (parm) = olddecl;
2440 if (! types_match)
2442 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2443 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2444 COPY_DECL_RTL (newdecl, olddecl);
2446 if (! types_match || new_defines_function)
2448 /* These need to be copied so that the names are available.
2449 Note that if the types do match, we'll preserve inline
2450 info and other bits, but if not, we won't. */
2451 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2452 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2454 /* If redeclaring a builtin function, it stays built in
2455 if newdecl is a gnu_inline definition, or if newdecl is just
2456 a declaration. */
2457 if (DECL_BUILT_IN (olddecl)
2458 && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2460 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2461 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2462 /* If we're keeping the built-in definition, keep the rtl,
2463 regardless of declaration matches. */
2464 COPY_DECL_RTL (olddecl, newdecl);
2465 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2467 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2468 switch (fncode)
2470 /* If a compatible prototype of these builtin functions
2471 is seen, assume the runtime implements it with the
2472 expected semantics. */
2473 case BUILT_IN_STPCPY:
2474 if (builtin_decl_explicit_p (fncode))
2475 set_builtin_decl_implicit_p (fncode, true);
2476 break;
2477 default:
2478 if (builtin_decl_explicit_p (fncode))
2479 set_builtin_decl_declared_p (fncode, true);
2480 break;
2484 copy_attributes_to_builtin (newdecl);
2486 if (new_defines_function)
2487 /* If defining a function declared with other language
2488 linkage, use the previously declared language linkage. */
2489 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2490 else if (types_match)
2492 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2493 /* Don't clear out the arguments if we're just redeclaring a
2494 function. */
2495 if (DECL_ARGUMENTS (olddecl))
2496 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2499 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2500 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2502 /* Now preserve various other info from the definition. */
2503 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2504 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2505 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2506 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2508 /* Warn about conflicting visibility specifications. */
2509 if (DECL_VISIBILITY_SPECIFIED (olddecl)
2510 && DECL_VISIBILITY_SPECIFIED (newdecl)
2511 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2513 if (warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wattributes,
2514 "%qD: visibility attribute ignored because it "
2515 "conflicts with previous declaration", newdecl))
2516 inform (DECL_SOURCE_LOCATION (olddecl),
2517 "previous declaration of %qD", olddecl);
2519 /* Choose the declaration which specified visibility. */
2520 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2522 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2523 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2525 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2526 so keep this behavior. */
2527 if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2529 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2530 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2532 /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED. */
2533 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2535 SET_DECL_ALIGN (newdecl, DECL_ALIGN (olddecl));
2536 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2538 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2539 if (DECL_WARN_IF_NOT_ALIGN (olddecl)
2540 > DECL_WARN_IF_NOT_ALIGN (newdecl))
2541 SET_DECL_WARN_IF_NOT_ALIGN (newdecl,
2542 DECL_WARN_IF_NOT_ALIGN (olddecl));
2543 if (TREE_CODE (newdecl) == FIELD_DECL)
2544 DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2546 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2547 with that from NEWDECL below. */
2548 if (DECL_LANG_SPECIFIC (olddecl))
2550 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2551 != DECL_LANG_SPECIFIC (newdecl));
2552 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2555 /* Merge the USED information. */
2556 if (TREE_USED (olddecl))
2557 TREE_USED (newdecl) = 1;
2558 else if (TREE_USED (newdecl))
2559 TREE_USED (olddecl) = 1;
2560 if (VAR_P (newdecl))
2562 if (DECL_READ_P (olddecl))
2563 DECL_READ_P (newdecl) = 1;
2564 else if (DECL_READ_P (newdecl))
2565 DECL_READ_P (olddecl) = 1;
2567 if (DECL_PRESERVE_P (olddecl))
2568 DECL_PRESERVE_P (newdecl) = 1;
2569 else if (DECL_PRESERVE_P (newdecl))
2570 DECL_PRESERVE_P (olddecl) = 1;
2572 /* Merge the DECL_FUNCTION_VERSIONED information. newdecl will be copied
2573 to olddecl and deleted. */
2574 if (TREE_CODE (newdecl) == FUNCTION_DECL
2575 && DECL_FUNCTION_VERSIONED (olddecl))
2577 /* Set the flag for newdecl so that it gets copied to olddecl. */
2578 DECL_FUNCTION_VERSIONED (newdecl) = 1;
2579 /* newdecl will be purged after copying to olddecl and is no longer
2580 a version. */
2581 cgraph_node::delete_function_version_by_decl (newdecl);
2584 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2586 int function_size;
2587 struct symtab_node *snode = symtab_node::get (olddecl);
2589 function_size = sizeof (struct tree_decl_common);
2591 memcpy ((char *) olddecl + sizeof (struct tree_common),
2592 (char *) newdecl + sizeof (struct tree_common),
2593 function_size - sizeof (struct tree_common));
2595 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2596 (char *) newdecl + sizeof (struct tree_decl_common),
2597 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2599 /* Preserve symtab node mapping. */
2600 olddecl->decl_with_vis.symtab_node = snode;
2602 if (new_template_info)
2603 /* If newdecl is a template instantiation, it is possible that
2604 the following sequence of events has occurred:
2606 o A friend function was declared in a class template. The
2607 class template was instantiated.
2609 o The instantiation of the friend declaration was
2610 recorded on the instantiation list, and is newdecl.
2612 o Later, however, instantiate_class_template called pushdecl
2613 on the newdecl to perform name injection. But, pushdecl in
2614 turn called duplicate_decls when it discovered that another
2615 declaration of a global function with the same name already
2616 existed.
2618 o Here, in duplicate_decls, we decided to clobber newdecl.
2620 If we're going to do that, we'd better make sure that
2621 olddecl, and not newdecl, is on the list of
2622 instantiations so that if we try to do the instantiation
2623 again we won't get the clobbered declaration. */
2624 reregister_specialization (newdecl,
2625 new_template_info,
2626 olddecl);
2628 else
2630 size_t size = tree_code_size (TREE_CODE (newdecl));
2632 memcpy ((char *) olddecl + sizeof (struct tree_common),
2633 (char *) newdecl + sizeof (struct tree_common),
2634 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2635 switch (TREE_CODE (newdecl))
2637 case LABEL_DECL:
2638 case VAR_DECL:
2639 case RESULT_DECL:
2640 case PARM_DECL:
2641 case FIELD_DECL:
2642 case TYPE_DECL:
2643 case CONST_DECL:
2645 struct symtab_node *snode = NULL;
2647 if (VAR_P (newdecl)
2648 && (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl)
2649 || DECL_EXTERNAL (olddecl)))
2650 snode = symtab_node::get (olddecl);
2651 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2652 (char *) newdecl + sizeof (struct tree_decl_common),
2653 size - sizeof (struct tree_decl_common)
2654 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2655 if (VAR_P (newdecl))
2656 olddecl->decl_with_vis.symtab_node = snode;
2658 break;
2659 default:
2660 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2661 (char *) newdecl + sizeof (struct tree_decl_common),
2662 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2663 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2664 break;
2668 if (VAR_OR_FUNCTION_DECL_P (newdecl))
2670 if (DECL_EXTERNAL (olddecl)
2671 || TREE_PUBLIC (olddecl)
2672 || TREE_STATIC (olddecl))
2674 /* Merge the section attribute.
2675 We want to issue an error if the sections conflict but that must be
2676 done later in decl_attributes since we are called before attributes
2677 are assigned. */
2678 if (DECL_SECTION_NAME (newdecl) != NULL)
2679 set_decl_section_name (olddecl, DECL_SECTION_NAME (newdecl));
2681 if (DECL_ONE_ONLY (newdecl))
2683 struct symtab_node *oldsym, *newsym;
2684 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2685 oldsym = cgraph_node::get_create (olddecl);
2686 else
2687 oldsym = varpool_node::get_create (olddecl);
2688 newsym = symtab_node::get (newdecl);
2689 oldsym->set_comdat_group (newsym->get_comdat_group ());
2693 if (VAR_P (newdecl)
2694 && CP_DECL_THREAD_LOCAL_P (newdecl))
2696 CP_DECL_THREAD_LOCAL_P (olddecl) = true;
2697 if (!processing_template_decl)
2698 set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl));
2702 DECL_UID (olddecl) = olddecl_uid;
2703 if (olddecl_friend)
2704 DECL_FRIEND_P (olddecl) = 1;
2705 if (hidden_friend)
2707 DECL_ANTICIPATED (olddecl) = 1;
2708 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2711 /* NEWDECL contains the merged attribute lists.
2712 Update OLDDECL to be the same. */
2713 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2715 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2716 so that encode_section_info has a chance to look at the new decl
2717 flags and attributes. */
2718 if (DECL_RTL_SET_P (olddecl)
2719 && (TREE_CODE (olddecl) == FUNCTION_DECL
2720 || (VAR_P (olddecl)
2721 && TREE_STATIC (olddecl))))
2722 make_decl_rtl (olddecl);
2724 /* The NEWDECL will no longer be needed. Because every out-of-class
2725 declaration of a member results in a call to duplicate_decls,
2726 freeing these nodes represents in a significant savings.
2728 Before releasing the node, be sore to remove function from symbol
2729 table that might have been inserted there to record comdat group.
2730 Be sure to however do not free DECL_STRUCT_FUNCTION because this
2731 structure is shared in between newdecl and oldecl. */
2732 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2733 DECL_STRUCT_FUNCTION (newdecl) = NULL;
2734 if (VAR_OR_FUNCTION_DECL_P (newdecl))
2736 struct symtab_node *snode = symtab_node::get (newdecl);
2737 if (snode)
2738 snode->remove ();
2741 /* Remove the associated constraints for newdecl, if any, before
2742 reclaiming memory. */
2743 if (flag_concepts)
2744 remove_constraints (newdecl);
2746 ggc_free (newdecl);
2748 return olddecl;
2751 /* Return zero if the declaration NEWDECL is valid
2752 when the declaration OLDDECL (assumed to be for the same name)
2753 has already been seen.
2754 Otherwise return an error message format string with a %s
2755 where the identifier should go. */
2757 static const char *
2758 redeclaration_error_message (tree newdecl, tree olddecl)
2760 if (TREE_CODE (newdecl) == TYPE_DECL)
2762 /* Because C++ can put things into name space for free,
2763 constructs like "typedef struct foo { ... } foo"
2764 would look like an erroneous redeclaration. */
2765 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2766 return NULL;
2767 else
2768 return G_("redefinition of %q#D");
2770 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2772 /* If this is a pure function, its olddecl will actually be
2773 the original initialization to `0' (which we force to call
2774 abort()). Don't complain about redefinition in this case. */
2775 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2776 && DECL_INITIAL (olddecl) == NULL_TREE)
2777 return NULL;
2779 /* If both functions come from different namespaces, this is not
2780 a redeclaration - this is a conflict with a used function. */
2781 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2782 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2783 && ! decls_match (olddecl, newdecl))
2784 return G_("%qD conflicts with used function");
2786 /* We'll complain about linkage mismatches in
2787 warn_extern_redeclared_static. */
2789 /* Defining the same name twice is no good. */
2790 if (decl_defined_p (olddecl)
2791 && decl_defined_p (newdecl))
2793 if (DECL_NAME (olddecl) == NULL_TREE)
2794 return G_("%q#D not declared in class");
2795 else if (!GNU_INLINE_P (olddecl)
2796 || GNU_INLINE_P (newdecl))
2797 return G_("redefinition of %q#D");
2800 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2802 bool olda = GNU_INLINE_P (olddecl);
2803 bool newa = GNU_INLINE_P (newdecl);
2805 if (olda != newa)
2807 if (newa)
2808 return G_("%q+D redeclared inline with "
2809 "%<gnu_inline%> attribute");
2810 else
2811 return G_("%q+D redeclared inline without "
2812 "%<gnu_inline%> attribute");
2816 check_abi_tag_redeclaration
2817 (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
2818 lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
2820 return NULL;
2822 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2824 tree nt, ot;
2826 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2828 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2829 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2830 return G_("redefinition of %q#D");
2831 return NULL;
2834 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2835 || (DECL_TEMPLATE_RESULT (newdecl)
2836 == DECL_TEMPLATE_RESULT (olddecl)))
2837 return NULL;
2839 nt = DECL_TEMPLATE_RESULT (newdecl);
2840 if (DECL_TEMPLATE_INFO (nt))
2841 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2842 ot = DECL_TEMPLATE_RESULT (olddecl);
2843 if (DECL_TEMPLATE_INFO (ot))
2844 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2845 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2846 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2847 return G_("redefinition of %q#D");
2849 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2851 bool olda = GNU_INLINE_P (ot);
2852 bool newa = GNU_INLINE_P (nt);
2854 if (olda != newa)
2856 if (newa)
2857 return G_("%q+D redeclared inline with "
2858 "%<gnu_inline%> attribute");
2859 else
2860 return G_("%q+D redeclared inline without "
2861 "%<gnu_inline%> attribute");
2865 /* Core issue #226 (C++0x):
2867 If a friend function template declaration specifies a
2868 default template-argument, that declaration shall be a
2869 definition and shall be the only declaration of the
2870 function template in the translation unit. */
2871 if ((cxx_dialect != cxx98)
2872 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2873 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2874 /*is_primary=*/true,
2875 /*is_partial=*/false,
2876 /*is_friend_decl=*/2))
2877 return G_("redeclaration of friend %q#D "
2878 "may not have default template arguments");
2880 return NULL;
2882 else if (VAR_P (newdecl)
2883 && CP_DECL_THREAD_LOCAL_P (newdecl) != CP_DECL_THREAD_LOCAL_P (olddecl)
2884 && (! DECL_LANG_SPECIFIC (olddecl)
2885 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2886 || CP_DECL_THREAD_LOCAL_P (newdecl)))
2888 /* Only variables can be thread-local, and all declarations must
2889 agree on this property. */
2890 if (CP_DECL_THREAD_LOCAL_P (newdecl))
2891 return G_("thread-local declaration of %q#D follows "
2892 "non-thread-local declaration");
2893 else
2894 return G_("non-thread-local declaration of %q#D follows "
2895 "thread-local declaration");
2897 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2899 /* The objects have been declared at namespace scope. If either
2900 is a member of an anonymous union, then this is an invalid
2901 redeclaration. For example:
2903 int i;
2904 union { int i; };
2906 is invalid. */
2907 if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
2908 || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
2909 return G_("redeclaration of %q#D");
2910 /* If at least one declaration is a reference, there is no
2911 conflict. For example:
2913 int i = 3;
2914 extern int i;
2916 is valid. */
2917 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2918 return NULL;
2920 /* Static data member declared outside a class definition
2921 if the variable is defined within the class with constexpr
2922 specifier is declaration rather than definition (and
2923 deprecated). */
2924 if (cxx_dialect >= cxx17
2925 && DECL_CLASS_SCOPE_P (olddecl)
2926 && DECL_DECLARED_CONSTEXPR_P (olddecl)
2927 && !DECL_INITIAL (newdecl))
2929 DECL_EXTERNAL (newdecl) = 1;
2930 /* For now, only warn with explicit -Wdeprecated. */
2931 if (global_options_set.x_warn_deprecated
2932 && warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wdeprecated,
2933 "redundant redeclaration of %<constexpr%> static "
2934 "data member %qD", newdecl))
2935 inform (DECL_SOURCE_LOCATION (olddecl),
2936 "previous declaration of %qD", olddecl);
2937 return NULL;
2940 /* Reject two definitions. */
2941 return G_("redefinition of %q#D");
2943 else
2945 /* Objects declared with block scope: */
2946 /* Reject two definitions, and reject a definition
2947 together with an external reference. */
2948 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2949 return G_("redeclaration of %q#D");
2950 return NULL;
2955 /* Hash and equality functions for the named_label table. */
2957 hashval_t
2958 named_label_hash::hash (const value_type entry)
2960 return IDENTIFIER_HASH_VALUE (entry->name);
2963 bool
2964 named_label_hash::equal (const value_type entry, compare_type name)
2966 return name == entry->name;
2969 /* Look for a label named ID in the current function. If one cannot
2970 be found, create one. Return the named_label_entry, or NULL on
2971 failure. */
2973 static named_label_entry *
2974 lookup_label_1 (tree id, bool making_local_p)
2976 /* You can't use labels at global scope. */
2977 if (current_function_decl == NULL_TREE)
2979 error ("label %qE referenced outside of any function", id);
2980 return NULL;
2983 if (!named_labels)
2984 named_labels = hash_table<named_label_hash>::create_ggc (13);
2986 hashval_t hash = IDENTIFIER_HASH_VALUE (id);
2987 named_label_entry **slot
2988 = named_labels->find_slot_with_hash (id, hash, INSERT);
2989 named_label_entry *old = *slot;
2991 if (old && old->label_decl)
2993 if (!making_local_p)
2994 return old;
2996 if (old->binding_level == current_binding_level)
2998 error ("local label %qE conflicts with existing label", id);
2999 inform (DECL_SOURCE_LOCATION (old->label_decl), "previous label");
3000 return NULL;
3004 /* We are making a new decl, create or reuse the named_label_entry */
3005 named_label_entry *ent = NULL;
3006 if (old && !old->label_decl)
3007 ent = old;
3008 else
3010 ent = ggc_cleared_alloc<named_label_entry> ();
3011 ent->name = id;
3012 ent->outer = old;
3013 *slot = ent;
3016 /* Now create the LABEL_DECL. */
3017 tree decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
3019 DECL_CONTEXT (decl) = current_function_decl;
3020 SET_DECL_MODE (decl, VOIDmode);
3021 if (making_local_p)
3023 C_DECLARED_LABEL_FLAG (decl) = true;
3024 DECL_CHAIN (decl) = current_binding_level->names;
3025 current_binding_level->names = decl;
3028 ent->label_decl = decl;
3030 return ent;
3033 /* Wrapper for lookup_label_1. */
3035 tree
3036 lookup_label (tree id)
3038 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3039 named_label_entry *ent = lookup_label_1 (id, false);
3040 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3041 return ent ? ent->label_decl : NULL_TREE;
3044 tree
3045 declare_local_label (tree id)
3047 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3048 named_label_entry *ent = lookup_label_1 (id, true);
3049 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3050 return ent ? ent->label_decl : NULL_TREE;
3053 /* Returns nonzero if it is ill-formed to jump past the declaration of
3054 DECL. Returns 2 if it's also a real problem. */
3056 static int
3057 decl_jump_unsafe (tree decl)
3059 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
3060 with automatic storage duration is not in scope to a point where it is
3061 in scope is ill-formed unless the variable has scalar type, class type
3062 with a trivial default constructor and a trivial destructor, a
3063 cv-qualified version of one of these types, or an array of one of the
3064 preceding types and is declared without an initializer (8.5). */
3065 tree type = TREE_TYPE (decl);
3067 if (!VAR_P (decl) || TREE_STATIC (decl)
3068 || type == error_mark_node)
3069 return 0;
3071 if (DECL_NONTRIVIALLY_INITIALIZED_P (decl)
3072 || variably_modified_type_p (type, NULL_TREE))
3073 return 2;
3075 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3076 return 1;
3078 return 0;
3081 /* A subroutine of check_previous_goto_1 and check_goto to identify a branch
3082 to the user. */
3084 static bool
3085 identify_goto (tree decl, location_t loc, const location_t *locus,
3086 diagnostic_t diag_kind)
3088 bool complained
3089 = emit_diagnostic (diag_kind, loc, 0,
3090 decl ? N_("jump to label %qD")
3091 : N_("jump to case label"), decl);
3092 if (complained && locus)
3093 inform (*locus, " from here");
3094 return complained;
3097 /* Check that a single previously seen jump to a newly defined label
3098 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
3099 the jump context; NAMES are the names in scope in LEVEL at the jump
3100 context; LOCUS is the source position of the jump or 0. Returns
3101 true if all is well. */
3103 static bool
3104 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
3105 bool exited_omp, const location_t *locus)
3107 cp_binding_level *b;
3108 bool complained = false;
3109 int identified = 0;
3110 bool saw_eh = false, saw_omp = false, saw_tm = false, saw_cxif = false;
3112 if (exited_omp)
3114 complained = identify_goto (decl, input_location, locus, DK_ERROR);
3115 if (complained)
3116 inform (input_location, " exits OpenMP structured block");
3117 saw_omp = true;
3118 identified = 2;
3121 for (b = current_binding_level; b ; b = b->level_chain)
3123 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
3125 for (new_decls = b->names; new_decls != old_decls;
3126 new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
3127 : TREE_CHAIN (new_decls)))
3129 int problem = decl_jump_unsafe (new_decls);
3130 if (! problem)
3131 continue;
3133 if (!identified)
3135 complained = identify_goto (decl, input_location, locus,
3136 DK_PERMERROR);
3137 identified = 1;
3139 if (complained)
3141 if (problem > 1)
3142 inform (DECL_SOURCE_LOCATION (new_decls),
3143 " crosses initialization of %q#D", new_decls);
3144 else
3145 inform (DECL_SOURCE_LOCATION (new_decls),
3146 " enters scope of %q#D, which has "
3147 "non-trivial destructor", new_decls);
3151 if (b == level)
3152 break;
3154 const char *inf = NULL;
3155 location_t loc = input_location;
3156 switch (b->kind)
3158 case sk_try:
3159 if (!saw_eh)
3160 inf = N_("enters try block");
3161 saw_eh = true;
3162 break;
3164 case sk_catch:
3165 if (!saw_eh)
3166 inf = N_("enters catch block");
3167 saw_eh = true;
3168 break;
3170 case sk_omp:
3171 if (!saw_omp)
3172 inf = N_("enters OpenMP structured block");
3173 saw_omp = true;
3174 break;
3176 case sk_transaction:
3177 if (!saw_tm)
3178 inf = N_("enters synchronized or atomic statement");
3179 saw_tm = true;
3180 break;
3182 case sk_block:
3183 if (!saw_cxif && level_for_constexpr_if (b->level_chain))
3185 inf = N_("enters constexpr if statement");
3186 loc = EXPR_LOCATION (b->level_chain->this_entity);
3187 saw_cxif = true;
3189 break;
3191 default:
3192 break;
3195 if (inf)
3197 if (identified < 2)
3198 complained = identify_goto (decl, input_location, locus, DK_ERROR);
3199 identified = 2;
3200 if (complained)
3201 inform (loc, " %s", inf);
3205 return !identified;
3208 static void
3209 check_previous_goto (tree decl, struct named_label_use_entry *use)
3211 check_previous_goto_1 (decl, use->binding_level,
3212 use->names_in_scope, use->in_omp_scope,
3213 &use->o_goto_locus);
3216 static bool
3217 check_switch_goto (cp_binding_level* level)
3219 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
3222 /* Check that a new jump to a label DECL is OK. Called by
3223 finish_goto_stmt. */
3225 void
3226 check_goto (tree decl)
3228 /* We can't know where a computed goto is jumping.
3229 So we assume that it's OK. */
3230 if (TREE_CODE (decl) != LABEL_DECL)
3231 return;
3233 /* We didn't record any information about this label when we created it,
3234 and there's not much point since it's trivial to analyze as a return. */
3235 if (decl == cdtor_label)
3236 return;
3238 hashval_t hash = IDENTIFIER_HASH_VALUE (DECL_NAME (decl));
3239 named_label_entry **slot
3240 = named_labels->find_slot_with_hash (DECL_NAME (decl), hash, NO_INSERT);
3241 named_label_entry *ent = *slot;
3243 /* If the label hasn't been defined yet, defer checking. */
3244 if (! DECL_INITIAL (decl))
3246 /* Don't bother creating another use if the last goto had the
3247 same data, and will therefore create the same set of errors. */
3248 if (ent->uses
3249 && ent->uses->names_in_scope == current_binding_level->names)
3250 return;
3252 named_label_use_entry *new_use
3253 = ggc_alloc<named_label_use_entry> ();
3254 new_use->binding_level = current_binding_level;
3255 new_use->names_in_scope = current_binding_level->names;
3256 new_use->o_goto_locus = input_location;
3257 new_use->in_omp_scope = false;
3259 new_use->next = ent->uses;
3260 ent->uses = new_use;
3261 return;
3264 bool saw_catch = false, complained = false;
3265 int identified = 0;
3266 tree bad;
3267 unsigned ix;
3269 if (ent->in_try_scope || ent->in_catch_scope || ent->in_transaction_scope
3270 || ent->in_constexpr_if
3271 || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
3273 diagnostic_t diag_kind = DK_PERMERROR;
3274 if (ent->in_try_scope || ent->in_catch_scope || ent->in_constexpr_if
3275 || ent->in_transaction_scope || ent->in_omp_scope)
3276 diag_kind = DK_ERROR;
3277 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3278 &input_location, diag_kind);
3279 identified = 1 + (diag_kind == DK_ERROR);
3282 FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
3284 int u = decl_jump_unsafe (bad);
3286 if (u > 1 && DECL_ARTIFICIAL (bad))
3288 /* Can't skip init of __exception_info. */
3289 if (identified == 1)
3291 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3292 &input_location, DK_ERROR);
3293 identified = 2;
3295 if (complained)
3296 inform (DECL_SOURCE_LOCATION (bad), " enters catch block");
3297 saw_catch = true;
3299 else if (complained)
3301 if (u > 1)
3302 inform (DECL_SOURCE_LOCATION (bad),
3303 " skips initialization of %q#D", bad);
3304 else
3305 inform (DECL_SOURCE_LOCATION (bad),
3306 " enters scope of %q#D which has "
3307 "non-trivial destructor", bad);
3311 if (complained)
3313 if (ent->in_try_scope)
3314 inform (input_location, " enters try block");
3315 else if (ent->in_catch_scope && !saw_catch)
3316 inform (input_location, " enters catch block");
3317 else if (ent->in_transaction_scope)
3318 inform (input_location, " enters synchronized or atomic statement");
3319 else if (ent->in_constexpr_if)
3320 inform (input_location, " enters %<constexpr%> if statement");
3323 if (ent->in_omp_scope)
3325 if (complained)
3326 inform (input_location, " enters OpenMP structured block");
3328 else if (flag_openmp)
3329 for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3331 if (b == ent->binding_level)
3332 break;
3333 if (b->kind == sk_omp)
3335 if (identified < 2)
3337 complained = identify_goto (decl,
3338 DECL_SOURCE_LOCATION (decl),
3339 &input_location, DK_ERROR);
3340 identified = 2;
3342 if (complained)
3343 inform (input_location, " exits OpenMP structured block");
3344 break;
3349 /* Check that a return is ok wrt OpenMP structured blocks.
3350 Called by finish_return_stmt. Returns true if all is well. */
3352 bool
3353 check_omp_return (void)
3355 for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3356 if (b->kind == sk_omp)
3358 error ("invalid exit from OpenMP structured block");
3359 return false;
3361 else if (b->kind == sk_function_parms)
3362 break;
3363 return true;
3366 /* Define a label, specifying the location in the source file.
3367 Return the LABEL_DECL node for the label. */
3369 static tree
3370 define_label_1 (location_t location, tree name)
3372 /* After labels, make any new cleanups in the function go into their
3373 own new (temporary) binding contour. */
3374 for (cp_binding_level *p = current_binding_level;
3375 p->kind != sk_function_parms;
3376 p = p->level_chain)
3377 p->more_cleanups_ok = 0;
3379 named_label_entry *ent = lookup_label_1 (name, false);
3380 tree decl = ent->label_decl;
3382 if (DECL_INITIAL (decl) != NULL_TREE)
3384 error ("duplicate label %qD", decl);
3385 return error_mark_node;
3387 else
3389 /* Mark label as having been defined. */
3390 DECL_INITIAL (decl) = error_mark_node;
3391 /* Say where in the source. */
3392 DECL_SOURCE_LOCATION (decl) = location;
3394 ent->binding_level = current_binding_level;
3395 ent->names_in_scope = current_binding_level->names;
3397 for (named_label_use_entry *use = ent->uses; use; use = use->next)
3398 check_previous_goto (decl, use);
3399 ent->uses = NULL;
3402 return decl;
3405 /* Wrapper for define_label_1. */
3407 tree
3408 define_label (location_t location, tree name)
3410 bool running = timevar_cond_start (TV_NAME_LOOKUP);
3411 tree ret = define_label_1 (location, name);
3412 timevar_cond_stop (TV_NAME_LOOKUP, running);
3413 return ret;
3417 struct cp_switch
3419 cp_binding_level *level;
3420 struct cp_switch *next;
3421 /* The SWITCH_STMT being built. */
3422 tree switch_stmt;
3423 /* A splay-tree mapping the low element of a case range to the high
3424 element, or NULL_TREE if there is no high element. Used to
3425 determine whether or not a new case label duplicates an old case
3426 label. We need a tree, rather than simply a hash table, because
3427 of the GNU case range extension. */
3428 splay_tree cases;
3429 /* Remember whether there was a case value that is outside the
3430 range of the original type of the controlling expression. */
3431 bool outside_range_p;
3432 /* Remember whether a default: case label has been seen. */
3433 bool has_default_p;
3434 /* Remember whether a BREAK_STMT has been seen in this SWITCH_STMT. */
3435 bool break_stmt_seen_p;
3436 /* Set if inside of {FOR,DO,WHILE}_BODY nested inside of a switch,
3437 where BREAK_STMT doesn't belong to the SWITCH_STMT. */
3438 bool in_loop_body_p;
3441 /* A stack of the currently active switch statements. The innermost
3442 switch statement is on the top of the stack. There is no need to
3443 mark the stack for garbage collection because it is only active
3444 during the processing of the body of a function, and we never
3445 collect at that point. */
3447 static struct cp_switch *switch_stack;
3449 /* Called right after a switch-statement condition is parsed.
3450 SWITCH_STMT is the switch statement being parsed. */
3452 void
3453 push_switch (tree switch_stmt)
3455 struct cp_switch *p = XNEW (struct cp_switch);
3456 p->level = current_binding_level;
3457 p->next = switch_stack;
3458 p->switch_stmt = switch_stmt;
3459 p->cases = splay_tree_new (case_compare, NULL, NULL);
3460 p->outside_range_p = false;
3461 p->has_default_p = false;
3462 p->break_stmt_seen_p = false;
3463 p->in_loop_body_p = false;
3464 switch_stack = p;
3467 void
3468 pop_switch (void)
3470 struct cp_switch *cs = switch_stack;
3471 location_t switch_location;
3473 /* Emit warnings as needed. */
3474 switch_location = EXPR_LOC_OR_LOC (cs->switch_stmt, input_location);
3475 const bool bool_cond_p
3476 = (SWITCH_STMT_TYPE (cs->switch_stmt)
3477 && TREE_CODE (SWITCH_STMT_TYPE (cs->switch_stmt)) == BOOLEAN_TYPE);
3478 if (!processing_template_decl)
3479 c_do_switch_warnings (cs->cases, switch_location,
3480 SWITCH_STMT_TYPE (cs->switch_stmt),
3481 SWITCH_STMT_COND (cs->switch_stmt),
3482 bool_cond_p, cs->outside_range_p);
3484 /* For the benefit of block_may_fallthru remember if the switch body
3485 case labels cover all possible values and if there are break; stmts. */
3486 if (cs->has_default_p
3487 || (!processing_template_decl
3488 && c_switch_covers_all_cases_p (cs->cases,
3489 SWITCH_STMT_TYPE (cs->switch_stmt))))
3490 SWITCH_STMT_ALL_CASES_P (cs->switch_stmt) = 1;
3491 if (!cs->break_stmt_seen_p)
3492 SWITCH_STMT_NO_BREAK_P (cs->switch_stmt) = 1;
3493 gcc_assert (!cs->in_loop_body_p);
3494 splay_tree_delete (cs->cases);
3495 switch_stack = switch_stack->next;
3496 free (cs);
3499 /* Note that a BREAK_STMT is about to be added. If it is inside of
3500 a SWITCH_STMT and not inside of a loop body inside of it, note
3501 in switch_stack we've seen a BREAK_STMT. */
3503 void
3504 note_break_stmt (void)
3506 if (switch_stack && !switch_stack->in_loop_body_p)
3507 switch_stack->break_stmt_seen_p = true;
3510 /* Note the start of processing of an iteration statement's body.
3511 The note_break_stmt function will do nothing while processing it.
3512 Return a flag that should be passed to note_iteration_stmt_body_end. */
3514 bool
3515 note_iteration_stmt_body_start (void)
3517 if (!switch_stack)
3518 return false;
3519 bool ret = switch_stack->in_loop_body_p;
3520 switch_stack->in_loop_body_p = true;
3521 return ret;
3524 /* Note the end of processing of an iteration statement's body. */
3526 void
3527 note_iteration_stmt_body_end (bool prev)
3529 if (switch_stack)
3530 switch_stack->in_loop_body_p = prev;
3533 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3534 condition. Note that if TYPE and VALUE are already integral we don't
3535 really do the conversion because the language-independent
3536 warning/optimization code will work better that way. */
3538 static tree
3539 case_conversion (tree type, tree value)
3541 if (value == NULL_TREE)
3542 return value;
3544 if (cxx_dialect >= cxx11
3545 && (SCOPED_ENUM_P (type)
3546 || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3548 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3549 type = type_promotes_to (type);
3550 value = (perform_implicit_conversion_flags
3551 (type, value, tf_warning_or_error,
3552 LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL));
3554 return cxx_constant_value (value);
3557 /* Note that we've seen a definition of a case label, and complain if this
3558 is a bad place for one. */
3560 tree
3561 finish_case_label (location_t loc, tree low_value, tree high_value)
3563 tree cond, r;
3564 cp_binding_level *p;
3565 tree type;
3567 if (low_value == NULL_TREE && high_value == NULL_TREE)
3568 switch_stack->has_default_p = true;
3570 if (processing_template_decl)
3572 tree label;
3574 /* For templates, just add the case label; we'll do semantic
3575 analysis at instantiation-time. */
3576 label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3577 return add_stmt (build_case_label (low_value, high_value, label));
3580 /* Find the condition on which this switch statement depends. */
3581 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3582 if (cond && TREE_CODE (cond) == TREE_LIST)
3583 cond = TREE_VALUE (cond);
3585 if (!check_switch_goto (switch_stack->level))
3586 return error_mark_node;
3588 type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3590 low_value = case_conversion (type, low_value);
3591 high_value = case_conversion (type, high_value);
3593 r = c_add_case_label (loc, switch_stack->cases, cond, type,
3594 low_value, high_value,
3595 &switch_stack->outside_range_p);
3597 /* After labels, make any new cleanups in the function go into their
3598 own new (temporary) binding contour. */
3599 for (p = current_binding_level;
3600 p->kind != sk_function_parms;
3601 p = p->level_chain)
3602 p->more_cleanups_ok = 0;
3604 return r;
3607 struct typename_info {
3608 tree scope;
3609 tree name;
3610 tree template_id;
3611 bool enum_p;
3612 bool class_p;
3615 struct typename_hasher : ggc_ptr_hash<tree_node>
3617 typedef typename_info *compare_type;
3619 /* Hash a TYPENAME_TYPE. */
3621 static hashval_t
3622 hash (tree t)
3624 hashval_t hash;
3626 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3627 ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
3629 return hash;
3632 /* Compare two TYPENAME_TYPEs. */
3634 static bool
3635 equal (tree t1, const typename_info *t2)
3637 return (TYPE_IDENTIFIER (t1) == t2->name
3638 && TYPE_CONTEXT (t1) == t2->scope
3639 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3640 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3641 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3645 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
3646 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3648 Returns the new TYPENAME_TYPE. */
3650 static GTY (()) hash_table<typename_hasher> *typename_htab;
3652 tree
3653 build_typename_type (tree context, tree name, tree fullname,
3654 enum tag_types tag_type)
3656 tree t;
3657 tree d;
3658 typename_info ti;
3659 tree *e;
3660 hashval_t hash;
3662 if (typename_htab == NULL)
3663 typename_htab = hash_table<typename_hasher>::create_ggc (61);
3665 ti.scope = FROB_CONTEXT (context);
3666 ti.name = name;
3667 ti.template_id = fullname;
3668 ti.enum_p = tag_type == enum_type;
3669 ti.class_p = (tag_type == class_type
3670 || tag_type == record_type
3671 || tag_type == union_type);
3672 hash = (htab_hash_pointer (ti.scope)
3673 ^ htab_hash_pointer (ti.name));
3675 /* See if we already have this type. */
3676 e = typename_htab->find_slot_with_hash (&ti, hash, INSERT);
3677 if (*e)
3678 t = *e;
3679 else
3681 /* Build the TYPENAME_TYPE. */
3682 t = cxx_make_type (TYPENAME_TYPE);
3683 TYPE_CONTEXT (t) = ti.scope;
3684 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3685 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3686 TYPENAME_IS_CLASS_P (t) = ti.class_p;
3688 /* Build the corresponding TYPE_DECL. */
3689 d = build_decl (input_location, TYPE_DECL, name, t);
3690 TYPE_NAME (TREE_TYPE (d)) = d;
3691 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3692 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3693 DECL_ARTIFICIAL (d) = 1;
3695 /* Store it in the hash table. */
3696 *e = t;
3698 /* TYPENAME_TYPEs must always be compared structurally, because
3699 they may or may not resolve down to another type depending on
3700 the currently open classes. */
3701 SET_TYPE_STRUCTURAL_EQUALITY (t);
3704 return t;
3707 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
3708 provided to name the type. Returns an appropriate type, unless an
3709 error occurs, in which case error_mark_node is returned. If we
3710 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3711 return that, rather than the _TYPE it corresponds to, in other
3712 cases we look through the type decl. If TF_ERROR is set, complain
3713 about errors, otherwise be quiet. */
3715 tree
3716 make_typename_type (tree context, tree name, enum tag_types tag_type,
3717 tsubst_flags_t complain)
3719 tree fullname;
3720 tree t;
3721 bool want_template;
3723 if (name == error_mark_node
3724 || context == NULL_TREE
3725 || context == error_mark_node)
3726 return error_mark_node;
3728 if (TYPE_P (name))
3730 if (!(TYPE_LANG_SPECIFIC (name)
3731 && (CLASSTYPE_IS_TEMPLATE (name)
3732 || CLASSTYPE_USE_TEMPLATE (name))))
3733 name = TYPE_IDENTIFIER (name);
3734 else
3735 /* Create a TEMPLATE_ID_EXPR for the type. */
3736 name = build_nt (TEMPLATE_ID_EXPR,
3737 CLASSTYPE_TI_TEMPLATE (name),
3738 CLASSTYPE_TI_ARGS (name));
3740 else if (TREE_CODE (name) == TYPE_DECL)
3741 name = DECL_NAME (name);
3743 fullname = name;
3745 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3747 name = TREE_OPERAND (name, 0);
3748 if (DECL_TYPE_TEMPLATE_P (name))
3749 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3750 if (TREE_CODE (name) != IDENTIFIER_NODE)
3752 if (complain & tf_error)
3753 error ("%qD is not a type", name);
3754 return error_mark_node;
3757 if (TREE_CODE (name) == TEMPLATE_DECL)
3759 if (complain & tf_error)
3760 error ("%qD used without template parameters", name);
3761 return error_mark_node;
3763 gcc_assert (identifier_p (name));
3764 gcc_assert (TYPE_P (context));
3766 if (!MAYBE_CLASS_TYPE_P (context))
3768 if (complain & tf_error)
3769 error ("%q#T is not a class", context);
3770 return error_mark_node;
3773 /* When the CONTEXT is a dependent type, NAME could refer to a
3774 dependent base class of CONTEXT. But look inside it anyway
3775 if CONTEXT is a currently open scope, in case it refers to a
3776 member of the current instantiation or a non-dependent base;
3777 lookup will stop when we hit a dependent base. */
3778 if (!dependent_scope_p (context))
3779 /* We should only set WANT_TYPE when we're a nested typename type.
3780 Then we can give better diagnostics if we find a non-type. */
3781 t = lookup_field (context, name, 2, /*want_type=*/true);
3782 else
3783 t = NULL_TREE;
3785 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3786 return build_typename_type (context, name, fullname, tag_type);
3788 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3790 if (!t)
3792 if (complain & tf_error)
3794 if (!COMPLETE_TYPE_P (context))
3795 cxx_incomplete_type_error (NULL_TREE, context);
3796 else
3797 error (want_template ? G_("no class template named %q#T in %q#T")
3798 : G_("no type named %q#T in %q#T"), name, context);
3800 return error_mark_node;
3803 /* Pull out the template from an injected-class-name (or multiple). */
3804 if (want_template)
3805 t = maybe_get_template_decl_from_type_decl (t);
3807 if (TREE_CODE (t) == TREE_LIST)
3809 if (complain & tf_error)
3811 error ("lookup of %qT in %qT is ambiguous", name, context);
3812 print_candidates (t);
3814 return error_mark_node;
3817 if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3819 if (complain & tf_error)
3820 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3821 context, name, t);
3822 return error_mark_node;
3824 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3826 if (complain & tf_error)
3827 error ("%<typename %T::%D%> names %q#T, which is not a type",
3828 context, name, t);
3829 return error_mark_node;
3832 if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3833 return error_mark_node;
3835 /* If we are currently parsing a template and if T is a typedef accessed
3836 through CONTEXT then we need to remember and check access of T at
3837 template instantiation time. */
3838 add_typedef_to_current_template_for_access_check (t, context, input_location);
3840 if (want_template)
3841 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3842 NULL_TREE, context,
3843 /*entering_scope=*/0,
3844 complain | tf_user);
3846 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3847 t = TREE_TYPE (t);
3849 maybe_record_typedef_use (t);
3851 return t;
3854 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3855 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3856 in which case error_mark_node is returned.
3858 If PARM_LIST is non-NULL, also make sure that the template parameter
3859 list of TEMPLATE_DECL matches.
3861 If COMPLAIN zero, don't complain about any errors that occur. */
3863 tree
3864 make_unbound_class_template (tree context, tree name, tree parm_list,
3865 tsubst_flags_t complain)
3867 tree t;
3868 tree d;
3870 if (TYPE_P (name))
3871 name = TYPE_IDENTIFIER (name);
3872 else if (DECL_P (name))
3873 name = DECL_NAME (name);
3874 gcc_assert (identifier_p (name));
3876 if (!dependent_type_p (context)
3877 || currently_open_class (context))
3879 tree tmpl = NULL_TREE;
3881 if (MAYBE_CLASS_TYPE_P (context))
3882 tmpl = lookup_field (context, name, 0, false);
3884 if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3885 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3887 if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3889 if (complain & tf_error)
3890 error ("no class template named %q#T in %q#T", name, context);
3891 return error_mark_node;
3894 if (parm_list
3895 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3897 if (complain & tf_error)
3899 error ("template parameters do not match template %qD", tmpl);
3900 inform (DECL_SOURCE_LOCATION (tmpl),
3901 "%qD declared here", tmpl);
3903 return error_mark_node;
3906 if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3907 complain))
3908 return error_mark_node;
3910 return tmpl;
3913 /* Build the UNBOUND_CLASS_TEMPLATE. */
3914 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3915 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3916 TREE_TYPE (t) = NULL_TREE;
3917 SET_TYPE_STRUCTURAL_EQUALITY (t);
3919 /* Build the corresponding TEMPLATE_DECL. */
3920 d = build_decl (input_location, TEMPLATE_DECL, name, t);
3921 TYPE_NAME (TREE_TYPE (d)) = d;
3922 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3923 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3924 DECL_ARTIFICIAL (d) = 1;
3925 DECL_TEMPLATE_PARMS (d) = parm_list;
3927 return t;
3932 /* Push the declarations of builtin types into the global namespace.
3933 RID_INDEX is the index of the builtin type in the array
3934 RID_POINTERS. NAME is the name used when looking up the builtin
3935 type. TYPE is the _TYPE node for the builtin type.
3937 The calls to set_global_binding below should be
3938 eliminated. Built-in types should not be looked up name; their
3939 names are keywords that the parser can recognize. However, there
3940 is code in c-common.c that uses identifier_global_value to look up
3941 built-in types by name. */
3943 void
3944 record_builtin_type (enum rid rid_index,
3945 const char* name,
3946 tree type)
3948 tree decl = NULL_TREE;
3950 if (name)
3952 tree tname = get_identifier (name);
3953 tree tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
3954 DECL_ARTIFICIAL (tdecl) = 1;
3955 set_global_binding (tdecl);
3956 decl = tdecl;
3959 if ((int) rid_index < (int) RID_MAX)
3960 if (tree rname = ridpointers[(int) rid_index])
3961 if (!decl || DECL_NAME (decl) != rname)
3963 tree rdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
3964 DECL_ARTIFICIAL (rdecl) = 1;
3965 set_global_binding (rdecl);
3966 if (!decl)
3967 decl = rdecl;
3970 if (decl)
3972 if (!TYPE_NAME (type))
3973 TYPE_NAME (type) = decl;
3974 debug_hooks->type_decl (decl, 0);
3978 /* Push a type into the namespace so that the back ends ignore it. */
3980 static void
3981 record_unknown_type (tree type, const char* name)
3983 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
3984 TYPE_DECL, get_identifier (name), type));
3985 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
3986 DECL_IGNORED_P (decl) = 1;
3987 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
3988 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
3989 SET_TYPE_ALIGN (type, 1);
3990 TYPE_USER_ALIGN (type) = 0;
3991 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
3994 /* Create all the predefined identifiers. */
3996 static void
3997 initialize_predefined_identifiers (void)
3999 struct predefined_identifier
4001 const char *name; /* Name. */
4002 tree *node; /* Node to store it in. */
4003 cp_identifier_kind kind; /* Kind of identifier. */
4006 /* A table of identifiers to create at startup. */
4007 static const predefined_identifier predefined_identifiers[] = {
4008 {"C++", &lang_name_cplusplus, cik_normal},
4009 {"C", &lang_name_c, cik_normal},
4010 /* Some of these names have a trailing space so that it is
4011 impossible for them to conflict with names written by users. */
4012 {"__ct ", &ctor_identifier, cik_ctor},
4013 {"__ct_base ", &base_ctor_identifier, cik_ctor},
4014 {"__ct_comp ", &complete_ctor_identifier, cik_ctor},
4015 {"__dt ", &dtor_identifier, cik_dtor},
4016 {"__dt_base ", &base_dtor_identifier, cik_dtor},
4017 {"__dt_comp ", &complete_dtor_identifier, cik_dtor},
4018 {"__dt_del ", &deleting_dtor_identifier, cik_dtor},
4019 {"__conv_op ", &conv_op_identifier, cik_conv_op},
4020 {"__in_chrg", &in_charge_identifier, cik_normal},
4021 {"this", &this_identifier, cik_normal},
4022 {"__delta", &delta_identifier, cik_normal},
4023 {"__pfn", &pfn_identifier, cik_normal},
4024 {"_vptr", &vptr_identifier, cik_normal},
4025 {"__vtt_parm", &vtt_parm_identifier, cik_normal},
4026 {"::", &global_identifier, cik_normal},
4027 {"std", &std_identifier, cik_normal},
4028 /* The demangler expects anonymous namespaces to be called
4029 something starting with '_GLOBAL__N_'. It no longer needs
4030 to be unique to the TU. */
4031 {"_GLOBAL__N_1", &anon_identifier, cik_normal},
4032 {"auto", &auto_identifier, cik_normal},
4033 {"decltype(auto)", &decltype_auto_identifier, cik_normal},
4034 {"initializer_list", &init_list_identifier, cik_normal},
4035 {NULL, NULL, cik_normal}
4038 for (const predefined_identifier *pid = predefined_identifiers;
4039 pid->name; ++pid)
4041 *pid->node = get_identifier (pid->name);
4042 /* Some of these identifiers already have a special kind. */
4043 if (pid->kind != cik_normal)
4044 set_identifier_kind (*pid->node, pid->kind);
4048 /* Create the predefined scalar types of C,
4049 and some nodes representing standard constants (0, 1, (void *)0).
4050 Initialize the global binding level.
4051 Make definitions for built-in primitive functions. */
4053 void
4054 cxx_init_decl_processing (void)
4056 tree void_ftype;
4057 tree void_ftype_ptr;
4059 /* Create all the identifiers we need. */
4060 initialize_predefined_identifiers ();
4062 /* Create the global variables. */
4063 push_to_top_level ();
4065 current_function_decl = NULL_TREE;
4066 current_binding_level = NULL;
4067 /* Enter the global namespace. */
4068 gcc_assert (global_namespace == NULL_TREE);
4069 global_namespace = build_lang_decl (NAMESPACE_DECL, global_identifier,
4070 void_type_node);
4071 TREE_PUBLIC (global_namespace) = 1;
4072 DECL_CONTEXT (global_namespace)
4073 = build_translation_unit_decl (get_identifier (main_input_filename));
4074 /* Remember whether we want the empty class passing ABI change warning
4075 in this TU. */
4076 TRANSLATION_UNIT_WARN_EMPTY_P (DECL_CONTEXT (global_namespace))
4077 = warn_abi && abi_version_crosses (12);
4078 debug_hooks->register_main_translation_unit
4079 (DECL_CONTEXT (global_namespace));
4080 begin_scope (sk_namespace, global_namespace);
4081 current_namespace = global_namespace;
4083 if (flag_visibility_ms_compat)
4084 default_visibility = VISIBILITY_HIDDEN;
4086 /* Initially, C. */
4087 current_lang_name = lang_name_c;
4089 /* Create the `std' namespace. */
4090 push_namespace (std_identifier);
4091 std_node = current_namespace;
4092 pop_namespace ();
4094 flag_noexcept_type = (cxx_dialect >= cxx17);
4096 c_common_nodes_and_builtins ();
4098 integer_two_node = build_int_cst (NULL_TREE, 2);
4100 /* Guess at the initial static decls size. */
4101 vec_alloc (static_decls, 500);
4103 /* ... and keyed classes. */
4104 vec_alloc (keyed_classes, 100);
4106 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
4107 truthvalue_type_node = boolean_type_node;
4108 truthvalue_false_node = boolean_false_node;
4109 truthvalue_true_node = boolean_true_node;
4111 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
4112 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
4113 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
4114 noexcept_deferred_spec = build_tree_list (make_node (DEFERRED_NOEXCEPT),
4115 NULL_TREE);
4117 #if 0
4118 record_builtin_type (RID_MAX, NULL, string_type_node);
4119 #endif
4121 delta_type_node = ptrdiff_type_node;
4122 vtable_index_type = ptrdiff_type_node;
4124 vtt_parm_type = build_pointer_type (const_ptr_type_node);
4125 void_ftype = build_function_type_list (void_type_node, NULL_TREE);
4126 void_ftype_ptr = build_function_type_list (void_type_node,
4127 ptr_type_node, NULL_TREE);
4128 void_ftype_ptr
4129 = build_exception_variant (void_ftype_ptr, empty_except_spec);
4131 /* Create the conversion operator marker. This operator's DECL_NAME
4132 is in the identifier table, so we can use identifier equality to
4133 find it. */
4134 conv_op_marker = build_lang_decl (FUNCTION_DECL, conv_op_identifier,
4135 void_ftype);
4137 /* C++ extensions */
4139 unknown_type_node = make_node (LANG_TYPE);
4140 record_unknown_type (unknown_type_node, "unknown type");
4142 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
4143 TREE_TYPE (unknown_type_node) = unknown_type_node;
4145 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
4146 result. */
4147 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
4148 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
4150 init_list_type_node = make_node (LANG_TYPE);
4151 record_unknown_type (init_list_type_node, "init list");
4154 /* Make sure we get a unique function type, so we can give
4155 its pointer type a name. (This wins for gdb.) */
4156 tree vfunc_type = make_node (FUNCTION_TYPE);
4157 TREE_TYPE (vfunc_type) = integer_type_node;
4158 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
4159 layout_type (vfunc_type);
4161 vtable_entry_type = build_pointer_type (vfunc_type);
4163 record_builtin_type (RID_MAX, "__vtbl_ptr_type", vtable_entry_type);
4165 vtbl_type_node
4166 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
4167 layout_type (vtbl_type_node);
4168 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
4169 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
4170 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
4171 layout_type (vtbl_ptr_type_node);
4172 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
4174 push_namespace (get_identifier ("__cxxabiv1"));
4175 abi_node = current_namespace;
4176 pop_namespace ();
4178 global_type_node = make_node (LANG_TYPE);
4179 record_unknown_type (global_type_node, "global type");
4181 any_targ_node = make_node (LANG_TYPE);
4182 record_unknown_type (any_targ_node, "any type");
4184 /* Now, C++. */
4185 current_lang_name = lang_name_cplusplus;
4187 if (aligned_new_threshold > 1
4188 && !pow2p_hwi (aligned_new_threshold))
4190 error ("-faligned-new=%d is not a power of two", aligned_new_threshold);
4191 aligned_new_threshold = 1;
4193 if (aligned_new_threshold == -1)
4194 aligned_new_threshold = (cxx_dialect >= cxx17) ? 1 : 0;
4195 if (aligned_new_threshold == 1)
4196 aligned_new_threshold = malloc_alignment () / BITS_PER_UNIT;
4199 tree newattrs, extvisattr;
4200 tree newtype, deltype;
4201 tree ptr_ftype_sizetype;
4202 tree new_eh_spec;
4204 ptr_ftype_sizetype
4205 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
4206 if (cxx_dialect == cxx98)
4208 tree bad_alloc_id;
4209 tree bad_alloc_type_node;
4210 tree bad_alloc_decl;
4212 push_namespace (std_identifier);
4213 bad_alloc_id = get_identifier ("bad_alloc");
4214 bad_alloc_type_node = make_class_type (RECORD_TYPE);
4215 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
4216 bad_alloc_decl
4217 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
4218 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
4219 pop_namespace ();
4221 new_eh_spec
4222 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
4224 else
4225 new_eh_spec = noexcept_false_spec;
4227 /* Ensure attribs.c is initialized. */
4228 init_attributes ();
4230 /* Ensure constraint.cc is initialized. */
4231 init_constraint_processing ();
4233 extvisattr = build_tree_list (get_identifier ("externally_visible"),
4234 NULL_TREE);
4235 newattrs = tree_cons (get_identifier ("alloc_size"),
4236 build_tree_list (NULL_TREE, integer_one_node),
4237 extvisattr);
4238 newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
4239 newtype = build_exception_variant (newtype, new_eh_spec);
4240 deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
4241 deltype = build_exception_variant (deltype, empty_except_spec);
4242 tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4243 DECL_IS_MALLOC (opnew) = 1;
4244 DECL_IS_OPERATOR_NEW (opnew) = 1;
4245 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4246 DECL_IS_MALLOC (opnew) = 1;
4247 DECL_IS_OPERATOR_NEW (opnew) = 1;
4248 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4249 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4250 if (flag_sized_deallocation)
4252 /* Also push the sized deallocation variants:
4253 void operator delete(void*, std::size_t) throw();
4254 void operator delete[](void*, std::size_t) throw(); */
4255 tree void_ftype_ptr_size
4256 = build_function_type_list (void_type_node, ptr_type_node,
4257 size_type_node, NULL_TREE);
4258 deltype = cp_build_type_attribute_variant (void_ftype_ptr_size,
4259 extvisattr);
4260 deltype = build_exception_variant (deltype, empty_except_spec);
4261 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4262 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4265 if (aligned_new_threshold)
4267 push_namespace (std_identifier);
4268 tree align_id = get_identifier ("align_val_t");
4269 align_type_node = start_enum (align_id, NULL_TREE, size_type_node,
4270 NULL_TREE, /*scoped*/true, NULL);
4271 pop_namespace ();
4273 /* operator new (size_t, align_val_t); */
4274 newtype = build_function_type_list (ptr_type_node, size_type_node,
4275 align_type_node, NULL_TREE);
4276 newtype = cp_build_type_attribute_variant (newtype, newattrs);
4277 newtype = build_exception_variant (newtype, new_eh_spec);
4278 opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4279 DECL_IS_MALLOC (opnew) = 1;
4280 DECL_IS_OPERATOR_NEW (opnew) = 1;
4281 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4282 DECL_IS_MALLOC (opnew) = 1;
4283 DECL_IS_OPERATOR_NEW (opnew) = 1;
4285 /* operator delete (void *, align_val_t); */
4286 deltype = build_function_type_list (void_type_node, ptr_type_node,
4287 align_type_node, NULL_TREE);
4288 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4289 deltype = build_exception_variant (deltype, empty_except_spec);
4290 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4291 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4293 if (flag_sized_deallocation)
4295 /* operator delete (void *, size_t, align_val_t); */
4296 deltype = build_function_type_list (void_type_node, ptr_type_node,
4297 size_type_node, align_type_node,
4298 NULL_TREE);
4299 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4300 deltype = build_exception_variant (deltype, empty_except_spec);
4301 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4302 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4306 nullptr_type_node = make_node (NULLPTR_TYPE);
4307 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
4308 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
4309 TYPE_UNSIGNED (nullptr_type_node) = 1;
4310 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
4311 if (abi_version_at_least (9))
4312 SET_TYPE_ALIGN (nullptr_type_node, GET_MODE_ALIGNMENT (ptr_mode));
4313 SET_TYPE_MODE (nullptr_type_node, ptr_mode);
4314 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
4315 nullptr_node = build_int_cst (nullptr_type_node, 0);
4318 abort_fndecl
4319 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
4320 ECF_NORETURN | ECF_NOTHROW | ECF_COLD);
4322 /* Perform other language dependent initializations. */
4323 init_class_processing ();
4324 init_rtti_processing ();
4325 init_template_processing ();
4327 if (flag_exceptions)
4328 init_exception_processing ();
4330 if (! supports_one_only ())
4331 flag_weak = 0;
4333 make_fname_decl = cp_make_fname_decl;
4334 start_fname_decls ();
4336 /* Show we use EH for cleanups. */
4337 if (flag_exceptions)
4338 using_eh_for_cleanups ();
4341 /* Generate an initializer for a function naming variable from
4342 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
4343 filled in with the type of the init. */
4345 tree
4346 cp_fname_init (const char* name, tree *type_p)
4348 tree domain = NULL_TREE;
4349 tree type;
4350 tree init = NULL_TREE;
4351 size_t length = 0;
4353 if (name)
4355 length = strlen (name);
4356 domain = build_index_type (size_int (length));
4357 init = build_string (length + 1, name);
4360 type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
4361 type = build_cplus_array_type (type, domain);
4363 *type_p = type;
4365 if (init)
4366 TREE_TYPE (init) = type;
4367 else
4368 init = error_mark_node;
4370 return init;
4373 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
4374 the decl, LOC is the location to give the decl, NAME is the
4375 initialization string and TYPE_DEP indicates whether NAME depended
4376 on the type of the function. We make use of that to detect
4377 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
4378 at the point of first use, so we mustn't push the decl now. */
4380 static tree
4381 cp_make_fname_decl (location_t loc, tree id, int type_dep)
4383 const char *const name = (type_dep && processing_template_decl
4384 ? NULL : fname_as_string (type_dep));
4385 tree type;
4386 tree init = cp_fname_init (name, &type);
4387 tree decl = build_decl (loc, VAR_DECL, id, type);
4389 if (name)
4390 free (CONST_CAST (char *, name));
4392 TREE_STATIC (decl) = 1;
4393 TREE_READONLY (decl) = 1;
4394 DECL_ARTIFICIAL (decl) = 1;
4396 TREE_USED (decl) = 1;
4398 if (current_function_decl)
4400 DECL_CONTEXT (decl) = current_function_decl;
4401 decl = pushdecl_outermost_localscope (decl);
4402 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
4403 LOOKUP_ONLYCONVERTING);
4405 else
4407 DECL_THIS_STATIC (decl) = true;
4408 pushdecl_top_level_and_finish (decl, init);
4411 return decl;
4414 static tree
4415 builtin_function_1 (tree decl, tree context, bool is_global)
4417 tree id = DECL_NAME (decl);
4418 const char *name = IDENTIFIER_POINTER (id);
4420 retrofit_lang_decl (decl);
4422 DECL_ARTIFICIAL (decl) = 1;
4423 SET_DECL_LANGUAGE (decl, lang_c);
4424 /* Runtime library routines are, by definition, available in an
4425 external shared object. */
4426 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4427 DECL_VISIBILITY_SPECIFIED (decl) = 1;
4429 DECL_CONTEXT (decl) = context;
4431 /* A function in the user's namespace should have an explicit
4432 declaration before it is used. Mark the built-in function as
4433 anticipated but not actually declared. */
4434 if (name[0] != '_' || name[1] != '_')
4435 DECL_ANTICIPATED (decl) = 1;
4436 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4438 size_t len = strlen (name);
4440 /* Treat __*_chk fortification functions as anticipated as well,
4441 unless they are __builtin_*. */
4442 if (len > strlen ("___chk")
4443 && memcmp (name + len - strlen ("_chk"),
4444 "_chk", strlen ("_chk") + 1) == 0)
4445 DECL_ANTICIPATED (decl) = 1;
4448 if (is_global)
4449 pushdecl_top_level (decl);
4450 else
4451 pushdecl (decl);
4453 return decl;
4456 tree
4457 cxx_builtin_function (tree decl)
4459 tree id = DECL_NAME (decl);
4460 const char *name = IDENTIFIER_POINTER (id);
4461 /* All builtins that don't begin with an '_' should additionally
4462 go in the 'std' namespace. */
4463 if (name[0] != '_')
4465 tree decl2 = copy_node(decl);
4466 push_namespace (std_identifier);
4467 builtin_function_1 (decl2, std_node, false);
4468 pop_namespace ();
4471 return builtin_function_1 (decl, NULL_TREE, false);
4474 /* Like cxx_builtin_function, but guarantee the function is added to the global
4475 scope. This is to allow function specific options to add new machine
4476 dependent builtins when the target ISA changes via attribute((target(...)))
4477 which saves space on program startup if the program does not use non-generic
4478 ISAs. */
4480 tree
4481 cxx_builtin_function_ext_scope (tree decl)
4484 tree id = DECL_NAME (decl);
4485 const char *name = IDENTIFIER_POINTER (id);
4486 /* All builtins that don't begin with an '_' should additionally
4487 go in the 'std' namespace. */
4488 if (name[0] != '_')
4490 tree decl2 = copy_node(decl);
4491 push_namespace (std_identifier);
4492 builtin_function_1 (decl2, std_node, true);
4493 pop_namespace ();
4496 return builtin_function_1 (decl, NULL_TREE, true);
4499 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4500 function. Not called directly. */
4502 static tree
4503 build_library_fn (tree name, enum tree_code operator_code, tree type,
4504 int ecf_flags)
4506 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4507 DECL_EXTERNAL (fn) = 1;
4508 TREE_PUBLIC (fn) = 1;
4509 DECL_ARTIFICIAL (fn) = 1;
4510 DECL_OVERLOADED_OPERATOR_CODE_RAW (fn)
4511 = OVL_OP_INFO (false, operator_code)->ovl_op_code;
4512 SET_DECL_LANGUAGE (fn, lang_c);
4513 /* Runtime library routines are, by definition, available in an
4514 external shared object. */
4515 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4516 DECL_VISIBILITY_SPECIFIED (fn) = 1;
4517 set_call_expr_flags (fn, ecf_flags);
4518 return fn;
4521 /* Returns the _DECL for a library function with C++ linkage. */
4523 static tree
4524 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4525 int ecf_flags)
4527 tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4528 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4529 SET_DECL_LANGUAGE (fn, lang_cplusplus);
4530 return fn;
4533 /* Like build_library_fn, but takes a C string instead of an
4534 IDENTIFIER_NODE. */
4536 tree
4537 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4539 return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4542 /* Like build_cp_library_fn, but takes a C string instead of an
4543 IDENTIFIER_NODE. */
4545 tree
4546 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4548 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4549 ecf_flags);
4552 /* Like build_library_fn, but also pushes the function so that we will
4553 be able to find it via get_global_binding. Also, the function
4554 may throw exceptions listed in RAISES. */
4556 tree
4557 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4559 tree fn;
4561 if (raises)
4562 type = build_exception_variant (type, raises);
4564 fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4565 pushdecl_top_level (fn);
4566 return fn;
4569 /* Like build_cp_library_fn, but also pushes the function so that it
4570 will be found by normal lookup. */
4572 static tree
4573 push_cp_library_fn (enum tree_code operator_code, tree type,
4574 int ecf_flags)
4576 tree fn = build_cp_library_fn (ovl_op_identifier (false, operator_code),
4577 operator_code, type, ecf_flags);
4578 pushdecl (fn);
4579 if (flag_tm)
4580 apply_tm_attr (fn, get_identifier ("transaction_safe"));
4581 return fn;
4584 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4585 a FUNCTION_TYPE. */
4587 tree
4588 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4590 tree type = build_function_type (void_type_node, parmtypes);
4591 return push_library_fn (name, type, NULL_TREE, ecf_flags);
4594 /* Like push_library_fn, but also note that this function throws
4595 and does not return. Used for __throw_foo and the like. */
4597 tree
4598 push_throw_library_fn (tree name, tree type)
4600 tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN | ECF_COLD);
4601 return fn;
4604 /* When we call finish_struct for an anonymous union, we create
4605 default copy constructors and such. But, an anonymous union
4606 shouldn't have such things; this function undoes the damage to the
4607 anonymous union type T.
4609 (The reason that we create the synthesized methods is that we don't
4610 distinguish `union { int i; }' from `typedef union { int i; } U'.
4611 The first is an anonymous union; the second is just an ordinary
4612 union type.) */
4614 void
4615 fixup_anonymous_aggr (tree t)
4617 /* Wipe out memory of synthesized methods. */
4618 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4619 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4620 TYPE_HAS_COPY_CTOR (t) = 0;
4621 TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4622 TYPE_HAS_COPY_ASSIGN (t) = 0;
4623 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4625 /* Splice the implicitly generated functions out of TYPE_FIELDS. */
4626 for (tree probe, *prev_p = &TYPE_FIELDS (t); (probe = *prev_p);)
4627 if (TREE_CODE (probe) == FUNCTION_DECL && DECL_ARTIFICIAL (probe))
4628 *prev_p = DECL_CHAIN (probe);
4629 else
4630 prev_p = &DECL_CHAIN (probe);
4632 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4633 assignment operators (because they cannot have these methods themselves).
4634 For anonymous unions this is already checked because they are not allowed
4635 in any union, otherwise we have to check it. */
4636 if (TREE_CODE (t) != UNION_TYPE)
4638 tree field, type;
4640 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4641 if (TREE_CODE (field) == FIELD_DECL)
4643 type = TREE_TYPE (field);
4644 if (CLASS_TYPE_P (type))
4646 if (TYPE_NEEDS_CONSTRUCTING (type))
4647 error ("member %q+#D with constructor not allowed "
4648 "in anonymous aggregate", field);
4649 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4650 error ("member %q+#D with destructor not allowed "
4651 "in anonymous aggregate", field);
4652 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4653 error ("member %q+#D with copy assignment operator "
4654 "not allowed in anonymous aggregate", field);
4660 /* Warn for an attribute located at LOCATION that appertains to the
4661 class type CLASS_TYPE that has not been properly placed after its
4662 class-key, in it class-specifier. */
4664 void
4665 warn_misplaced_attr_for_class_type (source_location location,
4666 tree class_type)
4668 gcc_assert (OVERLOAD_TYPE_P (class_type));
4670 if (warning_at (location, OPT_Wattributes,
4671 "attribute ignored in declaration "
4672 "of %q#T", class_type))
4673 inform (location,
4674 "attribute for %q#T must follow the %qs keyword",
4675 class_type, class_key_or_enum_as_string (class_type));
4678 /* Make sure that a declaration with no declarator is well-formed, i.e.
4679 just declares a tagged type or anonymous union.
4681 Returns the type declared; or NULL_TREE if none. */
4683 tree
4684 check_tag_decl (cp_decl_specifier_seq *declspecs,
4685 bool explicit_type_instantiation_p)
4687 int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4688 int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4689 /* If a class, struct, or enum type is declared by the DECLSPECS
4690 (i.e, if a class-specifier, enum-specifier, or non-typename
4691 elaborated-type-specifier appears in the DECLSPECS),
4692 DECLARED_TYPE is set to the corresponding type. */
4693 tree declared_type = NULL_TREE;
4694 bool error_p = false;
4696 if (declspecs->multiple_types_p)
4697 error ("multiple types in one declaration");
4698 else if (declspecs->redefined_builtin_type)
4700 if (!in_system_header_at (input_location))
4701 permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4702 "redeclaration of C++ built-in type %qT",
4703 declspecs->redefined_builtin_type);
4704 return NULL_TREE;
4707 if (declspecs->type
4708 && TYPE_P (declspecs->type)
4709 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4710 && MAYBE_CLASS_TYPE_P (declspecs->type))
4711 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4712 declared_type = declspecs->type;
4713 else if (declspecs->type == error_mark_node)
4714 error_p = true;
4715 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4716 permerror (input_location, "declaration does not declare anything");
4717 else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4719 error_at (declspecs->locations[ds_type_spec],
4720 "%<auto%> can only be specified for variables "
4721 "or function declarations");
4722 return error_mark_node;
4724 /* Check for an anonymous union. */
4725 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4726 && TYPE_UNNAMED_P (declared_type))
4728 /* 7/3 In a simple-declaration, the optional init-declarator-list
4729 can be omitted only when declaring a class (clause 9) or
4730 enumeration (7.2), that is, when the decl-specifier-seq contains
4731 either a class-specifier, an elaborated-type-specifier with
4732 a class-key (9.1), or an enum-specifier. In these cases and
4733 whenever a class-specifier or enum-specifier is present in the
4734 decl-specifier-seq, the identifiers in these specifiers are among
4735 the names being declared by the declaration (as class-name,
4736 enum-names, or enumerators, depending on the syntax). In such
4737 cases, and except for the declaration of an unnamed bit-field (9.6),
4738 the decl-specifier-seq shall introduce one or more names into the
4739 program, or shall redeclare a name introduced by a previous
4740 declaration. [Example:
4741 enum { }; // ill-formed
4742 typedef class { }; // ill-formed
4743 --end example] */
4744 if (saw_typedef)
4746 error ("missing type-name in typedef-declaration");
4747 return NULL_TREE;
4749 /* Anonymous unions are objects, so they can have specifiers. */;
4750 SET_ANON_AGGR_TYPE_P (declared_type);
4752 if (TREE_CODE (declared_type) != UNION_TYPE
4753 && !in_system_header_at (input_location))
4754 pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4757 else
4759 if (decl_spec_seq_has_spec_p (declspecs, ds_inline))
4760 error_at (declspecs->locations[ds_inline],
4761 "%<inline%> can only be specified for functions");
4762 else if (decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4763 error_at (declspecs->locations[ds_virtual],
4764 "%<virtual%> can only be specified for functions");
4765 else if (saw_friend
4766 && (!current_class_type
4767 || current_scope () != current_class_type))
4768 error_at (declspecs->locations[ds_friend],
4769 "%<friend%> can only be specified inside a class");
4770 else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4771 error_at (declspecs->locations[ds_explicit],
4772 "%<explicit%> can only be specified for constructors");
4773 else if (declspecs->storage_class)
4774 error_at (declspecs->locations[ds_storage_class],
4775 "a storage class can only be specified for objects "
4776 "and functions");
4777 else if (decl_spec_seq_has_spec_p (declspecs, ds_const))
4778 error_at (declspecs->locations[ds_const],
4779 "%<const%> can only be specified for objects and "
4780 "functions");
4781 else if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
4782 error_at (declspecs->locations[ds_volatile],
4783 "%<volatile%> can only be specified for objects and "
4784 "functions");
4785 else if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
4786 error_at (declspecs->locations[ds_restrict],
4787 "%<__restrict%> can only be specified for objects and "
4788 "functions");
4789 else if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
4790 error_at (declspecs->locations[ds_thread],
4791 "%<__thread%> can only be specified for objects "
4792 "and functions");
4793 else if (saw_typedef)
4794 warning_at (declspecs->locations[ds_typedef], 0,
4795 "%<typedef%> was ignored in this declaration");
4796 else if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr))
4797 error_at (declspecs->locations[ds_constexpr],
4798 "%<constexpr%> cannot be used for type declarations");
4801 if (declspecs->attributes && warn_attributes && declared_type)
4803 location_t loc;
4804 if (!CLASS_TYPE_P (declared_type)
4805 || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4806 /* For a non-template class, use the name location. */
4807 loc = location_of (declared_type);
4808 else
4809 /* For a template class (an explicit instantiation), use the
4810 current location. */
4811 loc = input_location;
4813 if (explicit_type_instantiation_p)
4814 /* [dcl.attr.grammar]/4:
4816 No attribute-specifier-seq shall appertain to an explicit
4817 instantiation. */
4819 if (warning_at (loc, OPT_Wattributes,
4820 "attribute ignored in explicit instantiation %q#T",
4821 declared_type))
4822 inform (loc,
4823 "no attribute can be applied to "
4824 "an explicit instantiation");
4826 else
4827 warn_misplaced_attr_for_class_type (loc, declared_type);
4830 return declared_type;
4833 /* Called when a declaration is seen that contains no names to declare.
4834 If its type is a reference to a structure, union or enum inherited
4835 from a containing scope, shadow that tag name for the current scope
4836 with a forward reference.
4837 If its type defines a new named structure or union
4838 or defines an enum, it is valid but we need not do anything here.
4839 Otherwise, it is an error.
4841 C++: may have to grok the declspecs to learn about static,
4842 complain for anonymous unions.
4844 Returns the TYPE declared -- or NULL_TREE if none. */
4846 tree
4847 shadow_tag (cp_decl_specifier_seq *declspecs)
4849 tree t = check_tag_decl (declspecs,
4850 /*explicit_type_instantiation_p=*/false);
4852 if (!t)
4853 return NULL_TREE;
4855 if (maybe_process_partial_specialization (t) == error_mark_node)
4856 return NULL_TREE;
4858 /* This is where the variables in an anonymous union are
4859 declared. An anonymous union declaration looks like:
4860 union { ... } ;
4861 because there is no declarator after the union, the parser
4862 sends that declaration here. */
4863 if (ANON_AGGR_TYPE_P (t))
4865 fixup_anonymous_aggr (t);
4867 if (TYPE_FIELDS (t))
4869 tree decl = grokdeclarator (/*declarator=*/NULL,
4870 declspecs, NORMAL, 0, NULL);
4871 finish_anon_union (decl);
4875 return t;
4878 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4880 tree
4881 groktypename (cp_decl_specifier_seq *type_specifiers,
4882 const cp_declarator *declarator,
4883 bool is_template_arg)
4885 tree attrs;
4886 tree type;
4887 enum decl_context context
4888 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4889 attrs = type_specifiers->attributes;
4890 type_specifiers->attributes = NULL_TREE;
4891 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4892 if (attrs && type != error_mark_node)
4894 if (CLASS_TYPE_P (type))
4895 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4896 "outside of definition", type);
4897 else if (MAYBE_CLASS_TYPE_P (type))
4898 /* A template type parameter or other dependent type. */
4899 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4900 "type %qT without an associated declaration", type);
4901 else
4902 cplus_decl_attributes (&type, attrs, 0);
4904 return type;
4907 /* Process a DECLARATOR for a function-scope variable declaration,
4908 namespace-scope variable declaration, or function declaration.
4909 (Function definitions go through start_function; class member
4910 declarations appearing in the body of the class go through
4911 grokfield.) The DECL corresponding to the DECLARATOR is returned.
4912 If an error occurs, the error_mark_node is returned instead.
4914 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
4915 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
4916 for an explicitly defaulted function, or SD_DELETED for an explicitly
4917 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
4918 implicitly initialized via a default constructor. ATTRIBUTES and
4919 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
4921 The scope represented by the context of the returned DECL is pushed
4922 (if it is not the global namespace) and is assigned to
4923 *PUSHED_SCOPE_P. The caller is then responsible for calling
4924 pop_scope on *PUSHED_SCOPE_P if it is set. */
4926 tree
4927 start_decl (const cp_declarator *declarator,
4928 cp_decl_specifier_seq *declspecs,
4929 int initialized,
4930 tree attributes,
4931 tree prefix_attributes,
4932 tree *pushed_scope_p)
4934 tree decl;
4935 tree context;
4936 bool was_public;
4937 int flags;
4938 bool alias;
4940 *pushed_scope_p = NULL_TREE;
4942 /* An object declared as __attribute__((deprecated)) suppresses
4943 warnings of uses of other deprecated items. */
4944 if (lookup_attribute ("deprecated", attributes))
4945 deprecated_state = DEPRECATED_SUPPRESS;
4947 attributes = chainon (attributes, prefix_attributes);
4949 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
4950 &attributes);
4952 deprecated_state = DEPRECATED_NORMAL;
4954 if (decl == NULL_TREE || VOID_TYPE_P (decl)
4955 || decl == error_mark_node)
4956 return error_mark_node;
4958 context = CP_DECL_CONTEXT (decl);
4959 if (context != global_namespace)
4960 *pushed_scope_p = push_scope (context);
4962 /* Is it valid for this decl to have an initializer at all?
4963 If not, set INITIALIZED to zero, which will indirectly
4964 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
4965 if (initialized
4966 && TREE_CODE (decl) == TYPE_DECL)
4968 error ("typedef %qD is initialized (use decltype instead)", decl);
4969 return error_mark_node;
4972 if (initialized)
4974 if (! toplevel_bindings_p ()
4975 && DECL_EXTERNAL (decl))
4976 warning (0, "declaration of %q#D has %<extern%> and is initialized",
4977 decl);
4978 DECL_EXTERNAL (decl) = 0;
4979 if (toplevel_bindings_p ())
4980 TREE_STATIC (decl) = 1;
4982 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
4984 if (alias && TREE_CODE (decl) == FUNCTION_DECL)
4985 record_key_method_defined (decl);
4987 /* If this is a typedef that names the class for linkage purposes
4988 (7.1.3p8), apply any attributes directly to the type. */
4989 if (TREE_CODE (decl) == TYPE_DECL
4990 && OVERLOAD_TYPE_P (TREE_TYPE (decl))
4991 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
4992 flags = ATTR_FLAG_TYPE_IN_PLACE;
4993 else
4994 flags = 0;
4996 /* Set attributes here so if duplicate decl, will have proper attributes. */
4997 cplus_decl_attributes (&decl, attributes, flags);
4999 /* Dllimported symbols cannot be defined. Static data members (which
5000 can be initialized in-class and dllimported) go through grokfield,
5001 not here, so we don't need to exclude those decls when checking for
5002 a definition. */
5003 if (initialized && DECL_DLLIMPORT_P (decl))
5005 error ("definition of %q#D is marked %<dllimport%>", decl);
5006 DECL_DLLIMPORT_P (decl) = 0;
5009 /* If #pragma weak was used, mark the decl weak now. */
5010 if (!processing_template_decl)
5011 maybe_apply_pragma_weak (decl);
5013 if (TREE_CODE (decl) == FUNCTION_DECL
5014 && DECL_DECLARED_INLINE_P (decl)
5015 && DECL_UNINLINABLE (decl)
5016 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
5017 warning_at (DECL_SOURCE_LOCATION (decl), 0,
5018 "inline function %qD given attribute noinline", decl);
5020 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
5022 bool this_tmpl = (processing_template_decl
5023 > template_class_depth (context));
5024 if (VAR_P (decl))
5026 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
5027 if (field == NULL_TREE
5028 || !(VAR_P (field) || variable_template_p (field)))
5029 error ("%q+#D is not a static data member of %q#T", decl, context);
5030 else if (variable_template_p (field) && !this_tmpl)
5032 if (DECL_LANG_SPECIFIC (decl)
5033 && DECL_TEMPLATE_SPECIALIZATION (decl))
5034 /* OK, specialization was already checked. */;
5035 else
5037 error_at (DECL_SOURCE_LOCATION (decl),
5038 "non-member-template declaration of %qD", decl);
5039 inform (DECL_SOURCE_LOCATION (field), "does not match "
5040 "member template declaration here");
5041 return error_mark_node;
5044 else
5046 if (variable_template_p (field))
5047 field = DECL_TEMPLATE_RESULT (field);
5049 if (DECL_CONTEXT (field) != context)
5051 if (!same_type_p (DECL_CONTEXT (field), context))
5052 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
5053 "to be defined as %<%T::%D%>",
5054 DECL_CONTEXT (field), DECL_NAME (decl),
5055 context, DECL_NAME (decl));
5056 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
5058 /* Static data member are tricky; an in-class initialization
5059 still doesn't provide a definition, so the in-class
5060 declaration will have DECL_EXTERNAL set, but will have an
5061 initialization. Thus, duplicate_decls won't warn
5062 about this situation, and so we check here. */
5063 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
5064 error ("duplicate initialization of %qD", decl);
5065 field = duplicate_decls (decl, field,
5066 /*newdecl_is_friend=*/false);
5067 if (field == error_mark_node)
5068 return error_mark_node;
5069 else if (field)
5070 decl = field;
5073 else
5075 tree field = check_classfn (context, decl,
5076 this_tmpl
5077 ? current_template_parms
5078 : NULL_TREE);
5079 if (field && field != error_mark_node
5080 && duplicate_decls (decl, field,
5081 /*newdecl_is_friend=*/false))
5082 decl = field;
5085 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
5086 DECL_IN_AGGR_P (decl) = 0;
5087 /* Do not mark DECL as an explicit specialization if it was not
5088 already marked as an instantiation; a declaration should
5089 never be marked as a specialization unless we know what
5090 template is being specialized. */
5091 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
5093 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
5094 if (TREE_CODE (decl) == FUNCTION_DECL)
5095 DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
5096 && DECL_DECLARED_INLINE_P (decl));
5097 else
5098 DECL_COMDAT (decl) = false;
5100 /* [temp.expl.spec] An explicit specialization of a static data
5101 member of a template is a definition if the declaration
5102 includes an initializer; otherwise, it is a declaration.
5104 We check for processing_specialization so this only applies
5105 to the new specialization syntax. */
5106 if (!initialized && processing_specialization)
5107 DECL_EXTERNAL (decl) = 1;
5110 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
5111 /* Aliases are definitions. */
5112 && !alias)
5113 permerror (input_location, "declaration of %q#D outside of class is not definition",
5114 decl);
5117 was_public = TREE_PUBLIC (decl);
5119 /* Enter this declaration into the symbol table. Don't push the plain
5120 VAR_DECL for a variable template. */
5121 if (!template_parm_scope_p ()
5122 || !VAR_P (decl))
5123 decl = maybe_push_decl (decl);
5125 if (processing_template_decl)
5126 decl = push_template_decl (decl);
5127 if (decl == error_mark_node)
5128 return error_mark_node;
5130 if (VAR_P (decl)
5131 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
5132 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
5134 /* This is a const variable with implicit 'static'. Set
5135 DECL_THIS_STATIC so we can tell it from variables that are
5136 !TREE_PUBLIC because of the anonymous namespace. */
5137 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
5138 DECL_THIS_STATIC (decl) = 1;
5141 if (current_function_decl && VAR_P (decl)
5142 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
5144 bool ok = false;
5145 if (CP_DECL_THREAD_LOCAL_P (decl))
5146 error ("%qD declared %<thread_local%> in %<constexpr%> function",
5147 decl);
5148 else if (TREE_STATIC (decl))
5149 error ("%qD declared %<static%> in %<constexpr%> function", decl);
5150 else
5151 ok = true;
5152 if (!ok)
5153 cp_function_chain->invalid_constexpr = true;
5156 if (!processing_template_decl && VAR_P (decl))
5157 start_decl_1 (decl, initialized);
5159 return decl;
5162 /* Process the declaration of a variable DECL. INITIALIZED is true
5163 iff DECL is explicitly initialized. (INITIALIZED is false if the
5164 variable is initialized via an implicitly-called constructor.)
5165 This function must be called for ordinary variables (including, for
5166 example, implicit instantiations of templates), but must not be
5167 called for template declarations. */
5169 void
5170 start_decl_1 (tree decl, bool initialized)
5172 tree type;
5173 bool complete_p;
5174 bool aggregate_definition_p;
5176 gcc_assert (!processing_template_decl);
5178 if (error_operand_p (decl))
5179 return;
5181 gcc_assert (VAR_P (decl));
5183 type = TREE_TYPE (decl);
5184 complete_p = COMPLETE_TYPE_P (type);
5185 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
5187 /* If an explicit initializer is present, or if this is a definition
5188 of an aggregate, then we need a complete type at this point.
5189 (Scalars are always complete types, so there is nothing to
5190 check.) This code just sets COMPLETE_P; errors (if necessary)
5191 are issued below. */
5192 if ((initialized || aggregate_definition_p)
5193 && !complete_p
5194 && COMPLETE_TYPE_P (complete_type (type)))
5196 complete_p = true;
5197 /* We will not yet have set TREE_READONLY on DECL if the type
5198 was "const", but incomplete, before this point. But, now, we
5199 have a complete type, so we can try again. */
5200 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
5203 if (initialized)
5204 /* Is it valid for this decl to have an initializer at all? */
5206 /* Don't allow initializations for incomplete types except for
5207 arrays which might be completed by the initialization. */
5208 if (complete_p)
5209 ; /* A complete type is ok. */
5210 else if (type_uses_auto (type))
5211 ; /* An auto type is ok. */
5212 else if (TREE_CODE (type) != ARRAY_TYPE)
5214 error ("variable %q#D has initializer but incomplete type", decl);
5215 type = TREE_TYPE (decl) = error_mark_node;
5217 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5219 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
5220 error ("elements of array %q#D have incomplete type", decl);
5221 /* else we already gave an error in start_decl. */
5224 else if (aggregate_definition_p && !complete_p)
5226 if (type_uses_auto (type))
5227 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (type));
5228 else
5230 error ("aggregate %q#D has incomplete type and cannot be defined",
5231 decl);
5232 /* Change the type so that assemble_variable will give
5233 DECL an rtl we can live with: (mem (const_int 0)). */
5234 type = TREE_TYPE (decl) = error_mark_node;
5238 /* Create a new scope to hold this declaration if necessary.
5239 Whether or not a new scope is necessary cannot be determined
5240 until after the type has been completed; if the type is a
5241 specialization of a class template it is not until after
5242 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
5243 will be set correctly. */
5244 maybe_push_cleanup_level (type);
5247 /* Handle initialization of references. DECL, TYPE, and INIT have the
5248 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
5249 but will be set to a new CLEANUP_STMT if a temporary is created
5250 that must be destroyed subsequently.
5252 Returns an initializer expression to use to initialize DECL, or
5253 NULL if the initialization can be performed statically.
5255 Quotes on semantics can be found in ARM 8.4.3. */
5257 static tree
5258 grok_reference_init (tree decl, tree type, tree init, int flags)
5260 if (init == NULL_TREE)
5262 if ((DECL_LANG_SPECIFIC (decl) == 0
5263 || DECL_IN_AGGR_P (decl) == 0)
5264 && ! DECL_THIS_EXTERN (decl))
5265 error ("%qD declared as reference but not initialized", decl);
5266 return NULL_TREE;
5269 if (TREE_CODE (init) == TREE_LIST)
5270 init = build_x_compound_expr_from_list (init, ELK_INIT,
5271 tf_warning_or_error);
5273 tree ttype = TREE_TYPE (type);
5274 if (TREE_CODE (ttype) != ARRAY_TYPE
5275 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
5276 /* Note: default conversion is only called in very special cases. */
5277 init = decay_conversion (init, tf_warning_or_error);
5279 /* check_initializer handles this for non-reference variables, but for
5280 references we need to do it here or the initializer will get the
5281 incomplete array type and confuse later calls to
5282 cp_complete_array_type. */
5283 if (TREE_CODE (ttype) == ARRAY_TYPE
5284 && TYPE_DOMAIN (ttype) == NULL_TREE
5285 && (BRACE_ENCLOSED_INITIALIZER_P (init)
5286 || TREE_CODE (init) == STRING_CST))
5288 cp_complete_array_type (&ttype, init, false);
5289 if (ttype != TREE_TYPE (type))
5290 type = cp_build_reference_type (ttype, TYPE_REF_IS_RVALUE (type));
5293 /* Convert INIT to the reference type TYPE. This may involve the
5294 creation of a temporary, whose lifetime must be the same as that
5295 of the reference. If so, a DECL_EXPR for the temporary will be
5296 added just after the DECL_EXPR for DECL. That's why we don't set
5297 DECL_INITIAL for local references (instead assigning to them
5298 explicitly); we need to allow the temporary to be initialized
5299 first. */
5300 return initialize_reference (type, init, flags,
5301 tf_warning_or_error);
5304 /* Designated initializers in arrays are not supported in GNU C++.
5305 The parser cannot detect this error since it does not know whether
5306 a given brace-enclosed initializer is for a class type or for an
5307 array. This function checks that CE does not use a designated
5308 initializer. If it does, an error is issued. Returns true if CE
5309 is valid, i.e., does not have a designated initializer. */
5311 bool
5312 check_array_designated_initializer (constructor_elt *ce,
5313 unsigned HOST_WIDE_INT index)
5315 /* Designated initializers for array elements are not supported. */
5316 if (ce->index)
5318 /* The parser only allows identifiers as designated
5319 initializers. */
5320 if (ce->index == error_mark_node)
5322 error ("name used in a GNU-style designated "
5323 "initializer for an array");
5324 return false;
5326 else if (identifier_p (ce->index))
5328 error ("name %qD used in a GNU-style designated "
5329 "initializer for an array", ce->index);
5330 return false;
5333 tree ce_index = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5334 ce->index, true);
5335 if (ce_index
5336 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index))
5337 && (TREE_CODE (ce_index = maybe_constant_value (ce_index))
5338 == INTEGER_CST))
5340 /* A C99 designator is OK if it matches the current index. */
5341 if (wi::to_wide (ce_index) == index)
5342 return true;
5343 else
5344 sorry ("non-trivial designated initializers not supported");
5346 else
5347 error ("C99 designator %qE is not an integral constant-expression",
5348 ce->index);
5350 return false;
5353 return true;
5356 /* When parsing `int a[] = {1, 2};' we don't know the size of the
5357 array until we finish parsing the initializer. If that's the
5358 situation we're in, update DECL accordingly. */
5360 static void
5361 maybe_deduce_size_from_array_init (tree decl, tree init)
5363 tree type = TREE_TYPE (decl);
5365 if (TREE_CODE (type) == ARRAY_TYPE
5366 && TYPE_DOMAIN (type) == NULL_TREE
5367 && TREE_CODE (decl) != TYPE_DECL)
5369 /* do_default is really a C-ism to deal with tentative definitions.
5370 But let's leave it here to ease the eventual merge. */
5371 int do_default = !DECL_EXTERNAL (decl);
5372 tree initializer = init ? init : DECL_INITIAL (decl);
5373 int failure = 0;
5375 /* Check that there are no designated initializers in INIT, as
5376 those are not supported in GNU C++, and as the middle-end
5377 will crash if presented with a non-numeric designated
5378 initializer. */
5379 if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
5381 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
5382 constructor_elt *ce;
5383 HOST_WIDE_INT i;
5384 FOR_EACH_VEC_SAFE_ELT (v, i, ce)
5385 if (!check_array_designated_initializer (ce, i))
5386 failure = 1;
5389 if (!failure)
5391 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
5392 do_default);
5393 if (failure == 1)
5395 error_at (EXPR_LOC_OR_LOC (initializer,
5396 DECL_SOURCE_LOCATION (decl)),
5397 "initializer fails to determine size of %qD", decl);
5399 else if (failure == 2)
5401 if (do_default)
5403 error_at (DECL_SOURCE_LOCATION (decl),
5404 "array size missing in %qD", decl);
5406 /* If a `static' var's size isn't known, make it extern as
5407 well as static, so it does not get allocated. If it's not
5408 `static', then don't mark it extern; finish_incomplete_decl
5409 will give it a default size and it will get allocated. */
5410 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
5411 DECL_EXTERNAL (decl) = 1;
5413 else if (failure == 3)
5415 error_at (DECL_SOURCE_LOCATION (decl),
5416 "zero-size array %qD", decl);
5420 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
5422 relayout_decl (decl);
5426 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
5427 any appropriate error messages regarding the layout. */
5429 static void
5430 layout_var_decl (tree decl)
5432 tree type;
5434 type = TREE_TYPE (decl);
5435 if (type == error_mark_node)
5436 return;
5438 /* If we haven't already laid out this declaration, do so now.
5439 Note that we must not call complete type for an external object
5440 because it's type might involve templates that we are not
5441 supposed to instantiate yet. (And it's perfectly valid to say
5442 `extern X x' for some incomplete type `X'.) */
5443 if (!DECL_EXTERNAL (decl))
5444 complete_type (type);
5445 if (!DECL_SIZE (decl)
5446 && TREE_TYPE (decl) != error_mark_node
5447 && complete_or_array_type_p (type))
5448 layout_decl (decl, 0);
5450 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
5452 /* An automatic variable with an incomplete type: that is an error.
5453 Don't talk about array types here, since we took care of that
5454 message in grokdeclarator. */
5455 error_at (DECL_SOURCE_LOCATION (decl),
5456 "storage size of %qD isn%'t known", decl);
5457 TREE_TYPE (decl) = error_mark_node;
5459 #if 0
5460 /* Keep this code around in case we later want to control debug info
5461 based on whether a type is "used". (jason 1999-11-11) */
5463 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
5464 /* Let debugger know it should output info for this type. */
5465 note_debug_info_needed (ttype);
5467 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
5468 note_debug_info_needed (DECL_CONTEXT (decl));
5469 #endif
5471 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
5472 && DECL_SIZE (decl) != NULL_TREE
5473 && ! TREE_CONSTANT (DECL_SIZE (decl)))
5475 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
5476 constant_expression_warning (DECL_SIZE (decl));
5477 else
5479 error_at (DECL_SOURCE_LOCATION (decl),
5480 "storage size of %qD isn%'t constant", decl);
5481 TREE_TYPE (decl) = error_mark_node;
5486 /* If a local static variable is declared in an inline function, or if
5487 we have a weak definition, we must endeavor to create only one
5488 instance of the variable at link-time. */
5490 void
5491 maybe_commonize_var (tree decl)
5493 /* Static data in a function with comdat linkage also has comdat
5494 linkage. */
5495 if ((TREE_STATIC (decl)
5496 /* Don't mess with __FUNCTION__. */
5497 && ! DECL_ARTIFICIAL (decl)
5498 && DECL_FUNCTION_SCOPE_P (decl)
5499 && vague_linkage_p (DECL_CONTEXT (decl)))
5500 || (TREE_PUBLIC (decl) && DECL_INLINE_VAR_P (decl)))
5502 if (flag_weak)
5504 /* With weak symbols, we simply make the variable COMDAT;
5505 that will cause copies in multiple translations units to
5506 be merged. */
5507 comdat_linkage (decl);
5509 else
5511 if (DECL_INITIAL (decl) == NULL_TREE
5512 || DECL_INITIAL (decl) == error_mark_node)
5514 /* Without weak symbols, we can use COMMON to merge
5515 uninitialized variables. */
5516 TREE_PUBLIC (decl) = 1;
5517 DECL_COMMON (decl) = 1;
5519 else
5521 /* While for initialized variables, we must use internal
5522 linkage -- which means that multiple copies will not
5523 be merged. */
5524 TREE_PUBLIC (decl) = 0;
5525 DECL_COMMON (decl) = 0;
5526 const char *msg;
5527 if (DECL_INLINE_VAR_P (decl))
5528 msg = G_("sorry: semantics of inline variable "
5529 "%q#D are wrong (you%'ll wind up with "
5530 "multiple copies)");
5531 else
5532 msg = G_("sorry: semantics of inline function "
5533 "static data %q#D are wrong (you%'ll wind "
5534 "up with multiple copies)");
5535 if (warning_at (DECL_SOURCE_LOCATION (decl), 0,
5536 msg, decl))
5537 inform (DECL_SOURCE_LOCATION (decl),
5538 "you can work around this by removing the initializer");
5544 /* Issue an error message if DECL is an uninitialized const variable. */
5546 static void
5547 check_for_uninitialized_const_var (tree decl)
5549 tree type = strip_array_types (TREE_TYPE (decl));
5551 /* ``Unless explicitly declared extern, a const object does not have
5552 external linkage and must be initialized. ($8.4; $12.1)'' ARM
5553 7.1.6 */
5554 if (VAR_P (decl)
5555 && TREE_CODE (type) != REFERENCE_TYPE
5556 && (CP_TYPE_CONST_P (type) || var_in_constexpr_fn (decl))
5557 && !DECL_INITIAL (decl))
5559 tree field = default_init_uninitialized_part (type);
5560 if (!field)
5561 return;
5563 if (CP_TYPE_CONST_P (type))
5564 permerror (DECL_SOURCE_LOCATION (decl),
5565 "uninitialized const %qD", decl);
5566 else
5568 if (!is_instantiation_of_constexpr (current_function_decl))
5569 error_at (DECL_SOURCE_LOCATION (decl),
5570 "uninitialized variable %qD in %<constexpr%> function",
5571 decl);
5572 cp_function_chain->invalid_constexpr = true;
5575 if (CLASS_TYPE_P (type))
5577 tree defaulted_ctor;
5579 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5580 "%q#T has no user-provided default constructor", type);
5581 defaulted_ctor = in_class_defaulted_default_constructor (type);
5582 if (defaulted_ctor)
5583 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5584 "constructor is not user-provided because it is "
5585 "explicitly defaulted in the class body");
5586 inform (DECL_SOURCE_LOCATION (field),
5587 "and the implicitly-defined constructor does not "
5588 "initialize %q#D", field);
5593 /* Structure holding the current initializer being processed by reshape_init.
5594 CUR is a pointer to the current element being processed, END is a pointer
5595 after the last element present in the initializer. */
5596 struct reshape_iter
5598 constructor_elt *cur;
5599 constructor_elt *end;
5602 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5604 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
5605 returned is the next FIELD_DECL (possibly FIELD itself) that can be
5606 initialized. If there are no more such fields, the return value
5607 will be NULL. */
5609 tree
5610 next_initializable_field (tree field)
5612 while (field
5613 && (TREE_CODE (field) != FIELD_DECL
5614 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
5615 || (DECL_ARTIFICIAL (field)
5616 && !(cxx_dialect >= cxx17 && DECL_FIELD_IS_BASE (field)))))
5617 field = DECL_CHAIN (field);
5619 return field;
5622 /* Return true for [dcl.init.list] direct-list-initialization from
5623 single element of enumeration with a fixed underlying type. */
5625 bool
5626 is_direct_enum_init (tree type, tree init)
5628 if (cxx_dialect >= cxx17
5629 && TREE_CODE (type) == ENUMERAL_TYPE
5630 && ENUM_FIXED_UNDERLYING_TYPE_P (type)
5631 && TREE_CODE (init) == CONSTRUCTOR
5632 && CONSTRUCTOR_IS_DIRECT_INIT (init)
5633 && CONSTRUCTOR_NELTS (init) == 1)
5634 return true;
5635 return false;
5638 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5639 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5640 INTEGER_CST representing the size of the array minus one (the maximum index),
5641 or NULL_TREE if the array was declared without specifying the size. D is
5642 the iterator within the constructor. */
5644 static tree
5645 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5646 tsubst_flags_t complain)
5648 tree new_init;
5649 bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5650 unsigned HOST_WIDE_INT max_index_cst = 0;
5651 unsigned HOST_WIDE_INT index;
5653 /* The initializer for an array is always a CONSTRUCTOR. */
5654 new_init = build_constructor (init_list_type_node, NULL);
5656 if (sized_array_p)
5658 /* Minus 1 is used for zero sized arrays. */
5659 if (integer_all_onesp (max_index))
5660 return new_init;
5662 if (tree_fits_uhwi_p (max_index))
5663 max_index_cst = tree_to_uhwi (max_index);
5664 /* sizetype is sign extended, not zero extended. */
5665 else
5666 max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
5669 /* Loop until there are no more initializers. */
5670 for (index = 0;
5671 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5672 ++index)
5674 tree elt_init;
5675 constructor_elt *old_cur = d->cur;
5677 check_array_designated_initializer (d->cur, index);
5678 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5679 complain);
5680 if (elt_init == error_mark_node)
5681 return error_mark_node;
5682 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5683 size_int (index), elt_init);
5684 if (!TREE_CONSTANT (elt_init))
5685 TREE_CONSTANT (new_init) = false;
5687 /* This can happen with an invalid initializer (c++/54501). */
5688 if (d->cur == old_cur && !sized_array_p)
5689 break;
5692 return new_init;
5695 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5696 Parameters are the same of reshape_init_r. */
5698 static tree
5699 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5701 tree max_index = NULL_TREE;
5703 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5705 if (TYPE_DOMAIN (type))
5706 max_index = array_type_nelts (type);
5708 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5711 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5712 Parameters are the same of reshape_init_r. */
5714 static tree
5715 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5717 tree max_index = NULL_TREE;
5719 gcc_assert (VECTOR_TYPE_P (type));
5721 if (COMPOUND_LITERAL_P (d->cur->value))
5723 tree value = d->cur->value;
5724 if (!same_type_p (TREE_TYPE (value), type))
5726 if (complain & tf_error)
5727 error ("invalid type %qT as initializer for a vector of type %qT",
5728 TREE_TYPE (d->cur->value), type);
5729 value = error_mark_node;
5731 ++d->cur;
5732 return value;
5735 /* For a vector, we initialize it as an array of the appropriate size. */
5736 if (VECTOR_TYPE_P (type))
5737 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5739 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5742 /* Subroutine of reshape_init_r, processes the initializers for classes
5743 or union. Parameters are the same of reshape_init_r. */
5745 static tree
5746 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5747 tsubst_flags_t complain)
5749 tree field;
5750 tree new_init;
5752 gcc_assert (CLASS_TYPE_P (type));
5754 /* The initializer for a class is always a CONSTRUCTOR. */
5755 new_init = build_constructor (init_list_type_node, NULL);
5756 field = next_initializable_field (TYPE_FIELDS (type));
5758 if (!field)
5760 /* [dcl.init.aggr]
5762 An initializer for an aggregate member that is an
5763 empty class shall have the form of an empty
5764 initializer-list {}. */
5765 if (!first_initializer_p)
5767 if (complain & tf_error)
5768 error ("initializer for %qT must be brace-enclosed", type);
5769 return error_mark_node;
5771 return new_init;
5774 /* Loop through the initializable fields, gathering initializers. */
5775 while (d->cur != d->end)
5777 tree field_init;
5778 constructor_elt *old_cur = d->cur;
5780 /* Handle designated initializers, as an extension. */
5781 if (d->cur->index)
5783 if (d->cur->index == error_mark_node)
5784 return error_mark_node;
5786 if (TREE_CODE (d->cur->index) == FIELD_DECL)
5787 /* We already reshaped this. */
5788 gcc_assert (d->cur->index == field);
5789 else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
5790 field = get_class_binding (type, d->cur->index, false);
5791 else
5793 if (complain & tf_error)
5794 error ("%<[%E] =%> used in a GNU-style designated initializer"
5795 " for class %qT", d->cur->index, type);
5796 return error_mark_node;
5799 if (!field || TREE_CODE (field) != FIELD_DECL)
5801 if (complain & tf_error)
5802 error ("%qT has no non-static data member named %qD", type,
5803 d->cur->index);
5804 return error_mark_node;
5808 /* If we processed all the member of the class, we are done. */
5809 if (!field)
5810 break;
5812 field_init = reshape_init_r (TREE_TYPE (field), d,
5813 /*first_initializer_p=*/false, complain);
5814 if (field_init == error_mark_node)
5815 return error_mark_node;
5817 if (d->cur == old_cur && d->cur->index)
5819 /* This can happen with an invalid initializer for a flexible
5820 array member (c++/54441). */
5821 if (complain & tf_error)
5822 error ("invalid initializer for %q#D", field);
5823 return error_mark_node;
5826 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5828 /* [dcl.init.aggr]
5830 When a union is initialized with a brace-enclosed
5831 initializer, the braces shall only contain an
5832 initializer for the first member of the union. */
5833 if (TREE_CODE (type) == UNION_TYPE)
5834 break;
5836 field = next_initializable_field (DECL_CHAIN (field));
5839 return new_init;
5842 /* Subroutine of reshape_init_r. We're in a context where C99 initializer
5843 designators are not valid; either complain or return true to indicate
5844 that reshape_init_r should return error_mark_node. */
5846 static bool
5847 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5849 if (d->cur->index)
5851 if (complain & tf_error)
5852 error ("C99 designator %qE outside aggregate initializer",
5853 d->cur->index);
5854 else
5855 return true;
5857 return false;
5860 /* Subroutine of reshape_init, which processes a single initializer (part of
5861 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5862 iterator within the CONSTRUCTOR which points to the initializer to process.
5863 FIRST_INITIALIZER_P is true if this is the first initializer of the
5864 outermost CONSTRUCTOR node. */
5866 static tree
5867 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5868 tsubst_flags_t complain)
5870 tree init = d->cur->value;
5872 if (error_operand_p (init))
5873 return error_mark_node;
5875 if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5876 && has_designator_problem (d, complain))
5877 return error_mark_node;
5879 if (TREE_CODE (type) == COMPLEX_TYPE)
5881 /* A complex type can be initialized from one or two initializers,
5882 but braces are not elided. */
5883 d->cur++;
5884 if (BRACE_ENCLOSED_INITIALIZER_P (init))
5886 if (CONSTRUCTOR_NELTS (init) > 2)
5888 if (complain & tf_error)
5889 error ("too many initializers for %qT", type);
5890 else
5891 return error_mark_node;
5894 else if (first_initializer_p && d->cur != d->end)
5896 vec<constructor_elt, va_gc> *v = 0;
5897 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
5898 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
5899 if (has_designator_problem (d, complain))
5900 return error_mark_node;
5901 d->cur++;
5902 init = build_constructor (init_list_type_node, v);
5904 return init;
5907 /* A non-aggregate type is always initialized with a single
5908 initializer. */
5909 if (!CP_AGGREGATE_TYPE_P (type))
5911 /* It is invalid to initialize a non-aggregate type with a
5912 brace-enclosed initializer before C++0x.
5913 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
5914 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
5915 a CONSTRUCTOR (with a record type). */
5916 if (TREE_CODE (init) == CONSTRUCTOR
5917 /* Don't complain about a capture-init. */
5918 && !CONSTRUCTOR_IS_DIRECT_INIT (init)
5919 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
5921 if (SCALAR_TYPE_P (type))
5923 if (cxx_dialect < cxx11
5924 /* Isn't value-initialization. */
5925 || CONSTRUCTOR_NELTS (init) > 0)
5927 if (complain & tf_error)
5928 error ("braces around scalar initializer for type %qT",
5929 type);
5930 init = error_mark_node;
5933 else
5934 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
5937 d->cur++;
5938 return init;
5941 /* "If T is a class type and the initializer list has a single element of
5942 type cv U, where U is T or a class derived from T, the object is
5943 initialized from that element." Even if T is an aggregate. */
5944 if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
5945 && first_initializer_p
5946 && d->end - d->cur == 1
5947 && reference_related_p (type, TREE_TYPE (init)))
5949 d->cur++;
5950 return init;
5953 /* [dcl.init.aggr]
5955 All implicit type conversions (clause _conv_) are considered when
5956 initializing the aggregate member with an initializer from an
5957 initializer-list. If the initializer can initialize a member,
5958 the member is initialized. Otherwise, if the member is itself a
5959 non-empty subaggregate, brace elision is assumed and the
5960 initializer is considered for the initialization of the first
5961 member of the subaggregate. */
5962 if (TREE_CODE (init) != CONSTRUCTOR
5963 /* But don't try this for the first initializer, since that would be
5964 looking through the outermost braces; A a2 = { a1 }; is not a
5965 valid aggregate initialization. */
5966 && !first_initializer_p
5967 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
5968 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
5969 complain)))
5971 d->cur++;
5972 return init;
5975 /* [dcl.init.string]
5977 A char array (whether plain char, signed char, or unsigned char)
5978 can be initialized by a string-literal (optionally enclosed in
5979 braces); a wchar_t array can be initialized by a wide
5980 string-literal (optionally enclosed in braces). */
5981 if (TREE_CODE (type) == ARRAY_TYPE
5982 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
5984 tree str_init = init;
5986 /* Strip one level of braces if and only if they enclose a single
5987 element (as allowed by [dcl.init.string]). */
5988 if (!first_initializer_p
5989 && TREE_CODE (str_init) == CONSTRUCTOR
5990 && CONSTRUCTOR_NELTS (str_init) == 1)
5992 str_init = (*CONSTRUCTOR_ELTS (str_init))[0].value;
5995 /* If it's a string literal, then it's the initializer for the array
5996 as a whole. Otherwise, continue with normal initialization for
5997 array types (one value per array element). */
5998 if (TREE_CODE (str_init) == STRING_CST)
6000 if (has_designator_problem (d, complain))
6001 return error_mark_node;
6002 d->cur++;
6003 return str_init;
6007 /* The following cases are about aggregates. If we are not within a full
6008 initializer already, and there is not a CONSTRUCTOR, it means that there
6009 is a missing set of braces (that is, we are processing the case for
6010 which reshape_init exists). */
6011 if (!first_initializer_p)
6013 if (TREE_CODE (init) == CONSTRUCTOR)
6015 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
6016 /* There is no need to reshape pointer-to-member function
6017 initializers, as they are always constructed correctly
6018 by the front end. */
6020 else if (COMPOUND_LITERAL_P (init))
6021 /* For a nested compound literal, there is no need to reshape since
6022 brace elision is not allowed. Even if we decided to allow it,
6023 we should add a call to reshape_init in finish_compound_literal,
6024 before calling digest_init, so changing this code would still
6025 not be necessary. */
6026 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
6027 else
6029 ++d->cur;
6030 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6031 return reshape_init (type, init, complain);
6035 if (complain & tf_warning)
6036 warning (OPT_Wmissing_braces,
6037 "missing braces around initializer for %qT",
6038 type);
6041 /* Dispatch to specialized routines. */
6042 if (CLASS_TYPE_P (type))
6043 return reshape_init_class (type, d, first_initializer_p, complain);
6044 else if (TREE_CODE (type) == ARRAY_TYPE)
6045 return reshape_init_array (type, d, complain);
6046 else if (VECTOR_TYPE_P (type))
6047 return reshape_init_vector (type, d, complain);
6048 else
6049 gcc_unreachable();
6052 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
6053 brace-enclosed aggregate initializer.
6055 INIT is the CONSTRUCTOR containing the list of initializers describing
6056 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
6057 It may not presently match the shape of the TYPE; for example:
6059 struct S { int a; int b; };
6060 struct S a[] = { 1, 2, 3, 4 };
6062 Here INIT will hold a vector of four elements, rather than a
6063 vector of two elements, each itself a vector of two elements. This
6064 routine transforms INIT from the former form into the latter. The
6065 revised CONSTRUCTOR node is returned. */
6067 tree
6068 reshape_init (tree type, tree init, tsubst_flags_t complain)
6070 vec<constructor_elt, va_gc> *v;
6071 reshape_iter d;
6072 tree new_init;
6074 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6076 v = CONSTRUCTOR_ELTS (init);
6078 /* An empty constructor does not need reshaping, and it is always a valid
6079 initializer. */
6080 if (vec_safe_is_empty (v))
6081 return init;
6083 /* Handle [dcl.init.list] direct-list-initialization from
6084 single element of enumeration with a fixed underlying type. */
6085 if (is_direct_enum_init (type, init))
6087 tree elt = CONSTRUCTOR_ELT (init, 0)->value;
6088 type = cv_unqualified (type);
6089 if (check_narrowing (ENUM_UNDERLYING_TYPE (type), elt, complain))
6091 warning_sentinel w (warn_useless_cast);
6092 return cp_build_c_cast (type, elt, tf_warning_or_error);
6094 else
6095 return error_mark_node;
6098 /* Recurse on this CONSTRUCTOR. */
6099 d.cur = &(*v)[0];
6100 d.end = d.cur + v->length ();
6102 new_init = reshape_init_r (type, &d, true, complain);
6103 if (new_init == error_mark_node)
6104 return error_mark_node;
6106 /* Make sure all the element of the constructor were used. Otherwise,
6107 issue an error about exceeding initializers. */
6108 if (d.cur != d.end)
6110 if (complain & tf_error)
6111 error ("too many initializers for %qT", type);
6112 return error_mark_node;
6115 if (CONSTRUCTOR_IS_DIRECT_INIT (init)
6116 && BRACE_ENCLOSED_INITIALIZER_P (new_init))
6117 CONSTRUCTOR_IS_DIRECT_INIT (new_init) = true;
6119 return new_init;
6122 /* Verify array initializer. Returns true if errors have been reported. */
6124 bool
6125 check_array_initializer (tree decl, tree type, tree init)
6127 tree element_type = TREE_TYPE (type);
6129 /* The array type itself need not be complete, because the
6130 initializer may tell us how many elements are in the array.
6131 But, the elements of the array must be complete. */
6132 if (!COMPLETE_TYPE_P (complete_type (element_type)))
6134 if (decl)
6135 error_at (DECL_SOURCE_LOCATION (decl),
6136 "elements of array %q#D have incomplete type", decl);
6137 else
6138 error ("elements of array %q#T have incomplete type", type);
6139 return true;
6141 /* A compound literal can't have variable size. */
6142 if (init && !decl
6143 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
6144 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
6146 error ("variable-sized compound literal");
6147 return true;
6149 return false;
6152 /* Subroutine of check_initializer; args are passed down from that function.
6153 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
6155 static tree
6156 build_aggr_init_full_exprs (tree decl, tree init, int flags)
6159 gcc_assert (stmts_are_full_exprs_p ());
6160 return build_aggr_init (decl, init, flags, tf_warning_or_error);
6163 /* Verify INIT (the initializer for DECL), and record the
6164 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
6165 grok_reference_init.
6167 If the return value is non-NULL, it is an expression that must be
6168 evaluated dynamically to initialize DECL. */
6170 static tree
6171 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
6173 tree type = TREE_TYPE (decl);
6174 tree init_code = NULL;
6175 tree core_type;
6177 /* Things that are going to be initialized need to have complete
6178 type. */
6179 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
6181 if (DECL_HAS_VALUE_EXPR_P (decl))
6183 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
6184 it doesn't have storage to be initialized. */
6185 gcc_assert (init == NULL_TREE);
6186 return NULL_TREE;
6189 if (type == error_mark_node)
6190 /* We will have already complained. */
6191 return NULL_TREE;
6193 if (TREE_CODE (type) == ARRAY_TYPE)
6195 if (check_array_initializer (decl, type, init))
6196 return NULL_TREE;
6198 else if (!COMPLETE_TYPE_P (type))
6200 error_at (DECL_SOURCE_LOCATION (decl),
6201 "%q#D has incomplete type", decl);
6202 TREE_TYPE (decl) = error_mark_node;
6203 return NULL_TREE;
6205 else
6206 /* There is no way to make a variable-sized class type in GNU C++. */
6207 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
6209 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
6211 int init_len = CONSTRUCTOR_NELTS (init);
6212 if (SCALAR_TYPE_P (type))
6214 if (init_len == 0)
6216 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6217 init = build_zero_init (type, NULL_TREE, false);
6219 else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
6221 error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)),
6222 "scalar object %qD requires one element in "
6223 "initializer", decl);
6224 TREE_TYPE (decl) = error_mark_node;
6225 return NULL_TREE;
6230 if (TREE_CODE (decl) == CONST_DECL)
6232 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
6234 DECL_INITIAL (decl) = init;
6236 gcc_assert (init != NULL_TREE);
6237 init = NULL_TREE;
6239 else if (!init && DECL_REALLY_EXTERN (decl))
6241 else if (init || type_build_ctor_call (type)
6242 || TREE_CODE (type) == REFERENCE_TYPE)
6244 if (TREE_CODE (type) == REFERENCE_TYPE)
6246 init = grok_reference_init (decl, type, init, flags);
6247 flags |= LOOKUP_ALREADY_DIGESTED;
6249 else if (!init)
6250 check_for_uninitialized_const_var (decl);
6251 /* Do not reshape constructors of vectors (they don't need to be
6252 reshaped. */
6253 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
6255 if (is_std_init_list (type))
6257 init = perform_implicit_conversion (type, init,
6258 tf_warning_or_error);
6259 flags |= LOOKUP_ALREADY_DIGESTED;
6261 else if (TYPE_NON_AGGREGATE_CLASS (type))
6263 /* Don't reshape if the class has constructors. */
6264 if (cxx_dialect == cxx98)
6265 error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)),
6266 "in C++98 %qD must be initialized by "
6267 "constructor, not by %<{...}%>",
6268 decl);
6270 else if (VECTOR_TYPE_P (type) && TYPE_VECTOR_OPAQUE (type))
6272 error ("opaque vector types cannot be initialized");
6273 init = error_mark_node;
6275 else
6277 init = reshape_init (type, init, tf_warning_or_error);
6278 flags |= LOOKUP_NO_NARROWING;
6281 else if (TREE_CODE (init) == TREE_LIST
6282 && TREE_TYPE (init) != unknown_type_node
6283 && !MAYBE_CLASS_TYPE_P (type))
6285 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6287 /* We get here with code like `int a (2);' */
6288 init = build_x_compound_expr_from_list (init, ELK_INIT,
6289 tf_warning_or_error);
6292 /* If DECL has an array type without a specific bound, deduce the
6293 array size from the initializer. */
6294 maybe_deduce_size_from_array_init (decl, init);
6295 type = TREE_TYPE (decl);
6296 if (type == error_mark_node)
6297 return NULL_TREE;
6299 if (((type_build_ctor_call (type) || CLASS_TYPE_P (type))
6300 && !(flags & LOOKUP_ALREADY_DIGESTED)
6301 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
6302 && CP_AGGREGATE_TYPE_P (type)
6303 && (CLASS_TYPE_P (type)
6304 || !TYPE_NEEDS_CONSTRUCTING (type)
6305 || type_has_extended_temps (type))))
6306 || (DECL_DECOMPOSITION_P (decl) && TREE_CODE (type) == ARRAY_TYPE))
6308 init_code = build_aggr_init_full_exprs (decl, init, flags);
6310 /* A constructor call is a non-trivial initializer even if
6311 it isn't explicitly written. */
6312 if (TREE_SIDE_EFFECTS (init_code))
6313 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
6315 /* If this is a constexpr initializer, expand_default_init will
6316 have returned an INIT_EXPR rather than a CALL_EXPR. In that
6317 case, pull the initializer back out and pass it down into
6318 store_init_value. */
6319 while (TREE_CODE (init_code) == EXPR_STMT
6320 || TREE_CODE (init_code) == CONVERT_EXPR)
6321 init_code = TREE_OPERAND (init_code, 0);
6322 if (TREE_CODE (init_code) == INIT_EXPR)
6324 init = TREE_OPERAND (init_code, 1);
6325 init_code = NULL_TREE;
6326 /* Don't call digest_init; it's unnecessary and will complain
6327 about aggregate initialization of non-aggregate classes. */
6328 flags |= LOOKUP_ALREADY_DIGESTED;
6330 else if (DECL_DECLARED_CONSTEXPR_P (decl))
6332 /* Declared constexpr, but no suitable initializer; massage
6333 init appropriately so we can pass it into store_init_value
6334 for the error. */
6335 if (CLASS_TYPE_P (type)
6336 && (!init || TREE_CODE (init) == TREE_LIST))
6338 init = build_functional_cast (type, init, tf_none);
6339 if (TREE_CODE (init) == TARGET_EXPR)
6340 TARGET_EXPR_DIRECT_INIT_P (init) = true;
6342 init_code = NULL_TREE;
6344 else
6345 init = NULL_TREE;
6348 if (init && TREE_CODE (init) != TREE_VEC)
6350 /* In aggregate initialization of a variable, each element
6351 initialization is a full-expression because there is no
6352 enclosing expression. */
6353 gcc_assert (stmts_are_full_exprs_p ());
6355 init_code = store_init_value (decl, init, cleanups, flags);
6357 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
6358 && DECL_INITIAL (decl)
6359 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
6360 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
6361 warning_at (EXPR_LOC_OR_LOC (DECL_INITIAL (decl),
6362 DECL_SOURCE_LOCATION (decl)),
6363 0, "array %qD initialized by parenthesized "
6364 "string literal %qE",
6365 decl, DECL_INITIAL (decl));
6366 init = NULL;
6369 else
6371 if (CLASS_TYPE_P (core_type = strip_array_types (type))
6372 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
6373 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
6374 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
6375 /*complain=*/true);
6377 check_for_uninitialized_const_var (decl);
6380 if (init && init != error_mark_node)
6381 init_code = build2 (INIT_EXPR, type, decl, init);
6383 if (init_code)
6385 /* We might have set these in cp_finish_decl. */
6386 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
6387 TREE_CONSTANT (decl) = false;
6390 if (init_code
6391 && (DECL_IN_AGGR_P (decl) && !DECL_VAR_DECLARED_INLINE_P (decl)))
6393 static int explained = 0;
6395 if (cxx_dialect < cxx11)
6396 error ("initializer invalid for static member with constructor");
6397 else if (cxx_dialect < cxx17)
6398 error ("non-constant in-class initialization invalid for static "
6399 "member %qD", decl);
6400 else
6401 error ("non-constant in-class initialization invalid for non-inline "
6402 "static member %qD", decl);
6403 if (!explained)
6405 inform (input_location,
6406 "(an out of class initialization is required)");
6407 explained = 1;
6409 return NULL_TREE;
6412 return init_code;
6415 /* If DECL is not a local variable, give it RTL. */
6417 static void
6418 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
6420 int toplev = toplevel_bindings_p ();
6421 int defer_p;
6423 /* Set the DECL_ASSEMBLER_NAME for the object. */
6424 if (asmspec)
6426 /* The `register' keyword, when used together with an
6427 asm-specification, indicates that the variable should be
6428 placed in a particular register. */
6429 if (VAR_P (decl) && DECL_REGISTER (decl))
6431 set_user_assembler_name (decl, asmspec);
6432 DECL_HARD_REGISTER (decl) = 1;
6434 else
6436 if (TREE_CODE (decl) == FUNCTION_DECL
6437 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
6438 set_builtin_user_assembler_name (decl, asmspec);
6439 set_user_assembler_name (decl, asmspec);
6443 /* Handle non-variables up front. */
6444 if (!VAR_P (decl))
6446 rest_of_decl_compilation (decl, toplev, at_eof);
6447 return;
6450 /* If we see a class member here, it should be a static data
6451 member. */
6452 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
6454 gcc_assert (TREE_STATIC (decl));
6455 /* An in-class declaration of a static data member should be
6456 external; it is only a declaration, and not a definition. */
6457 if (init == NULL_TREE)
6458 gcc_assert (DECL_EXTERNAL (decl)
6459 || !TREE_PUBLIC (decl)
6460 || DECL_INLINE_VAR_P (decl));
6463 /* We don't create any RTL for local variables. */
6464 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6465 return;
6467 /* We defer emission of local statics until the corresponding
6468 DECL_EXPR is expanded. But with constexpr its function might never
6469 be expanded, so go ahead and tell cgraph about the variable now. */
6470 defer_p = ((DECL_FUNCTION_SCOPE_P (decl)
6471 && !var_in_maybe_constexpr_fn (decl))
6472 || DECL_VIRTUAL_P (decl));
6474 /* Defer template instantiations. */
6475 if (DECL_LANG_SPECIFIC (decl)
6476 && DECL_IMPLICIT_INSTANTIATION (decl))
6477 defer_p = 1;
6479 /* If we're not deferring, go ahead and assemble the variable. */
6480 if (!defer_p)
6481 rest_of_decl_compilation (decl, toplev, at_eof);
6484 /* walk_tree helper for wrap_temporary_cleanups, below. */
6486 static tree
6487 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
6489 /* Stop at types or full-expression boundaries. */
6490 if (TYPE_P (*stmt_p)
6491 || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
6493 *walk_subtrees = 0;
6494 return NULL_TREE;
6497 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
6499 tree guard = (tree)data;
6500 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
6502 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
6503 /* Tell honor_protect_cleanup_actions to handle this as a separate
6504 cleanup. */
6505 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
6507 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
6510 return NULL_TREE;
6513 /* We're initializing a local variable which has a cleanup GUARD. If there
6514 are any temporaries used in the initializer INIT of this variable, we
6515 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6516 variable will be cleaned up properly if one of them throws.
6518 Unfortunately, there's no way to express this properly in terms of
6519 nesting, as the regions for the temporaries overlap the region for the
6520 variable itself; if there are two temporaries, the variable needs to be
6521 the first thing destroyed if either of them throws. However, we only
6522 want to run the variable's cleanup if it actually got constructed. So
6523 we need to guard the temporary cleanups with the variable's cleanup if
6524 they are run on the normal path, but not if they are run on the
6525 exceptional path. We implement this by telling
6526 honor_protect_cleanup_actions to strip the variable cleanup from the
6527 exceptional path. */
6529 static void
6530 wrap_temporary_cleanups (tree init, tree guard)
6532 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6535 /* Generate code to initialize DECL (a local variable). */
6537 static void
6538 initialize_local_var (tree decl, tree init)
6540 tree type = TREE_TYPE (decl);
6541 tree cleanup;
6542 int already_used;
6544 gcc_assert (VAR_P (decl)
6545 || TREE_CODE (decl) == RESULT_DECL);
6546 gcc_assert (!TREE_STATIC (decl));
6548 if (DECL_SIZE (decl) == NULL_TREE)
6550 /* If we used it already as memory, it must stay in memory. */
6551 DECL_INITIAL (decl) = NULL_TREE;
6552 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6553 return;
6556 if (type == error_mark_node)
6557 return;
6559 /* Compute and store the initial value. */
6560 already_used = TREE_USED (decl) || TREE_USED (type);
6561 if (TREE_USED (type))
6562 DECL_READ_P (decl) = 1;
6564 /* Generate a cleanup, if necessary. */
6565 cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6567 /* Perform the initialization. */
6568 if (init)
6570 tree rinit = (TREE_CODE (init) == INIT_EXPR
6571 ? TREE_OPERAND (init, 1) : NULL_TREE);
6572 if (rinit && !TREE_SIDE_EFFECTS (rinit))
6574 /* Stick simple initializers in DECL_INITIAL so that
6575 -Wno-init-self works (c++/34772). */
6576 gcc_assert (TREE_OPERAND (init, 0) == decl);
6577 DECL_INITIAL (decl) = rinit;
6579 if (warn_init_self && TREE_CODE (type) == REFERENCE_TYPE)
6581 STRIP_NOPS (rinit);
6582 if (rinit == decl)
6583 warning_at (DECL_SOURCE_LOCATION (decl),
6584 OPT_Winit_self,
6585 "reference %qD is initialized with itself", decl);
6588 else
6590 int saved_stmts_are_full_exprs_p;
6592 /* If we're only initializing a single object, guard the
6593 destructors of any temporaries used in its initializer with
6594 its destructor. This isn't right for arrays because each
6595 element initialization is a full-expression. */
6596 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6597 wrap_temporary_cleanups (init, cleanup);
6599 gcc_assert (building_stmt_list_p ());
6600 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6601 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6602 finish_expr_stmt (init);
6603 current_stmt_tree ()->stmts_are_full_exprs_p =
6604 saved_stmts_are_full_exprs_p;
6608 /* Set this to 0 so we can tell whether an aggregate which was
6609 initialized was ever used. Don't do this if it has a
6610 destructor, so we don't complain about the 'resource
6611 allocation is initialization' idiom. Now set
6612 attribute((unused)) on types so decls of that type will be
6613 marked used. (see TREE_USED, above.) */
6614 if (TYPE_NEEDS_CONSTRUCTING (type)
6615 && ! already_used
6616 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6617 && DECL_NAME (decl))
6618 TREE_USED (decl) = 0;
6619 else if (already_used)
6620 TREE_USED (decl) = 1;
6622 if (cleanup)
6623 finish_decl_cleanup (decl, cleanup);
6626 /* DECL is a VAR_DECL for a compiler-generated variable with static
6627 storage duration (like a virtual table) whose initializer is a
6628 compile-time constant. Initialize the variable and provide it to the
6629 back end. */
6631 void
6632 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6634 tree init;
6635 gcc_assert (DECL_ARTIFICIAL (decl));
6636 init = build_constructor (TREE_TYPE (decl), v);
6637 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6638 DECL_INITIAL (decl) = init;
6639 DECL_INITIALIZED_P (decl) = 1;
6640 determine_visibility (decl);
6641 layout_var_decl (decl);
6642 maybe_commonize_var (decl);
6643 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6646 /* INIT is the initializer for a variable, as represented by the
6647 parser. Returns true iff INIT is value-dependent. */
6649 static bool
6650 value_dependent_init_p (tree init)
6652 if (TREE_CODE (init) == TREE_LIST)
6653 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6654 return any_value_dependent_elements_p (init);
6655 else if (TREE_CODE (init) == CONSTRUCTOR)
6656 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6658 if (dependent_type_p (TREE_TYPE (init)))
6659 return true;
6661 vec<constructor_elt, va_gc> *elts;
6662 size_t nelts;
6663 size_t i;
6665 elts = CONSTRUCTOR_ELTS (init);
6666 nelts = vec_safe_length (elts);
6667 for (i = 0; i < nelts; ++i)
6668 if (value_dependent_init_p ((*elts)[i].value))
6669 return true;
6671 else
6672 /* It must be a simple expression, e.g., int i = 3; */
6673 return value_dependent_expression_p (init);
6675 return false;
6678 // Returns true if a DECL is VAR_DECL with the concept specifier.
6679 static inline bool
6680 is_concept_var (tree decl)
6682 return (VAR_P (decl)
6683 // Not all variables have DECL_LANG_SPECIFIC.
6684 && DECL_LANG_SPECIFIC (decl)
6685 && DECL_DECLARED_CONCEPT_P (decl));
6688 /* A helper function to be called via walk_tree. If any label exists
6689 under *TP, it is (going to be) forced. Set has_forced_label_in_static. */
6691 static tree
6692 notice_forced_label_r (tree *tp, int *walk_subtrees, void *)
6694 if (TYPE_P (*tp))
6695 *walk_subtrees = 0;
6696 if (TREE_CODE (*tp) == LABEL_DECL)
6697 cfun->has_forced_label_in_static = 1;
6698 return NULL_TREE;
6701 /* Finish processing of a declaration;
6702 install its line number and initial value.
6703 If the length of an array type is not known before,
6704 it must be determined now, from the initial value, or it is an error.
6706 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
6707 true, then INIT is an integral constant expression.
6709 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6710 if the (init) syntax was used. */
6712 void
6713 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6714 tree asmspec_tree, int flags)
6716 tree type;
6717 vec<tree, va_gc> *cleanups = NULL;
6718 const char *asmspec = NULL;
6719 int was_readonly = 0;
6720 bool var_definition_p = false;
6721 tree auto_node;
6723 if (decl == error_mark_node)
6724 return;
6725 else if (! decl)
6727 if (init)
6728 error ("assignment (not initialization) in declaration");
6729 return;
6732 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6733 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
6734 gcc_assert (TREE_CODE (decl) != PARM_DECL);
6736 type = TREE_TYPE (decl);
6737 if (type == error_mark_node)
6738 return;
6740 /* Warn about register storage specifiers except when in GNU global
6741 or local register variable extension. */
6742 if (VAR_P (decl) && DECL_REGISTER (decl) && asmspec_tree == NULL_TREE)
6744 if (cxx_dialect >= cxx17)
6745 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6746 "ISO C++17 does not allow %<register%> storage "
6747 "class specifier");
6748 else
6749 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6750 "%<register%> storage class specifier used");
6753 /* If a name was specified, get the string. */
6754 if (at_namespace_scope_p ())
6755 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6756 if (asmspec_tree && asmspec_tree != error_mark_node)
6757 asmspec = TREE_STRING_POINTER (asmspec_tree);
6759 if (current_class_type
6760 && CP_DECL_CONTEXT (decl) == current_class_type
6761 && TYPE_BEING_DEFINED (current_class_type)
6762 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6763 && (DECL_INITIAL (decl) || init))
6764 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6766 if (TREE_CODE (decl) != FUNCTION_DECL
6767 && (auto_node = type_uses_auto (type)))
6769 tree d_init;
6770 if (init == NULL_TREE)
6772 if (DECL_LANG_SPECIFIC (decl)
6773 && DECL_TEMPLATE_INSTANTIATION (decl)
6774 && !DECL_TEMPLATE_INSTANTIATED (decl))
6776 /* init is null because we're deferring instantiating the
6777 initializer until we need it. Well, we need it now. */
6778 instantiate_decl (decl, /*defer_ok*/true, /*expl*/false);
6779 return;
6782 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (auto_node));
6784 d_init = init;
6785 if (d_init)
6787 if (TREE_CODE (d_init) == TREE_LIST
6788 && !CLASS_PLACEHOLDER_TEMPLATE (auto_node))
6789 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6790 tf_warning_or_error);
6791 d_init = resolve_nondeduced_context (d_init, tf_warning_or_error);
6793 enum auto_deduction_context adc = adc_variable_type;
6794 if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
6795 adc = adc_decomp_type;
6796 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init, auto_node,
6797 tf_warning_or_error, adc,
6798 NULL_TREE, flags);
6799 if (type == error_mark_node)
6800 return;
6801 if (TREE_CODE (type) == FUNCTION_TYPE)
6803 error ("initializer for %<decltype(auto) %D%> has function type "
6804 "(did you forget the %<()%> ?)", decl);
6805 TREE_TYPE (decl) = error_mark_node;
6806 return;
6808 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6811 if (!ensure_literal_type_for_constexpr_object (decl))
6812 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6814 if (VAR_P (decl)
6815 && DECL_CLASS_SCOPE_P (decl)
6816 && DECL_INITIALIZED_IN_CLASS_P (decl))
6817 check_static_variable_definition (decl, type);
6819 if (init && TREE_CODE (decl) == FUNCTION_DECL)
6821 tree clone;
6822 if (init == ridpointers[(int)RID_DELETE])
6824 /* FIXME check this is 1st decl. */
6825 DECL_DELETED_FN (decl) = 1;
6826 DECL_DECLARED_INLINE_P (decl) = 1;
6827 DECL_INITIAL (decl) = error_mark_node;
6828 FOR_EACH_CLONE (clone, decl)
6830 DECL_DELETED_FN (clone) = 1;
6831 DECL_DECLARED_INLINE_P (clone) = 1;
6832 DECL_INITIAL (clone) = error_mark_node;
6834 init = NULL_TREE;
6836 else if (init == ridpointers[(int)RID_DEFAULT])
6838 if (defaultable_fn_check (decl))
6839 DECL_DEFAULTED_FN (decl) = 1;
6840 else
6841 DECL_INITIAL (decl) = NULL_TREE;
6845 if (init && VAR_P (decl))
6847 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6848 /* If DECL is a reference, then we want to know whether init is a
6849 reference constant; init_const_expr_p as passed tells us whether
6850 it's an rvalue constant. */
6851 if (TREE_CODE (type) == REFERENCE_TYPE)
6852 init_const_expr_p = potential_constant_expression (init);
6853 if (init_const_expr_p)
6855 /* Set these flags now for templates. We'll update the flags in
6856 store_init_value for instantiations. */
6857 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
6858 if (decl_maybe_constant_var_p (decl)
6859 /* FIXME setting TREE_CONSTANT on refs breaks the back end. */
6860 && TREE_CODE (type) != REFERENCE_TYPE)
6861 TREE_CONSTANT (decl) = 1;
6865 if (processing_template_decl)
6867 bool type_dependent_p;
6869 /* Add this declaration to the statement-tree. */
6870 if (at_function_scope_p ())
6871 add_decl_expr (decl);
6873 type_dependent_p = dependent_type_p (type);
6875 if (check_for_bare_parameter_packs (init))
6877 init = NULL_TREE;
6878 DECL_INITIAL (decl) = NULL_TREE;
6881 /* Generally, initializers in templates are expanded when the
6882 template is instantiated. But, if DECL is a variable constant
6883 then it can be used in future constant expressions, so its value
6884 must be available. */
6886 bool dep_init = false;
6888 if (!VAR_P (decl) || type_dependent_p)
6889 /* We can't do anything if the decl has dependent type. */;
6890 else if (!init && is_concept_var (decl))
6891 error ("variable concept has no initializer");
6892 else if (init
6893 && init_const_expr_p
6894 && TREE_CODE (type) != REFERENCE_TYPE
6895 && decl_maybe_constant_var_p (decl)
6896 && !(dep_init = value_dependent_init_p (init)))
6898 /* This variable seems to be a non-dependent constant, so process
6899 its initializer. If check_initializer returns non-null the
6900 initialization wasn't constant after all. */
6901 tree init_code;
6902 cleanups = make_tree_vector ();
6903 init_code = check_initializer (decl, init, flags, &cleanups);
6904 if (init_code == NULL_TREE)
6905 init = NULL_TREE;
6906 release_tree_vector (cleanups);
6908 else if (!DECL_PRETTY_FUNCTION_P (decl))
6910 /* Deduce array size even if the initializer is dependent. */
6911 maybe_deduce_size_from_array_init (decl, init);
6912 /* And complain about multiple initializers. */
6913 if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
6914 && !MAYBE_CLASS_TYPE_P (type))
6915 init = build_x_compound_expr_from_list (init, ELK_INIT,
6916 tf_warning_or_error);
6919 if (init)
6920 DECL_INITIAL (decl) = init;
6921 if (dep_init)
6923 retrofit_lang_decl (decl);
6924 SET_DECL_DEPENDENT_INIT_P (decl, true);
6926 return;
6929 /* Just store non-static data member initializers for later. */
6930 if (init && TREE_CODE (decl) == FIELD_DECL)
6931 DECL_INITIAL (decl) = init;
6933 /* Take care of TYPE_DECLs up front. */
6934 if (TREE_CODE (decl) == TYPE_DECL)
6936 if (type != error_mark_node
6937 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
6939 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
6940 warning (0, "shadowing previous type declaration of %q#D", decl);
6941 set_identifier_type_value (DECL_NAME (decl), decl);
6944 /* If we have installed this as the canonical typedef for this
6945 type, and that type has not been defined yet, delay emitting
6946 the debug information for it, as we will emit it later. */
6947 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
6948 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
6949 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
6951 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
6952 at_eof);
6953 return;
6956 /* A reference will be modified here, as it is initialized. */
6957 if (! DECL_EXTERNAL (decl)
6958 && TREE_READONLY (decl)
6959 && TREE_CODE (type) == REFERENCE_TYPE)
6961 was_readonly = 1;
6962 TREE_READONLY (decl) = 0;
6965 if (VAR_P (decl))
6967 /* If this is a local variable that will need a mangled name,
6968 register it now. We must do this before processing the
6969 initializer for the variable, since the initialization might
6970 require a guard variable, and since the mangled name of the
6971 guard variable will depend on the mangled name of this
6972 variable. */
6973 if (DECL_FUNCTION_SCOPE_P (decl)
6974 && TREE_STATIC (decl)
6975 && !DECL_ARTIFICIAL (decl))
6977 push_local_name (decl);
6978 /* Normally has_forced_label_in_static is set during GIMPLE
6979 lowering, but [cd]tors are never actually compiled directly.
6980 We need to set this early so we can deal with the label
6981 address extension. */
6982 if ((DECL_CONSTRUCTOR_P (current_function_decl)
6983 || DECL_DESTRUCTOR_P (current_function_decl))
6984 && init)
6986 walk_tree (&init, notice_forced_label_r, NULL, NULL);
6987 add_local_decl (cfun, decl);
6989 /* And make sure it's in the symbol table for
6990 c_parse_final_cleanups to find. */
6991 varpool_node::get_create (decl);
6994 /* Convert the initializer to the type of DECL, if we have not
6995 already initialized DECL. */
6996 if (!DECL_INITIALIZED_P (decl)
6997 /* If !DECL_EXTERNAL then DECL is being defined. In the
6998 case of a static data member initialized inside the
6999 class-specifier, there can be an initializer even if DECL
7000 is *not* defined. */
7001 && (!DECL_EXTERNAL (decl) || init))
7003 cleanups = make_tree_vector ();
7004 init = check_initializer (decl, init, flags, &cleanups);
7006 /* Handle:
7008 [dcl.init]
7010 The memory occupied by any object of static storage
7011 duration is zero-initialized at program startup before
7012 any other initialization takes place.
7014 We cannot create an appropriate initializer until after
7015 the type of DECL is finalized. If DECL_INITIAL is set,
7016 then the DECL is statically initialized, and any
7017 necessary zero-initialization has already been performed. */
7018 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
7019 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
7020 /*nelts=*/NULL_TREE,
7021 /*static_storage_p=*/true);
7022 /* Remember that the initialization for this variable has
7023 taken place. */
7024 DECL_INITIALIZED_P (decl) = 1;
7025 /* This declaration is the definition of this variable,
7026 unless we are initializing a static data member within
7027 the class specifier. */
7028 if (!DECL_EXTERNAL (decl))
7029 var_definition_p = true;
7031 /* If the variable has an array type, lay out the type, even if
7032 there is no initializer. It is valid to index through the
7033 array, and we must get TYPE_ALIGN set correctly on the array
7034 type. */
7035 else if (TREE_CODE (type) == ARRAY_TYPE)
7036 layout_type (type);
7038 if (TREE_STATIC (decl)
7039 && !at_function_scope_p ()
7040 && current_function_decl == NULL)
7041 /* So decl is a global variable or a static member of a
7042 non local class. Record the types it uses
7043 so that we can decide later to emit debug info for them. */
7044 record_types_used_by_current_var_decl (decl);
7047 /* Add this declaration to the statement-tree. This needs to happen
7048 after the call to check_initializer so that the DECL_EXPR for a
7049 reference temp is added before the DECL_EXPR for the reference itself. */
7050 if (DECL_FUNCTION_SCOPE_P (decl))
7052 /* If we're building a variable sized type, and we might be
7053 reachable other than via the top of the current binding
7054 level, then create a new BIND_EXPR so that we deallocate
7055 the object at the right time. */
7056 if (VAR_P (decl)
7057 && DECL_SIZE (decl)
7058 && !TREE_CONSTANT (DECL_SIZE (decl))
7059 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
7061 tree bind;
7062 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
7063 TREE_SIDE_EFFECTS (bind) = 1;
7064 add_stmt (bind);
7065 BIND_EXPR_BODY (bind) = push_stmt_list ();
7067 add_decl_expr (decl);
7070 /* Let the middle end know about variables and functions -- but not
7071 static data members in uninstantiated class templates. */
7072 if (VAR_OR_FUNCTION_DECL_P (decl))
7074 if (VAR_P (decl))
7076 layout_var_decl (decl);
7077 maybe_commonize_var (decl);
7080 /* This needs to happen after the linkage is set. */
7081 determine_visibility (decl);
7083 if (var_definition_p && TREE_STATIC (decl))
7085 /* If a TREE_READONLY variable needs initialization
7086 at runtime, it is no longer readonly and we need to
7087 avoid MEM_READONLY_P being set on RTL created for it. */
7088 if (init)
7090 if (TREE_READONLY (decl))
7091 TREE_READONLY (decl) = 0;
7092 was_readonly = 0;
7094 else if (was_readonly)
7095 TREE_READONLY (decl) = 1;
7097 /* Likewise if it needs destruction. */
7098 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7099 TREE_READONLY (decl) = 0;
7102 make_rtl_for_nonlocal_decl (decl, init, asmspec);
7104 /* Check for abstractness of the type. Notice that there is no
7105 need to strip array types here since the check for those types
7106 is already done within create_array_type_for_decl. */
7107 abstract_virtuals_error (decl, type);
7109 if (TREE_TYPE (decl) == error_mark_node)
7110 /* No initialization required. */
7112 else if (TREE_CODE (decl) == FUNCTION_DECL)
7114 if (init)
7116 if (init == ridpointers[(int)RID_DEFAULT])
7118 /* An out-of-class default definition is defined at
7119 the point where it is explicitly defaulted. */
7120 if (DECL_DELETED_FN (decl))
7121 maybe_explain_implicit_delete (decl);
7122 else if (DECL_INITIAL (decl) == error_mark_node)
7123 synthesize_method (decl);
7125 else
7126 error ("function %q#D is initialized like a variable", decl);
7128 /* else no initialization required. */
7130 else if (DECL_EXTERNAL (decl)
7131 && ! (DECL_LANG_SPECIFIC (decl)
7132 && DECL_NOT_REALLY_EXTERN (decl)))
7134 if (init)
7135 DECL_INITIAL (decl) = init;
7137 /* A variable definition. */
7138 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
7139 /* Initialize the local variable. */
7140 initialize_local_var (decl, init);
7142 /* If a variable is defined, and then a subsequent
7143 definition with external linkage is encountered, we will
7144 get here twice for the same variable. We want to avoid
7145 calling expand_static_init more than once. For variables
7146 that are not static data members, we can call
7147 expand_static_init only when we actually process the
7148 initializer. It is not legal to redeclare a static data
7149 member, so this issue does not arise in that case. */
7150 else if (var_definition_p && TREE_STATIC (decl))
7151 expand_static_init (decl, init);
7154 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
7155 reference, insert it in the statement-tree now. */
7156 if (cleanups)
7158 unsigned i; tree t;
7159 FOR_EACH_VEC_ELT (*cleanups, i, t)
7160 push_cleanup (decl, t, false);
7161 release_tree_vector (cleanups);
7164 if (was_readonly)
7165 TREE_READONLY (decl) = 1;
7167 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
7170 /* For class TYPE return itself or some its bases that contain
7171 any direct non-static data members. Return error_mark_node if an
7172 error has been diagnosed. */
7174 static tree
7175 find_decomp_class_base (location_t loc, tree type, tree ret)
7177 bool member_seen = false;
7178 for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
7179 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
7180 continue;
7181 else if (ret)
7182 return type;
7183 else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
7185 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
7186 error_at (loc, "cannot decompose class type %qT because it has an "
7187 "anonymous struct member", type);
7188 else
7189 error_at (loc, "cannot decompose class type %qT because it has an "
7190 "anonymous union member", type);
7191 inform (DECL_SOURCE_LOCATION (field), "declared here");
7192 return error_mark_node;
7194 else if (TREE_PRIVATE (field) || TREE_PROTECTED (field))
7196 error_at (loc, "cannot decompose non-public member %qD of %qT",
7197 field, type);
7198 inform (DECL_SOURCE_LOCATION (field),
7199 TREE_PRIVATE (field)
7200 ? G_("declared private here")
7201 : G_("declared protected here"));
7202 return error_mark_node;
7204 else
7205 member_seen = true;
7207 tree base_binfo, binfo;
7208 tree orig_ret = ret;
7209 int i;
7210 if (member_seen)
7211 ret = type;
7212 for (binfo = TYPE_BINFO (type), i = 0;
7213 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
7215 tree t = find_decomp_class_base (loc, TREE_TYPE (base_binfo), ret);
7216 if (t == error_mark_node)
7217 return error_mark_node;
7218 if (t != NULL_TREE)
7220 if (ret == type)
7222 error_at (loc, "cannot decompose class type %qT: both it and "
7223 "its base class %qT have non-static data members",
7224 type, t);
7225 return error_mark_node;
7227 else if (orig_ret != NULL_TREE)
7228 return t;
7229 else if (ret == t)
7230 /* OK, found the same base along another path. We'll complain
7231 in convert_to_base if it's ambiguous. */;
7232 else if (ret != NULL_TREE)
7234 error_at (loc, "cannot decompose class type %qT: its base "
7235 "classes %qT and %qT have non-static data "
7236 "members", type, ret, t);
7237 return error_mark_node;
7239 else
7240 ret = t;
7243 return ret;
7246 /* Return std::tuple_size<TYPE>::value. */
7248 static tree
7249 get_tuple_size (tree type)
7251 tree args = make_tree_vec (1);
7252 TREE_VEC_ELT (args, 0) = type;
7253 tree inst = lookup_template_class (get_identifier ("tuple_size"), args,
7254 /*in_decl*/NULL_TREE,
7255 /*context*/std_node,
7256 /*entering_scope*/false, tf_none);
7257 inst = complete_type (inst);
7258 if (inst == error_mark_node || !COMPLETE_TYPE_P (inst))
7259 return NULL_TREE;
7260 tree val = lookup_qualified_name (inst, get_identifier ("value"),
7261 /*type*/false, /*complain*/false);
7262 if (TREE_CODE (val) == VAR_DECL || TREE_CODE (val) == CONST_DECL)
7263 val = maybe_constant_value (val);
7264 if (TREE_CODE (val) == INTEGER_CST)
7265 return val;
7266 else
7267 return error_mark_node;
7270 /* Return std::tuple_element<I,TYPE>::type. */
7272 static tree
7273 get_tuple_element_type (tree type, unsigned i)
7275 tree args = make_tree_vec (2);
7276 TREE_VEC_ELT (args, 0) = build_int_cst (integer_type_node, i);
7277 TREE_VEC_ELT (args, 1) = type;
7278 tree inst = lookup_template_class (get_identifier ("tuple_element"), args,
7279 /*in_decl*/NULL_TREE,
7280 /*context*/std_node,
7281 /*entering_scope*/false,
7282 tf_warning_or_error);
7283 return make_typename_type (inst, get_identifier ("type"),
7284 none_type, tf_warning_or_error);
7287 /* Return e.get<i>() or get<i>(e). */
7289 static tree
7290 get_tuple_decomp_init (tree decl, unsigned i)
7292 tree get_id = get_identifier ("get");
7293 tree targs = make_tree_vec (1);
7294 TREE_VEC_ELT (targs, 0) = build_int_cst (integer_type_node, i);
7296 tree etype = TREE_TYPE (decl);
7297 tree e = convert_from_reference (decl);
7299 /* [The id-expression] e is an lvalue if the type of the entity e is an
7300 lvalue reference and an xvalue otherwise. */
7301 if (TREE_CODE (etype) != REFERENCE_TYPE
7302 || TYPE_REF_IS_RVALUE (etype))
7303 e = move (e);
7305 tree fns = lookup_qualified_name (TREE_TYPE (e), get_id,
7306 /*type*/false, /*complain*/false);
7307 if (fns != error_mark_node)
7309 fns = lookup_template_function (fns, targs);
7310 return build_new_method_call (e, fns, /*args*/NULL,
7311 /*path*/NULL_TREE, LOOKUP_NORMAL,
7312 /*fn_p*/NULL, tf_warning_or_error);
7314 else
7316 vec<tree,va_gc> *args = make_tree_vector_single (e);
7317 fns = lookup_template_function (get_id, targs);
7318 fns = perform_koenig_lookup (fns, args, tf_warning_or_error);
7319 return finish_call_expr (fns, &args, /*novirt*/false,
7320 /*koenig*/true, tf_warning_or_error);
7324 /* It's impossible to recover the decltype of a tuple decomposition variable
7325 based on the actual type of the variable, so store it in a hash table. */
7327 static GTY((cache)) tree_cache_map *decomp_type_table;
7328 static void
7329 store_decomp_type (tree v, tree t)
7331 if (!decomp_type_table)
7332 decomp_type_table = tree_cache_map::create_ggc (13);
7333 decomp_type_table->put (v, t);
7336 tree
7337 lookup_decomp_type (tree v)
7339 return *decomp_type_table->get (v);
7342 /* Mangle a decomposition declaration if needed. Arguments like
7343 in cp_finish_decomp. */
7345 void
7346 cp_maybe_mangle_decomp (tree decl, tree first, unsigned int count)
7348 if (!processing_template_decl
7349 && !error_operand_p (decl)
7350 && DECL_NAMESPACE_SCOPE_P (decl))
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))
7356 v[count - i - 1] = d;
7357 SET_DECL_ASSEMBLER_NAME (decl, mangle_decomp (decl, v));
7361 /* Finish a decomposition declaration. DECL is the underlying declaration
7362 "e", FIRST is the head of a chain of decls for the individual identifiers
7363 chained through DECL_CHAIN in reverse order and COUNT is the number of
7364 those decls. */
7366 void
7367 cp_finish_decomp (tree decl, tree first, unsigned int count)
7369 if (error_operand_p (decl))
7371 error_out:
7372 while (count--)
7374 TREE_TYPE (first) = error_mark_node;
7375 if (DECL_HAS_VALUE_EXPR_P (first))
7377 SET_DECL_VALUE_EXPR (first, NULL_TREE);
7378 DECL_HAS_VALUE_EXPR_P (first) = 0;
7380 first = DECL_CHAIN (first);
7382 if (DECL_P (decl) && DECL_NAMESPACE_SCOPE_P (decl))
7383 SET_DECL_ASSEMBLER_NAME (decl, get_identifier ("<decomp>"));
7384 return;
7387 location_t loc = DECL_SOURCE_LOCATION (decl);
7388 if (type_dependent_expression_p (decl)
7389 /* This happens for range for when not in templates.
7390 Still add the DECL_VALUE_EXPRs for later processing. */
7391 || (!processing_template_decl
7392 && type_uses_auto (TREE_TYPE (decl))))
7394 for (unsigned int i = 0; i < count; i++)
7396 if (!DECL_HAS_VALUE_EXPR_P (first))
7398 tree v = build_nt (ARRAY_REF, decl,
7399 size_int (count - i - 1),
7400 NULL_TREE, NULL_TREE);
7401 SET_DECL_VALUE_EXPR (first, v);
7402 DECL_HAS_VALUE_EXPR_P (first) = 1;
7404 if (processing_template_decl)
7405 fit_decomposition_lang_decl (first, decl);
7406 first = DECL_CHAIN (first);
7408 return;
7411 auto_vec<tree, 16> v;
7412 v.safe_grow (count);
7413 tree d = first;
7414 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7416 v[count - i - 1] = d;
7417 fit_decomposition_lang_decl (d, decl);
7420 tree type = TREE_TYPE (decl);
7421 tree dexp = decl;
7423 if (TREE_CODE (type) == REFERENCE_TYPE)
7425 dexp = convert_from_reference (dexp);
7426 type = complete_type (TREE_TYPE (type));
7427 if (type == error_mark_node)
7428 goto error_out;
7431 tree eltype = NULL_TREE;
7432 unsigned HOST_WIDE_INT eltscnt = 0;
7433 if (TREE_CODE (type) == ARRAY_TYPE)
7435 tree nelts;
7436 nelts = array_type_nelts_top (type);
7437 if (nelts == error_mark_node)
7438 goto error_out;
7439 if (!tree_fits_uhwi_p (nelts))
7441 error_at (loc, "cannot decompose variable length array %qT", type);
7442 goto error_out;
7444 eltscnt = tree_to_uhwi (nelts);
7445 if (count != eltscnt)
7447 cnt_mismatch:
7448 if (count > eltscnt)
7449 error_n (loc, count,
7450 "%u name provided for structured binding",
7451 "%u names provided for structured binding", count);
7452 else
7453 error_n (loc, count,
7454 "only %u name provided for structured binding",
7455 "only %u names provided for structured binding", count);
7456 /* Some languages have special plural rules even for large values,
7457 but it is periodic with period of 10, 100, 1000 etc. */
7458 inform_n (loc, eltscnt > INT_MAX
7459 ? (eltscnt % 1000000) + 1000000 : eltscnt,
7460 "while %qT decomposes into %wu element",
7461 "while %qT decomposes into %wu elements",
7462 type, eltscnt);
7463 goto error_out;
7465 eltype = TREE_TYPE (type);
7466 for (unsigned int i = 0; i < count; i++)
7468 TREE_TYPE (v[i]) = eltype;
7469 layout_decl (v[i], 0);
7470 if (processing_template_decl)
7471 continue;
7472 tree t = unshare_expr (dexp);
7473 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7474 eltype, t, size_int (i), NULL_TREE,
7475 NULL_TREE);
7476 SET_DECL_VALUE_EXPR (v[i], t);
7477 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7480 /* 2 GNU extensions. */
7481 else if (TREE_CODE (type) == COMPLEX_TYPE)
7483 eltscnt = 2;
7484 if (count != eltscnt)
7485 goto cnt_mismatch;
7486 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7487 for (unsigned int i = 0; i < count; i++)
7489 TREE_TYPE (v[i]) = eltype;
7490 layout_decl (v[i], 0);
7491 if (processing_template_decl)
7492 continue;
7493 tree t = unshare_expr (dexp);
7494 t = build1_loc (DECL_SOURCE_LOCATION (v[i]),
7495 i ? IMAGPART_EXPR : REALPART_EXPR, eltype,
7497 SET_DECL_VALUE_EXPR (v[i], t);
7498 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7501 else if (TREE_CODE (type) == VECTOR_TYPE)
7503 if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&eltscnt))
7505 error_at (loc, "cannot decompose variable length vector %qT", type);
7506 goto error_out;
7508 if (count != eltscnt)
7509 goto cnt_mismatch;
7510 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7511 for (unsigned int i = 0; i < count; i++)
7513 TREE_TYPE (v[i]) = eltype;
7514 layout_decl (v[i], 0);
7515 if (processing_template_decl)
7516 continue;
7517 tree t = unshare_expr (dexp);
7518 convert_vector_to_array_for_subscript (DECL_SOURCE_LOCATION (v[i]),
7519 &t, size_int (i));
7520 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7521 eltype, t, size_int (i), NULL_TREE,
7522 NULL_TREE);
7523 SET_DECL_VALUE_EXPR (v[i], t);
7524 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7527 else if (tree tsize = get_tuple_size (type))
7529 if (tsize == error_mark_node)
7531 error_at (loc, "%<std::tuple_size<%T>::value%> is not an integral "
7532 "constant expression", type);
7533 goto error_out;
7535 if (!tree_fits_uhwi_p (tsize))
7537 error_n (loc, count,
7538 "%u name provided for structured binding",
7539 "%u names provided for structured binding", count);
7540 inform (loc, "while %qT decomposes into %E elements",
7541 type, tsize);
7542 goto error_out;
7544 eltscnt = tree_to_uhwi (tsize);
7545 if (count != eltscnt)
7546 goto cnt_mismatch;
7547 int save_read = DECL_READ_P (decl);
7548 for (unsigned i = 0; i < count; ++i)
7550 location_t sloc = input_location;
7551 location_t dloc = DECL_SOURCE_LOCATION (v[i]);
7553 input_location = dloc;
7554 tree init = get_tuple_decomp_init (decl, i);
7555 tree eltype = (init == error_mark_node ? error_mark_node
7556 : get_tuple_element_type (type, i));
7557 input_location = sloc;
7559 if (init == error_mark_node || eltype == error_mark_node)
7561 inform (dloc, "in initialization of structured binding "
7562 "variable %qD", v[i]);
7563 goto error_out;
7565 /* Save the decltype away before reference collapse. */
7566 store_decomp_type (v[i], eltype);
7567 eltype = cp_build_reference_type (eltype, !lvalue_p (init));
7568 TREE_TYPE (v[i]) = eltype;
7569 layout_decl (v[i], 0);
7570 if (DECL_HAS_VALUE_EXPR_P (v[i]))
7572 /* In this case the names are variables, not just proxies. */
7573 SET_DECL_VALUE_EXPR (v[i], NULL_TREE);
7574 DECL_HAS_VALUE_EXPR_P (v[i]) = 0;
7576 if (!processing_template_decl)
7577 cp_finish_decl (v[i], init, /*constexpr*/false,
7578 /*asm*/NULL_TREE, LOOKUP_NORMAL);
7580 /* Ignore reads from the underlying decl performed during initialization
7581 of the individual variables. If those will be read, we'll mark
7582 the underlying decl as read at that point. */
7583 DECL_READ_P (decl) = save_read;
7585 else if (TREE_CODE (type) == UNION_TYPE)
7587 error_at (loc, "cannot decompose union type %qT", type);
7588 goto error_out;
7590 else if (!CLASS_TYPE_P (type))
7592 error_at (loc, "cannot decompose non-array non-class type %qT", type);
7593 goto error_out;
7595 else if (LAMBDA_TYPE_P (type))
7597 error_at (loc, "cannot decompose lambda closure type %qT", type);
7598 goto error_out;
7600 else
7602 tree btype = find_decomp_class_base (loc, type, NULL_TREE);
7603 if (btype == error_mark_node)
7604 goto error_out;
7605 else if (btype == NULL_TREE)
7607 error_at (loc, "cannot decompose class type %qT without non-static "
7608 "data members", type);
7609 goto error_out;
7611 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7612 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
7613 continue;
7614 else
7615 eltscnt++;
7616 if (count != eltscnt)
7617 goto cnt_mismatch;
7618 tree t = dexp;
7619 if (type != btype)
7621 t = convert_to_base (t, btype, /*check_access*/true,
7622 /*nonnull*/false, tf_warning_or_error);
7623 type = btype;
7625 unsigned int i = 0;
7626 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7627 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
7628 continue;
7629 else
7631 tree tt = finish_non_static_data_member (field, unshare_expr (t),
7632 NULL_TREE);
7633 if (REFERENCE_REF_P (tt))
7634 tt = TREE_OPERAND (tt, 0);
7635 TREE_TYPE (v[i]) = TREE_TYPE (tt);
7636 layout_decl (v[i], 0);
7637 if (!processing_template_decl)
7639 SET_DECL_VALUE_EXPR (v[i], tt);
7640 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7642 i++;
7645 if (processing_template_decl)
7647 for (unsigned int i = 0; i < count; i++)
7648 if (!DECL_HAS_VALUE_EXPR_P (v[i]))
7650 tree a = build_nt (ARRAY_REF, decl, size_int (i),
7651 NULL_TREE, NULL_TREE);
7652 SET_DECL_VALUE_EXPR (v[i], a);
7653 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7658 /* Returns a declaration for a VAR_DECL as if:
7660 extern "C" TYPE NAME;
7662 had been seen. Used to create compiler-generated global
7663 variables. */
7665 static tree
7666 declare_global_var (tree name, tree type)
7668 tree decl;
7670 push_to_top_level ();
7671 decl = build_decl (input_location, VAR_DECL, name, type);
7672 TREE_PUBLIC (decl) = 1;
7673 DECL_EXTERNAL (decl) = 1;
7674 DECL_ARTIFICIAL (decl) = 1;
7675 DECL_CONTEXT (decl) = FROB_CONTEXT (global_namespace);
7676 /* If the user has explicitly declared this variable (perhaps
7677 because the code we are compiling is part of a low-level runtime
7678 library), then it is possible that our declaration will be merged
7679 with theirs by pushdecl. */
7680 decl = pushdecl (decl);
7681 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
7682 pop_from_top_level ();
7684 return decl;
7687 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
7688 if "__cxa_atexit" is not being used) corresponding to the function
7689 to be called when the program exits. */
7691 static tree
7692 get_atexit_fn_ptr_type (void)
7694 tree fn_type;
7696 if (!atexit_fn_ptr_type_node)
7698 tree arg_type;
7699 if (flag_use_cxa_atexit
7700 && !targetm.cxx.use_atexit_for_cxa_atexit ())
7701 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
7702 arg_type = ptr_type_node;
7703 else
7704 /* The parameter to "atexit" is "void (*)(void)". */
7705 arg_type = NULL_TREE;
7707 fn_type = build_function_type_list (void_type_node,
7708 arg_type, NULL_TREE);
7709 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
7712 return atexit_fn_ptr_type_node;
7715 /* Returns a pointer to the `atexit' function. Note that if
7716 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
7717 `__cxa_atexit' function specified in the IA64 C++ ABI. */
7719 static tree
7720 get_atexit_node (void)
7722 tree atexit_fndecl;
7723 tree fn_type;
7724 tree fn_ptr_type;
7725 const char *name;
7726 bool use_aeabi_atexit;
7728 if (atexit_node)
7729 return atexit_node;
7731 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
7733 /* The declaration for `__cxa_atexit' is:
7735 int __cxa_atexit (void (*)(void *), void *, void *)
7737 We build up the argument types and then the function type
7738 itself. */
7739 tree argtype0, argtype1, argtype2;
7741 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
7742 /* First, build the pointer-to-function type for the first
7743 argument. */
7744 fn_ptr_type = get_atexit_fn_ptr_type ();
7745 /* Then, build the rest of the argument types. */
7746 argtype2 = ptr_type_node;
7747 if (use_aeabi_atexit)
7749 argtype1 = fn_ptr_type;
7750 argtype0 = ptr_type_node;
7752 else
7754 argtype1 = ptr_type_node;
7755 argtype0 = fn_ptr_type;
7757 /* And the final __cxa_atexit type. */
7758 fn_type = build_function_type_list (integer_type_node,
7759 argtype0, argtype1, argtype2,
7760 NULL_TREE);
7761 if (use_aeabi_atexit)
7762 name = "__aeabi_atexit";
7763 else
7764 name = "__cxa_atexit";
7766 else
7768 /* The declaration for `atexit' is:
7770 int atexit (void (*)());
7772 We build up the argument types and then the function type
7773 itself. */
7774 fn_ptr_type = get_atexit_fn_ptr_type ();
7775 /* Build the final atexit type. */
7776 fn_type = build_function_type_list (integer_type_node,
7777 fn_ptr_type, NULL_TREE);
7778 name = "atexit";
7781 /* Now, build the function declaration. */
7782 push_lang_context (lang_name_c);
7783 atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
7784 mark_used (atexit_fndecl);
7785 pop_lang_context ();
7786 atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
7788 return atexit_node;
7791 /* Like get_atexit_node, but for thread-local cleanups. */
7793 static tree
7794 get_thread_atexit_node (void)
7796 /* The declaration for `__cxa_thread_atexit' is:
7798 int __cxa_thread_atexit (void (*)(void *), void *, void *) */
7799 tree fn_type = build_function_type_list (integer_type_node,
7800 get_atexit_fn_ptr_type (),
7801 ptr_type_node, ptr_type_node,
7802 NULL_TREE);
7804 /* Now, build the function declaration. */
7805 tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
7806 ECF_LEAF | ECF_NOTHROW);
7807 return decay_conversion (atexit_fndecl, tf_warning_or_error);
7810 /* Returns the __dso_handle VAR_DECL. */
7812 static tree
7813 get_dso_handle_node (void)
7815 if (dso_handle_node)
7816 return dso_handle_node;
7818 /* Declare the variable. */
7819 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
7820 ptr_type_node);
7822 #ifdef HAVE_GAS_HIDDEN
7823 if (dso_handle_node != error_mark_node)
7825 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
7826 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
7828 #endif
7830 return dso_handle_node;
7833 /* Begin a new function with internal linkage whose job will be simply
7834 to destroy some particular variable. */
7836 static GTY(()) int start_cleanup_cnt;
7838 static tree
7839 start_cleanup_fn (void)
7841 char name[32];
7842 tree fntype;
7843 tree fndecl;
7844 bool use_cxa_atexit = flag_use_cxa_atexit
7845 && !targetm.cxx.use_atexit_for_cxa_atexit ();
7847 push_to_top_level ();
7849 /* No need to mangle this. */
7850 push_lang_context (lang_name_c);
7852 /* Build the name of the function. */
7853 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
7854 /* Build the function declaration. */
7855 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
7856 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
7857 /* It's a function with internal linkage, generated by the
7858 compiler. */
7859 TREE_PUBLIC (fndecl) = 0;
7860 DECL_ARTIFICIAL (fndecl) = 1;
7861 /* Make the function `inline' so that it is only emitted if it is
7862 actually needed. It is unlikely that it will be inlined, since
7863 it is only called via a function pointer, but we avoid unnecessary
7864 emissions this way. */
7865 DECL_DECLARED_INLINE_P (fndecl) = 1;
7866 DECL_INTERFACE_KNOWN (fndecl) = 1;
7867 /* Build the parameter. */
7868 if (use_cxa_atexit)
7870 tree parmdecl = cp_build_parm_decl (fndecl, NULL_TREE, ptr_type_node);
7871 TREE_USED (parmdecl) = 1;
7872 DECL_READ_P (parmdecl) = 1;
7873 DECL_ARGUMENTS (fndecl) = parmdecl;
7876 pushdecl (fndecl);
7877 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
7879 pop_lang_context ();
7881 return current_function_decl;
7884 /* Finish the cleanup function begun by start_cleanup_fn. */
7886 static void
7887 end_cleanup_fn (void)
7889 expand_or_defer_fn (finish_function (/*inline_p=*/false));
7891 pop_from_top_level ();
7894 /* Generate code to handle the destruction of DECL, an object with
7895 static storage duration. */
7897 tree
7898 register_dtor_fn (tree decl)
7900 tree cleanup;
7901 tree addr;
7902 tree compound_stmt;
7903 tree fcall;
7904 tree type;
7905 bool ob_parm, dso_parm, use_dtor;
7906 tree arg0, arg1, arg2;
7907 tree atex_node;
7909 type = TREE_TYPE (decl);
7910 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
7911 return void_node;
7913 /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
7914 "__aeabi_atexit"), and DECL is a class object, we can just pass the
7915 destructor to "__cxa_atexit"; we don't have to build a temporary
7916 function to do the cleanup. */
7917 dso_parm = (flag_use_cxa_atexit
7918 && !targetm.cxx.use_atexit_for_cxa_atexit ());
7919 ob_parm = (CP_DECL_THREAD_LOCAL_P (decl) || dso_parm);
7920 use_dtor = ob_parm && CLASS_TYPE_P (type);
7921 if (use_dtor)
7923 cleanup = get_class_binding (type, complete_dtor_identifier);
7925 /* Make sure it is accessible. */
7926 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
7927 tf_warning_or_error);
7929 else
7931 /* Call build_cleanup before we enter the anonymous function so
7932 that any access checks will be done relative to the current
7933 scope, rather than the scope of the anonymous function. */
7934 build_cleanup (decl);
7936 /* Now start the function. */
7937 cleanup = start_cleanup_fn ();
7939 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
7940 to the original function, rather than the anonymous one. That
7941 will make the back end think that nested functions are in use,
7942 which causes confusion. */
7943 push_deferring_access_checks (dk_no_check);
7944 fcall = build_cleanup (decl);
7945 pop_deferring_access_checks ();
7947 /* Create the body of the anonymous function. */
7948 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
7949 finish_expr_stmt (fcall);
7950 finish_compound_stmt (compound_stmt);
7951 end_cleanup_fn ();
7954 /* Call atexit with the cleanup function. */
7955 mark_used (cleanup);
7956 cleanup = build_address (cleanup);
7958 if (CP_DECL_THREAD_LOCAL_P (decl))
7959 atex_node = get_thread_atexit_node ();
7960 else
7961 atex_node = get_atexit_node ();
7963 if (use_dtor)
7965 /* We must convert CLEANUP to the type that "__cxa_atexit"
7966 expects. */
7967 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
7968 /* "__cxa_atexit" will pass the address of DECL to the
7969 cleanup function. */
7970 mark_used (decl);
7971 addr = build_address (decl);
7972 /* The declared type of the parameter to "__cxa_atexit" is
7973 "void *". For plain "T*", we could just let the
7974 machinery in cp_build_function_call convert it -- but if the
7975 type is "cv-qualified T *", then we need to convert it
7976 before passing it in, to avoid spurious errors. */
7977 addr = build_nop (ptr_type_node, addr);
7979 else
7980 /* Since the cleanup functions we build ignore the address
7981 they're given, there's no reason to pass the actual address
7982 in, and, in general, it's cheaper to pass NULL than any
7983 other value. */
7984 addr = null_pointer_node;
7986 if (dso_parm)
7987 arg2 = cp_build_addr_expr (get_dso_handle_node (),
7988 tf_warning_or_error);
7989 else if (ob_parm)
7990 /* Just pass NULL to the dso handle parm if we don't actually
7991 have a DSO handle on this target. */
7992 arg2 = null_pointer_node;
7993 else
7994 arg2 = NULL_TREE;
7996 if (ob_parm)
7998 if (!CP_DECL_THREAD_LOCAL_P (decl)
7999 && targetm.cxx.use_aeabi_atexit ())
8001 arg1 = cleanup;
8002 arg0 = addr;
8004 else
8006 arg1 = addr;
8007 arg0 = cleanup;
8010 else
8012 arg0 = cleanup;
8013 arg1 = NULL_TREE;
8015 return cp_build_function_call_nary (atex_node, tf_warning_or_error,
8016 arg0, arg1, arg2, NULL_TREE);
8019 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
8020 is its initializer. Generate code to handle the construction
8021 and destruction of DECL. */
8023 static void
8024 expand_static_init (tree decl, tree init)
8026 gcc_assert (VAR_P (decl));
8027 gcc_assert (TREE_STATIC (decl));
8029 /* Some variables require no dynamic initialization. */
8030 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
8032 /* Make sure the destructor is callable. */
8033 cxx_maybe_build_cleanup (decl, tf_warning_or_error);
8034 if (!init)
8035 return;
8038 if (CP_DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
8039 && !DECL_FUNCTION_SCOPE_P (decl))
8041 if (init)
8042 error ("non-local variable %qD declared %<__thread%> "
8043 "needs dynamic initialization", decl);
8044 else
8045 error ("non-local variable %qD declared %<__thread%> "
8046 "has a non-trivial destructor", decl);
8047 static bool informed;
8048 if (!informed)
8050 inform (DECL_SOURCE_LOCATION (decl),
8051 "C++11 %<thread_local%> allows dynamic initialization "
8052 "and destruction");
8053 informed = true;
8055 return;
8058 if (DECL_FUNCTION_SCOPE_P (decl))
8060 /* Emit code to perform this initialization but once. */
8061 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
8062 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
8063 tree guard, guard_addr;
8064 tree flag, begin;
8065 /* We don't need thread-safety code for thread-local vars. */
8066 bool thread_guard = (flag_threadsafe_statics
8067 && !CP_DECL_THREAD_LOCAL_P (decl));
8069 /* Emit code to perform this initialization but once. This code
8070 looks like:
8072 static <type> guard;
8073 if (!__atomic_load (guard.first_byte)) {
8074 if (__cxa_guard_acquire (&guard)) {
8075 bool flag = false;
8076 try {
8077 // Do initialization.
8078 flag = true; __cxa_guard_release (&guard);
8079 // Register variable for destruction at end of program.
8080 } catch {
8081 if (!flag) __cxa_guard_abort (&guard);
8086 Note that the `flag' variable is only set to 1 *after* the
8087 initialization is complete. This ensures that an exception,
8088 thrown during the construction, will cause the variable to
8089 reinitialized when we pass through this code again, as per:
8091 [stmt.dcl]
8093 If the initialization exits by throwing an exception, the
8094 initialization is not complete, so it will be tried again
8095 the next time control enters the declaration.
8097 This process should be thread-safe, too; multiple threads
8098 should not be able to initialize the variable more than
8099 once. */
8101 /* Create the guard variable. */
8102 guard = get_guard (decl);
8104 /* Begin the conditional initialization. */
8105 if_stmt = begin_if_stmt ();
8107 finish_if_stmt_cond (get_guard_cond (guard, thread_guard), if_stmt);
8108 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8110 if (thread_guard)
8112 tree vfntype = NULL_TREE;
8113 tree acquire_name, release_name, abort_name;
8114 tree acquire_fn, release_fn, abort_fn;
8115 guard_addr = build_address (guard);
8117 acquire_name = get_identifier ("__cxa_guard_acquire");
8118 release_name = get_identifier ("__cxa_guard_release");
8119 abort_name = get_identifier ("__cxa_guard_abort");
8120 acquire_fn = get_global_binding (acquire_name);
8121 release_fn = get_global_binding (release_name);
8122 abort_fn = get_global_binding (abort_name);
8123 if (!acquire_fn)
8124 acquire_fn = push_library_fn
8125 (acquire_name, build_function_type_list (integer_type_node,
8126 TREE_TYPE (guard_addr),
8127 NULL_TREE),
8128 NULL_TREE, ECF_NOTHROW | ECF_LEAF);
8129 if (!release_fn || !abort_fn)
8130 vfntype = build_function_type_list (void_type_node,
8131 TREE_TYPE (guard_addr),
8132 NULL_TREE);
8133 if (!release_fn)
8134 release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
8135 ECF_NOTHROW | ECF_LEAF);
8136 if (!abort_fn)
8137 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
8138 ECF_NOTHROW | ECF_LEAF);
8140 inner_if_stmt = begin_if_stmt ();
8141 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
8142 inner_if_stmt);
8144 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8145 begin = get_target_expr (boolean_false_node);
8146 flag = TARGET_EXPR_SLOT (begin);
8148 TARGET_EXPR_CLEANUP (begin)
8149 = build3 (COND_EXPR, void_type_node, flag,
8150 void_node,
8151 build_call_n (abort_fn, 1, guard_addr));
8152 CLEANUP_EH_ONLY (begin) = 1;
8154 /* Do the initialization itself. */
8155 init = add_stmt_to_compound (begin, init);
8156 init = add_stmt_to_compound
8157 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
8158 init = add_stmt_to_compound
8159 (init, build_call_n (release_fn, 1, guard_addr));
8161 else
8162 init = add_stmt_to_compound (init, set_guard (guard));
8164 /* Use atexit to register a function for destroying this static
8165 variable. */
8166 init = add_stmt_to_compound (init, register_dtor_fn (decl));
8168 finish_expr_stmt (init);
8170 if (thread_guard)
8172 finish_compound_stmt (inner_then_clause);
8173 finish_then_clause (inner_if_stmt);
8174 finish_if_stmt (inner_if_stmt);
8177 finish_compound_stmt (then_clause);
8178 finish_then_clause (if_stmt);
8179 finish_if_stmt (if_stmt);
8181 else if (CP_DECL_THREAD_LOCAL_P (decl))
8182 tls_aggregates = tree_cons (init, decl, tls_aggregates);
8183 else
8184 static_aggregates = tree_cons (init, decl, static_aggregates);
8188 /* Make TYPE a complete type based on INITIAL_VALUE.
8189 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8190 2 if there was no information (in which case assume 0 if DO_DEFAULT),
8191 3 if the initializer list is empty (in pedantic mode). */
8194 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
8196 int failure;
8197 tree type, elt_type;
8199 /* Don't get confused by a CONSTRUCTOR for some other type. */
8200 if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
8201 && !BRACE_ENCLOSED_INITIALIZER_P (initial_value)
8202 && TREE_CODE (TREE_TYPE (initial_value)) != ARRAY_TYPE)
8203 return 1;
8205 if (initial_value)
8207 unsigned HOST_WIDE_INT i;
8208 tree value;
8210 /* An array of character type can be initialized from a
8211 brace-enclosed string constant.
8213 FIXME: this code is duplicated from reshape_init. Probably
8214 we should just call reshape_init here? */
8215 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
8216 && TREE_CODE (initial_value) == CONSTRUCTOR
8217 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
8219 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
8220 tree value = (*v)[0].value;
8222 if (TREE_CODE (value) == STRING_CST
8223 && v->length () == 1)
8224 initial_value = value;
8227 /* If any of the elements are parameter packs, we can't actually
8228 complete this type now because the array size is dependent. */
8229 if (TREE_CODE (initial_value) == CONSTRUCTOR)
8231 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
8232 i, value)
8234 if (PACK_EXPANSION_P (value))
8235 return 0;
8240 failure = complete_array_type (ptype, initial_value, do_default);
8242 /* We can create the array before the element type is complete, which
8243 means that we didn't have these two bits set in the original type
8244 either. In completing the type, we are expected to propagate these
8245 bits. See also complete_type which does the same thing for arrays
8246 of fixed size. */
8247 type = *ptype;
8248 if (TYPE_DOMAIN (type))
8250 elt_type = TREE_TYPE (type);
8251 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
8252 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
8253 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
8256 return failure;
8259 /* As above, but either give an error or reject zero-size arrays, depending
8260 on COMPLAIN. */
8263 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
8264 bool do_default, tsubst_flags_t complain)
8266 int failure;
8267 bool sfinae = !(complain & tf_error);
8268 /* In SFINAE context we can't be lenient about zero-size arrays. */
8269 if (sfinae)
8270 ++pedantic;
8271 failure = cp_complete_array_type (ptype, initial_value, do_default);
8272 if (sfinae)
8273 --pedantic;
8274 if (failure)
8276 if (sfinae)
8277 /* Not an error. */;
8278 else if (failure == 1)
8279 error ("initializer fails to determine size of %qT", *ptype);
8280 else if (failure == 2)
8282 if (do_default)
8283 error ("array size missing in %qT", *ptype);
8285 else if (failure == 3)
8286 error ("zero-size array %qT", *ptype);
8287 *ptype = error_mark_node;
8289 return failure;
8292 /* Return zero if something is declared to be a member of type
8293 CTYPE when in the context of CUR_TYPE. STRING is the error
8294 message to print in that case. Otherwise, quietly return 1. */
8296 static int
8297 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
8299 if (ctype && ctype != cur_type)
8301 if (flags == DTOR_FLAG)
8302 error ("destructor for alien class %qT cannot be a member", ctype);
8303 else
8304 error ("constructor for alien class %qT cannot be a member", ctype);
8305 return 0;
8307 return 1;
8310 /* Subroutine of `grokdeclarator'. */
8312 /* Generate errors possibly applicable for a given set of specifiers.
8313 This is for ARM $7.1.2. */
8315 static void
8316 bad_specifiers (tree object,
8317 enum bad_spec_place type,
8318 int virtualp,
8319 int quals,
8320 int inlinep,
8321 int friendp,
8322 int raises)
8324 switch (type)
8326 case BSP_VAR:
8327 if (virtualp)
8328 error ("%qD declared as a %<virtual%> variable", object);
8329 if (quals)
8330 error ("%<const%> and %<volatile%> function specifiers on "
8331 "%qD invalid in variable declaration", object);
8332 break;
8333 case BSP_PARM:
8334 if (virtualp)
8335 error ("%qD declared as a %<virtual%> parameter", object);
8336 if (inlinep)
8337 error ("%qD declared as an %<inline%> parameter", object);
8338 if (quals)
8339 error ("%<const%> and %<volatile%> function specifiers on "
8340 "%qD invalid in parameter declaration", object);
8341 break;
8342 case BSP_TYPE:
8343 if (virtualp)
8344 error ("%qD declared as a %<virtual%> type", object);
8345 if (inlinep)
8346 error ("%qD declared as an %<inline%> type", object);
8347 if (quals)
8348 error ("%<const%> and %<volatile%> function specifiers on "
8349 "%qD invalid in type declaration", object);
8350 break;
8351 case BSP_FIELD:
8352 if (virtualp)
8353 error ("%qD declared as a %<virtual%> field", object);
8354 if (inlinep)
8355 error ("%qD declared as an %<inline%> field", object);
8356 if (quals)
8357 error ("%<const%> and %<volatile%> function specifiers on "
8358 "%qD invalid in field declaration", object);
8359 break;
8360 default:
8361 gcc_unreachable();
8363 if (friendp)
8364 error ("%q+D declared as a friend", object);
8365 if (raises
8366 && !flag_noexcept_type
8367 && (TREE_CODE (object) == TYPE_DECL
8368 || (!TYPE_PTRFN_P (TREE_TYPE (object))
8369 && !TYPE_REFFN_P (TREE_TYPE (object))
8370 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
8371 error ("%q+D declared with an exception specification", object);
8374 /* DECL is a member function or static data member and is presently
8375 being defined. Check that the definition is taking place in a
8376 valid namespace. */
8378 static void
8379 check_class_member_definition_namespace (tree decl)
8381 /* These checks only apply to member functions and static data
8382 members. */
8383 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
8384 /* We check for problems with specializations in pt.c in
8385 check_specialization_namespace, where we can issue better
8386 diagnostics. */
8387 if (processing_specialization)
8388 return;
8389 /* We check this in check_explicit_instantiation_namespace. */
8390 if (processing_explicit_instantiation)
8391 return;
8392 /* [class.mfct]
8394 A member function definition that appears outside of the
8395 class definition shall appear in a namespace scope enclosing
8396 the class definition.
8398 [class.static.data]
8400 The definition for a static data member shall appear in a
8401 namespace scope enclosing the member's class definition. */
8402 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
8403 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
8404 decl, DECL_CONTEXT (decl));
8407 /* Build a PARM_DECL for the "this" parameter of FN. TYPE is the
8408 METHOD_TYPE for a non-static member function; QUALS are the
8409 cv-qualifiers that apply to the function. */
8411 tree
8412 build_this_parm (tree fn, tree type, cp_cv_quals quals)
8414 tree this_type;
8415 tree qual_type;
8416 tree parm;
8417 cp_cv_quals this_quals;
8419 if (CLASS_TYPE_P (type))
8421 this_type
8422 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
8423 this_type = build_pointer_type (this_type);
8425 else
8426 this_type = type_of_this_parm (type);
8427 /* The `this' parameter is implicitly `const'; it cannot be
8428 assigned to. */
8429 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
8430 qual_type = cp_build_qualified_type (this_type, this_quals);
8431 parm = build_artificial_parm (fn, this_identifier, qual_type);
8432 cp_apply_type_quals_to_decl (this_quals, parm);
8433 return parm;
8436 /* DECL is a static member function. Complain if it was declared
8437 with function-cv-quals. */
8439 static void
8440 check_static_quals (tree decl, cp_cv_quals quals)
8442 if (quals != TYPE_UNQUALIFIED)
8443 error ("static member function %q#D declared with type qualifiers",
8444 decl);
8447 // Check that FN takes no arguments and returns bool.
8448 static void
8449 check_concept_fn (tree fn)
8451 // A constraint is nullary.
8452 if (DECL_ARGUMENTS (fn))
8453 error ("concept %q#D declared with function parameters", fn);
8455 // The declared return type of the concept shall be bool, and
8456 // it shall not be deduced from it definition.
8457 tree type = TREE_TYPE (TREE_TYPE (fn));
8458 if (is_auto (type))
8459 error ("concept %q#D declared with a deduced return type", fn);
8460 else if (type != boolean_type_node)
8461 error ("concept %q#D with non-%<bool%> return type %qT", fn, type);
8464 /* Helper function. Replace the temporary this parameter injected
8465 during cp_finish_omp_declare_simd with the real this parameter. */
8467 static tree
8468 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
8470 tree this_parm = (tree) data;
8471 if (TREE_CODE (*tp) == PARM_DECL
8472 && DECL_NAME (*tp) == this_identifier
8473 && *tp != this_parm)
8474 *tp = this_parm;
8475 else if (TYPE_P (*tp))
8476 *walk_subtrees = 0;
8477 return NULL_TREE;
8480 /* CTYPE is class type, or null if non-class.
8481 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8482 or METHOD_TYPE.
8483 DECLARATOR is the function's name.
8484 PARMS is a chain of PARM_DECLs for the function.
8485 VIRTUALP is truthvalue of whether the function is virtual or not.
8486 FLAGS are to be passed through to `grokclassfn'.
8487 QUALS are qualifiers indicating whether the function is `const'
8488 or `volatile'.
8489 RAISES is a list of exceptions that this function can raise.
8490 CHECK is 1 if we must find this method in CTYPE, 0 if we should
8491 not look, and -1 if we should not call `grokclassfn' at all.
8493 SFK is the kind of special function (if any) for the new function.
8495 Returns `NULL_TREE' if something goes wrong, after issuing
8496 applicable error messages. */
8498 static tree
8499 grokfndecl (tree ctype,
8500 tree type,
8501 tree declarator,
8502 tree parms,
8503 tree orig_declarator,
8504 tree decl_reqs,
8505 int virtualp,
8506 enum overload_flags flags,
8507 cp_cv_quals quals,
8508 cp_ref_qualifier rqual,
8509 tree raises,
8510 int check,
8511 int friendp,
8512 int publicp,
8513 int inlinep,
8514 bool deletedp,
8515 special_function_kind sfk,
8516 bool funcdef_flag,
8517 int template_count,
8518 tree in_namespace,
8519 tree* attrlist,
8520 location_t location)
8522 tree decl;
8523 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8524 tree t;
8526 // Was the concept specifier present?
8527 bool concept_p = inlinep & 4;
8529 // Concept declarations must have a corresponding definition.
8530 if (concept_p && !funcdef_flag)
8532 error ("concept %qD has no definition", declarator);
8533 return NULL_TREE;
8536 if (rqual)
8537 type = build_ref_qualified_type (type, rqual);
8538 if (raises)
8539 type = build_exception_variant (type, raises);
8541 decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8543 /* Set the constraints on the declaration. */
8544 if (flag_concepts)
8546 tree tmpl_reqs = NULL_TREE;
8547 if (processing_template_decl > template_class_depth (ctype))
8548 tmpl_reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
8550 /* Adjust the required expression into a constraint. */
8551 if (decl_reqs)
8552 decl_reqs = normalize_expression (decl_reqs);
8554 tree ci = build_constraints (tmpl_reqs, decl_reqs);
8555 set_constraints (decl, ci);
8558 /* If we have an explicit location, use it, otherwise use whatever
8559 build_lang_decl used (probably input_location). */
8560 if (location != UNKNOWN_LOCATION)
8561 DECL_SOURCE_LOCATION (decl) = location;
8563 if (TREE_CODE (type) == METHOD_TYPE)
8565 tree parm = build_this_parm (decl, type, quals);
8566 DECL_CHAIN (parm) = parms;
8567 parms = parm;
8569 /* Allocate space to hold the vptr bit if needed. */
8570 SET_DECL_ALIGN (decl, MINIMUM_METHOD_BOUNDARY);
8573 DECL_ARGUMENTS (decl) = parms;
8574 for (t = parms; t; t = DECL_CHAIN (t))
8575 DECL_CONTEXT (t) = decl;
8577 /* Propagate volatile out from type to decl. */
8578 if (TYPE_VOLATILE (type))
8579 TREE_THIS_VOLATILE (decl) = 1;
8581 /* Setup decl according to sfk. */
8582 switch (sfk)
8584 case sfk_constructor:
8585 case sfk_copy_constructor:
8586 case sfk_move_constructor:
8587 DECL_CXX_CONSTRUCTOR_P (decl) = 1;
8588 DECL_NAME (decl) = ctor_identifier;
8589 break;
8590 case sfk_destructor:
8591 DECL_CXX_DESTRUCTOR_P (decl) = 1;
8592 DECL_NAME (decl) = dtor_identifier;
8593 break;
8594 default:
8595 break;
8598 if (friendp && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8600 if (funcdef_flag)
8601 error ("defining explicit specialization %qD in friend declaration",
8602 orig_declarator);
8603 else
8605 tree fns = TREE_OPERAND (orig_declarator, 0);
8606 tree args = TREE_OPERAND (orig_declarator, 1);
8608 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8610 /* Something like `template <class T> friend void f<T>()'. */
8611 error ("invalid use of template-id %qD in declaration "
8612 "of primary template",
8613 orig_declarator);
8614 return NULL_TREE;
8618 /* A friend declaration of the form friend void f<>(). Record
8619 the information in the TEMPLATE_ID_EXPR. */
8620 SET_DECL_IMPLICIT_INSTANTIATION (decl);
8622 gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
8623 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
8625 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8626 if (TREE_PURPOSE (t)
8627 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8629 error ("default arguments are not allowed in declaration "
8630 "of friend template specialization %qD",
8631 decl);
8632 return NULL_TREE;
8635 if (inlinep & 1)
8637 error ("%<inline%> is not allowed in declaration of friend "
8638 "template specialization %qD",
8639 decl);
8640 return NULL_TREE;
8645 /* If this decl has namespace scope, set that up. */
8646 if (in_namespace)
8647 set_decl_namespace (decl, in_namespace, friendp);
8648 else if (!ctype)
8649 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
8651 /* `main' and builtins have implicit 'C' linkage. */
8652 if (ctype == NULL_TREE
8653 && DECL_FILE_SCOPE_P (decl)
8654 && current_lang_name == lang_name_cplusplus
8655 && (MAIN_NAME_P (declarator)
8656 || (IDENTIFIER_LENGTH (declarator) > 10
8657 && IDENTIFIER_POINTER (declarator)[0] == '_'
8658 && IDENTIFIER_POINTER (declarator)[1] == '_'
8659 && strncmp (IDENTIFIER_POINTER (declarator)+2,
8660 "builtin_", 8) == 0)
8661 || (targetcm.cxx_implicit_extern_c
8662 && (targetcm.cxx_implicit_extern_c
8663 (IDENTIFIER_POINTER (declarator))))))
8664 SET_DECL_LANGUAGE (decl, lang_c);
8666 /* Should probably propagate const out from type to decl I bet (mrs). */
8667 if (staticp)
8669 DECL_STATIC_FUNCTION_P (decl) = 1;
8670 DECL_CONTEXT (decl) = ctype;
8673 if (deletedp)
8674 DECL_DELETED_FN (decl) = 1;
8676 if (ctype)
8678 DECL_CONTEXT (decl) = ctype;
8679 if (funcdef_flag)
8680 check_class_member_definition_namespace (decl);
8683 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8685 if (PROCESSING_REAL_TEMPLATE_DECL_P())
8686 error ("cannot declare %<::main%> to be a template");
8687 if (inlinep & 1)
8688 error ("cannot declare %<::main%> to be inline");
8689 if (inlinep & 2)
8690 error ("cannot declare %<::main%> to be %<constexpr%>");
8691 if (!publicp)
8692 error ("cannot declare %<::main%> to be static");
8693 inlinep = 0;
8694 publicp = 1;
8697 /* Members of anonymous types and local classes have no linkage; make
8698 them internal. If a typedef is made later, this will be changed. */
8699 if (ctype && (!TREE_PUBLIC (TYPE_MAIN_DECL (ctype))
8700 || decl_function_context (TYPE_MAIN_DECL (ctype))))
8701 publicp = 0;
8703 if (publicp && cxx_dialect == cxx98)
8705 /* [basic.link]: A name with no linkage (notably, the name of a class
8706 or enumeration declared in a local scope) shall not be used to
8707 declare an entity with linkage.
8709 DR 757 relaxes this restriction for C++0x. */
8710 no_linkage_error (decl);
8713 TREE_PUBLIC (decl) = publicp;
8714 if (! publicp)
8716 DECL_INTERFACE_KNOWN (decl) = 1;
8717 DECL_NOT_REALLY_EXTERN (decl) = 1;
8720 /* If the declaration was declared inline, mark it as such. */
8721 if (inlinep)
8723 DECL_DECLARED_INLINE_P (decl) = 1;
8724 if (publicp)
8725 DECL_COMDAT (decl) = 1;
8727 if (inlinep & 2)
8728 DECL_DECLARED_CONSTEXPR_P (decl) = true;
8730 // If the concept declaration specifier was found, check
8731 // that the declaration satisfies the necessary requirements.
8732 if (concept_p)
8734 DECL_DECLARED_CONCEPT_P (decl) = true;
8735 check_concept_fn (decl);
8738 DECL_EXTERNAL (decl) = 1;
8739 if (TREE_CODE (type) == FUNCTION_TYPE)
8741 if (quals || rqual)
8742 TREE_TYPE (decl) = apply_memfn_quals (TREE_TYPE (decl),
8743 TYPE_UNQUALIFIED,
8744 REF_QUAL_NONE);
8746 if (quals)
8748 error (ctype
8749 ? G_("static member function %qD cannot have cv-qualifier")
8750 : G_("non-member function %qD cannot have cv-qualifier"),
8751 decl);
8752 quals = TYPE_UNQUALIFIED;
8755 if (rqual)
8757 error (ctype
8758 ? G_("static member function %qD cannot have ref-qualifier")
8759 : G_("non-member function %qD cannot have ref-qualifier"),
8760 decl);
8761 rqual = REF_QUAL_NONE;
8765 if (deduction_guide_p (decl))
8767 if (!DECL_NAMESPACE_SCOPE_P (decl))
8769 error_at (location, "deduction guide %qD must be declared at "
8770 "namespace scope", decl);
8771 return NULL_TREE;
8773 if (funcdef_flag)
8774 error_at (location,
8775 "deduction guide %qD must not have a function body", decl);
8777 else if (IDENTIFIER_ANY_OP_P (DECL_NAME (decl))
8778 && !grok_op_properties (decl, /*complain=*/true))
8779 return NULL_TREE;
8780 else if (UDLIT_OPER_P (DECL_NAME (decl)))
8782 bool long_long_unsigned_p;
8783 bool long_double_p;
8784 const char *suffix = NULL;
8785 /* [over.literal]/6: Literal operators shall not have C linkage. */
8786 if (DECL_LANGUAGE (decl) == lang_c)
8788 error ("literal operator with C linkage");
8789 maybe_show_extern_c_location ();
8790 return NULL_TREE;
8793 if (DECL_NAMESPACE_SCOPE_P (decl))
8795 if (!check_literal_operator_args (decl, &long_long_unsigned_p,
8796 &long_double_p))
8798 error ("%qD has invalid argument list", decl);
8799 return NULL_TREE;
8802 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
8803 if (long_long_unsigned_p)
8805 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
8806 warning (0, "integer suffix %qs"
8807 " shadowed by implementation", suffix);
8809 else if (long_double_p)
8811 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
8812 warning (0, "floating point suffix %qs"
8813 " shadowed by implementation", suffix);
8816 else
8818 error ("%qD must be a non-member function", decl);
8819 return NULL_TREE;
8823 if (funcdef_flag)
8824 /* Make the init_value nonzero so pushdecl knows this is not
8825 tentative. error_mark_node is replaced later with the BLOCK. */
8826 DECL_INITIAL (decl) = error_mark_node;
8828 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
8829 TREE_NOTHROW (decl) = 1;
8831 if (flag_openmp || flag_openmp_simd)
8833 /* Adjust "omp declare simd" attributes. */
8834 tree ods = lookup_attribute ("omp declare simd", *attrlist);
8835 if (ods)
8837 tree attr;
8838 for (attr = ods; attr;
8839 attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
8841 if (TREE_CODE (type) == METHOD_TYPE)
8842 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
8843 DECL_ARGUMENTS (decl), NULL);
8844 if (TREE_VALUE (attr) != NULL_TREE)
8846 tree cl = TREE_VALUE (TREE_VALUE (attr));
8847 cl = c_omp_declare_simd_clauses_to_numbers
8848 (DECL_ARGUMENTS (decl), cl);
8849 if (cl)
8850 TREE_VALUE (TREE_VALUE (attr)) = cl;
8851 else
8852 TREE_VALUE (attr) = NULL_TREE;
8858 /* Caller will do the rest of this. */
8859 if (check < 0)
8860 return decl;
8862 if (ctype != NULL_TREE)
8863 grokclassfn (ctype, decl, flags);
8865 /* 12.4/3 */
8866 if (cxx_dialect >= cxx11
8867 && DECL_DESTRUCTOR_P (decl)
8868 && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
8869 && !processing_template_decl)
8870 deduce_noexcept_on_destructor (decl);
8872 decl = check_explicit_specialization (orig_declarator, decl,
8873 template_count,
8874 2 * funcdef_flag +
8875 4 * (friendp != 0) +
8876 8 * concept_p);
8877 if (decl == error_mark_node)
8878 return NULL_TREE;
8880 if (DECL_STATIC_FUNCTION_P (decl))
8881 check_static_quals (decl, quals);
8883 if (attrlist)
8885 cplus_decl_attributes (&decl, *attrlist, 0);
8886 *attrlist = NULL_TREE;
8889 /* Check main's type after attributes have been applied. */
8890 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8892 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
8893 integer_type_node))
8895 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
8896 tree newtype;
8897 error ("%<::main%> must return %<int%>");
8898 newtype = build_function_type (integer_type_node, oldtypeargs);
8899 TREE_TYPE (decl) = newtype;
8901 if (warn_main)
8902 check_main_parameter_types (decl);
8905 if (ctype != NULL_TREE && check)
8907 tree old_decl = check_classfn (ctype, decl,
8908 (processing_template_decl
8909 > template_class_depth (ctype))
8910 ? current_template_parms
8911 : NULL_TREE);
8913 if (old_decl == error_mark_node)
8914 return NULL_TREE;
8916 if (old_decl)
8918 tree ok;
8919 tree pushed_scope;
8921 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
8922 /* Because grokfndecl is always supposed to return a
8923 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
8924 here. We depend on our callers to figure out that its
8925 really a template that's being returned. */
8926 old_decl = DECL_TEMPLATE_RESULT (old_decl);
8928 if (DECL_STATIC_FUNCTION_P (old_decl)
8929 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
8931 /* Remove the `this' parm added by grokclassfn. */
8932 revert_static_member_fn (decl);
8933 check_static_quals (decl, quals);
8935 if (DECL_ARTIFICIAL (old_decl))
8937 error ("definition of implicitly-declared %qD", old_decl);
8938 return NULL_TREE;
8940 else if (DECL_DEFAULTED_FN (old_decl))
8942 error ("definition of explicitly-defaulted %q+D", decl);
8943 inform (DECL_SOURCE_LOCATION (old_decl),
8944 "%q#D explicitly defaulted here", old_decl);
8945 return NULL_TREE;
8948 /* Since we've smashed OLD_DECL to its
8949 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
8950 if (TREE_CODE (decl) == TEMPLATE_DECL)
8951 decl = DECL_TEMPLATE_RESULT (decl);
8953 /* Attempt to merge the declarations. This can fail, in
8954 the case of some invalid specialization declarations. */
8955 pushed_scope = push_scope (ctype);
8956 ok = duplicate_decls (decl, old_decl, friendp);
8957 if (pushed_scope)
8958 pop_scope (pushed_scope);
8959 if (!ok)
8961 error ("no %q#D member function declared in class %qT",
8962 decl, ctype);
8963 return NULL_TREE;
8965 if (ok == error_mark_node)
8966 return NULL_TREE;
8967 return old_decl;
8971 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
8972 return NULL_TREE;
8974 if (ctype == NULL_TREE || check)
8975 return decl;
8977 if (virtualp)
8978 DECL_VIRTUAL_P (decl) = 1;
8980 return decl;
8983 /* decl is a FUNCTION_DECL.
8984 specifiers are the parsed virt-specifiers.
8986 Set flags to reflect the virt-specifiers.
8988 Returns decl. */
8990 static tree
8991 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
8993 if (decl == NULL_TREE)
8994 return decl;
8995 if (specifiers & VIRT_SPEC_OVERRIDE)
8996 DECL_OVERRIDE_P (decl) = 1;
8997 if (specifiers & VIRT_SPEC_FINAL)
8998 DECL_FINAL_P (decl) = 1;
8999 return decl;
9002 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
9003 the linkage that DECL will receive in the object file. */
9005 static void
9006 set_linkage_for_static_data_member (tree decl)
9008 /* A static data member always has static storage duration and
9009 external linkage. Note that static data members are forbidden in
9010 local classes -- the only situation in which a class has
9011 non-external linkage. */
9012 TREE_PUBLIC (decl) = 1;
9013 TREE_STATIC (decl) = 1;
9014 /* For non-template classes, static data members are always put
9015 out in exactly those files where they are defined, just as
9016 with ordinary namespace-scope variables. */
9017 if (!processing_template_decl)
9018 DECL_INTERFACE_KNOWN (decl) = 1;
9021 /* Create a VAR_DECL named NAME with the indicated TYPE.
9023 If SCOPE is non-NULL, it is the class type or namespace containing
9024 the variable. If SCOPE is NULL, the variable should is created in
9025 the innermost enclosing scope. */
9027 static tree
9028 grokvardecl (tree type,
9029 tree name,
9030 tree orig_declarator,
9031 const cp_decl_specifier_seq *declspecs,
9032 int initialized,
9033 int type_quals,
9034 int inlinep,
9035 bool conceptp,
9036 int template_count,
9037 tree scope)
9039 tree decl;
9040 tree explicit_scope;
9042 gcc_assert (!name || identifier_p (name));
9044 bool constp = (type_quals & TYPE_QUAL_CONST) != 0;
9045 bool volatilep = (type_quals & TYPE_QUAL_VOLATILE) != 0;
9047 /* Compute the scope in which to place the variable, but remember
9048 whether or not that scope was explicitly specified by the user. */
9049 explicit_scope = scope;
9050 if (!scope)
9052 /* An explicit "extern" specifier indicates a namespace-scope
9053 variable. */
9054 if (declspecs->storage_class == sc_extern)
9055 scope = current_decl_namespace ();
9056 else if (!at_function_scope_p ())
9057 scope = current_scope ();
9060 if (scope
9061 && (/* If the variable is a namespace-scope variable declared in a
9062 template, we need DECL_LANG_SPECIFIC. */
9063 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
9064 /* Similarly for namespace-scope variables with language linkage
9065 other than C++. */
9066 || (TREE_CODE (scope) == NAMESPACE_DECL
9067 && current_lang_name != lang_name_cplusplus)
9068 /* Similarly for static data members. */
9069 || TYPE_P (scope)
9070 /* Similarly for explicit specializations. */
9071 || (orig_declarator
9072 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
9073 decl = build_lang_decl (VAR_DECL, name, type);
9074 else
9075 decl = build_decl (input_location, VAR_DECL, name, type);
9077 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
9078 set_decl_namespace (decl, explicit_scope, 0);
9079 else
9080 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
9082 if (declspecs->storage_class == sc_extern)
9084 DECL_THIS_EXTERN (decl) = 1;
9085 DECL_EXTERNAL (decl) = !initialized;
9088 if (DECL_CLASS_SCOPE_P (decl))
9090 set_linkage_for_static_data_member (decl);
9091 /* This function is only called with out-of-class definitions. */
9092 DECL_EXTERNAL (decl) = 0;
9093 check_class_member_definition_namespace (decl);
9095 /* At top level, either `static' or no s.c. makes a definition
9096 (perhaps tentative), and absence of `static' makes it public. */
9097 else if (toplevel_bindings_p ())
9099 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
9100 && (DECL_THIS_EXTERN (decl)
9101 || ! constp
9102 || volatilep
9103 || inlinep));
9104 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9106 /* Not at top level, only `static' makes a static definition. */
9107 else
9109 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
9110 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9113 if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
9115 if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
9117 CP_DECL_THREAD_LOCAL_P (decl) = true;
9118 if (!processing_template_decl)
9119 set_decl_tls_model (decl, decl_default_tls_model (decl));
9121 if (declspecs->gnu_thread_keyword_p)
9122 SET_DECL_GNU_TLS_P (decl);
9125 /* If the type of the decl has no linkage, make sure that we'll
9126 notice that in mark_used. */
9127 if (cxx_dialect > cxx98
9128 && decl_linkage (decl) != lk_none
9129 && DECL_LANG_SPECIFIC (decl) == NULL
9130 && !DECL_EXTERN_C_P (decl)
9131 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
9132 retrofit_lang_decl (decl);
9134 if (TREE_PUBLIC (decl))
9136 /* [basic.link]: A name with no linkage (notably, the name of a class
9137 or enumeration declared in a local scope) shall not be used to
9138 declare an entity with linkage.
9140 DR 757 relaxes this restriction for C++0x. */
9141 if (cxx_dialect < cxx11)
9142 no_linkage_error (decl);
9144 else
9145 DECL_INTERFACE_KNOWN (decl) = 1;
9147 if (DECL_NAME (decl)
9148 && MAIN_NAME_P (DECL_NAME (decl))
9149 && scope == global_namespace)
9150 error ("cannot declare %<::main%> to be a global variable");
9152 /* Check that the variable can be safely declared as a concept.
9153 Note that this also forbids explicit specializations. */
9154 if (conceptp)
9156 if (!processing_template_decl)
9158 error ("a non-template variable cannot be %<concept%>");
9159 return NULL_TREE;
9161 else
9162 DECL_DECLARED_CONCEPT_P (decl) = true;
9163 if (!same_type_ignoring_top_level_qualifiers_p (type, boolean_type_node))
9164 error_at (declspecs->locations[ds_type_spec],
9165 "concept must have type %<bool%>");
9167 else if (flag_concepts
9168 && processing_template_decl > template_class_depth (scope))
9170 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
9171 tree ci = build_constraints (reqs, NULL_TREE);
9172 set_constraints (decl, ci);
9175 // Handle explicit specializations and instantiations of variable templates.
9176 if (orig_declarator)
9177 decl = check_explicit_specialization (orig_declarator, decl,
9178 template_count, conceptp * 8);
9180 return decl != error_mark_node ? decl : NULL_TREE;
9183 /* Create and return a canonical pointer to member function type, for
9184 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
9186 tree
9187 build_ptrmemfunc_type (tree type)
9189 tree field, fields;
9190 tree t;
9192 if (type == error_mark_node)
9193 return type;
9195 /* Make sure that we always have the unqualified pointer-to-member
9196 type first. */
9197 if (cp_cv_quals quals = cp_type_quals (type))
9199 tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9200 return cp_build_qualified_type (unqual, quals);
9203 /* If a canonical type already exists for this type, use it. We use
9204 this method instead of type_hash_canon, because it only does a
9205 simple equality check on the list of field members. */
9207 t = TYPE_PTRMEMFUNC_TYPE (type);
9208 if (t)
9209 return t;
9211 t = make_node (RECORD_TYPE);
9213 /* Let the front end know this is a pointer to member function. */
9214 TYPE_PTRMEMFUNC_FLAG (t) = 1;
9216 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
9217 fields = field;
9219 field = build_decl (input_location, FIELD_DECL, delta_identifier,
9220 delta_type_node);
9221 DECL_CHAIN (field) = fields;
9222 fields = field;
9224 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
9226 /* Zap out the name so that the back end will give us the debugging
9227 information for this anonymous RECORD_TYPE. */
9228 TYPE_NAME (t) = NULL_TREE;
9230 /* Cache this pointer-to-member type so that we can find it again
9231 later. */
9232 TYPE_PTRMEMFUNC_TYPE (type) = t;
9234 if (TYPE_STRUCTURAL_EQUALITY_P (type))
9235 SET_TYPE_STRUCTURAL_EQUALITY (t);
9236 else if (TYPE_CANONICAL (type) != type)
9237 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
9239 return t;
9242 /* Create and return a pointer to data member type. */
9244 tree
9245 build_ptrmem_type (tree class_type, tree member_type)
9247 if (TREE_CODE (member_type) == METHOD_TYPE)
9249 cp_cv_quals quals = type_memfn_quals (member_type);
9250 cp_ref_qualifier rqual = type_memfn_rqual (member_type);
9251 member_type = build_memfn_type (member_type, class_type, quals, rqual);
9252 return build_ptrmemfunc_type (build_pointer_type (member_type));
9254 else
9256 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
9257 return build_offset_type (class_type, member_type);
9261 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9262 Check to see that the definition is valid. Issue appropriate error
9263 messages. Return 1 if the definition is particularly bad, or 0
9264 otherwise. */
9266 static int
9267 check_static_variable_definition (tree decl, tree type)
9269 /* Avoid redundant diagnostics on out-of-class definitions. */
9270 if (!current_class_type || !TYPE_BEING_DEFINED (current_class_type))
9271 return 0;
9272 /* Can't check yet if we don't know the type. */
9273 if (dependent_type_p (type))
9274 return 0;
9275 /* If DECL is declared constexpr, we'll do the appropriate checks
9276 in check_initializer. Similarly for inline static data members. */
9277 if (DECL_P (decl)
9278 && (DECL_DECLARED_CONSTEXPR_P (decl)
9279 || DECL_VAR_DECLARED_INLINE_P (decl)))
9280 return 0;
9281 else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9283 if (!COMPLETE_TYPE_P (type))
9284 error_at (DECL_SOURCE_LOCATION (decl),
9285 "in-class initialization of static data member %q#D of "
9286 "incomplete type", decl);
9287 else if (literal_type_p (type))
9288 permerror (DECL_SOURCE_LOCATION (decl),
9289 "%<constexpr%> needed for in-class initialization of "
9290 "static data member %q#D of non-integral type", decl);
9291 else
9292 error_at (DECL_SOURCE_LOCATION (decl),
9293 "in-class initialization of static data member %q#D of "
9294 "non-literal type", decl);
9295 return 1;
9298 /* Motion 10 at San Diego: If a static const integral data member is
9299 initialized with an integral constant expression, the initializer
9300 may appear either in the declaration (within the class), or in
9301 the definition, but not both. If it appears in the class, the
9302 member is a member constant. The file-scope definition is always
9303 required. */
9304 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
9306 error_at (DECL_SOURCE_LOCATION (decl),
9307 "invalid in-class initialization of static data member "
9308 "of non-integral type %qT",
9309 type);
9310 return 1;
9312 else if (!CP_TYPE_CONST_P (type))
9313 error_at (DECL_SOURCE_LOCATION (decl),
9314 "ISO C++ forbids in-class initialization of non-const "
9315 "static member %qD",
9316 decl);
9317 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9318 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
9319 "ISO C++ forbids initialization of member constant "
9320 "%qD of non-integral type %qT", decl, type);
9322 return 0;
9325 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
9326 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
9327 expressions out into temporary variables so that walk_tree doesn't
9328 step into them (c++/15764). */
9330 static tree
9331 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
9333 hash_set<tree> *pset = (hash_set<tree> *)data;
9334 tree expr = *expr_p;
9335 if (TREE_CODE (expr) == SAVE_EXPR)
9337 tree op = TREE_OPERAND (expr, 0);
9338 cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
9339 if (TREE_SIDE_EFFECTS (op))
9340 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
9341 *walk_subtrees = 0;
9343 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
9344 *walk_subtrees = 0;
9345 return NULL;
9348 /* Entry point for the above. */
9350 static void
9351 stabilize_vla_size (tree size)
9353 hash_set<tree> pset;
9354 /* Break out any function calls into temporary variables. */
9355 cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
9358 /* Reduce a SIZEOF_EXPR to its value. */
9360 tree
9361 fold_sizeof_expr (tree t)
9363 tree r;
9364 if (SIZEOF_EXPR_TYPE_P (t))
9365 r = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (t, 0)),
9366 SIZEOF_EXPR, false);
9367 else if (TYPE_P (TREE_OPERAND (t, 0)))
9368 r = cxx_sizeof_or_alignof_type (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9369 false);
9370 else
9371 r = cxx_sizeof_or_alignof_expr (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9372 false);
9373 if (r == error_mark_node)
9374 r = size_one_node;
9375 return r;
9378 /* Given the SIZE (i.e., number of elements) in an array, compute
9379 an appropriate index type for the array. If non-NULL, NAME is
9380 the name of the entity being declared. */
9382 tree
9383 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
9385 tree itype;
9386 tree osize = size;
9388 if (error_operand_p (size))
9389 return error_mark_node;
9391 if (!type_dependent_expression_p (size))
9393 tree type = TREE_TYPE (size);
9395 size = mark_rvalue_use (size);
9397 if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
9398 && TREE_SIDE_EFFECTS (size))
9399 /* In C++98, we mark a non-constant array bound with a magic
9400 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
9401 else
9403 size = instantiate_non_dependent_expr_sfinae (size, complain);
9405 if (CLASS_TYPE_P (type)
9406 && CLASSTYPE_LITERAL_P (type))
9408 size = build_expr_type_conversion (WANT_INT, size, true);
9409 if (!size)
9411 if (!(complain & tf_error))
9412 return error_mark_node;
9413 if (name)
9414 error ("size of array %qD has non-integral type %qT",
9415 name, type);
9416 else
9417 error ("size of array has non-integral type %qT", type);
9418 size = integer_one_node;
9420 if (size == error_mark_node)
9421 return error_mark_node;
9422 type = TREE_TYPE (size);
9425 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
9426 size = maybe_constant_value (size);
9428 if (!TREE_CONSTANT (size))
9429 size = osize;
9432 if (error_operand_p (size))
9433 return error_mark_node;
9435 /* The array bound must be an integer type. */
9436 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
9438 if (!(complain & tf_error))
9439 return error_mark_node;
9440 if (name)
9441 error ("size of array %qD has non-integral type %qT", name, type);
9442 else
9443 error ("size of array has non-integral type %qT", type);
9444 size = integer_one_node;
9445 type = TREE_TYPE (size);
9449 /* A type is dependent if it is...an array type constructed from any
9450 dependent type or whose size is specified by a constant expression
9451 that is value-dependent. */
9452 /* We can only call value_dependent_expression_p on integral constant
9453 expressions; treat non-constant expressions as dependent, too. */
9454 if (processing_template_decl
9455 && (type_dependent_expression_p (size)
9456 || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
9458 /* We cannot do any checking for a SIZE that isn't known to be
9459 constant. Just build the index type and mark that it requires
9460 structural equality checks. */
9461 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
9462 size, size_one_node));
9463 TYPE_DEPENDENT_P (itype) = 1;
9464 TYPE_DEPENDENT_P_VALID (itype) = 1;
9465 SET_TYPE_STRUCTURAL_EQUALITY (itype);
9466 return itype;
9469 if (TREE_CODE (size) != INTEGER_CST)
9471 tree folded = cp_fully_fold (size);
9472 if (TREE_CODE (folded) == INTEGER_CST)
9473 pedwarn (location_of (size), OPT_Wpedantic,
9474 "size of array is not an integral constant-expression");
9475 /* Use the folded result for VLAs, too; it will have resolved
9476 SIZEOF_EXPR. */
9477 size = folded;
9480 /* Normally, the array-bound will be a constant. */
9481 if (TREE_CODE (size) == INTEGER_CST)
9483 /* Check to see if the array bound overflowed. Make that an
9484 error, no matter how generous we're being. */
9485 constant_expression_error (size);
9487 /* An array must have a positive number of elements. */
9488 if (tree_int_cst_lt (size, integer_zero_node))
9490 if (!(complain & tf_error))
9491 return error_mark_node;
9492 if (name)
9493 error ("size of array %qD is negative", name);
9494 else
9495 error ("size of array is negative");
9496 size = integer_one_node;
9498 /* As an extension we allow zero-sized arrays. */
9499 else if (integer_zerop (size))
9501 if (!(complain & tf_error))
9502 /* We must fail if performing argument deduction (as
9503 indicated by the state of complain), so that
9504 another substitution can be found. */
9505 return error_mark_node;
9506 else if (in_system_header_at (input_location))
9507 /* Allow them in system headers because glibc uses them. */;
9508 else if (name)
9509 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
9510 else
9511 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
9514 else if (TREE_CONSTANT (size)
9515 /* We don't allow VLAs at non-function scopes, or during
9516 tentative template substitution. */
9517 || !at_function_scope_p ()
9518 || !(complain & tf_error))
9520 if (!(complain & tf_error))
9521 return error_mark_node;
9522 /* `(int) &fn' is not a valid array bound. */
9523 if (name)
9524 error ("size of array %qD is not an integral constant-expression",
9525 name);
9526 else
9527 error ("size of array is not an integral constant-expression");
9528 size = integer_one_node;
9530 else if (pedantic && warn_vla != 0)
9532 if (name)
9533 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
9534 else
9535 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
9537 else if (warn_vla > 0)
9539 if (name)
9540 warning (OPT_Wvla,
9541 "variable length array %qD is used", name);
9542 else
9543 warning (OPT_Wvla,
9544 "variable length array is used");
9547 if (processing_template_decl && !TREE_CONSTANT (size))
9548 /* A variable sized array. */
9549 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
9550 else
9552 /* Compute the index of the largest element in the array. It is
9553 one less than the number of elements in the array. We save
9554 and restore PROCESSING_TEMPLATE_DECL so that computations in
9555 cp_build_binary_op will be appropriately folded. */
9557 processing_template_decl_sentinel s;
9558 itype = cp_build_binary_op (input_location,
9559 MINUS_EXPR,
9560 cp_convert (ssizetype, size, complain),
9561 cp_convert (ssizetype, integer_one_node,
9562 complain),
9563 complain);
9564 itype = maybe_constant_value (itype);
9567 if (!TREE_CONSTANT (itype))
9569 /* A variable sized array. */
9570 itype = variable_size (itype);
9572 stabilize_vla_size (itype);
9574 if (sanitize_flags_p (SANITIZE_VLA)
9575 && current_function_decl != NULL_TREE)
9577 /* We have to add 1 -- in the ubsan routine we generate
9578 LE_EXPR rather than LT_EXPR. */
9579 tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
9580 build_one_cst (TREE_TYPE (itype)));
9581 t = ubsan_instrument_vla (input_location, t);
9582 finish_expr_stmt (t);
9585 /* Make sure that there was no overflow when creating to a signed
9586 index type. (For example, on a 32-bit machine, an array with
9587 size 2^32 - 1 is too big.) */
9588 else if (TREE_CODE (itype) == INTEGER_CST
9589 && TREE_OVERFLOW (itype))
9591 if (!(complain & tf_error))
9592 return error_mark_node;
9593 error ("overflow in array dimension");
9594 TREE_OVERFLOW (itype) = 0;
9598 /* Create and return the appropriate index type. */
9599 itype = build_index_type (itype);
9601 /* If the index type were dependent, we would have returned early, so
9602 remember that it isn't. */
9603 TYPE_DEPENDENT_P (itype) = 0;
9604 TYPE_DEPENDENT_P_VALID (itype) = 1;
9605 return itype;
9608 /* Returns the scope (if any) in which the entity declared by
9609 DECLARATOR will be located. If the entity was declared with an
9610 unqualified name, NULL_TREE is returned. */
9612 tree
9613 get_scope_of_declarator (const cp_declarator *declarator)
9615 while (declarator && declarator->kind != cdk_id)
9616 declarator = declarator->declarator;
9618 /* If the declarator-id is a SCOPE_REF, the scope in which the
9619 declaration occurs is the first operand. */
9620 if (declarator
9621 && declarator->u.id.qualifying_scope)
9622 return declarator->u.id.qualifying_scope;
9624 /* Otherwise, the declarator is not a qualified name; the entity will
9625 be declared in the current scope. */
9626 return NULL_TREE;
9629 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
9630 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9631 with this type. */
9633 static tree
9634 create_array_type_for_decl (tree name, tree type, tree size)
9636 tree itype = NULL_TREE;
9638 /* If things have already gone awry, bail now. */
9639 if (type == error_mark_node || size == error_mark_node)
9640 return error_mark_node;
9642 /* 8.3.4/1: If the type of the identifier of D contains the auto
9643 type-specifier, the program is ill-formed. */
9644 if (type_uses_auto (type))
9646 error ("%qD declared as array of %qT", name, type);
9647 return error_mark_node;
9650 /* If there are some types which cannot be array elements,
9651 issue an error-message and return. */
9652 switch (TREE_CODE (type))
9654 case VOID_TYPE:
9655 if (name)
9656 error ("declaration of %qD as array of void", name);
9657 else
9658 error ("creating array of void");
9659 return error_mark_node;
9661 case FUNCTION_TYPE:
9662 if (name)
9663 error ("declaration of %qD as array of functions", name);
9664 else
9665 error ("creating array of functions");
9666 return error_mark_node;
9668 case REFERENCE_TYPE:
9669 if (name)
9670 error ("declaration of %qD as array of references", name);
9671 else
9672 error ("creating array of references");
9673 return error_mark_node;
9675 case METHOD_TYPE:
9676 if (name)
9677 error ("declaration of %qD as array of function members", name);
9678 else
9679 error ("creating array of function members");
9680 return error_mark_node;
9682 default:
9683 break;
9686 /* [dcl.array]
9688 The constant expressions that specify the bounds of the arrays
9689 can be omitted only for the first member of the sequence. */
9690 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9692 if (name)
9693 error ("declaration of %qD as multidimensional array must "
9694 "have bounds for all dimensions except the first",
9695 name);
9696 else
9697 error ("multidimensional array must have bounds for all "
9698 "dimensions except the first");
9700 return error_mark_node;
9703 /* Figure out the index type for the array. */
9704 if (size)
9705 itype = compute_array_index_type (name, size, tf_warning_or_error);
9707 /* [dcl.array]
9708 T is called the array element type; this type shall not be [...] an
9709 abstract class type. */
9710 abstract_virtuals_error (name, type);
9712 return build_cplus_array_type (type, itype);
9715 /* Returns the smallest location != UNKNOWN_LOCATION among the
9716 three stored in LOCATIONS[ds_const], LOCATIONS[ds_volatile],
9717 and LOCATIONS[ds_restrict]. */
9719 static location_t
9720 smallest_type_quals_location (int type_quals, const location_t* locations)
9722 location_t loc = UNKNOWN_LOCATION;
9724 if (type_quals & TYPE_QUAL_CONST)
9725 loc = locations[ds_const];
9727 if ((type_quals & TYPE_QUAL_VOLATILE)
9728 && (loc == UNKNOWN_LOCATION || locations[ds_volatile] < loc))
9729 loc = locations[ds_volatile];
9731 if ((type_quals & TYPE_QUAL_RESTRICT)
9732 && (loc == UNKNOWN_LOCATION || locations[ds_restrict] < loc))
9733 loc = locations[ds_restrict];
9735 return loc;
9738 /* Check that it's OK to declare a function with the indicated TYPE
9739 and TYPE_QUALS. SFK indicates the kind of special function (if any)
9740 that this function is. OPTYPE is the type given in a conversion
9741 operator declaration, or the class type for a constructor/destructor.
9742 Returns the actual return type of the function; that may be different
9743 than TYPE if an error occurs, or for certain special functions. */
9745 static tree
9746 check_special_function_return_type (special_function_kind sfk,
9747 tree type,
9748 tree optype,
9749 int type_quals,
9750 const location_t* locations)
9752 switch (sfk)
9754 case sfk_constructor:
9755 if (type)
9756 error ("return type specification for constructor invalid");
9757 else if (type_quals != TYPE_UNQUALIFIED)
9758 error_at (smallest_type_quals_location (type_quals, locations),
9759 "qualifiers are not allowed on constructor declaration");
9761 if (targetm.cxx.cdtor_returns_this ())
9762 type = build_pointer_type (optype);
9763 else
9764 type = void_type_node;
9765 break;
9767 case sfk_destructor:
9768 if (type)
9769 error ("return type specification for destructor invalid");
9770 else if (type_quals != TYPE_UNQUALIFIED)
9771 error_at (smallest_type_quals_location (type_quals, locations),
9772 "qualifiers are not allowed on destructor declaration");
9774 /* We can't use the proper return type here because we run into
9775 problems with ambiguous bases and covariant returns. */
9776 if (targetm.cxx.cdtor_returns_this ())
9777 type = build_pointer_type (void_type_node);
9778 else
9779 type = void_type_node;
9780 break;
9782 case sfk_conversion:
9783 if (type)
9784 error ("return type specified for %<operator %T%>", optype);
9785 else if (type_quals != TYPE_UNQUALIFIED)
9786 error_at (smallest_type_quals_location (type_quals, locations),
9787 "qualifiers are not allowed on declaration of "
9788 "%<operator %T%>", optype);
9790 type = optype;
9791 break;
9793 case sfk_deduction_guide:
9794 if (type)
9795 error ("return type specified for deduction guide");
9796 else if (type_quals != TYPE_UNQUALIFIED)
9797 error_at (smallest_type_quals_location (type_quals, locations),
9798 "qualifiers are not allowed on declaration of "
9799 "deduction guide");
9800 type = make_template_placeholder (CLASSTYPE_TI_TEMPLATE (optype));
9801 for (int i = 0; i < ds_last; ++i)
9802 if (i != ds_explicit && locations[i])
9803 error_at (locations[i],
9804 "decl-specifier in declaration of deduction guide");
9805 break;
9807 default:
9808 gcc_unreachable ();
9811 return type;
9814 /* A variable or data member (whose unqualified name is IDENTIFIER)
9815 has been declared with the indicated TYPE. If the TYPE is not
9816 acceptable, issue an error message and return a type to use for
9817 error-recovery purposes. */
9819 tree
9820 check_var_type (tree identifier, tree type)
9822 if (VOID_TYPE_P (type))
9824 if (!identifier)
9825 error ("unnamed variable or field declared void");
9826 else if (identifier_p (identifier))
9828 gcc_assert (!IDENTIFIER_ANY_OP_P (identifier));
9829 error ("variable or field %qE declared void", identifier);
9831 else
9832 error ("variable or field declared void");
9833 type = error_mark_node;
9836 return type;
9839 /* Handle declaring DECL as an inline variable. */
9841 static void
9842 mark_inline_variable (tree decl)
9844 bool inlinep = true;
9845 if (! toplevel_bindings_p ())
9847 error ("%<inline%> specifier invalid for variable "
9848 "%qD declared at block scope", decl);
9849 inlinep = false;
9851 else if (cxx_dialect < cxx17)
9852 pedwarn (DECL_SOURCE_LOCATION (decl), 0,
9853 "inline variables are only available "
9854 "with -std=c++17 or -std=gnu++17");
9855 if (inlinep)
9857 retrofit_lang_decl (decl);
9858 SET_DECL_VAR_DECLARED_INLINE_P (decl);
9863 /* Assign a typedef-given name to a class or enumeration type declared
9864 as anonymous at first. This was split out of grokdeclarator
9865 because it is also used in libcc1. */
9867 void
9868 name_unnamed_type (tree type, tree decl)
9870 gcc_assert (TYPE_UNNAMED_P (type));
9872 /* Replace the anonymous name with the real name everywhere. */
9873 for (tree t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
9875 if (anon_aggrname_p (TYPE_IDENTIFIER (t)))
9876 /* We do not rename the debug info representing the
9877 unnamed tagged type because the standard says in
9878 [dcl.typedef] that the naming applies only for
9879 linkage purposes. */
9880 /*debug_hooks->set_name (t, decl);*/
9881 TYPE_NAME (t) = decl;
9884 if (TYPE_LANG_SPECIFIC (type))
9885 TYPE_WAS_UNNAMED (type) = 1;
9887 /* If this is a typedef within a template class, the nested
9888 type is a (non-primary) template. The name for the
9889 template needs updating as well. */
9890 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
9891 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
9892 = TYPE_IDENTIFIER (type);
9894 /* Adjust linkage now that we aren't unnamed anymore. */
9895 reset_type_linkage (type);
9897 /* FIXME remangle member functions; member functions of a
9898 type with external linkage have external linkage. */
9900 /* Check that our job is done, and that it would fail if we
9901 attempted to do it again. */
9902 gcc_assert (!TYPE_UNNAMED_P (type));
9905 /* Given declspecs and a declarator (abstract or otherwise), determine
9906 the name and type of the object declared and construct a DECL node
9907 for it.
9909 DECLSPECS points to the representation of declaration-specifier
9910 sequence that precedes declarator.
9912 DECL_CONTEXT says which syntactic context this declaration is in:
9913 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
9914 FUNCDEF for a function definition. Like NORMAL but a few different
9915 error messages in each case. Return value may be zero meaning
9916 this definition is too screwy to try to parse.
9917 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
9918 handle member functions (which have FIELD context).
9919 Return value may be zero meaning this definition is too screwy to
9920 try to parse.
9921 PARM for a parameter declaration (either within a function prototype
9922 or before a function body). Make a PARM_DECL, or return void_type_node.
9923 TPARM for a template parameter declaration.
9924 CATCHPARM for a parameter declaration before a catch clause.
9925 TYPENAME if for a typename (in a cast or sizeof).
9926 Don't make a DECL node; just return the ..._TYPE node.
9927 FIELD for a struct or union field; make a FIELD_DECL.
9928 BITFIELD for a field with specified width.
9930 INITIALIZED is as for start_decl.
9932 ATTRLIST is a pointer to the list of attributes, which may be NULL
9933 if there are none; *ATTRLIST may be modified if attributes from inside
9934 the declarator should be applied to the declaration.
9936 When this function is called, scoping variables (such as
9937 CURRENT_CLASS_TYPE) should reflect the scope in which the
9938 declaration occurs, not the scope in which the new declaration will
9939 be placed. For example, on:
9941 void S::f() { ... }
9943 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
9944 should not be `S'.
9946 Returns a DECL (if a declarator is present), a TYPE (if there is no
9947 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
9948 error occurs. */
9950 tree
9951 grokdeclarator (const cp_declarator *declarator,
9952 cp_decl_specifier_seq *declspecs,
9953 enum decl_context decl_context,
9954 int initialized,
9955 tree* attrlist)
9957 tree type = NULL_TREE;
9958 int longlong = 0;
9959 int explicit_intN = 0;
9960 int virtualp, explicitp, friendp, inlinep, staticp;
9961 int explicit_int = 0;
9962 int explicit_char = 0;
9963 int defaulted_int = 0;
9965 tree typedef_decl = NULL_TREE;
9966 const char *name = NULL;
9967 tree typedef_type = NULL_TREE;
9968 /* True if this declarator is a function definition. */
9969 bool funcdef_flag = false;
9970 cp_declarator_kind innermost_code = cdk_error;
9971 int bitfield = 0;
9972 #if 0
9973 /* See the code below that used this. */
9974 tree decl_attr = NULL_TREE;
9975 #endif
9977 /* Keep track of what sort of function is being processed
9978 so that we can warn about default return values, or explicit
9979 return values which do not match prescribed defaults. */
9980 special_function_kind sfk = sfk_none;
9982 tree dname = NULL_TREE;
9983 tree ctor_return_type = NULL_TREE;
9984 enum overload_flags flags = NO_SPECIAL;
9985 /* cv-qualifiers that apply to the declarator, for a declaration of
9986 a member function. */
9987 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
9988 /* virt-specifiers that apply to the declarator, for a declaration of
9989 a member function. */
9990 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
9991 /* ref-qualifier that applies to the declarator, for a declaration of
9992 a member function. */
9993 cp_ref_qualifier rqual = REF_QUAL_NONE;
9994 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
9995 int type_quals = TYPE_UNQUALIFIED;
9996 tree raises = NULL_TREE;
9997 int template_count = 0;
9998 tree returned_attrs = NULL_TREE;
9999 tree parms = NULL_TREE;
10000 const cp_declarator *id_declarator;
10001 /* The unqualified name of the declarator; either an
10002 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
10003 tree unqualified_id;
10004 /* The class type, if any, in which this entity is located,
10005 or NULL_TREE if none. Note that this value may be different from
10006 the current class type; for example if an attempt is made to declare
10007 "A::f" inside "B", this value will be "A". */
10008 tree ctype = current_class_type;
10009 /* The NAMESPACE_DECL for the namespace in which this entity is
10010 located. If an unqualified name is used to declare the entity,
10011 this value will be NULL_TREE, even if the entity is located at
10012 namespace scope. */
10013 tree in_namespace = NULL_TREE;
10014 cp_storage_class storage_class;
10015 bool unsigned_p, signed_p, short_p, long_p, thread_p;
10016 bool type_was_error_mark_node = false;
10017 bool parameter_pack_p = declarator ? declarator->parameter_pack_p : false;
10018 bool template_type_arg = false;
10019 bool template_parm_flag = false;
10020 bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
10021 bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
10022 bool late_return_type_p = false;
10023 bool array_parameter_p = false;
10024 source_location saved_loc = input_location;
10025 tree reqs = NULL_TREE;
10027 signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
10028 unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
10029 short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
10030 long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
10031 longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
10032 explicit_intN = declspecs->explicit_intN_p;
10033 thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
10035 // Was concept_p specified? Note that ds_concept
10036 // implies ds_constexpr!
10037 bool concept_p = decl_spec_seq_has_spec_p (declspecs, ds_concept);
10038 if (concept_p)
10039 constexpr_p = true;
10041 if (decl_spec_seq_has_spec_p (declspecs, ds_const))
10042 type_quals |= TYPE_QUAL_CONST;
10043 if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
10044 type_quals |= TYPE_QUAL_VOLATILE;
10045 if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
10046 type_quals |= TYPE_QUAL_RESTRICT;
10048 if (decl_context == FUNCDEF)
10049 funcdef_flag = true, decl_context = NORMAL;
10050 else if (decl_context == MEMFUNCDEF)
10051 funcdef_flag = true, decl_context = FIELD;
10052 else if (decl_context == BITFIELD)
10053 bitfield = 1, decl_context = FIELD;
10054 else if (decl_context == TEMPLATE_TYPE_ARG)
10055 template_type_arg = true, decl_context = TYPENAME;
10056 else if (decl_context == TPARM)
10057 template_parm_flag = true, decl_context = PARM;
10059 if (initialized > 1)
10060 funcdef_flag = true;
10062 location_t typespec_loc = smallest_type_quals_location (type_quals,
10063 declspecs->locations);
10064 if (typespec_loc == UNKNOWN_LOCATION)
10065 typespec_loc = declspecs->locations[ds_type_spec];
10066 if (typespec_loc == UNKNOWN_LOCATION)
10067 typespec_loc = input_location;
10069 /* Look inside a declarator for the name being declared
10070 and get it as a string, for an error message. */
10071 for (id_declarator = declarator;
10072 id_declarator;
10073 id_declarator = id_declarator->declarator)
10075 if (id_declarator->kind != cdk_id)
10076 innermost_code = id_declarator->kind;
10078 switch (id_declarator->kind)
10080 case cdk_function:
10081 if (id_declarator->declarator
10082 && id_declarator->declarator->kind == cdk_id)
10084 sfk = id_declarator->declarator->u.id.sfk;
10085 if (sfk == sfk_destructor)
10086 flags = DTOR_FLAG;
10088 break;
10090 case cdk_id:
10092 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
10093 tree decl = id_declarator->u.id.unqualified_name;
10094 if (!decl)
10095 break;
10096 if (qualifying_scope)
10098 if (at_function_scope_p ())
10100 /* [dcl.meaning]
10102 A declarator-id shall not be qualified except
10103 for ...
10105 None of the cases are permitted in block
10106 scope. */
10107 if (qualifying_scope == global_namespace)
10108 error ("invalid use of qualified-name %<::%D%>",
10109 decl);
10110 else if (TYPE_P (qualifying_scope))
10111 error ("invalid use of qualified-name %<%T::%D%>",
10112 qualifying_scope, decl);
10113 else
10114 error ("invalid use of qualified-name %<%D::%D%>",
10115 qualifying_scope, decl);
10116 return error_mark_node;
10118 else if (TYPE_P (qualifying_scope))
10120 ctype = qualifying_scope;
10121 if (!MAYBE_CLASS_TYPE_P (ctype))
10123 error ("%q#T is not a class or a namespace", ctype);
10124 ctype = NULL_TREE;
10126 else if (innermost_code != cdk_function
10127 && current_class_type
10128 && !uniquely_derived_from_p (ctype,
10129 current_class_type))
10131 error ("invalid use of qualified-name %<%T::%D%>",
10132 qualifying_scope, decl);
10133 return error_mark_node;
10136 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
10137 in_namespace = qualifying_scope;
10139 switch (TREE_CODE (decl))
10141 case BIT_NOT_EXPR:
10143 if (innermost_code != cdk_function)
10145 error ("declaration of %qD as non-function", decl);
10146 return error_mark_node;
10148 else if (!qualifying_scope
10149 && !(current_class_type && at_class_scope_p ()))
10151 error ("declaration of %qD as non-member", decl);
10152 return error_mark_node;
10155 tree type = TREE_OPERAND (decl, 0);
10156 if (TYPE_P (type))
10157 type = constructor_name (type);
10158 name = identifier_to_locale (IDENTIFIER_POINTER (type));
10159 dname = decl;
10161 break;
10163 case TEMPLATE_ID_EXPR:
10165 tree fns = TREE_OPERAND (decl, 0);
10167 dname = fns;
10168 if (!identifier_p (dname))
10169 dname = OVL_NAME (dname);
10171 /* Fall through. */
10173 case IDENTIFIER_NODE:
10174 if (identifier_p (decl))
10175 dname = decl;
10177 if (IDENTIFIER_KEYWORD_P (dname))
10179 error ("declarator-id missing; using reserved word %qD",
10180 dname);
10181 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10183 else if (!IDENTIFIER_CONV_OP_P (dname))
10184 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10185 else
10187 gcc_assert (flags == NO_SPECIAL);
10188 flags = TYPENAME_FLAG;
10189 sfk = sfk_conversion;
10190 tree glob = get_global_binding (dname);
10191 if (glob && TREE_CODE (glob) == TYPE_DECL)
10192 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10193 else
10194 name = "<invalid operator>";
10196 break;
10198 default:
10199 gcc_unreachable ();
10201 break;
10204 case cdk_array:
10205 case cdk_pointer:
10206 case cdk_reference:
10207 case cdk_ptrmem:
10208 break;
10210 case cdk_decomp:
10211 name = "structured binding";
10212 break;
10214 case cdk_error:
10215 return error_mark_node;
10217 default:
10218 gcc_unreachable ();
10220 if (id_declarator->kind == cdk_id)
10221 break;
10224 /* [dcl.fct.edf]
10226 The declarator in a function-definition shall have the form
10227 D1 ( parameter-declaration-clause) ... */
10228 if (funcdef_flag && innermost_code != cdk_function)
10230 error ("function definition does not declare parameters");
10231 return error_mark_node;
10234 if (flags == TYPENAME_FLAG
10235 && innermost_code != cdk_function
10236 && ! (ctype && !declspecs->any_specifiers_p))
10238 error ("declaration of %qD as non-function", dname);
10239 return error_mark_node;
10242 if (dname && identifier_p (dname))
10244 if (UDLIT_OPER_P (dname)
10245 && innermost_code != cdk_function)
10247 error ("declaration of %qD as non-function", dname);
10248 return error_mark_node;
10251 if (IDENTIFIER_ANY_OP_P (dname))
10253 if (typedef_p)
10255 error ("declaration of %qD as %<typedef%>", dname);
10256 return error_mark_node;
10258 else if (decl_context == PARM || decl_context == CATCHPARM)
10260 error ("declaration of %qD as parameter", dname);
10261 return error_mark_node;
10266 /* Anything declared one level down from the top level
10267 must be one of the parameters of a function
10268 (because the body is at least two levels down). */
10270 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
10271 by not allowing C++ class definitions to specify their parameters
10272 with xdecls (must be spec.d in the parmlist).
10274 Since we now wait to push a class scope until we are sure that
10275 we are in a legitimate method context, we must set oldcname
10276 explicitly (since current_class_name is not yet alive).
10278 We also want to avoid calling this a PARM if it is in a namespace. */
10280 if (decl_context == NORMAL && !toplevel_bindings_p ())
10282 cp_binding_level *b = current_binding_level;
10283 current_binding_level = b->level_chain;
10284 if (current_binding_level != 0 && toplevel_bindings_p ())
10285 decl_context = PARM;
10286 current_binding_level = b;
10289 if (name == NULL)
10290 name = decl_context == PARM ? "parameter" : "type name";
10292 if (concept_p && typedef_p)
10294 error ("%<concept%> cannot appear in a typedef declaration");
10295 return error_mark_node;
10298 if (constexpr_p && typedef_p)
10300 error ("%<constexpr%> cannot appear in a typedef declaration");
10301 return error_mark_node;
10304 /* If there were multiple types specified in the decl-specifier-seq,
10305 issue an error message. */
10306 if (declspecs->multiple_types_p)
10308 error ("two or more data types in declaration of %qs", name);
10309 return error_mark_node;
10312 if (declspecs->conflicting_specifiers_p)
10314 error ("conflicting specifiers in declaration of %qs", name);
10315 return error_mark_node;
10318 /* Extract the basic type from the decl-specifier-seq. */
10319 type = declspecs->type;
10320 if (type == error_mark_node)
10322 type = NULL_TREE;
10323 type_was_error_mark_node = true;
10325 /* If the entire declaration is itself tagged as deprecated then
10326 suppress reports of deprecated items. */
10327 if (type && TREE_DEPRECATED (type)
10328 && deprecated_state != DEPRECATED_SUPPRESS)
10329 warn_deprecated_use (type, NULL_TREE);
10330 if (type && TREE_CODE (type) == TYPE_DECL)
10332 typedef_decl = type;
10333 type = TREE_TYPE (typedef_decl);
10334 if (TREE_DEPRECATED (type)
10335 && DECL_ARTIFICIAL (typedef_decl)
10336 && deprecated_state != DEPRECATED_SUPPRESS)
10337 warn_deprecated_use (type, NULL_TREE);
10339 /* No type at all: default to `int', and set DEFAULTED_INT
10340 because it was not a user-defined typedef. */
10341 if (type == NULL_TREE)
10343 if (signed_p || unsigned_p || long_p || short_p)
10345 /* These imply 'int'. */
10346 type = integer_type_node;
10347 defaulted_int = 1;
10349 /* If we just have "complex", it is equivalent to "complex double". */
10350 else if (!longlong && !explicit_intN
10351 && decl_spec_seq_has_spec_p (declspecs, ds_complex))
10353 type = double_type_node;
10354 pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
10355 "ISO C++ does not support plain %<complex%> meaning "
10356 "%<double complex%>");
10359 /* Gather flags. */
10360 explicit_int = declspecs->explicit_int_p;
10361 explicit_char = declspecs->explicit_char_p;
10363 #if 0
10364 /* See the code below that used this. */
10365 if (typedef_decl)
10366 decl_attr = DECL_ATTRIBUTES (typedef_decl);
10367 #endif
10368 typedef_type = type;
10370 if (sfk == sfk_conversion || sfk == sfk_deduction_guide)
10371 ctor_return_type = TREE_TYPE (dname);
10372 else
10373 ctor_return_type = ctype;
10375 if (sfk != sfk_none)
10377 type = check_special_function_return_type (sfk, type,
10378 ctor_return_type,
10379 type_quals,
10380 declspecs->locations);
10381 type_quals = TYPE_UNQUALIFIED;
10383 else if (type == NULL_TREE)
10385 int is_main;
10387 explicit_int = -1;
10389 /* We handle `main' specially here, because 'main () { }' is so
10390 common. With no options, it is allowed. With -Wreturn-type,
10391 it is a warning. It is only an error with -pedantic-errors. */
10392 is_main = (funcdef_flag
10393 && dname && identifier_p (dname)
10394 && MAIN_NAME_P (dname)
10395 && ctype == NULL_TREE
10396 && in_namespace == NULL_TREE
10397 && current_namespace == global_namespace);
10399 if (type_was_error_mark_node)
10400 /* We've already issued an error, don't complain more. */;
10401 else if (in_system_header_at (input_location) || flag_ms_extensions)
10402 /* Allow it, sigh. */;
10403 else if (! is_main)
10404 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
10405 else if (pedantic)
10406 pedwarn (input_location, OPT_Wpedantic,
10407 "ISO C++ forbids declaration of %qs with no type", name);
10408 else
10409 warning (OPT_Wreturn_type,
10410 "ISO C++ forbids declaration of %qs with no type", name);
10412 if (type_was_error_mark_node && template_parm_flag)
10413 /* FIXME we should be able to propagate the error_mark_node as is
10414 for other contexts too. */
10415 type = error_mark_node;
10416 else
10417 type = integer_type_node;
10420 ctype = NULL_TREE;
10422 if (explicit_intN)
10424 if (! int_n_enabled_p[declspecs->int_n_idx])
10426 error ("%<__int%d%> is not supported by this target",
10427 int_n_data[declspecs->int_n_idx].bitsize);
10428 explicit_intN = false;
10430 else if (pedantic && ! in_system_header_at (input_location))
10431 pedwarn (input_location, OPT_Wpedantic,
10432 "ISO C++ does not support %<__int%d%> for %qs",
10433 int_n_data[declspecs->int_n_idx].bitsize, name);
10436 /* Now process the modifiers that were specified
10437 and check for invalid combinations. */
10439 /* Long double is a special combination. */
10440 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
10442 long_p = false;
10443 type = cp_build_qualified_type (long_double_type_node,
10444 cp_type_quals (type));
10447 /* Check all other uses of type modifiers. */
10449 if (unsigned_p || signed_p || long_p || short_p)
10451 int ok = 0;
10453 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
10454 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
10455 else if (signed_p && unsigned_p)
10456 error ("%<signed%> and %<unsigned%> specified together for %qs", name);
10457 else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
10458 error ("%<long long%> invalid for %qs", name);
10459 else if (long_p && TREE_CODE (type) == REAL_TYPE)
10460 error ("%<long%> invalid for %qs", name);
10461 else if (short_p && TREE_CODE (type) == REAL_TYPE)
10462 error ("%<short%> invalid for %qs", name);
10463 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
10464 error ("%<long%> or %<short%> invalid for %qs", name);
10465 else if ((long_p || short_p || explicit_char || explicit_int) && explicit_intN)
10466 error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
10467 else if ((long_p || short_p) && explicit_char)
10468 error ("%<long%> or %<short%> specified with char for %qs", name);
10469 else if (long_p && short_p)
10470 error ("%<long%> and %<short%> specified together for %qs", name);
10471 else if (type == char16_type_node || type == char32_type_node)
10473 if (signed_p || unsigned_p)
10474 error ("%<signed%> or %<unsigned%> invalid for %qs", name);
10475 else if (short_p || long_p)
10476 error ("%<short%> or %<long%> invalid for %qs", name);
10478 else
10480 ok = 1;
10481 if (!explicit_int && !defaulted_int && !explicit_char && !explicit_intN && pedantic)
10483 pedwarn (input_location, OPT_Wpedantic,
10484 "long, short, signed or unsigned used invalidly for %qs",
10485 name);
10486 if (flag_pedantic_errors)
10487 ok = 0;
10491 /* Discard the type modifiers if they are invalid. */
10492 if (! ok)
10494 unsigned_p = false;
10495 signed_p = false;
10496 long_p = false;
10497 short_p = false;
10498 longlong = 0;
10502 /* Decide whether an integer type is signed or not.
10503 Optionally treat bitfields as signed by default. */
10504 if (unsigned_p
10505 /* [class.bit]
10507 It is implementation-defined whether a plain (neither
10508 explicitly signed or unsigned) char, short, int, or long
10509 bit-field is signed or unsigned.
10511 Naturally, we extend this to long long as well. Note that
10512 this does not include wchar_t. */
10513 || (bitfield && !flag_signed_bitfields
10514 && !signed_p
10515 /* A typedef for plain `int' without `signed' can be
10516 controlled just like plain `int', but a typedef for
10517 `signed int' cannot be so controlled. */
10518 && !(typedef_decl
10519 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
10520 && TREE_CODE (type) == INTEGER_TYPE
10521 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
10523 if (explicit_intN)
10524 type = int_n_trees[declspecs->int_n_idx].unsigned_type;
10525 else if (longlong)
10526 type = long_long_unsigned_type_node;
10527 else if (long_p)
10528 type = long_unsigned_type_node;
10529 else if (short_p)
10530 type = short_unsigned_type_node;
10531 else if (type == char_type_node)
10532 type = unsigned_char_type_node;
10533 else if (typedef_decl)
10534 type = unsigned_type_for (type);
10535 else
10536 type = unsigned_type_node;
10538 else if (signed_p && type == char_type_node)
10539 type = signed_char_type_node;
10540 else if (explicit_intN)
10541 type = int_n_trees[declspecs->int_n_idx].signed_type;
10542 else if (longlong)
10543 type = long_long_integer_type_node;
10544 else if (long_p)
10545 type = long_integer_type_node;
10546 else if (short_p)
10547 type = short_integer_type_node;
10549 if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
10551 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10552 error ("complex invalid for %qs", name);
10553 /* If a modifier is specified, the resulting complex is the complex
10554 form of TYPE. E.g, "complex short" is "complex short int". */
10555 else if (type == integer_type_node)
10556 type = complex_integer_type_node;
10557 else if (type == float_type_node)
10558 type = complex_float_type_node;
10559 else if (type == double_type_node)
10560 type = complex_double_type_node;
10561 else if (type == long_double_type_node)
10562 type = complex_long_double_type_node;
10563 else
10564 type = build_complex_type (type);
10567 /* If we're using the injected-class-name to form a compound type or a
10568 declaration, replace it with the underlying class so we don't get
10569 redundant typedefs in the debug output. But if we are returning the
10570 type unchanged, leave it alone so that it's available to
10571 maybe_get_template_decl_from_type_decl. */
10572 if (CLASS_TYPE_P (type)
10573 && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
10574 && type == TREE_TYPE (TYPE_NAME (type))
10575 && (declarator || type_quals))
10576 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
10578 type_quals |= cp_type_quals (type);
10579 type = cp_build_qualified_type_real
10580 (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
10581 || declspecs->decltype_p)
10582 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
10583 /* We might have ignored or rejected some of the qualifiers. */
10584 type_quals = cp_type_quals (type);
10586 if (cxx_dialect >= cxx17 && type && is_auto (type)
10587 && innermost_code != cdk_function
10588 && id_declarator && declarator != id_declarator)
10589 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (type))
10591 error_at (typespec_loc, "template placeholder type %qT must be followed "
10592 "by a simple declarator-id", type);
10593 inform (DECL_SOURCE_LOCATION (tmpl), "%qD declared here", tmpl);
10596 staticp = 0;
10597 inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
10598 virtualp = decl_spec_seq_has_spec_p (declspecs, ds_virtual);
10599 explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
10601 storage_class = declspecs->storage_class;
10602 if (storage_class == sc_static)
10603 staticp = 1 + (decl_context == FIELD);
10605 if (virtualp)
10607 if (staticp == 2)
10609 error ("member %qD cannot be declared both %<virtual%> "
10610 "and %<static%>", dname);
10611 storage_class = sc_none;
10612 staticp = 0;
10614 if (constexpr_p)
10615 error ("member %qD cannot be declared both %<virtual%> "
10616 "and %<constexpr%>", dname);
10618 friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
10620 /* Issue errors about use of storage classes for parameters. */
10621 if (decl_context == PARM)
10623 if (typedef_p)
10625 error ("typedef declaration invalid in parameter declaration");
10626 return error_mark_node;
10628 else if (template_parm_flag && storage_class != sc_none)
10630 error ("storage class specified for template parameter %qs", name);
10631 return error_mark_node;
10633 else if (storage_class == sc_static
10634 || storage_class == sc_extern
10635 || thread_p)
10636 error ("storage class specifiers invalid in parameter declarations");
10638 /* Function parameters cannot be concept. */
10639 if (concept_p)
10640 error ("a parameter cannot be declared %<concept%>");
10641 /* Function parameters cannot be constexpr. If we saw one, moan
10642 and pretend it wasn't there. */
10643 else if (constexpr_p)
10645 error ("a parameter cannot be declared %<constexpr%>");
10646 constexpr_p = 0;
10650 /* Give error if `virtual' is used outside of class declaration. */
10651 if (virtualp
10652 && (current_class_name == NULL_TREE || decl_context != FIELD))
10654 error_at (declspecs->locations[ds_virtual],
10655 "%<virtual%> outside class declaration");
10656 virtualp = 0;
10659 if (innermost_code == cdk_decomp)
10661 location_t loc = (declarator->kind == cdk_reference
10662 ? declarator->declarator->id_loc : declarator->id_loc);
10663 if (inlinep)
10664 error_at (declspecs->locations[ds_inline],
10665 "structured binding declaration cannot be %<inline%>");
10666 if (typedef_p)
10667 error_at (declspecs->locations[ds_typedef],
10668 "structured binding declaration cannot be %<typedef%>");
10669 if (constexpr_p)
10670 error_at (declspecs->locations[ds_constexpr], "structured "
10671 "binding declaration cannot be %<constexpr%>");
10672 if (thread_p)
10673 error_at (declspecs->locations[ds_thread],
10674 "structured binding declaration cannot be %qs",
10675 declspecs->gnu_thread_keyword_p
10676 ? "__thread" : "thread_local");
10677 if (concept_p)
10678 error_at (declspecs->locations[ds_concept],
10679 "structured binding declaration cannot be %<concept%>");
10680 switch (storage_class)
10682 case sc_none:
10683 break;
10684 case sc_register:
10685 error_at (loc, "structured binding declaration cannot be "
10686 "%<register%>");
10687 break;
10688 case sc_static:
10689 error_at (loc, "structured binding declaration cannot be "
10690 "%<static%>");
10691 break;
10692 case sc_extern:
10693 error_at (loc, "structured binding declaration cannot be "
10694 "%<extern%>");
10695 break;
10696 case sc_mutable:
10697 error_at (loc, "structured binding declaration cannot be "
10698 "%<mutable%>");
10699 break;
10700 case sc_auto:
10701 error_at (loc, "structured binding declaration cannot be "
10702 "C++98 %<auto%>");
10703 break;
10704 default:
10705 gcc_unreachable ();
10707 if (TREE_CODE (type) != TEMPLATE_TYPE_PARM
10708 || TYPE_IDENTIFIER (type) != auto_identifier)
10710 if (type != error_mark_node)
10712 error_at (loc, "structured binding declaration cannot have "
10713 "type %qT", type);
10714 inform (loc,
10715 "type must be cv-qualified %<auto%> or reference to "
10716 "cv-qualified %<auto%>");
10718 type = build_qualified_type (make_auto (), type_quals);
10719 declspecs->type = type;
10721 inlinep = 0;
10722 typedef_p = 0;
10723 constexpr_p = 0;
10724 thread_p = 0;
10725 concept_p = 0;
10726 storage_class = sc_none;
10727 staticp = 0;
10728 declspecs->storage_class = sc_none;
10729 declspecs->locations[ds_thread] = UNKNOWN_LOCATION;
10732 /* Static anonymous unions are dealt with here. */
10733 if (staticp && decl_context == TYPENAME
10734 && declspecs->type
10735 && ANON_AGGR_TYPE_P (declspecs->type))
10736 decl_context = FIELD;
10738 /* Warn about storage classes that are invalid for certain
10739 kinds of declarations (parameters, typenames, etc.). */
10740 if (thread_p
10741 && ((storage_class
10742 && storage_class != sc_extern
10743 && storage_class != sc_static)
10744 || typedef_p))
10746 error ("multiple storage classes in declaration of %qs", name);
10747 thread_p = false;
10749 if (decl_context != NORMAL
10750 && ((storage_class != sc_none
10751 && storage_class != sc_mutable)
10752 || thread_p))
10754 if ((decl_context == PARM || decl_context == CATCHPARM)
10755 && (storage_class == sc_register
10756 || storage_class == sc_auto))
10758 else if (typedef_p)
10760 else if (decl_context == FIELD
10761 /* C++ allows static class elements. */
10762 && storage_class == sc_static)
10763 /* C++ also allows inlines and signed and unsigned elements,
10764 but in those cases we don't come in here. */
10766 else
10768 if (decl_context == FIELD)
10769 error ("storage class specified for %qs", name);
10770 else
10772 if (decl_context == PARM || decl_context == CATCHPARM)
10773 error ("storage class specified for parameter %qs", name);
10774 else
10775 error ("storage class specified for typename");
10777 if (storage_class == sc_register
10778 || storage_class == sc_auto
10779 || storage_class == sc_extern
10780 || thread_p)
10781 storage_class = sc_none;
10784 else if (storage_class == sc_extern && funcdef_flag
10785 && ! toplevel_bindings_p ())
10786 error ("nested function %qs declared %<extern%>", name);
10787 else if (toplevel_bindings_p ())
10789 if (storage_class == sc_auto)
10790 error ("top-level declaration of %qs specifies %<auto%>", name);
10792 else if (thread_p
10793 && storage_class != sc_extern
10794 && storage_class != sc_static)
10796 if (declspecs->gnu_thread_keyword_p)
10797 pedwarn (input_location, 0, "function-scope %qs implicitly auto and "
10798 "declared %<__thread%>", name);
10800 /* When thread_local is applied to a variable of block scope the
10801 storage-class-specifier static is implied if it does not appear
10802 explicitly. */
10803 storage_class = declspecs->storage_class = sc_static;
10804 staticp = 1;
10807 if (storage_class && friendp)
10809 error ("storage class specifiers invalid in friend function declarations");
10810 storage_class = sc_none;
10811 staticp = 0;
10814 if (!id_declarator)
10815 unqualified_id = NULL_TREE;
10816 else
10818 unqualified_id = id_declarator->u.id.unqualified_name;
10819 switch (TREE_CODE (unqualified_id))
10821 case BIT_NOT_EXPR:
10822 unqualified_id = TREE_OPERAND (unqualified_id, 0);
10823 if (TYPE_P (unqualified_id))
10824 unqualified_id = constructor_name (unqualified_id);
10825 break;
10827 case IDENTIFIER_NODE:
10828 case TEMPLATE_ID_EXPR:
10829 break;
10831 default:
10832 gcc_unreachable ();
10836 if (declspecs->std_attributes)
10838 /* Apply the c++11 attributes to the type preceding them. */
10839 input_location = declspecs->locations[ds_std_attribute];
10840 decl_attributes (&type, declspecs->std_attributes, 0);
10841 input_location = saved_loc;
10844 /* Determine the type of the entity declared by recurring on the
10845 declarator. */
10846 for (; declarator; declarator = declarator->declarator)
10848 const cp_declarator *inner_declarator;
10849 tree attrs;
10851 if (type == error_mark_node)
10852 return error_mark_node;
10854 attrs = declarator->attributes;
10855 if (attrs)
10857 int attr_flags;
10859 attr_flags = 0;
10860 if (declarator == NULL || declarator->kind == cdk_id)
10861 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
10862 if (declarator->kind == cdk_function)
10863 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
10864 if (declarator->kind == cdk_array)
10865 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
10866 returned_attrs = decl_attributes (&type,
10867 chainon (returned_attrs, attrs),
10868 attr_flags);
10871 inner_declarator = declarator->declarator;
10873 /* We don't want to warn in parameter context because we don't
10874 yet know if the parse will succeed, and this might turn out
10875 to be a constructor call. */
10876 if (decl_context != PARM
10877 && decl_context != TYPENAME
10878 && declarator->parenthesized != UNKNOWN_LOCATION
10879 /* If the type is class-like and the inner name used a
10880 global namespace qualifier, we need the parens.
10881 Unfortunately all we can tell is whether a qualified name
10882 was used or not. */
10883 && !(inner_declarator
10884 && inner_declarator->kind == cdk_id
10885 && inner_declarator->u.id.qualifying_scope
10886 && (MAYBE_CLASS_TYPE_P (type)
10887 || TREE_CODE (type) == ENUMERAL_TYPE)))
10888 warning_at (declarator->parenthesized, OPT_Wparentheses,
10889 "unnecessary parentheses in declaration of %qs", name);
10890 if (declarator->kind == cdk_id || declarator->kind == cdk_decomp)
10891 break;
10893 switch (declarator->kind)
10895 case cdk_array:
10896 type = create_array_type_for_decl (dname, type,
10897 declarator->u.array.bounds);
10898 if (!valid_array_size_p (input_location, type, dname))
10899 type = error_mark_node;
10901 if (declarator->std_attributes)
10902 /* [dcl.array]/1:
10904 The optional attribute-specifier-seq appertains to the
10905 array. */
10906 returned_attrs = chainon (returned_attrs,
10907 declarator->std_attributes);
10908 break;
10910 case cdk_function:
10912 tree arg_types;
10913 int funcdecl_p;
10915 /* Declaring a function type. */
10917 input_location = declspecs->locations[ds_type_spec];
10918 abstract_virtuals_error (ACU_RETURN, type);
10919 input_location = saved_loc;
10921 /* Pick up type qualifiers which should be applied to `this'. */
10922 memfn_quals = declarator->u.function.qualifiers;
10923 /* Pick up virt-specifiers. */
10924 virt_specifiers = declarator->u.function.virt_specifiers;
10925 /* And ref-qualifier, too */
10926 rqual = declarator->u.function.ref_qualifier;
10927 /* And tx-qualifier. */
10928 tree tx_qual = declarator->u.function.tx_qualifier;
10929 /* Pick up the exception specifications. */
10930 raises = declarator->u.function.exception_specification;
10931 /* If the exception-specification is ill-formed, let's pretend
10932 there wasn't one. */
10933 if (raises == error_mark_node)
10934 raises = NULL_TREE;
10936 if (reqs)
10937 error_at (location_of (reqs), "requires-clause on return type");
10938 reqs = declarator->u.function.requires_clause;
10940 /* Say it's a definition only for the CALL_EXPR
10941 closest to the identifier. */
10942 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
10944 /* Handle a late-specified return type. */
10945 tree late_return_type = declarator->u.function.late_return_type;
10946 if (funcdecl_p)
10948 if (tree auto_node = type_uses_auto (type))
10950 if (!late_return_type)
10952 if (current_class_type
10953 && LAMBDA_TYPE_P (current_class_type))
10954 /* OK for C++11 lambdas. */;
10955 else if (cxx_dialect < cxx14)
10957 error ("%qs function uses "
10958 "%<auto%> type specifier without trailing "
10959 "return type", name);
10960 inform (input_location, "deduced return type "
10961 "only available with -std=c++14 or "
10962 "-std=gnu++14");
10964 else if (virtualp)
10966 error ("virtual function cannot "
10967 "have deduced return type");
10968 virtualp = false;
10971 else if (!is_auto (type) && sfk != sfk_conversion)
10973 error ("%qs function with trailing return type has"
10974 " %qT as its type rather than plain %<auto%>",
10975 name, type);
10976 return error_mark_node;
10978 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node))
10980 if (!late_return_type)
10982 if (dguide_name_p (unqualified_id))
10983 error_at (declarator->id_loc, "deduction guide "
10984 "for %qT must have trailing return "
10985 "type", TREE_TYPE (tmpl));
10986 else
10987 error_at (declarator->id_loc, "deduced class "
10988 "type %qT in function return type",
10989 type);
10990 inform (DECL_SOURCE_LOCATION (tmpl),
10991 "%qD declared here", tmpl);
10993 else if (CLASS_TYPE_P (late_return_type)
10994 && CLASSTYPE_TEMPLATE_INFO (late_return_type)
10995 && (CLASSTYPE_TI_TEMPLATE (late_return_type)
10996 == tmpl))
10997 /* OK */;
10998 else
10999 error ("trailing return type %qT of deduction guide "
11000 "is not a specialization of %qT",
11001 late_return_type, TREE_TYPE (tmpl));
11004 else if (late_return_type
11005 && sfk != sfk_conversion)
11007 if (cxx_dialect < cxx11)
11008 /* Not using maybe_warn_cpp0x because this should
11009 always be an error. */
11010 error ("trailing return type only available with "
11011 "-std=c++11 or -std=gnu++11");
11012 else
11013 error ("%qs function with trailing return type not "
11014 "declared with %<auto%> type specifier", name);
11015 return error_mark_node;
11018 type = splice_late_return_type (type, late_return_type);
11019 if (type == error_mark_node)
11020 return error_mark_node;
11022 if (late_return_type)
11024 late_return_type_p = true;
11025 type_quals = cp_type_quals (type);
11028 if (type_quals != TYPE_UNQUALIFIED)
11030 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
11031 warning_at (typespec_loc, OPT_Wignored_qualifiers, "type "
11032 "qualifiers ignored on function return type");
11033 /* We now know that the TYPE_QUALS don't apply to the
11034 decl, but to its return type. */
11035 type_quals = TYPE_UNQUALIFIED;
11038 /* Error about some types functions can't return. */
11040 if (TREE_CODE (type) == FUNCTION_TYPE)
11042 error_at (typespec_loc, "%qs declared as function returning "
11043 "a function", name);
11044 return error_mark_node;
11046 if (TREE_CODE (type) == ARRAY_TYPE)
11048 error_at (typespec_loc, "%qs declared as function returning "
11049 "an array", name);
11050 return error_mark_node;
11053 if (ctype == NULL_TREE
11054 && decl_context == FIELD
11055 && funcdecl_p
11056 && friendp == 0)
11057 ctype = current_class_type;
11059 if (ctype && (sfk == sfk_constructor
11060 || sfk == sfk_destructor))
11062 /* We are within a class's scope. If our declarator name
11063 is the same as the class name, and we are defining
11064 a function, then it is a constructor/destructor, and
11065 therefore returns a void type. */
11067 /* ISO C++ 12.4/2. A destructor may not be declared
11068 const or volatile. A destructor may not be static.
11069 A destructor may not be declared with ref-qualifier.
11071 ISO C++ 12.1. A constructor may not be declared
11072 const or volatile. A constructor may not be
11073 virtual. A constructor may not be static.
11074 A constructor may not be declared with ref-qualifier. */
11075 if (staticp == 2)
11076 error ((flags == DTOR_FLAG)
11077 ? G_("destructor cannot be static member function")
11078 : G_("constructor cannot be static member function"));
11079 if (memfn_quals)
11081 error ((flags == DTOR_FLAG)
11082 ? G_("destructors may not be cv-qualified")
11083 : G_("constructors may not be cv-qualified"));
11084 memfn_quals = TYPE_UNQUALIFIED;
11087 if (rqual)
11089 maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
11090 error ((flags == DTOR_FLAG)
11091 ? G_("destructors may not be ref-qualified")
11092 : G_("constructors may not be ref-qualified"));
11093 rqual = REF_QUAL_NONE;
11096 if (decl_context == FIELD
11097 && !member_function_or_else (ctype,
11098 current_class_type,
11099 flags))
11100 return error_mark_node;
11102 if (flags != DTOR_FLAG)
11104 /* It's a constructor. */
11105 if (explicitp == 1)
11106 explicitp = 2;
11107 if (virtualp)
11109 permerror (input_location,
11110 "constructors cannot be declared %<virtual%>");
11111 virtualp = 0;
11113 if (decl_context == FIELD
11114 && sfk != sfk_constructor)
11115 return error_mark_node;
11117 if (decl_context == FIELD)
11118 staticp = 0;
11120 else if (friendp)
11122 if (virtualp)
11124 /* Cannot be both friend and virtual. */
11125 error ("virtual functions cannot be friends");
11126 friendp = 0;
11128 if (decl_context == NORMAL)
11129 error ("friend declaration not in class definition");
11130 if (current_function_decl && funcdef_flag)
11131 error ("can%'t define friend function %qs in a local "
11132 "class definition",
11133 name);
11135 else if (ctype && sfk == sfk_conversion)
11137 if (explicitp == 1)
11139 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
11140 explicitp = 2;
11142 if (late_return_type_p)
11143 error ("a conversion function cannot have a trailing return type");
11145 else if (sfk == sfk_deduction_guide)
11147 if (explicitp == 1)
11148 explicitp = 2;
11151 arg_types = grokparms (declarator->u.function.parameters,
11152 &parms);
11154 if (inner_declarator
11155 && inner_declarator->kind == cdk_id
11156 && inner_declarator->u.id.sfk == sfk_destructor
11157 && arg_types != void_list_node)
11159 error ("destructors may not have parameters");
11160 arg_types = void_list_node;
11161 parms = NULL_TREE;
11164 type = build_function_type (type, arg_types);
11166 tree attrs = declarator->std_attributes;
11167 if (tx_qual)
11169 tree att = build_tree_list (tx_qual, NULL_TREE);
11170 /* transaction_safe applies to the type, but
11171 transaction_safe_dynamic applies to the function. */
11172 if (is_attribute_p ("transaction_safe", tx_qual))
11173 attrs = chainon (attrs, att);
11174 else
11175 returned_attrs = chainon (returned_attrs, att);
11177 if (attrs)
11178 /* [dcl.fct]/2:
11180 The optional attribute-specifier-seq appertains to
11181 the function type. */
11182 decl_attributes (&type, attrs, 0);
11184 if (raises)
11185 type = build_exception_variant (type, raises);
11187 break;
11189 case cdk_pointer:
11190 case cdk_reference:
11191 case cdk_ptrmem:
11192 /* Filter out pointers-to-references and references-to-references.
11193 We can get these if a TYPE_DECL is used. */
11195 if (TREE_CODE (type) == REFERENCE_TYPE)
11197 if (declarator->kind != cdk_reference)
11199 error ("cannot declare pointer to %q#T", type);
11200 type = TREE_TYPE (type);
11203 /* In C++0x, we allow reference to reference declarations
11204 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
11205 and template type arguments [14.3.1/4 temp.arg.type]. The
11206 check for direct reference to reference declarations, which
11207 are still forbidden, occurs below. Reasoning behind the change
11208 can be found in DR106, DR540, and the rvalue reference
11209 proposals. */
11210 else if (cxx_dialect == cxx98)
11212 error ("cannot declare reference to %q#T", type);
11213 type = TREE_TYPE (type);
11216 else if (VOID_TYPE_P (type))
11218 if (declarator->kind == cdk_reference)
11219 error ("cannot declare reference to %q#T", type);
11220 else if (declarator->kind == cdk_ptrmem)
11221 error ("cannot declare pointer to %q#T member", type);
11224 /* We now know that the TYPE_QUALS don't apply to the decl,
11225 but to the target of the pointer. */
11226 type_quals = TYPE_UNQUALIFIED;
11228 /* This code used to handle METHOD_TYPE, but I don't think it's
11229 possible to get it here anymore. */
11230 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11231 if (declarator->kind == cdk_ptrmem
11232 && TREE_CODE (type) == FUNCTION_TYPE)
11234 memfn_quals |= type_memfn_quals (type);
11235 type = build_memfn_type (type,
11236 declarator->u.pointer.class_type,
11237 memfn_quals,
11238 rqual);
11239 if (type == error_mark_node)
11240 return error_mark_node;
11242 rqual = REF_QUAL_NONE;
11243 memfn_quals = TYPE_UNQUALIFIED;
11246 if (TREE_CODE (type) == FUNCTION_TYPE
11247 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
11248 || type_memfn_rqual (type) != REF_QUAL_NONE))
11249 error (declarator->kind == cdk_reference
11250 ? G_("cannot declare reference to qualified function type %qT")
11251 : G_("cannot declare pointer to qualified function type %qT"),
11252 type);
11254 /* When the pointed-to type involves components of variable size,
11255 care must be taken to ensure that the size evaluation code is
11256 emitted early enough to dominate all the possible later uses
11257 and late enough for the variables on which it depends to have
11258 been assigned.
11260 This is expected to happen automatically when the pointed-to
11261 type has a name/declaration of it's own, but special attention
11262 is required if the type is anonymous.
11264 We handle the NORMAL and FIELD contexts here by inserting a
11265 dummy statement that just evaluates the size at a safe point
11266 and ensures it is not deferred until e.g. within a deeper
11267 conditional context (c++/43555).
11269 We expect nothing to be needed here for PARM or TYPENAME.
11270 Evaluating the size at this point for TYPENAME would
11271 actually be incorrect, as we might be in the middle of an
11272 expression with side effects on the pointed-to type size
11273 "arguments" prior to the pointer declaration point and the
11274 size evaluation could end up prior to the side effects. */
11276 if (!TYPE_NAME (type)
11277 && (decl_context == NORMAL || decl_context == FIELD)
11278 && at_function_scope_p ()
11279 && variably_modified_type_p (type, NULL_TREE))
11281 TYPE_NAME (type) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
11282 NULL_TREE, type);
11283 add_decl_expr (TYPE_NAME (type));
11286 if (declarator->kind == cdk_reference)
11288 /* In C++0x, the type we are creating a reference to might be
11289 a typedef which is itself a reference type. In that case,
11290 we follow the reference collapsing rules in
11291 [7.1.3/8 dcl.typedef] to create the final reference type:
11293 "If a typedef TD names a type that is a reference to a type
11294 T, an attempt to create the type 'lvalue reference to cv TD'
11295 creates the type 'lvalue reference to T,' while an attempt
11296 to create the type "rvalue reference to cv TD' creates the
11297 type TD."
11299 if (VOID_TYPE_P (type))
11300 /* We already gave an error. */;
11301 else if (TREE_CODE (type) == REFERENCE_TYPE)
11303 if (declarator->u.reference.rvalue_ref)
11304 /* Leave type alone. */;
11305 else
11306 type = cp_build_reference_type (TREE_TYPE (type), false);
11308 else
11309 type = cp_build_reference_type
11310 (type, declarator->u.reference.rvalue_ref);
11312 /* In C++0x, we need this check for direct reference to
11313 reference declarations, which are forbidden by
11314 [8.3.2/5 dcl.ref]. Reference to reference declarations
11315 are only allowed indirectly through typedefs and template
11316 type arguments. Example:
11318 void foo(int & &); // invalid ref-to-ref decl
11320 typedef int & int_ref;
11321 void foo(int_ref &); // valid ref-to-ref decl
11323 if (inner_declarator && inner_declarator->kind == cdk_reference)
11324 error ("cannot declare reference to %q#T, which is not "
11325 "a typedef or a template type argument", type);
11327 else if (TREE_CODE (type) == METHOD_TYPE)
11328 type = build_ptrmemfunc_type (build_pointer_type (type));
11329 else if (declarator->kind == cdk_ptrmem)
11331 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
11332 != NAMESPACE_DECL);
11333 if (declarator->u.pointer.class_type == error_mark_node)
11334 /* We will already have complained. */
11335 type = error_mark_node;
11336 else
11337 type = build_ptrmem_type (declarator->u.pointer.class_type,
11338 type);
11340 else
11341 type = build_pointer_type (type);
11343 /* Process a list of type modifier keywords (such as
11344 const or volatile) that were given inside the `*' or `&'. */
11346 if (declarator->u.pointer.qualifiers)
11348 type
11349 = cp_build_qualified_type (type,
11350 declarator->u.pointer.qualifiers);
11351 type_quals = cp_type_quals (type);
11354 /* Apply C++11 attributes to the pointer, and not to the
11355 type pointed to. This is unlike what is done for GNU
11356 attributes above. It is to comply with [dcl.ptr]/1:
11358 [the optional attribute-specifier-seq (7.6.1) appertains
11359 to the pointer and not to the object pointed to]. */
11360 if (declarator->std_attributes)
11361 decl_attributes (&type, declarator->std_attributes,
11364 ctype = NULL_TREE;
11365 break;
11367 case cdk_error:
11368 break;
11370 default:
11371 gcc_unreachable ();
11375 /* A `constexpr' specifier used in an object declaration declares
11376 the object as `const'. */
11377 if (constexpr_p && innermost_code != cdk_function)
11379 /* DR1688 says that a `constexpr' specifier in combination with
11380 `volatile' is valid. */
11382 if (TREE_CODE (type) != REFERENCE_TYPE)
11384 type_quals |= TYPE_QUAL_CONST;
11385 type = cp_build_qualified_type (type, type_quals);
11389 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
11390 && TREE_CODE (type) != FUNCTION_TYPE
11391 && TREE_CODE (type) != METHOD_TYPE
11392 && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
11394 error ("template-id %qD used as a declarator",
11395 unqualified_id);
11396 unqualified_id = dname;
11399 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
11400 qualified with a class-name, turn it into a METHOD_TYPE, unless
11401 we know that the function is static. We take advantage of this
11402 opportunity to do other processing that pertains to entities
11403 explicitly declared to be class members. Note that if DECLARATOR
11404 is non-NULL, we know it is a cdk_id declarator; otherwise, we
11405 would not have exited the loop above. */
11406 if (declarator
11407 && declarator->kind == cdk_id
11408 && declarator->u.id.qualifying_scope
11409 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
11411 ctype = declarator->u.id.qualifying_scope;
11412 ctype = TYPE_MAIN_VARIANT (ctype);
11413 template_count = num_template_headers_for_class (ctype);
11415 if (ctype == current_class_type)
11417 if (friendp)
11419 permerror (input_location, "member functions are implicitly "
11420 "friends of their class");
11421 friendp = 0;
11423 else
11424 permerror (declarator->id_loc,
11425 "extra qualification %<%T::%> on member %qs",
11426 ctype, name);
11428 else if (/* If the qualifying type is already complete, then we
11429 can skip the following checks. */
11430 !COMPLETE_TYPE_P (ctype)
11431 && (/* If the function is being defined, then
11432 qualifying type must certainly be complete. */
11433 funcdef_flag
11434 /* A friend declaration of "T::f" is OK, even if
11435 "T" is a template parameter. But, if this
11436 function is not a friend, the qualifying type
11437 must be a class. */
11438 || (!friendp && !CLASS_TYPE_P (ctype))
11439 /* For a declaration, the type need not be
11440 complete, if either it is dependent (since there
11441 is no meaningful definition of complete in that
11442 case) or the qualifying class is currently being
11443 defined. */
11444 || !(dependent_type_p (ctype)
11445 || currently_open_class (ctype)))
11446 /* Check that the qualifying type is complete. */
11447 && !complete_type_or_else (ctype, NULL_TREE))
11448 return error_mark_node;
11449 else if (TREE_CODE (type) == FUNCTION_TYPE)
11451 if (current_class_type
11452 && (!friendp || funcdef_flag || initialized))
11454 error (funcdef_flag || initialized
11455 ? G_("cannot define member function %<%T::%s%> "
11456 "within %qT")
11457 : G_("cannot declare member function %<%T::%s%> "
11458 "within %qT"),
11459 ctype, name, current_class_type);
11460 return error_mark_node;
11463 else if (typedef_p && current_class_type)
11465 error ("cannot declare member %<%T::%s%> within %qT",
11466 ctype, name, current_class_type);
11467 return error_mark_node;
11471 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
11472 ctype = current_class_type;
11474 /* Now TYPE has the actual type. */
11476 if (returned_attrs)
11478 if (attrlist)
11479 *attrlist = chainon (returned_attrs, *attrlist);
11480 else
11481 attrlist = &returned_attrs;
11484 if (declarator
11485 && declarator->kind == cdk_id
11486 && declarator->std_attributes
11487 && attrlist != NULL)
11488 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
11489 a declarator-id appertains to the entity that is declared. */
11490 *attrlist = chainon (*attrlist, declarator->std_attributes);
11492 /* Handle parameter packs. */
11493 if (parameter_pack_p)
11495 if (decl_context == PARM)
11496 /* Turn the type into a pack expansion.*/
11497 type = make_pack_expansion (type);
11498 else
11499 error ("non-parameter %qs cannot be a parameter pack", name);
11502 if ((decl_context == FIELD || decl_context == PARM)
11503 && !processing_template_decl
11504 && variably_modified_type_p (type, NULL_TREE))
11506 if (decl_context == FIELD)
11507 error ("data member may not have variably modified type %qT", type);
11508 else
11509 error ("parameter may not have variably modified type %qT", type);
11510 type = error_mark_node;
11513 if (explicitp == 1 || (explicitp && friendp))
11515 /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
11516 in the declaration of a constructor or conversion function within
11517 a class definition. */
11518 if (!current_class_type)
11519 error_at (declspecs->locations[ds_explicit],
11520 "%<explicit%> outside class declaration");
11521 else if (friendp)
11522 error_at (declspecs->locations[ds_explicit],
11523 "%<explicit%> in friend declaration");
11524 else
11525 error_at (declspecs->locations[ds_explicit],
11526 "only declarations of constructors and conversion operators "
11527 "can be %<explicit%>");
11528 explicitp = 0;
11531 if (storage_class == sc_mutable)
11533 if (decl_context != FIELD || friendp)
11535 error ("non-member %qs cannot be declared %<mutable%>", name);
11536 storage_class = sc_none;
11538 else if (decl_context == TYPENAME || typedef_p)
11540 error ("non-object member %qs cannot be declared %<mutable%>", name);
11541 storage_class = sc_none;
11543 else if (TREE_CODE (type) == FUNCTION_TYPE
11544 || TREE_CODE (type) == METHOD_TYPE)
11546 error ("function %qs cannot be declared %<mutable%>", name);
11547 storage_class = sc_none;
11549 else if (staticp)
11551 error ("static %qs cannot be declared %<mutable%>", name);
11552 storage_class = sc_none;
11554 else if (type_quals & TYPE_QUAL_CONST)
11556 error ("const %qs cannot be declared %<mutable%>", name);
11557 storage_class = sc_none;
11559 else if (TREE_CODE (type) == REFERENCE_TYPE)
11561 permerror (input_location, "reference %qs cannot be declared "
11562 "%<mutable%>", name);
11563 storage_class = sc_none;
11567 /* If this is declaring a typedef name, return a TYPE_DECL. */
11568 if (typedef_p && decl_context != TYPENAME)
11570 tree decl;
11572 /* This declaration:
11574 typedef void f(int) const;
11576 declares a function type which is not a member of any
11577 particular class, but which is cv-qualified; for
11578 example "f S::*" declares a pointer to a const-qualified
11579 member function of S. We record the cv-qualification in the
11580 function type. */
11581 if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
11583 type = apply_memfn_quals (type, memfn_quals, rqual);
11585 /* We have now dealt with these qualifiers. */
11586 memfn_quals = TYPE_UNQUALIFIED;
11587 rqual = REF_QUAL_NONE;
11590 if (type_uses_auto (type))
11592 error ("typedef declared %<auto%>");
11593 type = error_mark_node;
11596 if (reqs)
11597 error_at (location_of (reqs), "requires-clause on typedef");
11599 if (decl_context == FIELD)
11600 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
11601 else
11602 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
11603 if (id_declarator && declarator->u.id.qualifying_scope) {
11604 error_at (DECL_SOURCE_LOCATION (decl),
11605 "typedef name may not be a nested-name-specifier");
11606 TREE_TYPE (decl) = error_mark_node;
11609 if (decl_context != FIELD)
11611 if (!current_function_decl)
11612 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
11613 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
11614 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
11615 (current_function_decl)))
11616 /* The TYPE_DECL is "abstract" because there will be
11617 clones of this constructor/destructor, and there will
11618 be copies of this TYPE_DECL generated in those
11619 clones. The decloning optimization (for space) may
11620 revert this subsequently if it determines that
11621 the clones should share a common implementation. */
11622 DECL_ABSTRACT_P (decl) = true;
11624 else if (current_class_type
11625 && constructor_name_p (unqualified_id, current_class_type))
11626 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
11627 "as enclosing class",
11628 unqualified_id);
11630 /* If the user declares "typedef struct {...} foo" then the
11631 struct will have an anonymous name. Fill that name in now.
11632 Nothing can refer to it, so nothing needs know about the name
11633 change. */
11634 if (type != error_mark_node
11635 && unqualified_id
11636 && TYPE_NAME (type)
11637 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11638 && TYPE_UNNAMED_P (type)
11639 && declspecs->type_definition_p
11640 && attributes_naming_typedef_ok (*attrlist)
11641 && cp_type_quals (type) == TYPE_UNQUALIFIED)
11642 name_unnamed_type (type, decl);
11644 if (signed_p
11645 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11646 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11648 bad_specifiers (decl, BSP_TYPE, virtualp,
11649 memfn_quals != TYPE_UNQUALIFIED,
11650 inlinep, friendp, raises != NULL_TREE);
11652 if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
11653 /* Acknowledge that this was written:
11654 `using analias = atype;'. */
11655 TYPE_DECL_ALIAS_P (decl) = 1;
11657 return decl;
11660 /* Detect the case of an array type of unspecified size
11661 which came, as such, direct from a typedef name.
11662 We must copy the type, so that the array's domain can be
11663 individually set by the object's initializer. */
11665 if (type && typedef_type
11666 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
11667 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
11668 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
11670 /* Detect where we're using a typedef of function type to declare a
11671 function. PARMS will not be set, so we must create it now. */
11673 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
11675 tree decls = NULL_TREE;
11676 tree args;
11678 for (args = TYPE_ARG_TYPES (type);
11679 args && args != void_list_node;
11680 args = TREE_CHAIN (args))
11682 tree decl = cp_build_parm_decl (NULL_TREE, NULL_TREE,
11683 TREE_VALUE (args));
11685 DECL_CHAIN (decl) = decls;
11686 decls = decl;
11689 parms = nreverse (decls);
11691 if (decl_context != TYPENAME)
11693 /* The qualifiers on the function type become the qualifiers on
11694 the non-static member function. */
11695 memfn_quals |= type_memfn_quals (type);
11696 rqual = type_memfn_rqual (type);
11697 type_quals = TYPE_UNQUALIFIED;
11701 /* If this is a type name (such as, in a cast or sizeof),
11702 compute the type and return it now. */
11704 if (decl_context == TYPENAME)
11706 /* Note that here we don't care about type_quals. */
11708 /* Special case: "friend class foo" looks like a TYPENAME context. */
11709 if (friendp)
11711 if (inlinep)
11713 error ("%<inline%> specified for friend class declaration");
11714 inlinep = 0;
11717 if (!current_aggr)
11719 /* Don't allow friend declaration without a class-key. */
11720 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11721 permerror (input_location, "template parameters cannot be friends");
11722 else if (TREE_CODE (type) == TYPENAME_TYPE)
11723 permerror (input_location, "friend declaration requires class-key, "
11724 "i.e. %<friend class %T::%D%>",
11725 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
11726 else
11727 permerror (input_location, "friend declaration requires class-key, "
11728 "i.e. %<friend %#T%>",
11729 type);
11732 /* Only try to do this stuff if we didn't already give up. */
11733 if (type != integer_type_node)
11735 /* A friendly class? */
11736 if (current_class_type)
11737 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
11738 /*complain=*/true);
11739 else
11740 error ("trying to make class %qT a friend of global scope",
11741 type);
11743 type = void_type_node;
11746 else if (memfn_quals || rqual)
11748 if (ctype == NULL_TREE
11749 && TREE_CODE (type) == METHOD_TYPE)
11750 ctype = TYPE_METHOD_BASETYPE (type);
11752 if (ctype)
11753 type = build_memfn_type (type, ctype, memfn_quals, rqual);
11754 /* Core issue #547: need to allow this in template type args.
11755 Allow it in general in C++11 for alias-declarations. */
11756 else if ((template_type_arg || cxx_dialect >= cxx11)
11757 && TREE_CODE (type) == FUNCTION_TYPE)
11758 type = apply_memfn_quals (type, memfn_quals, rqual);
11759 else
11760 error ("invalid qualifiers on non-member function type");
11763 if (reqs)
11764 error_at (location_of (reqs), "requires-clause on type-id");
11766 return type;
11768 else if (unqualified_id == NULL_TREE && decl_context != PARM
11769 && decl_context != CATCHPARM
11770 && TREE_CODE (type) != UNION_TYPE
11771 && ! bitfield
11772 && innermost_code != cdk_decomp)
11774 error ("abstract declarator %qT used as declaration", type);
11775 return error_mark_node;
11778 if (!FUNC_OR_METHOD_TYPE_P (type))
11780 /* Only functions may be declared using an operator-function-id. */
11781 if (dname && IDENTIFIER_ANY_OP_P (dname))
11783 error ("declaration of %qD as non-function", dname);
11784 return error_mark_node;
11787 if (reqs)
11788 error_at (location_of (reqs),
11789 "requires-clause on declaration of non-function type %qT",
11790 type);
11793 /* We don't check parameter types here because we can emit a better
11794 error message later. */
11795 if (decl_context != PARM)
11797 type = check_var_type (unqualified_id, type);
11798 if (type == error_mark_node)
11799 return error_mark_node;
11802 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
11803 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
11805 if (decl_context == PARM || decl_context == CATCHPARM)
11807 if (ctype || in_namespace)
11808 error ("cannot use %<::%> in parameter declaration");
11810 if (type_uses_auto (type)
11811 && !(cxx_dialect >= cxx17 && template_parm_flag))
11813 if (cxx_dialect >= cxx14)
11814 error ("%<auto%> parameter not permitted in this context");
11815 else
11816 error ("parameter declared %<auto%>");
11817 type = error_mark_node;
11820 /* A parameter declared as an array of T is really a pointer to T.
11821 One declared as a function is really a pointer to a function.
11822 One declared as a member is really a pointer to member. */
11824 if (TREE_CODE (type) == ARRAY_TYPE)
11826 /* Transfer const-ness of array into that of type pointed to. */
11827 type = build_pointer_type (TREE_TYPE (type));
11828 type_quals = TYPE_UNQUALIFIED;
11829 array_parameter_p = true;
11831 else if (TREE_CODE (type) == FUNCTION_TYPE)
11832 type = build_pointer_type (type);
11835 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
11836 && !(identifier_p (unqualified_id)
11837 && IDENTIFIER_NEWDEL_OP_P (unqualified_id)))
11839 cp_cv_quals real_quals = memfn_quals;
11840 if (cxx_dialect < cxx14 && constexpr_p
11841 && sfk != sfk_constructor && sfk != sfk_destructor)
11842 real_quals |= TYPE_QUAL_CONST;
11843 type = build_memfn_type (type, ctype, real_quals, rqual);
11847 tree decl = NULL_TREE;
11849 if (decl_context == PARM)
11851 decl = cp_build_parm_decl (NULL_TREE, unqualified_id, type);
11852 DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
11854 bad_specifiers (decl, BSP_PARM, virtualp,
11855 memfn_quals != TYPE_UNQUALIFIED,
11856 inlinep, friendp, raises != NULL_TREE);
11858 else if (decl_context == FIELD)
11860 if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE)
11861 if (tree auto_node = type_uses_auto (type))
11863 location_t loc = declspecs->locations[ds_type_spec];
11864 if (CLASS_PLACEHOLDER_TEMPLATE (auto_node))
11865 error_at (loc, "invalid use of template-name %qE without an "
11866 "argument list",
11867 CLASS_PLACEHOLDER_TEMPLATE (auto_node));
11868 else
11869 error_at (loc, "non-static data member declared with "
11870 "placeholder %qT", auto_node);
11871 type = error_mark_node;
11874 /* The C99 flexible array extension. */
11875 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
11876 && TYPE_DOMAIN (type) == NULL_TREE)
11878 if (ctype
11879 && (TREE_CODE (ctype) == UNION_TYPE
11880 || TREE_CODE (ctype) == QUAL_UNION_TYPE))
11882 error ("flexible array member in union");
11883 type = error_mark_node;
11885 else
11887 /* Array is a flexible member. */
11888 if (in_system_header_at (input_location))
11889 /* Do not warn on flexible array members in system
11890 headers because glibc uses them. */;
11891 else if (name)
11892 pedwarn (input_location, OPT_Wpedantic,
11893 "ISO C++ forbids flexible array member %qs", name);
11894 else
11895 pedwarn (input_location, OPT_Wpedantic,
11896 "ISO C++ forbids flexible array members");
11898 /* Flexible array member has a null domain. */
11899 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
11903 if (type == error_mark_node)
11905 /* Happens when declaring arrays of sizes which
11906 are error_mark_node, for example. */
11907 decl = NULL_TREE;
11909 else if (in_namespace && !friendp)
11911 /* Something like struct S { int N::j; }; */
11912 error ("invalid use of %<::%>");
11913 return error_mark_node;
11915 else if (TREE_CODE (type) == FUNCTION_TYPE
11916 || TREE_CODE (type) == METHOD_TYPE)
11918 int publicp = 0;
11919 tree function_context;
11921 if (friendp == 0)
11923 /* This should never happen in pure C++ (the check
11924 could be an assert). It could happen in
11925 Objective-C++ if someone writes invalid code that
11926 uses a function declaration for an instance
11927 variable or property (instance variables and
11928 properties are parsed as FIELD_DECLs, but they are
11929 part of an Objective-C class, not a C++ class).
11930 That code is invalid and is caught by this
11931 check. */
11932 if (!ctype)
11934 error ("declaration of function %qD in invalid context",
11935 unqualified_id);
11936 return error_mark_node;
11939 /* ``A union may [ ... ] not [ have ] virtual functions.''
11940 ARM 9.5 */
11941 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
11943 error ("function %qD declared %<virtual%> inside a union",
11944 unqualified_id);
11945 return error_mark_node;
11948 if (virtualp
11949 && identifier_p (unqualified_id)
11950 && IDENTIFIER_NEWDEL_OP_P (unqualified_id))
11952 error ("%qD cannot be declared %<virtual%>, since it "
11953 "is always static", unqualified_id);
11954 virtualp = 0;
11958 /* Check that the name used for a destructor makes sense. */
11959 if (sfk == sfk_destructor)
11961 tree uqname = id_declarator->u.id.unqualified_name;
11963 if (!ctype)
11965 gcc_assert (friendp);
11966 error ("expected qualified name in friend declaration "
11967 "for destructor %qD", uqname);
11968 return error_mark_node;
11971 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
11973 error ("declaration of %qD as member of %qT",
11974 uqname, ctype);
11975 return error_mark_node;
11977 if (concept_p)
11979 error ("a destructor cannot be %<concept%>");
11980 return error_mark_node;
11982 if (constexpr_p)
11984 error ("a destructor cannot be %<constexpr%>");
11985 return error_mark_node;
11988 else if (sfk == sfk_constructor && friendp && !ctype)
11990 error ("expected qualified name in friend declaration "
11991 "for constructor %qD",
11992 id_declarator->u.id.unqualified_name);
11993 return error_mark_node;
11995 if (sfk == sfk_constructor)
11996 if (concept_p)
11998 error ("a constructor cannot be %<concept%>");
11999 return error_mark_node;
12001 if (concept_p)
12003 error ("a concept cannot be a member function");
12004 concept_p = false;
12007 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12009 tree tmpl = TREE_OPERAND (unqualified_id, 0);
12010 if (variable_template_p (tmpl))
12012 error ("specialization of variable template %qD "
12013 "declared as function", tmpl);
12014 inform (DECL_SOURCE_LOCATION (tmpl),
12015 "variable template declared here");
12016 return error_mark_node;
12020 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
12021 function_context = (ctype != NULL_TREE) ?
12022 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
12023 publicp = (! friendp || ! staticp)
12024 && function_context == NULL_TREE;
12026 if (late_return_type_p)
12027 TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
12029 decl = grokfndecl (ctype, type,
12030 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
12031 ? unqualified_id : dname,
12032 parms,
12033 unqualified_id,
12034 reqs,
12035 virtualp, flags, memfn_quals, rqual, raises,
12036 friendp ? -1 : 0, friendp, publicp,
12037 inlinep | (2 * constexpr_p) | (4 * concept_p),
12038 initialized == SD_DELETED, sfk,
12039 funcdef_flag, template_count, in_namespace,
12040 attrlist, declarator->id_loc);
12041 decl = set_virt_specifiers (decl, virt_specifiers);
12042 if (decl == NULL_TREE)
12043 return error_mark_node;
12044 #if 0
12045 /* This clobbers the attrs stored in `decl' from `attrlist'. */
12046 /* The decl and setting of decl_attr is also turned off. */
12047 decl = build_decl_attribute_variant (decl, decl_attr);
12048 #endif
12050 /* [class.conv.ctor]
12052 A constructor declared without the function-specifier
12053 explicit that can be called with a single parameter
12054 specifies a conversion from the type of its first
12055 parameter to the type of its class. Such a constructor
12056 is called a converting constructor. */
12057 if (explicitp == 2)
12058 DECL_NONCONVERTING_P (decl) = 1;
12060 else if (!staticp && !dependent_type_p (type)
12061 && !COMPLETE_TYPE_P (complete_type (type))
12062 && (!complete_or_array_type_p (type)
12063 || initialized == 0))
12065 if (TREE_CODE (type) != ARRAY_TYPE
12066 || !COMPLETE_TYPE_P (TREE_TYPE (type)))
12068 if (unqualified_id)
12070 error ("field %qD has incomplete type %qT",
12071 unqualified_id, type);
12072 cxx_incomplete_type_inform (strip_array_types (type));
12074 else
12075 error ("name %qT has incomplete type", type);
12077 type = error_mark_node;
12078 decl = NULL_TREE;
12081 else
12083 if (friendp)
12085 error ("%qE is neither function nor member function; "
12086 "cannot be declared friend", unqualified_id);
12087 friendp = 0;
12089 decl = NULL_TREE;
12092 if (friendp)
12094 /* Friends are treated specially. */
12095 if (ctype == current_class_type)
12096 ; /* We already issued a permerror. */
12097 else if (decl && DECL_NAME (decl))
12099 if (template_class_depth (current_class_type) == 0)
12101 decl = check_explicit_specialization
12102 (unqualified_id, decl, template_count,
12103 2 * funcdef_flag + 4);
12104 if (decl == error_mark_node)
12105 return error_mark_node;
12108 decl = do_friend (ctype, unqualified_id, decl,
12109 *attrlist, flags,
12110 funcdef_flag);
12111 return decl;
12113 else
12114 return error_mark_node;
12117 /* Structure field. It may not be a function, except for C++. */
12119 if (decl == NULL_TREE)
12121 if (staticp)
12123 /* C++ allows static class members. All other work
12124 for this is done by grokfield. */
12125 decl = build_lang_decl_loc (declarator
12126 ? declarator->id_loc
12127 : input_location,
12128 VAR_DECL, unqualified_id, type);
12129 set_linkage_for_static_data_member (decl);
12130 if (concept_p)
12131 error ("static data member %qE declared %<concept%>",
12132 unqualified_id);
12133 else if (constexpr_p && !initialized)
12135 error ("%<constexpr%> static data member %qD must have an "
12136 "initializer", decl);
12137 constexpr_p = false;
12140 if (inlinep)
12141 mark_inline_variable (decl);
12143 if (!DECL_VAR_DECLARED_INLINE_P (decl)
12144 && !(cxx_dialect >= cxx17 && constexpr_p))
12145 /* Even if there is an in-class initialization, DECL
12146 is considered undefined until an out-of-class
12147 definition is provided, unless this is an inline
12148 variable. */
12149 DECL_EXTERNAL (decl) = 1;
12151 if (thread_p)
12153 CP_DECL_THREAD_LOCAL_P (decl) = true;
12154 if (!processing_template_decl)
12155 set_decl_tls_model (decl, decl_default_tls_model (decl));
12156 if (declspecs->gnu_thread_keyword_p)
12157 SET_DECL_GNU_TLS_P (decl);
12160 else
12162 if (concept_p)
12163 error ("non-static data member %qE declared %<concept%>",
12164 unqualified_id);
12165 else if (constexpr_p)
12167 error ("non-static data member %qE declared %<constexpr%>",
12168 unqualified_id);
12169 constexpr_p = false;
12171 decl = build_decl (input_location,
12172 FIELD_DECL, unqualified_id, type);
12173 DECL_NONADDRESSABLE_P (decl) = bitfield;
12174 if (bitfield && !unqualified_id)
12176 TREE_NO_WARNING (decl) = 1;
12177 DECL_PADDING_P (decl) = 1;
12180 if (storage_class == sc_mutable)
12182 DECL_MUTABLE_P (decl) = 1;
12183 storage_class = sc_none;
12186 if (initialized)
12188 /* An attempt is being made to initialize a non-static
12189 member. This is new in C++11. */
12190 maybe_warn_cpp0x (CPP0X_NSDMI);
12192 /* If this has been parsed with static storage class, but
12193 errors forced staticp to be cleared, ensure NSDMI is
12194 not present. */
12195 if (declspecs->storage_class == sc_static)
12196 DECL_INITIAL (decl) = error_mark_node;
12200 bad_specifiers (decl, BSP_FIELD, virtualp,
12201 memfn_quals != TYPE_UNQUALIFIED,
12202 staticp ? false : inlinep, friendp,
12203 raises != NULL_TREE);
12206 else if (TREE_CODE (type) == FUNCTION_TYPE
12207 || TREE_CODE (type) == METHOD_TYPE)
12209 tree original_name;
12210 int publicp = 0;
12212 if (!unqualified_id)
12213 return error_mark_node;
12215 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12216 original_name = dname;
12217 else
12218 original_name = unqualified_id;
12219 // FIXME:gcc_assert (original_name == dname);
12221 if (storage_class == sc_auto)
12222 error ("storage class %<auto%> invalid for function %qs", name);
12223 else if (storage_class == sc_register)
12224 error ("storage class %<register%> invalid for function %qs", name);
12225 else if (thread_p)
12227 if (declspecs->gnu_thread_keyword_p)
12228 error ("storage class %<__thread%> invalid for function %qs",
12229 name);
12230 else
12231 error ("storage class %<thread_local%> invalid for function %qs",
12232 name);
12235 if (virt_specifiers)
12236 error ("virt-specifiers in %qs not allowed outside a class definition", name);
12237 /* Function declaration not at top level.
12238 Storage classes other than `extern' are not allowed
12239 and `extern' makes no difference. */
12240 if (! toplevel_bindings_p ()
12241 && (storage_class == sc_static
12242 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
12243 && pedantic)
12245 if (storage_class == sc_static)
12246 pedwarn (input_location, OPT_Wpedantic,
12247 "%<static%> specifier invalid for function %qs "
12248 "declared out of global scope", name);
12249 else
12250 pedwarn (input_location, OPT_Wpedantic,
12251 "%<inline%> specifier invalid for function %qs "
12252 "declared out of global scope", name);
12255 if (ctype == NULL_TREE)
12257 if (virtualp)
12259 error ("virtual non-class function %qs", name);
12260 virtualp = 0;
12262 else if (sfk == sfk_constructor
12263 || sfk == sfk_destructor)
12265 error (funcdef_flag
12266 ? G_("%qs defined in a non-class scope")
12267 : G_("%qs declared in a non-class scope"), name);
12268 sfk = sfk_none;
12272 /* Record whether the function is public. */
12273 publicp = (ctype != NULL_TREE
12274 || storage_class != sc_static);
12276 if (late_return_type_p)
12277 TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
12279 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
12280 reqs, virtualp, flags, memfn_quals, rqual, raises,
12281 1, friendp,
12282 publicp,
12283 inlinep | (2 * constexpr_p) | (4 * concept_p),
12284 initialized == SD_DELETED,
12285 sfk,
12286 funcdef_flag,
12287 template_count, in_namespace, attrlist,
12288 declarator->id_loc);
12289 if (decl == NULL_TREE)
12290 return error_mark_node;
12292 if (explicitp == 2)
12293 DECL_NONCONVERTING_P (decl) = 1;
12294 if (staticp == 1)
12296 int invalid_static = 0;
12298 /* Don't allow a static member function in a class, and forbid
12299 declaring main to be static. */
12300 if (TREE_CODE (type) == METHOD_TYPE)
12302 permerror (input_location, "cannot declare member function %qD to have "
12303 "static linkage", decl);
12304 invalid_static = 1;
12306 else if (current_function_decl)
12308 /* 7.1.1: There can be no static function declarations within a
12309 block. */
12310 error ("cannot declare static function inside another function");
12311 invalid_static = 1;
12314 if (invalid_static)
12316 staticp = 0;
12317 storage_class = sc_none;
12321 else
12323 /* It's a variable. */
12325 /* An uninitialized decl with `extern' is a reference. */
12326 decl = grokvardecl (type, dname, unqualified_id,
12327 declspecs,
12328 initialized,
12329 type_quals,
12330 inlinep,
12331 concept_p,
12332 template_count,
12333 ctype ? ctype : in_namespace);
12334 if (decl == NULL_TREE)
12335 return error_mark_node;
12337 bad_specifiers (decl, BSP_VAR, virtualp,
12338 memfn_quals != TYPE_UNQUALIFIED,
12339 inlinep, friendp, raises != NULL_TREE);
12341 if (ctype)
12343 DECL_CONTEXT (decl) = ctype;
12344 if (staticp == 1)
12346 permerror (input_location, "%<static%> may not be used when defining "
12347 "(as opposed to declaring) a static data member");
12348 staticp = 0;
12349 storage_class = sc_none;
12351 if (storage_class == sc_register && TREE_STATIC (decl))
12353 error ("static member %qD declared %<register%>", decl);
12354 storage_class = sc_none;
12356 if (storage_class == sc_extern && pedantic)
12358 pedwarn (input_location, OPT_Wpedantic,
12359 "cannot explicitly declare member %q#D to have "
12360 "extern linkage", decl);
12361 storage_class = sc_none;
12364 else if (constexpr_p && DECL_EXTERNAL (decl))
12366 error ("declaration of %<constexpr%> variable %qD "
12367 "is not a definition", decl);
12368 constexpr_p = false;
12371 if (inlinep)
12372 mark_inline_variable (decl);
12373 if (innermost_code == cdk_decomp)
12375 gcc_assert (declarator && declarator->kind == cdk_decomp);
12376 DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
12377 DECL_ARTIFICIAL (decl) = 1;
12378 fit_decomposition_lang_decl (decl, NULL_TREE);
12382 if (VAR_P (decl) && !initialized)
12383 if (tree auto_node = type_uses_auto (type))
12384 if (!CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12386 location_t loc = declspecs->locations[ds_type_spec];
12387 error_at (loc, "declaration of %q#D has no initializer", decl);
12388 TREE_TYPE (decl) = error_mark_node;
12391 if (storage_class == sc_extern && initialized && !funcdef_flag)
12393 if (toplevel_bindings_p ())
12395 /* It's common practice (and completely valid) to have a const
12396 be initialized and declared extern. */
12397 if (!(type_quals & TYPE_QUAL_CONST))
12398 warning (0, "%qs initialized and declared %<extern%>", name);
12400 else
12402 error ("%qs has both %<extern%> and initializer", name);
12403 return error_mark_node;
12407 /* Record `register' declaration for warnings on &
12408 and in case doing stupid register allocation. */
12410 if (storage_class == sc_register)
12412 DECL_REGISTER (decl) = 1;
12413 /* Warn about register storage specifiers on PARM_DECLs. */
12414 if (TREE_CODE (decl) == PARM_DECL)
12416 if (cxx_dialect >= cxx17)
12417 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12418 "ISO C++17 does not allow %<register%> storage "
12419 "class specifier");
12420 else
12421 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12422 "%<register%> storage class specifier used");
12425 else if (storage_class == sc_extern)
12426 DECL_THIS_EXTERN (decl) = 1;
12427 else if (storage_class == sc_static)
12428 DECL_THIS_STATIC (decl) = 1;
12430 /* Set constexpr flag on vars (functions got it in grokfndecl). */
12431 if (constexpr_p && VAR_P (decl))
12432 DECL_DECLARED_CONSTEXPR_P (decl) = true;
12434 /* Record constancy and volatility on the DECL itself . There's
12435 no need to do this when processing a template; we'll do this
12436 for the instantiated declaration based on the type of DECL. */
12437 if (!processing_template_decl)
12438 cp_apply_type_quals_to_decl (type_quals, decl);
12440 return decl;
12444 /* Subroutine of start_function. Ensure that each of the parameter
12445 types (as listed in PARMS) is complete, as is required for a
12446 function definition. */
12448 static void
12449 require_complete_types_for_parms (tree parms)
12451 for (; parms; parms = DECL_CHAIN (parms))
12453 if (dependent_type_p (TREE_TYPE (parms)))
12454 continue;
12455 if (!VOID_TYPE_P (TREE_TYPE (parms))
12456 && complete_type_or_else (TREE_TYPE (parms), parms))
12458 relayout_decl (parms);
12459 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
12461 maybe_warn_parm_abi (TREE_TYPE (parms),
12462 DECL_SOURCE_LOCATION (parms));
12464 else
12465 /* grokparms or complete_type_or_else will have already issued
12466 an error. */
12467 TREE_TYPE (parms) = error_mark_node;
12471 /* Returns nonzero if T is a local variable. */
12474 local_variable_p (const_tree t)
12476 if ((VAR_P (t)
12477 /* A VAR_DECL with a context that is a _TYPE is a static data
12478 member. */
12479 && !TYPE_P (CP_DECL_CONTEXT (t))
12480 /* Any other non-local variable must be at namespace scope. */
12481 && !DECL_NAMESPACE_SCOPE_P (t))
12482 || (TREE_CODE (t) == PARM_DECL))
12483 return 1;
12485 return 0;
12488 /* Like local_variable_p, but suitable for use as a tree-walking
12489 function. */
12491 static tree
12492 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
12493 void * /*data*/)
12495 if (local_variable_p (*tp)
12496 && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
12497 return *tp;
12498 else if (TYPE_P (*tp))
12499 *walk_subtrees = 0;
12501 return NULL_TREE;
12504 /* Check that ARG, which is a default-argument expression for a
12505 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
12506 something goes wrong. DECL may also be a _TYPE node, rather than a
12507 DECL, if there is no DECL available. */
12509 tree
12510 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
12512 tree var;
12513 tree decl_type;
12515 if (TREE_CODE (arg) == DEFAULT_ARG)
12516 /* We get a DEFAULT_ARG when looking at an in-class declaration
12517 with a default argument. Ignore the argument for now; we'll
12518 deal with it after the class is complete. */
12519 return arg;
12521 if (TYPE_P (decl))
12523 decl_type = decl;
12524 decl = NULL_TREE;
12526 else
12527 decl_type = TREE_TYPE (decl);
12529 if (arg == error_mark_node
12530 || decl == error_mark_node
12531 || TREE_TYPE (arg) == error_mark_node
12532 || decl_type == error_mark_node)
12533 /* Something already went wrong. There's no need to check
12534 further. */
12535 return error_mark_node;
12537 /* [dcl.fct.default]
12539 A default argument expression is implicitly converted to the
12540 parameter type. */
12541 ++cp_unevaluated_operand;
12542 perform_implicit_conversion_flags (decl_type, arg, complain,
12543 LOOKUP_IMPLICIT);
12544 --cp_unevaluated_operand;
12546 /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
12547 the call sites. */
12548 if (TYPE_PTR_OR_PTRMEM_P (decl_type)
12549 && null_ptr_cst_p (arg))
12550 return nullptr_node;
12552 /* [dcl.fct.default]
12554 Local variables shall not be used in default argument
12555 expressions.
12557 The keyword `this' shall not be used in a default argument of a
12558 member function. */
12559 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
12560 if (var)
12562 if (complain & tf_warning_or_error)
12564 if (DECL_NAME (var) == this_identifier)
12565 permerror (input_location, "default argument %qE uses %qD",
12566 arg, var);
12567 else
12568 error ("default argument %qE uses local variable %qD", arg, var);
12570 return error_mark_node;
12573 /* All is well. */
12574 return arg;
12577 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
12579 static tree
12580 type_is_deprecated (tree type)
12582 enum tree_code code;
12583 if (TREE_DEPRECATED (type))
12584 return type;
12585 if (TYPE_NAME (type))
12587 if (TREE_DEPRECATED (TYPE_NAME (type)))
12588 return type;
12589 else
12590 return NULL_TREE;
12593 /* Do warn about using typedefs to a deprecated class. */
12594 if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
12595 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
12597 code = TREE_CODE (type);
12599 if (code == POINTER_TYPE || code == REFERENCE_TYPE
12600 || code == OFFSET_TYPE || code == FUNCTION_TYPE
12601 || code == METHOD_TYPE || code == ARRAY_TYPE)
12602 return type_is_deprecated (TREE_TYPE (type));
12604 if (TYPE_PTRMEMFUNC_P (type))
12605 return type_is_deprecated
12606 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
12608 return NULL_TREE;
12611 /* Decode the list of parameter types for a function type.
12612 Given the list of things declared inside the parens,
12613 return a list of types.
12615 If this parameter does not end with an ellipsis, we append
12616 void_list_node.
12618 *PARMS is set to the chain of PARM_DECLs created. */
12620 tree
12621 grokparms (tree parmlist, tree *parms)
12623 tree result = NULL_TREE;
12624 tree decls = NULL_TREE;
12625 tree parm;
12626 int any_error = 0;
12628 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
12630 tree type = NULL_TREE;
12631 tree init = TREE_PURPOSE (parm);
12632 tree decl = TREE_VALUE (parm);
12634 if (parm == void_list_node)
12635 break;
12637 if (! decl || TREE_TYPE (decl) == error_mark_node)
12638 continue;
12640 type = TREE_TYPE (decl);
12641 if (VOID_TYPE_P (type))
12643 if (same_type_p (type, void_type_node)
12644 && !init
12645 && !DECL_NAME (decl) && !result
12646 && TREE_CHAIN (parm) == void_list_node)
12647 /* DR 577: A parameter list consisting of a single
12648 unnamed parameter of non-dependent type 'void'. */
12649 break;
12650 else if (cv_qualified_p (type))
12651 error_at (DECL_SOURCE_LOCATION (decl),
12652 "invalid use of cv-qualified type %qT in "
12653 "parameter declaration", type);
12654 else
12655 error_at (DECL_SOURCE_LOCATION (decl),
12656 "invalid use of type %<void%> in parameter "
12657 "declaration");
12658 /* It's not a good idea to actually create parameters of
12659 type `void'; other parts of the compiler assume that a
12660 void type terminates the parameter list. */
12661 type = error_mark_node;
12662 TREE_TYPE (decl) = error_mark_node;
12665 if (type != error_mark_node)
12667 if (deprecated_state != DEPRECATED_SUPPRESS)
12669 tree deptype = type_is_deprecated (type);
12670 if (deptype)
12671 warn_deprecated_use (deptype, NULL_TREE);
12674 /* Top-level qualifiers on the parameters are
12675 ignored for function types. */
12676 type = cp_build_qualified_type (type, 0);
12677 if (TREE_CODE (type) == METHOD_TYPE)
12679 error ("parameter %qD invalidly declared method type", decl);
12680 type = build_pointer_type (type);
12681 TREE_TYPE (decl) = type;
12683 else if (abstract_virtuals_error (decl, type))
12684 any_error = 1; /* Seems like a good idea. */
12685 else if (cxx_dialect < cxx17 && POINTER_TYPE_P (type))
12687 /* Before C++17 DR 393:
12688 [dcl.fct]/6, parameter types cannot contain pointers
12689 (references) to arrays of unknown bound. */
12690 tree t = TREE_TYPE (type);
12691 int ptr = TYPE_PTR_P (type);
12693 while (1)
12695 if (TYPE_PTR_P (t))
12696 ptr = 1;
12697 else if (TREE_CODE (t) != ARRAY_TYPE)
12698 break;
12699 else if (!TYPE_DOMAIN (t))
12700 break;
12701 t = TREE_TYPE (t);
12703 if (TREE_CODE (t) == ARRAY_TYPE)
12704 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
12706 ? G_("parameter %qD includes pointer to array of "
12707 "unknown bound %qT")
12708 : G_("parameter %qD includes reference to array of "
12709 "unknown bound %qT"),
12710 decl, t);
12713 if (any_error)
12714 init = NULL_TREE;
12715 else if (init && !processing_template_decl)
12716 init = check_default_argument (decl, init, tf_warning_or_error);
12719 DECL_CHAIN (decl) = decls;
12720 decls = decl;
12721 result = tree_cons (init, type, result);
12723 decls = nreverse (decls);
12724 result = nreverse (result);
12725 if (parm)
12726 result = chainon (result, void_list_node);
12727 *parms = decls;
12729 return result;
12733 /* D is a constructor or overloaded `operator='.
12735 Let T be the class in which D is declared. Then, this function
12736 returns:
12738 -1 if D's is an ill-formed constructor or copy assignment operator
12739 whose first parameter is of type `T'.
12740 0 if D is not a copy constructor or copy assignment
12741 operator.
12742 1 if D is a copy constructor or copy assignment operator whose
12743 first parameter is a reference to non-const qualified T.
12744 2 if D is a copy constructor or copy assignment operator whose
12745 first parameter is a reference to const qualified T.
12747 This function can be used as a predicate. Positive values indicate
12748 a copy constructor and nonzero values indicate a copy assignment
12749 operator. */
12752 copy_fn_p (const_tree d)
12754 tree args;
12755 tree arg_type;
12756 int result = 1;
12758 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
12760 if (TREE_CODE (d) == TEMPLATE_DECL
12761 || (DECL_TEMPLATE_INFO (d)
12762 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
12763 /* Instantiations of template member functions are never copy
12764 functions. Note that member functions of templated classes are
12765 represented as template functions internally, and we must
12766 accept those as copy functions. */
12767 return 0;
12769 args = FUNCTION_FIRST_USER_PARMTYPE (d);
12770 if (!args)
12771 return 0;
12773 arg_type = TREE_VALUE (args);
12774 if (arg_type == error_mark_node)
12775 return 0;
12777 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
12779 /* Pass by value copy assignment operator. */
12780 result = -1;
12782 else if (TREE_CODE (arg_type) == REFERENCE_TYPE
12783 && !TYPE_REF_IS_RVALUE (arg_type)
12784 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
12786 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
12787 result = 2;
12789 else
12790 return 0;
12792 args = TREE_CHAIN (args);
12794 if (args && args != void_list_node && !TREE_PURPOSE (args))
12795 /* There are more non-optional args. */
12796 return 0;
12798 return result;
12801 /* D is a constructor or overloaded `operator='.
12803 Let T be the class in which D is declared. Then, this function
12804 returns true when D is a move constructor or move assignment
12805 operator, false otherwise. */
12807 bool
12808 move_fn_p (const_tree d)
12810 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
12812 if (cxx_dialect == cxx98)
12813 /* There are no move constructors if we are in C++98 mode. */
12814 return false;
12816 if (TREE_CODE (d) == TEMPLATE_DECL
12817 || (DECL_TEMPLATE_INFO (d)
12818 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
12819 /* Instantiations of template member functions are never move
12820 functions. Note that member functions of templated classes are
12821 represented as template functions internally, and we must
12822 accept those as move functions. */
12823 return 0;
12825 return move_signature_fn_p (d);
12828 /* D is a constructor or overloaded `operator='.
12830 Then, this function returns true when D has the same signature as a move
12831 constructor or move assignment operator (because either it is such a
12832 ctor/op= or it is a template specialization with the same signature),
12833 false otherwise. */
12835 bool
12836 move_signature_fn_p (const_tree d)
12838 tree args;
12839 tree arg_type;
12840 bool result = false;
12842 args = FUNCTION_FIRST_USER_PARMTYPE (d);
12843 if (!args)
12844 return 0;
12846 arg_type = TREE_VALUE (args);
12847 if (arg_type == error_mark_node)
12848 return 0;
12850 if (TREE_CODE (arg_type) == REFERENCE_TYPE
12851 && TYPE_REF_IS_RVALUE (arg_type)
12852 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
12853 DECL_CONTEXT (d)))
12854 result = true;
12856 args = TREE_CHAIN (args);
12858 if (args && args != void_list_node && !TREE_PURPOSE (args))
12859 /* There are more non-optional args. */
12860 return false;
12862 return result;
12865 /* Remember any special properties of member function DECL. */
12867 void
12868 grok_special_member_properties (tree decl)
12870 tree class_type;
12872 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
12873 return;
12875 class_type = DECL_CONTEXT (decl);
12876 if (IDENTIFIER_CTOR_P (DECL_NAME (decl)))
12878 int ctor = copy_fn_p (decl);
12880 if (!DECL_ARTIFICIAL (decl))
12881 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
12883 if (ctor > 0)
12885 /* [class.copy]
12887 A non-template constructor for class X is a copy
12888 constructor if its first parameter is of type X&, const
12889 X&, volatile X& or const volatile X&, and either there
12890 are no other parameters or else all other parameters have
12891 default arguments. */
12892 TYPE_HAS_COPY_CTOR (class_type) = 1;
12893 if (user_provided_p (decl))
12894 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
12895 if (ctor > 1)
12896 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
12898 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
12899 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
12900 else if (move_fn_p (decl) && user_provided_p (decl))
12901 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
12902 else if (is_list_ctor (decl))
12903 TYPE_HAS_LIST_CTOR (class_type) = 1;
12905 if (DECL_DECLARED_CONSTEXPR_P (decl)
12906 && !ctor && !move_fn_p (decl))
12907 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
12909 else if (DECL_NAME (decl) == assign_op_identifier)
12911 /* [class.copy]
12913 A non-template assignment operator for class X is a copy
12914 assignment operator if its parameter is of type X, X&, const
12915 X&, volatile X& or const volatile X&. */
12917 int assop = copy_fn_p (decl);
12919 if (assop)
12921 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
12922 if (user_provided_p (decl))
12923 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
12924 if (assop != 1)
12925 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
12927 else if (move_fn_p (decl) && user_provided_p (decl))
12928 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
12930 else if (IDENTIFIER_CONV_OP_P (DECL_NAME (decl)))
12931 TYPE_HAS_CONVERSION (class_type) = true;
12933 /* Destructors are handled in check_methods. */
12936 /* Check a constructor DECL has the correct form. Complains
12937 if the class has a constructor of the form X(X). */
12939 bool
12940 grok_ctor_properties (const_tree ctype, const_tree decl)
12942 int ctor_parm = copy_fn_p (decl);
12944 if (ctor_parm < 0)
12946 /* [class.copy]
12948 A declaration of a constructor for a class X is ill-formed if
12949 its first parameter is of type (optionally cv-qualified) X
12950 and either there are no other parameters or else all other
12951 parameters have default arguments.
12953 We *don't* complain about member template instantiations that
12954 have this form, though; they can occur as we try to decide
12955 what constructor to use during overload resolution. Since
12956 overload resolution will never prefer such a constructor to
12957 the non-template copy constructor (which is either explicitly
12958 or implicitly defined), there's no need to worry about their
12959 existence. Theoretically, they should never even be
12960 instantiated, but that's hard to forestall. */
12961 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
12962 ctype, ctype);
12963 return false;
12966 return true;
12969 /* DECL is a declaration for an overloaded or conversion operator. If
12970 COMPLAIN is true, errors are issued for invalid declarations. */
12972 bool
12973 grok_op_properties (tree decl, bool complain)
12975 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
12976 bool methodp = TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE;
12977 tree name = DECL_NAME (decl);
12979 tree class_type = DECL_CONTEXT (decl);
12980 if (class_type && !CLASS_TYPE_P (class_type))
12981 class_type = NULL_TREE;
12983 tree_code operator_code;
12984 unsigned op_flags;
12985 if (IDENTIFIER_CONV_OP_P (name))
12987 /* Conversion operators are TYPE_EXPR for the purposes of this
12988 function. */
12989 operator_code = TYPE_EXPR;
12990 op_flags = OVL_OP_FLAG_UNARY;
12992 else
12994 const ovl_op_info_t *ovl_op = IDENTIFIER_OVL_OP_INFO (name);
12996 operator_code = ovl_op->tree_code;
12997 op_flags = ovl_op->flags;
12998 gcc_checking_assert (operator_code != ERROR_MARK);
12999 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13002 if (op_flags & OVL_OP_FLAG_ALLOC)
13004 /* operator new and operator delete are quite special. */
13005 if (class_type)
13006 switch (op_flags)
13008 case OVL_OP_FLAG_ALLOC:
13009 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
13010 break;
13012 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE:
13013 TYPE_GETS_DELETE (class_type) |= 1;
13014 break;
13016 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_VEC:
13017 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
13018 break;
13020 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE | OVL_OP_FLAG_VEC:
13021 TYPE_GETS_DELETE (class_type) |= 2;
13022 break;
13024 default:
13025 gcc_unreachable ();
13028 /* [basic.std.dynamic.allocation]/1:
13030 A program is ill-formed if an allocation function is declared
13031 in a namespace scope other than global scope or declared
13032 static in global scope.
13034 The same also holds true for deallocation functions. */
13035 if (DECL_NAMESPACE_SCOPE_P (decl))
13037 if (CP_DECL_CONTEXT (decl) != global_namespace)
13039 error ("%qD may not be declared within a namespace", decl);
13040 return false;
13043 if (!TREE_PUBLIC (decl))
13045 error ("%qD may not be declared as static", decl);
13046 return false;
13050 if (op_flags & OVL_OP_FLAG_DELETE)
13051 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
13052 else
13054 DECL_IS_OPERATOR_NEW (decl) = 1;
13055 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
13058 return true;
13061 /* An operator function must either be a non-static member function
13062 or have at least one parameter of a class, a reference to a class,
13063 an enumeration, or a reference to an enumeration. 13.4.0.6 */
13064 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
13066 if (operator_code == TYPE_EXPR
13067 || operator_code == CALL_EXPR
13068 || operator_code == COMPONENT_REF
13069 || operator_code == ARRAY_REF
13070 || operator_code == NOP_EXPR)
13072 error ("%qD must be a nonstatic member function", decl);
13073 return false;
13076 if (DECL_STATIC_FUNCTION_P (decl))
13078 error ("%qD must be either a non-static member "
13079 "function or a non-member function", decl);
13080 return false;
13083 for (tree arg = argtypes; ; arg = TREE_CHAIN (arg))
13085 if (!arg || arg == void_list_node)
13087 if (complain)
13088 error ("%qD must have an argument of class or "
13089 "enumerated type", decl);
13090 return false;
13093 tree type = non_reference (TREE_VALUE (arg));
13094 if (type == error_mark_node)
13095 return false;
13097 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
13098 because these checks are performed even on template
13099 functions. */
13100 if (MAYBE_CLASS_TYPE_P (type)
13101 || TREE_CODE (type) == ENUMERAL_TYPE)
13102 break;
13106 if (operator_code == CALL_EXPR)
13107 /* There are no further restrictions on the arguments to an overloaded
13108 "operator ()". */
13109 return true;
13111 if (operator_code == COND_EXPR)
13113 /* 13.4.0.3 */
13114 error ("ISO C++ prohibits overloading operator ?:");
13115 return false;
13118 /* Count the number of arguments and check for ellipsis. */
13119 int arity = 0;
13120 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13122 if (!arg)
13124 /* Variadic. */
13125 error ("%qD must not have variable number of arguments", decl);
13126 return false;
13128 ++arity;
13131 /* Verify correct number of arguments. */
13132 switch (op_flags)
13134 case OVL_OP_FLAG_AMBIARY:
13135 if (arity == 1)
13137 /* We have a unary instance of an ambi-ary op. Remap to the
13138 unary one. */
13139 unsigned alt = ovl_op_alternate[ovl_op_mapping [operator_code]];
13140 const ovl_op_info_t *ovl_op = &ovl_op_info[false][alt];
13141 gcc_checking_assert (ovl_op->flags == OVL_OP_FLAG_UNARY);
13142 operator_code = ovl_op->tree_code;
13143 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13145 else if (arity != 2)
13147 /* This was an ambiguous operator but is invalid. */
13148 error (methodp
13149 ? G_("%qD must have either zero or one argument")
13150 : G_("%qD must have either one or two arguments"), decl);
13151 return false;
13153 else if ((operator_code == POSTINCREMENT_EXPR
13154 || operator_code == POSTDECREMENT_EXPR)
13155 && ! processing_template_decl
13156 /* x++ and x--'s second argument must be an int. */
13157 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)),
13158 integer_type_node))
13160 error (methodp
13161 ? G_("postfix %qD must have %<int%> as its argument")
13162 : G_("postfix %qD must have %<int%> as its second argument"),
13163 decl);
13164 return false;
13166 break;
13168 case OVL_OP_FLAG_UNARY:
13169 if (arity != 1)
13171 error (methodp
13172 ? G_("%qD must have no arguments")
13173 : G_("%qD must have exactly one argument"), decl);
13174 return false;
13176 break;
13178 case OVL_OP_FLAG_BINARY:
13179 if (arity != 2)
13181 error (methodp
13182 ? G_("%qD must have exactly one argument")
13183 : G_("%qD must have exactly two arguments"), decl);
13184 return false;
13186 break;
13188 default:
13189 gcc_unreachable ();
13192 /* There can be no default arguments. */
13193 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13194 if (TREE_PURPOSE (arg))
13196 TREE_PURPOSE (arg) = NULL_TREE;
13197 if (operator_code == POSTINCREMENT_EXPR
13198 || operator_code == POSTDECREMENT_EXPR)
13199 pedwarn (input_location, OPT_Wpedantic,
13200 "%qD cannot have default arguments", decl);
13201 else
13203 error ("%qD cannot have default arguments", decl);
13204 return false;
13208 /* At this point the declaration is well-formed. It may not be
13209 sensible though. */
13211 /* Check member function warnings only on the in-class declaration.
13212 There's no point warning on an out-of-class definition. */
13213 if (class_type && class_type != current_class_type)
13214 return true;
13216 /* Warn about conversion operators that will never be used. */
13217 if (IDENTIFIER_CONV_OP_P (name)
13218 && ! DECL_TEMPLATE_INFO (decl)
13219 && warn_conversion)
13221 tree t = TREE_TYPE (name);
13222 int ref = (TREE_CODE (t) == REFERENCE_TYPE);
13224 if (ref)
13225 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
13227 if (VOID_TYPE_P (t))
13228 warning (OPT_Wconversion,
13230 ? G_("conversion to a reference to void "
13231 "will never use a type conversion operator")
13232 : G_("conversion to void "
13233 "will never use a type conversion operator"));
13234 else if (class_type)
13236 if (t == class_type)
13237 warning (OPT_Wconversion,
13239 ? G_("conversion to a reference to the same type "
13240 "will never use a type conversion operator")
13241 : G_("conversion to the same type "
13242 "will never use a type conversion operator"));
13243 /* Don't force t to be complete here. */
13244 else if (MAYBE_CLASS_TYPE_P (t)
13245 && COMPLETE_TYPE_P (t)
13246 && DERIVED_FROM_P (t, class_type))
13247 warning (OPT_Wconversion,
13249 ? G_("conversion to a reference to a base class "
13250 "will never use a type conversion operator")
13251 : G_("conversion to a base class "
13252 "will never use a type conversion operator"));
13256 if (!warn_ecpp)
13257 return true;
13259 /* Effective C++ rules below. */
13261 /* More Effective C++ rule 7. */
13262 if (operator_code == TRUTH_ANDIF_EXPR
13263 || operator_code == TRUTH_ORIF_EXPR
13264 || operator_code == COMPOUND_EXPR)
13265 warning (OPT_Weffc__,
13266 "user-defined %qD always evaluates both arguments", decl);
13268 /* More Effective C++ rule 6. */
13269 if (operator_code == POSTINCREMENT_EXPR
13270 || operator_code == POSTDECREMENT_EXPR
13271 || operator_code == PREINCREMENT_EXPR
13272 || operator_code == PREDECREMENT_EXPR)
13274 tree arg = TREE_VALUE (argtypes);
13275 tree ret = TREE_TYPE (TREE_TYPE (decl));
13276 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
13277 arg = TREE_TYPE (arg);
13278 arg = TYPE_MAIN_VARIANT (arg);
13280 if (operator_code == PREINCREMENT_EXPR
13281 || operator_code == PREDECREMENT_EXPR)
13283 if (TREE_CODE (ret) != REFERENCE_TYPE
13284 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)), arg))
13285 warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
13286 build_reference_type (arg));
13288 else
13290 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
13291 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
13295 /* Effective C++ rule 23. */
13296 if (!DECL_ASSIGNMENT_OPERATOR_P (decl)
13297 && (operator_code == PLUS_EXPR
13298 || operator_code == MINUS_EXPR
13299 || operator_code == TRUNC_DIV_EXPR
13300 || operator_code == MULT_EXPR
13301 || operator_code == TRUNC_MOD_EXPR)
13302 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
13303 warning (OPT_Weffc__, "%qD should return by value", decl);
13305 return true;
13308 /* Return a string giving the keyword associate with CODE. */
13310 static const char *
13311 tag_name (enum tag_types code)
13313 switch (code)
13315 case record_type:
13316 return "struct";
13317 case class_type:
13318 return "class";
13319 case union_type:
13320 return "union";
13321 case enum_type:
13322 return "enum";
13323 case typename_type:
13324 return "typename";
13325 default:
13326 gcc_unreachable ();
13330 /* Name lookup in an elaborated-type-specifier (after the keyword
13331 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
13332 elaborated-type-specifier is invalid, issue a diagnostic and return
13333 error_mark_node; otherwise, return the *_TYPE to which it referred.
13334 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
13336 tree
13337 check_elaborated_type_specifier (enum tag_types tag_code,
13338 tree decl,
13339 bool allow_template_p)
13341 tree type;
13343 /* In the case of:
13345 struct S { struct S *p; };
13347 name lookup will find the TYPE_DECL for the implicit "S::S"
13348 typedef. Adjust for that here. */
13349 if (DECL_SELF_REFERENCE_P (decl))
13350 decl = TYPE_NAME (TREE_TYPE (decl));
13352 type = TREE_TYPE (decl);
13354 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
13355 is false for this case as well. */
13356 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
13358 error ("using template type parameter %qT after %qs",
13359 type, tag_name (tag_code));
13360 return error_mark_node;
13362 /* Accept template template parameters. */
13363 else if (allow_template_p
13364 && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
13365 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
13367 /* [dcl.type.elab]
13369 If the identifier resolves to a typedef-name or the
13370 simple-template-id resolves to an alias template
13371 specialization, the elaborated-type-specifier is ill-formed.
13373 In other words, the only legitimate declaration to use in the
13374 elaborated type specifier is the implicit typedef created when
13375 the type is declared. */
13376 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
13377 && !DECL_SELF_REFERENCE_P (decl)
13378 && tag_code != typename_type)
13380 if (alias_template_specialization_p (type))
13381 error ("using alias template specialization %qT after %qs",
13382 type, tag_name (tag_code));
13383 else
13384 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
13385 inform (DECL_SOURCE_LOCATION (decl),
13386 "%qD has a previous declaration here", decl);
13387 return error_mark_node;
13389 else if (TREE_CODE (type) != RECORD_TYPE
13390 && TREE_CODE (type) != UNION_TYPE
13391 && tag_code != enum_type
13392 && tag_code != typename_type)
13394 error ("%qT referred to as %qs", type, tag_name (tag_code));
13395 inform (location_of (type), "%qT has a previous declaration here", type);
13396 return error_mark_node;
13398 else if (TREE_CODE (type) != ENUMERAL_TYPE
13399 && tag_code == enum_type)
13401 error ("%qT referred to as enum", type);
13402 inform (location_of (type), "%qT has a previous declaration here", type);
13403 return error_mark_node;
13405 else if (!allow_template_p
13406 && TREE_CODE (type) == RECORD_TYPE
13407 && CLASSTYPE_IS_TEMPLATE (type))
13409 /* If a class template appears as elaborated type specifier
13410 without a template header such as:
13412 template <class T> class C {};
13413 void f(class C); // No template header here
13415 then the required template argument is missing. */
13416 error ("template argument required for %<%s %T%>",
13417 tag_name (tag_code),
13418 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
13419 return error_mark_node;
13422 return type;
13425 /* Lookup NAME in elaborate type specifier in scope according to
13426 SCOPE and issue diagnostics if necessary.
13427 Return *_TYPE node upon success, NULL_TREE when the NAME is not
13428 found, and ERROR_MARK_NODE for type error. */
13430 static tree
13431 lookup_and_check_tag (enum tag_types tag_code, tree name,
13432 tag_scope scope, bool template_header_p)
13434 tree t;
13435 tree decl;
13436 if (scope == ts_global)
13438 /* First try ordinary name lookup, ignoring hidden class name
13439 injected via friend declaration. */
13440 decl = lookup_name_prefer_type (name, 2);
13441 decl = strip_using_decl (decl);
13442 /* If that fails, the name will be placed in the smallest
13443 non-class, non-function-prototype scope according to 3.3.1/5.
13444 We may already have a hidden name declared as friend in this
13445 scope. So lookup again but not ignoring hidden names.
13446 If we find one, that name will be made visible rather than
13447 creating a new tag. */
13448 if (!decl)
13449 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
13451 else
13452 decl = lookup_type_scope (name, scope);
13454 if (decl
13455 && (DECL_CLASS_TEMPLATE_P (decl)
13456 /* If scope is ts_current we're defining a class, so ignore a
13457 template template parameter. */
13458 || (scope != ts_current
13459 && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
13460 decl = DECL_TEMPLATE_RESULT (decl);
13462 if (decl && TREE_CODE (decl) == TYPE_DECL)
13464 /* Look for invalid nested type:
13465 class C {
13466 class C {};
13467 }; */
13468 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
13470 error ("%qD has the same name as the class in which it is "
13471 "declared",
13472 decl);
13473 return error_mark_node;
13476 /* Two cases we need to consider when deciding if a class
13477 template is allowed as an elaborated type specifier:
13478 1. It is a self reference to its own class.
13479 2. It comes with a template header.
13481 For example:
13483 template <class T> class C {
13484 class C *c1; // DECL_SELF_REFERENCE_P is true
13485 class D;
13487 template <class U> class C; // template_header_p is true
13488 template <class T> class C<T>::D {
13489 class C *c2; // DECL_SELF_REFERENCE_P is true
13490 }; */
13492 t = check_elaborated_type_specifier (tag_code,
13493 decl,
13494 template_header_p
13495 | DECL_SELF_REFERENCE_P (decl));
13496 if (template_header_p && t && CLASS_TYPE_P (t)
13497 && (!CLASSTYPE_TEMPLATE_INFO (t)
13498 || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))))
13500 error ("%qT is not a template", t);
13501 inform (location_of (t), "previous declaration here");
13502 if (TYPE_CLASS_SCOPE_P (t)
13503 && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t)))
13504 inform (input_location,
13505 "perhaps you want to explicitly add %<%T::%>",
13506 TYPE_CONTEXT (t));
13507 t = error_mark_node;
13510 return t;
13512 else if (decl && TREE_CODE (decl) == TREE_LIST)
13514 error ("reference to %qD is ambiguous", name);
13515 print_candidates (decl);
13516 return error_mark_node;
13518 else
13519 return NULL_TREE;
13522 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
13523 Define the tag as a forward-reference if it is not defined.
13525 If a declaration is given, process it here, and report an error if
13526 multiple declarations are not identical.
13528 SCOPE is TS_CURRENT when this is also a definition. Only look in
13529 the current frame for the name (since C++ allows new names in any
13530 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
13531 declaration. Only look beginning from the current scope outward up
13532 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
13534 TEMPLATE_HEADER_P is true when this declaration is preceded by
13535 a set of template parameters. */
13537 static tree
13538 xref_tag_1 (enum tag_types tag_code, tree name,
13539 tag_scope scope, bool template_header_p)
13541 enum tree_code code;
13542 tree context = NULL_TREE;
13544 gcc_assert (identifier_p (name));
13546 switch (tag_code)
13548 case record_type:
13549 case class_type:
13550 code = RECORD_TYPE;
13551 break;
13552 case union_type:
13553 code = UNION_TYPE;
13554 break;
13555 case enum_type:
13556 code = ENUMERAL_TYPE;
13557 break;
13558 default:
13559 gcc_unreachable ();
13562 /* In case of anonymous name, xref_tag is only called to
13563 make type node and push name. Name lookup is not required. */
13564 tree t = NULL_TREE;
13565 if (scope != ts_lambda && !anon_aggrname_p (name))
13566 t = lookup_and_check_tag (tag_code, name, scope, template_header_p);
13568 if (t == error_mark_node)
13569 return error_mark_node;
13571 if (scope != ts_current && t && current_class_type
13572 && template_class_depth (current_class_type)
13573 && template_header_p)
13575 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
13576 return t;
13578 /* Since SCOPE is not TS_CURRENT, we are not looking at a
13579 definition of this tag. Since, in addition, we are currently
13580 processing a (member) template declaration of a template
13581 class, we must be very careful; consider:
13583 template <class X> struct S1
13585 template <class U> struct S2
13587 template <class V> friend struct S1;
13590 Here, the S2::S1 declaration should not be confused with the
13591 outer declaration. In particular, the inner version should
13592 have a template parameter of level 2, not level 1.
13594 On the other hand, when presented with:
13596 template <class T> struct S1
13598 template <class U> struct S2 {};
13599 template <class U> friend struct S2;
13602 the friend must find S1::S2 eventually. We accomplish this
13603 by making sure that the new type we create to represent this
13604 declaration has the right TYPE_CONTEXT. */
13605 context = TYPE_CONTEXT (t);
13606 t = NULL_TREE;
13609 if (! t)
13611 /* If no such tag is yet defined, create a forward-reference node
13612 and record it as the "definition".
13613 When a real declaration of this type is found,
13614 the forward-reference will be altered into a real type. */
13615 if (code == ENUMERAL_TYPE)
13617 error ("use of enum %q#D without previous declaration", name);
13618 return error_mark_node;
13620 else
13622 t = make_class_type (code);
13623 TYPE_CONTEXT (t) = context;
13624 if (scope == ts_lambda)
13626 /* Mark it as a lambda type. */
13627 CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
13628 /* And push it into current scope. */
13629 scope = ts_current;
13631 t = pushtag (name, t, scope);
13634 else
13636 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
13638 /* Check that we aren't trying to overload a class with different
13639 constraints. */
13640 tree constr = NULL_TREE;
13641 if (current_template_parms)
13643 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
13644 constr = build_constraints (reqs, NULL_TREE);
13646 if (!redeclare_class_template (t, current_template_parms, constr))
13647 return error_mark_node;
13649 else if (!processing_template_decl
13650 && CLASS_TYPE_P (t)
13651 && CLASSTYPE_IS_TEMPLATE (t))
13653 error ("redeclaration of %qT as a non-template", t);
13654 inform (location_of (t), "previous declaration %qD", t);
13655 return error_mark_node;
13658 if (scope != ts_within_enclosing_non_class && TYPE_HIDDEN_P (t))
13660 /* This is no longer an invisible friend. Make it
13661 visible. */
13662 tree decl = TYPE_NAME (t);
13664 DECL_ANTICIPATED (decl) = false;
13665 DECL_FRIEND_P (decl) = false;
13667 if (TYPE_TEMPLATE_INFO (t))
13669 tree tmpl = TYPE_TI_TEMPLATE (t);
13670 DECL_ANTICIPATED (tmpl) = false;
13671 DECL_FRIEND_P (tmpl) = false;
13676 return t;
13679 /* Wrapper for xref_tag_1. */
13681 tree
13682 xref_tag (enum tag_types tag_code, tree name,
13683 tag_scope scope, bool template_header_p)
13685 tree ret;
13686 bool subtime;
13687 subtime = timevar_cond_start (TV_NAME_LOOKUP);
13688 ret = xref_tag_1 (tag_code, name, scope, template_header_p);
13689 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
13690 return ret;
13694 tree
13695 xref_tag_from_type (tree old, tree id, tag_scope scope)
13697 enum tag_types tag_kind;
13699 if (TREE_CODE (old) == RECORD_TYPE)
13700 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
13701 else
13702 tag_kind = union_type;
13704 if (id == NULL_TREE)
13705 id = TYPE_IDENTIFIER (old);
13707 return xref_tag (tag_kind, id, scope, false);
13710 /* Create the binfo hierarchy for REF with (possibly NULL) base list
13711 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
13712 access_* node, and the TREE_VALUE is the type of the base-class.
13713 Non-NULL TREE_TYPE indicates virtual inheritance. */
13715 void
13716 xref_basetypes (tree ref, tree base_list)
13718 tree *basep;
13719 tree binfo, base_binfo;
13720 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
13721 unsigned max_bases = 0; /* Maximum direct bases. */
13722 unsigned max_dvbases = 0; /* Maximum direct virtual bases. */
13723 int i;
13724 tree default_access;
13725 tree igo_prev; /* Track Inheritance Graph Order. */
13727 if (ref == error_mark_node)
13728 return;
13730 /* The base of a derived class is private by default, all others are
13731 public. */
13732 default_access = (TREE_CODE (ref) == RECORD_TYPE
13733 && CLASSTYPE_DECLARED_CLASS (ref)
13734 ? access_private_node : access_public_node);
13736 /* First, make sure that any templates in base-classes are
13737 instantiated. This ensures that if we call ourselves recursively
13738 we do not get confused about which classes are marked and which
13739 are not. */
13740 basep = &base_list;
13741 while (*basep)
13743 tree basetype = TREE_VALUE (*basep);
13745 /* The dependent_type_p call below should really be dependent_scope_p
13746 so that we give a hard error about using an incomplete type as a
13747 base, but we allow it with a pedwarn for backward
13748 compatibility. */
13749 if (processing_template_decl
13750 && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
13751 cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
13752 if (!dependent_type_p (basetype)
13753 && !complete_type_or_else (basetype, NULL))
13754 /* An incomplete type. Remove it from the list. */
13755 *basep = TREE_CHAIN (*basep);
13756 else
13758 max_bases++;
13759 if (TREE_TYPE (*basep))
13760 max_dvbases++;
13761 if (CLASS_TYPE_P (basetype))
13762 max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
13763 basep = &TREE_CHAIN (*basep);
13766 max_vbases += max_dvbases;
13768 TYPE_MARKED_P (ref) = 1;
13770 /* The binfo slot should be empty, unless this is an (ill-formed)
13771 redefinition. */
13772 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
13774 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
13776 binfo = make_tree_binfo (max_bases);
13778 TYPE_BINFO (ref) = binfo;
13779 BINFO_OFFSET (binfo) = size_zero_node;
13780 BINFO_TYPE (binfo) = ref;
13782 /* Apply base-class info set up to the variants of this type. */
13783 fixup_type_variants (ref);
13785 if (max_bases)
13787 vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
13788 /* A C++98 POD cannot have base classes. */
13789 CLASSTYPE_NON_LAYOUT_POD_P (ref) = true;
13791 if (TREE_CODE (ref) == UNION_TYPE)
13792 error ("derived union %qT invalid", ref);
13795 if (max_bases > 1)
13796 warning (OPT_Wmultiple_inheritance,
13797 "%qT defined with multiple direct bases", ref);
13799 if (max_vbases)
13801 /* An aggregate can't have virtual base classes. */
13802 CLASSTYPE_NON_AGGREGATE (ref) = true;
13804 vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
13806 if (max_dvbases)
13807 warning (OPT_Wvirtual_inheritance,
13808 "%qT defined with direct virtual base", ref);
13811 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
13813 tree access = TREE_PURPOSE (base_list);
13814 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
13815 tree basetype = TREE_VALUE (base_list);
13817 if (access == access_default_node)
13818 access = default_access;
13820 /* Before C++17, an aggregate cannot have base classes. In C++17, an
13821 aggregate can't have virtual, private, or protected base classes. */
13822 if (cxx_dialect < cxx17
13823 || access != access_public_node
13824 || via_virtual)
13825 CLASSTYPE_NON_AGGREGATE (ref) = true;
13827 if (PACK_EXPANSION_P (basetype))
13828 basetype = PACK_EXPANSION_PATTERN (basetype);
13829 if (TREE_CODE (basetype) == TYPE_DECL)
13830 basetype = TREE_TYPE (basetype);
13831 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
13833 error ("base type %qT fails to be a struct or class type",
13834 basetype);
13835 goto dropped_base;
13838 base_binfo = NULL_TREE;
13839 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
13841 base_binfo = TYPE_BINFO (basetype);
13842 /* The original basetype could have been a typedef'd type. */
13843 basetype = BINFO_TYPE (base_binfo);
13845 /* Inherit flags from the base. */
13846 TYPE_HAS_NEW_OPERATOR (ref)
13847 |= TYPE_HAS_NEW_OPERATOR (basetype);
13848 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
13849 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
13850 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
13851 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
13852 CLASSTYPE_DIAMOND_SHAPED_P (ref)
13853 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
13854 CLASSTYPE_REPEATED_BASE_P (ref)
13855 |= CLASSTYPE_REPEATED_BASE_P (basetype);
13858 /* We must do this test after we've seen through a typedef
13859 type. */
13860 if (TYPE_MARKED_P (basetype))
13862 if (basetype == ref)
13863 error ("recursive type %qT undefined", basetype);
13864 else
13865 error ("duplicate base type %qT invalid", basetype);
13866 goto dropped_base;
13869 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
13870 /* Regenerate the pack expansion for the bases. */
13871 basetype = make_pack_expansion (basetype);
13873 TYPE_MARKED_P (basetype) = 1;
13875 base_binfo = copy_binfo (base_binfo, basetype, ref,
13876 &igo_prev, via_virtual);
13877 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
13878 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
13880 BINFO_BASE_APPEND (binfo, base_binfo);
13881 BINFO_BASE_ACCESS_APPEND (binfo, access);
13882 continue;
13884 dropped_base:
13885 /* Update max_vbases to reflect the reality that we are dropping
13886 this base: if it reaches zero we want to undo the vec_alloc
13887 above to avoid inconsistencies during error-recovery: eg, in
13888 build_special_member_call, CLASSTYPE_VBASECLASSES non null
13889 and vtt null (c++/27952). */
13890 if (via_virtual)
13891 max_vbases--;
13892 if (CLASS_TYPE_P (basetype))
13893 max_vbases
13894 -= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
13897 if (CLASSTYPE_VBASECLASSES (ref)
13898 && max_vbases == 0)
13899 vec_free (CLASSTYPE_VBASECLASSES (ref));
13901 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
13902 /* If we didn't get max_vbases vbases, we must have shared at
13903 least one of them, and are therefore diamond shaped. */
13904 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
13906 /* Unmark all the types. */
13907 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
13908 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
13909 TYPE_MARKED_P (ref) = 0;
13911 /* Now see if we have a repeated base type. */
13912 if (!CLASSTYPE_REPEATED_BASE_P (ref))
13914 for (base_binfo = binfo; base_binfo;
13915 base_binfo = TREE_CHAIN (base_binfo))
13917 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
13919 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
13920 break;
13922 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
13924 for (base_binfo = binfo; base_binfo;
13925 base_binfo = TREE_CHAIN (base_binfo))
13926 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
13927 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
13928 else
13929 break;
13934 /* Copies the enum-related properties from type SRC to type DST.
13935 Used with the underlying type of an enum and the enum itself. */
13936 static void
13937 copy_type_enum (tree dst, tree src)
13939 tree t;
13940 for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
13942 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
13943 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
13944 TYPE_SIZE (t) = TYPE_SIZE (src);
13945 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
13946 SET_TYPE_MODE (dst, TYPE_MODE (src));
13947 TYPE_PRECISION (t) = TYPE_PRECISION (src);
13948 unsigned valign = TYPE_ALIGN (src);
13949 if (TYPE_USER_ALIGN (t))
13950 valign = MAX (valign, TYPE_ALIGN (t));
13951 else
13952 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
13953 SET_TYPE_ALIGN (t, valign);
13954 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
13958 /* Begin compiling the definition of an enumeration type.
13959 NAME is its name,
13961 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
13963 UNDERLYING_TYPE is the type that will be used as the storage for
13964 the enumeration type. This should be NULL_TREE if no storage type
13965 was specified.
13967 ATTRIBUTES are any attributes specified after the enum-key.
13969 SCOPED_ENUM_P is true if this is a scoped enumeration type.
13971 if IS_NEW is not NULL, gets TRUE iff a new type is created.
13973 Returns the type object, as yet incomplete.
13974 Also records info about it so that build_enumerator
13975 may be used to declare the individual values as they are read. */
13977 tree
13978 start_enum (tree name, tree enumtype, tree underlying_type,
13979 tree attributes, bool scoped_enum_p, bool *is_new)
13981 tree prevtype = NULL_TREE;
13982 gcc_assert (identifier_p (name));
13984 if (is_new)
13985 *is_new = false;
13986 /* [C++0x dcl.enum]p5:
13988 If not explicitly specified, the underlying type of a scoped
13989 enumeration type is int. */
13990 if (!underlying_type && scoped_enum_p)
13991 underlying_type = integer_type_node;
13993 if (underlying_type)
13994 underlying_type = cv_unqualified (underlying_type);
13996 /* If this is the real definition for a previous forward reference,
13997 fill in the contents in the same object that used to be the
13998 forward reference. */
13999 if (!enumtype)
14000 enumtype = lookup_and_check_tag (enum_type, name,
14001 /*tag_scope=*/ts_current,
14002 /*template_header_p=*/false);
14004 /* In case of a template_decl, the only check that should be deferred
14005 to instantiation time is the comparison of underlying types. */
14006 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
14008 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
14010 error_at (input_location, "scoped/unscoped mismatch "
14011 "in enum %q#T", enumtype);
14012 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14013 "previous definition here");
14014 enumtype = error_mark_node;
14016 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
14018 error_at (input_location, "underlying type mismatch "
14019 "in enum %q#T", enumtype);
14020 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14021 "previous definition here");
14022 enumtype = error_mark_node;
14024 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
14025 && !dependent_type_p (underlying_type)
14026 && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
14027 && !same_type_p (underlying_type,
14028 ENUM_UNDERLYING_TYPE (enumtype)))
14030 error_at (input_location, "different underlying type "
14031 "in enum %q#T", enumtype);
14032 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14033 "previous definition here");
14034 underlying_type = NULL_TREE;
14038 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
14039 || processing_template_decl)
14041 /* In case of error, make a dummy enum to allow parsing to
14042 continue. */
14043 if (enumtype == error_mark_node)
14045 name = make_anon_name ();
14046 enumtype = NULL_TREE;
14049 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
14050 of an opaque enum, or an opaque enum of an already defined
14051 enumeration (C++0x only).
14052 In any other case, it'll be NULL_TREE. */
14053 if (!enumtype)
14055 if (is_new)
14056 *is_new = true;
14058 prevtype = enumtype;
14060 /* Do not push the decl more than once, unless we need to
14061 compare underlying types at instantiation time */
14062 if (!enumtype
14063 || TREE_CODE (enumtype) != ENUMERAL_TYPE
14064 || (underlying_type
14065 && dependent_type_p (underlying_type))
14066 || (ENUM_UNDERLYING_TYPE (enumtype)
14067 && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
14069 enumtype = cxx_make_type (ENUMERAL_TYPE);
14070 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
14072 /* std::byte aliases anything. */
14073 if (enumtype != error_mark_node
14074 && TYPE_CONTEXT (enumtype) == std_node
14075 && !strcmp ("byte", TYPE_NAME_STRING (enumtype)))
14076 TYPE_ALIAS_SET (enumtype) = 0;
14078 else
14079 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
14080 false);
14082 if (enumtype == error_mark_node)
14083 return error_mark_node;
14085 /* The enum is considered opaque until the opening '{' of the
14086 enumerator list. */
14087 SET_OPAQUE_ENUM_P (enumtype, true);
14088 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
14091 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
14093 cplus_decl_attributes (&enumtype, attributes, (int)ATTR_FLAG_TYPE_IN_PLACE);
14095 if (underlying_type)
14097 if (ENUM_UNDERLYING_TYPE (enumtype))
14098 /* We already checked that it matches, don't change it to a different
14099 typedef variant. */;
14100 else if (CP_INTEGRAL_TYPE_P (underlying_type))
14102 copy_type_enum (enumtype, underlying_type);
14103 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14105 else if (dependent_type_p (underlying_type))
14106 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14107 else
14108 error ("underlying type %qT of %qT must be an integral type",
14109 underlying_type, enumtype);
14112 /* If into a template class, the returned enum is always the first
14113 declaration (opaque or not) seen. This way all the references to
14114 this type will be to the same declaration. The following ones are used
14115 only to check for definition errors. */
14116 if (prevtype && processing_template_decl)
14117 return prevtype;
14118 else
14119 return enumtype;
14122 /* After processing and defining all the values of an enumeration type,
14123 install their decls in the enumeration type.
14124 ENUMTYPE is the type object. */
14126 void
14127 finish_enum_value_list (tree enumtype)
14129 tree values;
14130 tree underlying_type;
14131 tree decl;
14132 tree value;
14133 tree minnode, maxnode;
14134 tree t;
14136 bool fixed_underlying_type_p
14137 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
14139 /* We built up the VALUES in reverse order. */
14140 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
14142 /* For an enum defined in a template, just set the type of the values;
14143 all further processing is postponed until the template is
14144 instantiated. We need to set the type so that tsubst of a CONST_DECL
14145 works. */
14146 if (processing_template_decl)
14148 for (values = TYPE_VALUES (enumtype);
14149 values;
14150 values = TREE_CHAIN (values))
14151 TREE_TYPE (TREE_VALUE (values)) = enumtype;
14152 return;
14155 /* Determine the minimum and maximum values of the enumerators. */
14156 if (TYPE_VALUES (enumtype))
14158 minnode = maxnode = NULL_TREE;
14160 for (values = TYPE_VALUES (enumtype);
14161 values;
14162 values = TREE_CHAIN (values))
14164 decl = TREE_VALUE (values);
14166 /* [dcl.enum]: Following the closing brace of an enum-specifier,
14167 each enumerator has the type of its enumeration. Prior to the
14168 closing brace, the type of each enumerator is the type of its
14169 initializing value. */
14170 TREE_TYPE (decl) = enumtype;
14172 /* Update the minimum and maximum values, if appropriate. */
14173 value = DECL_INITIAL (decl);
14174 if (value == error_mark_node)
14175 value = integer_zero_node;
14176 /* Figure out what the minimum and maximum values of the
14177 enumerators are. */
14178 if (!minnode)
14179 minnode = maxnode = value;
14180 else if (tree_int_cst_lt (maxnode, value))
14181 maxnode = value;
14182 else if (tree_int_cst_lt (value, minnode))
14183 minnode = value;
14186 else
14187 /* [dcl.enum]
14189 If the enumerator-list is empty, the underlying type is as if
14190 the enumeration had a single enumerator with value 0. */
14191 minnode = maxnode = integer_zero_node;
14193 if (!fixed_underlying_type_p)
14195 /* Compute the number of bits require to represent all values of the
14196 enumeration. We must do this before the type of MINNODE and
14197 MAXNODE are transformed, since tree_int_cst_min_precision relies
14198 on the TREE_TYPE of the value it is passed. */
14199 signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
14200 int lowprec = tree_int_cst_min_precision (minnode, sgn);
14201 int highprec = tree_int_cst_min_precision (maxnode, sgn);
14202 int precision = MAX (lowprec, highprec);
14203 unsigned int itk;
14204 bool use_short_enum;
14206 /* Determine the underlying type of the enumeration.
14208 [dcl.enum]
14210 The underlying type of an enumeration is an integral type that
14211 can represent all the enumerator values defined in the
14212 enumeration. It is implementation-defined which integral type is
14213 used as the underlying type for an enumeration except that the
14214 underlying type shall not be larger than int unless the value of
14215 an enumerator cannot fit in an int or unsigned int.
14217 We use "int" or an "unsigned int" as the underlying type, even if
14218 a smaller integral type would work, unless the user has
14219 explicitly requested that we use the smallest possible type. The
14220 user can request that for all enumerations with a command line
14221 flag, or for just one enumeration with an attribute. */
14223 use_short_enum = flag_short_enums
14224 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
14226 /* If the precision of the type was specified with an attribute and it
14227 was too small, give an error. Otherwise, use it. */
14228 if (TYPE_PRECISION (enumtype))
14230 if (precision > TYPE_PRECISION (enumtype))
14231 error ("specified mode too small for enumeral values");
14232 else
14234 use_short_enum = true;
14235 precision = TYPE_PRECISION (enumtype);
14239 for (itk = (use_short_enum ? itk_char : itk_int);
14240 itk != itk_none;
14241 itk++)
14243 underlying_type = integer_types[itk];
14244 if (underlying_type != NULL_TREE
14245 && TYPE_PRECISION (underlying_type) >= precision
14246 && TYPE_SIGN (underlying_type) == sgn)
14247 break;
14249 if (itk == itk_none)
14251 /* DR 377
14253 IF no integral type can represent all the enumerator values, the
14254 enumeration is ill-formed. */
14255 error ("no integral type can represent all of the enumerator values "
14256 "for %qT", enumtype);
14257 precision = TYPE_PRECISION (long_long_integer_type_node);
14258 underlying_type = integer_types[itk_unsigned_long_long];
14261 /* [dcl.enum]
14263 The value of sizeof() applied to an enumeration type, an object
14264 of an enumeration type, or an enumerator, is the value of sizeof()
14265 applied to the underlying type. */
14266 copy_type_enum (enumtype, underlying_type);
14268 /* Compute the minimum and maximum values for the type.
14270 [dcl.enum]
14272 For an enumeration where emin is the smallest enumerator and emax
14273 is the largest, the values of the enumeration are the values of the
14274 underlying type in the range bmin to bmax, where bmin and bmax are,
14275 respectively, the smallest and largest values of the smallest bit-
14276 field that can store emin and emax. */
14278 /* The middle-end currently assumes that types with TYPE_PRECISION
14279 narrower than their underlying type are suitably zero or sign
14280 extended to fill their mode. Similarly, it assumes that the front
14281 end assures that a value of a particular type must be within
14282 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
14284 We used to set these fields based on bmin and bmax, but that led
14285 to invalid assumptions like optimizing away bounds checking. So
14286 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
14287 TYPE_MAX_VALUE to the values for the mode above and only restrict
14288 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
14289 ENUM_UNDERLYING_TYPE (enumtype)
14290 = build_distinct_type_copy (underlying_type);
14291 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
14292 set_min_and_max_values_for_integral_type
14293 (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
14295 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
14296 if (flag_strict_enums)
14297 set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
14299 else
14300 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
14302 /* Convert each of the enumerators to the type of the underlying
14303 type of the enumeration. */
14304 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
14306 location_t saved_location;
14308 decl = TREE_VALUE (values);
14309 saved_location = input_location;
14310 input_location = DECL_SOURCE_LOCATION (decl);
14311 if (fixed_underlying_type_p)
14312 /* If the enumeration type has a fixed underlying type, we
14313 already checked all of the enumerator values. */
14314 value = DECL_INITIAL (decl);
14315 else
14316 value = perform_implicit_conversion (underlying_type,
14317 DECL_INITIAL (decl),
14318 tf_warning_or_error);
14319 input_location = saved_location;
14321 /* Do not clobber shared ints. */
14322 if (value != error_mark_node)
14324 value = copy_node (value);
14326 TREE_TYPE (value) = enumtype;
14328 DECL_INITIAL (decl) = value;
14331 /* Fix up all variant types of this enum type. */
14332 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
14333 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
14335 if (at_class_scope_p ()
14336 && COMPLETE_TYPE_P (current_class_type)
14337 && UNSCOPED_ENUM_P (enumtype))
14339 insert_late_enum_def_bindings (current_class_type, enumtype);
14340 /* TYPE_FIELDS needs fixup. */
14341 fixup_type_variants (current_class_type);
14344 /* Finish debugging output for this type. */
14345 rest_of_type_compilation (enumtype, namespace_bindings_p ());
14347 /* Each enumerator now has the type of its enumeration. Clear the cache
14348 so that this change in types doesn't confuse us later on. */
14349 clear_cv_and_fold_caches ();
14352 /* Finishes the enum type. This is called only the first time an
14353 enumeration is seen, be it opaque or odinary.
14354 ENUMTYPE is the type object. */
14356 void
14357 finish_enum (tree enumtype)
14359 if (processing_template_decl)
14361 if (at_function_scope_p ())
14362 add_stmt (build_min (TAG_DEFN, enumtype));
14363 return;
14366 /* If this is a forward declaration, there should not be any variants,
14367 though we can get a variant in the middle of an enum-specifier with
14368 wacky code like 'enum E { e = sizeof(const E*) };' */
14369 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
14370 && (TYPE_VALUES (enumtype)
14371 || !TYPE_NEXT_VARIANT (enumtype)));
14374 /* Build and install a CONST_DECL for an enumeration constant of the
14375 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
14376 Apply ATTRIBUTES if available. LOC is the location of NAME.
14377 Assignment of sequential values by default is handled here. */
14379 void
14380 build_enumerator (tree name, tree value, tree enumtype, tree attributes,
14381 location_t loc)
14383 tree decl;
14384 tree context;
14385 tree type;
14387 /* scalar_constant_value will pull out this expression, so make sure
14388 it's folded as appropriate. */
14389 if (processing_template_decl)
14390 value = fold_non_dependent_expr (value);
14392 /* If the VALUE was erroneous, pretend it wasn't there; that will
14393 result in the enum being assigned the next value in sequence. */
14394 if (value == error_mark_node)
14395 value = NULL_TREE;
14397 /* Remove no-op casts from the value. */
14398 if (value)
14399 STRIP_TYPE_NOPS (value);
14401 if (! processing_template_decl)
14403 /* Validate and default VALUE. */
14404 if (value != NULL_TREE)
14406 if (!ENUM_UNDERLYING_TYPE (enumtype))
14408 tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
14409 value, true);
14410 if (tmp_value)
14411 value = tmp_value;
14413 else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14414 (TREE_TYPE (value)))
14415 value = perform_implicit_conversion_flags
14416 (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
14417 LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
14419 if (value == error_mark_node)
14420 value = NULL_TREE;
14422 if (value != NULL_TREE)
14424 if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14425 (TREE_TYPE (value)))
14427 error ("enumerator value for %qD must have integral or "
14428 "unscoped enumeration type", name);
14429 value = NULL_TREE;
14431 else
14433 value = cxx_constant_value (value);
14435 if (TREE_CODE (value) != INTEGER_CST)
14437 error ("enumerator value for %qD is not an integer "
14438 "constant", name);
14439 value = NULL_TREE;
14445 /* Default based on previous value. */
14446 if (value == NULL_TREE)
14448 if (TYPE_VALUES (enumtype))
14450 tree prev_value;
14451 bool overflowed;
14453 /* C++03 7.2/4: If no initializer is specified for the first
14454 enumerator, the type is an unspecified integral
14455 type. Otherwise the type is the same as the type of the
14456 initializing value of the preceding enumerator unless the
14457 incremented value is not representable in that type, in
14458 which case the type is an unspecified integral type
14459 sufficient to contain the incremented value. */
14460 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
14461 if (error_operand_p (prev_value))
14462 value = error_mark_node;
14463 else
14465 tree type = TREE_TYPE (prev_value);
14466 signop sgn = TYPE_SIGN (type);
14467 widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
14468 &overflowed);
14469 if (!overflowed)
14471 bool pos = !wi::neg_p (wi, sgn);
14472 if (!wi::fits_to_tree_p (wi, type))
14474 unsigned int itk;
14475 for (itk = itk_int; itk != itk_none; itk++)
14477 type = integer_types[itk];
14478 if (type != NULL_TREE
14479 && (pos || !TYPE_UNSIGNED (type))
14480 && wi::fits_to_tree_p (wi, type))
14481 break;
14483 if (type && cxx_dialect < cxx11
14484 && itk > itk_unsigned_long)
14485 pedwarn (input_location, OPT_Wlong_long,
14486 pos ? G_("\
14487 incremented enumerator value is too large for %<unsigned long%>") : G_("\
14488 incremented enumerator value is too large for %<long%>"));
14490 if (type == NULL_TREE)
14491 overflowed = true;
14492 else
14493 value = wide_int_to_tree (type, wi);
14496 if (overflowed)
14498 error ("overflow in enumeration values at %qD", name);
14499 value = error_mark_node;
14503 else
14504 value = integer_zero_node;
14507 /* Remove no-op casts from the value. */
14508 STRIP_TYPE_NOPS (value);
14510 /* If the underlying type of the enum is fixed, check whether
14511 the enumerator values fits in the underlying type. If it
14512 does not fit, the program is ill-formed [C++0x dcl.enum]. */
14513 if (ENUM_UNDERLYING_TYPE (enumtype)
14514 && value
14515 && TREE_CODE (value) == INTEGER_CST)
14517 if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
14518 error ("enumerator value %qE is outside the range of underlying "
14519 "type %qT", value, ENUM_UNDERLYING_TYPE (enumtype));
14521 /* Convert the value to the appropriate type. */
14522 value = fold_convert (ENUM_UNDERLYING_TYPE (enumtype), value);
14526 /* C++ associates enums with global, function, or class declarations. */
14527 context = current_scope ();
14529 /* Build the actual enumeration constant. Note that the enumeration
14530 constants have the underlying type of the enum (if it is fixed)
14531 or the type of their initializer (if the underlying type of the
14532 enum is not fixed):
14534 [ C++0x dcl.enum ]
14536 If the underlying type is fixed, the type of each enumerator
14537 prior to the closing brace is the underlying type; if the
14538 initializing value of an enumerator cannot be represented by
14539 the underlying type, the program is ill-formed. If the
14540 underlying type is not fixed, the type of each enumerator is
14541 the type of its initializing value.
14543 If the underlying type is not fixed, it will be computed by
14544 finish_enum and we will reset the type of this enumerator. Of
14545 course, if we're processing a template, there may be no value. */
14546 type = value ? TREE_TYPE (value) : NULL_TREE;
14548 decl = build_decl (loc, CONST_DECL, name, type);
14550 DECL_CONTEXT (decl) = enumtype;
14551 TREE_CONSTANT (decl) = 1;
14552 TREE_READONLY (decl) = 1;
14553 DECL_INITIAL (decl) = value;
14555 if (attributes)
14556 cplus_decl_attributes (&decl, attributes, 0);
14558 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
14560 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
14561 on the TYPE_FIELDS list for `S'. (That's so that you can say
14562 things like `S::i' later.) */
14564 /* The enumerator may be getting declared outside of its enclosing
14565 class, like so:
14567 class S { public: enum E : int; }; enum S::E : int { i = 7; };
14569 For which case we need to make sure that the access of `S::i'
14570 matches the access of `S::E'. */
14571 tree saved_cas = current_access_specifier;
14572 if (TREE_PRIVATE (TYPE_NAME (enumtype)))
14573 current_access_specifier = access_private_node;
14574 else if (TREE_PROTECTED (TYPE_NAME (enumtype)))
14575 current_access_specifier = access_protected_node;
14576 else
14577 current_access_specifier = access_public_node;
14579 finish_member_declaration (decl);
14581 current_access_specifier = saved_cas;
14583 else
14584 pushdecl (decl);
14586 /* Add this enumeration constant to the list for this type. */
14587 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
14590 /* Look for an enumerator with the given NAME within the enumeration
14591 type ENUMTYPE. This routine is used primarily for qualified name
14592 lookup into an enumerator in C++0x, e.g.,
14594 enum class Color { Red, Green, Blue };
14596 Color color = Color::Red;
14598 Returns the value corresponding to the enumerator, or
14599 NULL_TREE if no such enumerator was found. */
14600 tree
14601 lookup_enumerator (tree enumtype, tree name)
14603 tree e;
14604 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
14606 e = purpose_member (name, TYPE_VALUES (enumtype));
14607 return e? TREE_VALUE (e) : NULL_TREE;
14611 /* We're defining DECL. Make sure that its type is OK. */
14613 static void
14614 check_function_type (tree decl, tree current_function_parms)
14616 tree fntype = TREE_TYPE (decl);
14617 tree return_type = complete_type (TREE_TYPE (fntype));
14619 /* In a function definition, arg types must be complete. */
14620 require_complete_types_for_parms (current_function_parms);
14622 if (dependent_type_p (return_type)
14623 || type_uses_auto (return_type))
14624 return;
14625 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
14627 tree args = TYPE_ARG_TYPES (fntype);
14629 error ("return type %q#T is incomplete", return_type);
14631 /* Make it return void instead. */
14632 if (TREE_CODE (fntype) == METHOD_TYPE)
14633 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
14634 void_type_node,
14635 TREE_CHAIN (args));
14636 else
14637 fntype = build_function_type (void_type_node, args);
14638 fntype
14639 = build_exception_variant (fntype,
14640 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
14641 fntype = (cp_build_type_attribute_variant
14642 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
14643 TREE_TYPE (decl) = fntype;
14645 else
14647 abstract_virtuals_error (decl, TREE_TYPE (fntype));
14648 maybe_warn_parm_abi (TREE_TYPE (fntype),
14649 DECL_SOURCE_LOCATION (decl));
14653 /* True iff FN is an implicitly-defined default constructor. */
14655 static bool
14656 implicit_default_ctor_p (tree fn)
14658 return (DECL_CONSTRUCTOR_P (fn)
14659 && !user_provided_p (fn)
14660 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)));
14663 /* Clobber the contents of *this to let the back end know that the object
14664 storage is dead when we enter the constructor or leave the destructor. */
14666 static tree
14667 build_clobber_this ()
14669 /* Clobbering an empty base is pointless, and harmful if its one byte
14670 TYPE_SIZE overlays real data. */
14671 if (is_empty_class (current_class_type))
14672 return void_node;
14674 /* If we have virtual bases, clobber the whole object, but only if we're in
14675 charge. If we don't have virtual bases, clobber the as-base type so we
14676 don't mess with tail padding. */
14677 bool vbases = CLASSTYPE_VBASECLASSES (current_class_type);
14679 tree ctype = current_class_type;
14680 if (!vbases)
14681 ctype = CLASSTYPE_AS_BASE (ctype);
14683 tree clobber = build_constructor (ctype, NULL);
14684 TREE_THIS_VOLATILE (clobber) = true;
14686 tree thisref = current_class_ref;
14687 if (ctype != current_class_type)
14689 thisref = build_nop (build_reference_type (ctype), current_class_ptr);
14690 thisref = convert_from_reference (thisref);
14693 tree exprstmt = build2 (MODIFY_EXPR, void_type_node, thisref, clobber);
14694 if (vbases)
14695 exprstmt = build_if_in_charge (exprstmt);
14697 return exprstmt;
14700 /* Create the FUNCTION_DECL for a function definition.
14701 DECLSPECS and DECLARATOR are the parts of the declaration;
14702 they describe the function's name and the type it returns,
14703 but twisted together in a fashion that parallels the syntax of C.
14705 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
14706 DECLARATOR is really the DECL for the function we are about to
14707 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
14708 indicating that the function is an inline defined in-class.
14710 This function creates a binding context for the function body
14711 as well as setting up the FUNCTION_DECL in current_function_decl.
14713 For C++, we must first check whether that datum makes any sense.
14714 For example, "class A local_a(1,2);" means that variable local_a
14715 is an aggregate of type A, which should have a constructor
14716 applied to it with the argument list [1, 2].
14718 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
14719 or may be a BLOCK if the function has been defined previously
14720 in this translation unit. On exit, DECL_INITIAL (decl1) will be
14721 error_mark_node if the function has never been defined, or
14722 a BLOCK if the function has been defined somewhere. */
14724 bool
14725 start_preparsed_function (tree decl1, tree attrs, int flags)
14727 tree ctype = NULL_TREE;
14728 tree fntype;
14729 tree restype;
14730 int doing_friend = 0;
14731 cp_binding_level *bl;
14732 tree current_function_parms;
14733 struct c_fileinfo *finfo
14734 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
14735 bool honor_interface;
14737 /* Sanity check. */
14738 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
14739 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
14741 fntype = TREE_TYPE (decl1);
14742 if (TREE_CODE (fntype) == METHOD_TYPE)
14743 ctype = TYPE_METHOD_BASETYPE (fntype);
14745 /* ISO C++ 11.4/5. A friend function defined in a class is in
14746 the (lexical) scope of the class in which it is defined. */
14747 if (!ctype && DECL_FRIEND_P (decl1))
14749 ctype = DECL_FRIEND_CONTEXT (decl1);
14751 /* CTYPE could be null here if we're dealing with a template;
14752 for example, `inline friend float foo()' inside a template
14753 will have no CTYPE set. */
14754 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
14755 ctype = NULL_TREE;
14756 else
14757 doing_friend = 1;
14760 if (DECL_DECLARED_INLINE_P (decl1)
14761 && lookup_attribute ("noinline", attrs))
14762 warning_at (DECL_SOURCE_LOCATION (decl1), 0,
14763 "inline function %qD given attribute noinline", decl1);
14765 /* Handle gnu_inline attribute. */
14766 if (GNU_INLINE_P (decl1))
14768 DECL_EXTERNAL (decl1) = 1;
14769 DECL_NOT_REALLY_EXTERN (decl1) = 0;
14770 DECL_INTERFACE_KNOWN (decl1) = 1;
14771 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
14774 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
14775 /* This is a constructor, we must ensure that any default args
14776 introduced by this definition are propagated to the clones
14777 now. The clones are used directly in overload resolution. */
14778 adjust_clone_args (decl1);
14780 /* Sometimes we don't notice that a function is a static member, and
14781 build a METHOD_TYPE for it. Fix that up now. */
14782 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
14783 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
14785 /* Set up current_class_type, and enter the scope of the class, if
14786 appropriate. */
14787 if (ctype)
14788 push_nested_class (ctype);
14789 else if (DECL_STATIC_FUNCTION_P (decl1))
14790 push_nested_class (DECL_CONTEXT (decl1));
14792 /* Now that we have entered the scope of the class, we must restore
14793 the bindings for any template parameters surrounding DECL1, if it
14794 is an inline member template. (Order is important; consider the
14795 case where a template parameter has the same name as a field of
14796 the class.) It is not until after this point that
14797 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
14798 if (flags & SF_INCLASS_INLINE)
14799 maybe_begin_member_template_processing (decl1);
14801 /* Effective C++ rule 15. */
14802 if (warn_ecpp
14803 && DECL_ASSIGNMENT_OPERATOR_P (decl1)
14804 && DECL_OVERLOADED_OPERATOR_IS (decl1, NOP_EXPR)
14805 && VOID_TYPE_P (TREE_TYPE (fntype)))
14806 warning (OPT_Weffc__,
14807 "%<operator=%> should return a reference to %<*this%>");
14809 /* Make the init_value nonzero so pushdecl knows this is not tentative.
14810 error_mark_node is replaced below (in poplevel) with the BLOCK. */
14811 if (!DECL_INITIAL (decl1))
14812 DECL_INITIAL (decl1) = error_mark_node;
14814 /* This function exists in static storage.
14815 (This does not mean `static' in the C sense!) */
14816 TREE_STATIC (decl1) = 1;
14818 /* We must call push_template_decl after current_class_type is set
14819 up. (If we are processing inline definitions after exiting a
14820 class scope, current_class_type will be NULL_TREE until set above
14821 by push_nested_class.) */
14822 if (processing_template_decl)
14824 tree newdecl1 = push_template_decl (decl1);
14825 if (newdecl1 == error_mark_node)
14827 if (ctype || DECL_STATIC_FUNCTION_P (decl1))
14828 pop_nested_class ();
14829 return false;
14831 decl1 = newdecl1;
14834 /* Make sure the parameter and return types are reasonable. When
14835 you declare a function, these types can be incomplete, but they
14836 must be complete when you define the function. */
14837 check_function_type (decl1, DECL_ARGUMENTS (decl1));
14839 /* Build the return declaration for the function. */
14840 restype = TREE_TYPE (fntype);
14842 if (DECL_RESULT (decl1) == NULL_TREE)
14844 tree resdecl;
14846 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
14847 DECL_ARTIFICIAL (resdecl) = 1;
14848 DECL_IGNORED_P (resdecl) = 1;
14849 DECL_RESULT (decl1) = resdecl;
14851 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
14854 /* Record the decl so that the function name is defined.
14855 If we already have a decl for this name, and it is a FUNCTION_DECL,
14856 use the old decl. */
14857 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
14859 /* A specialization is not used to guide overload resolution. */
14860 if (!DECL_FUNCTION_MEMBER_P (decl1)
14861 && !(DECL_USE_TEMPLATE (decl1) &&
14862 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
14864 tree olddecl = pushdecl (decl1);
14866 if (olddecl == error_mark_node)
14867 /* If something went wrong when registering the declaration,
14868 use DECL1; we have to have a FUNCTION_DECL to use when
14869 parsing the body of the function. */
14871 else
14873 /* Otherwise, OLDDECL is either a previous declaration
14874 of the same function or DECL1 itself. */
14876 if (warn_missing_declarations
14877 && olddecl == decl1
14878 && !DECL_MAIN_P (decl1)
14879 && TREE_PUBLIC (decl1)
14880 && !DECL_DECLARED_INLINE_P (decl1))
14882 tree context;
14884 /* Check whether DECL1 is in an anonymous
14885 namespace. */
14886 for (context = DECL_CONTEXT (decl1);
14887 context;
14888 context = DECL_CONTEXT (context))
14890 if (TREE_CODE (context) == NAMESPACE_DECL
14891 && DECL_NAME (context) == NULL_TREE)
14892 break;
14895 if (context == NULL)
14896 warning_at (DECL_SOURCE_LOCATION (decl1),
14897 OPT_Wmissing_declarations,
14898 "no previous declaration for %qD", decl1);
14901 decl1 = olddecl;
14904 else
14906 /* We need to set the DECL_CONTEXT. */
14907 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
14908 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
14910 fntype = TREE_TYPE (decl1);
14911 restype = TREE_TYPE (fntype);
14913 /* If #pragma weak applies, mark the decl appropriately now.
14914 The pragma only applies to global functions. Because
14915 determining whether or not the #pragma applies involves
14916 computing the mangled name for the declaration, we cannot
14917 apply the pragma until after we have merged this declaration
14918 with any previous declarations; if the original declaration
14919 has a linkage specification, that specification applies to
14920 the definition as well, and may affect the mangled name. */
14921 if (DECL_FILE_SCOPE_P (decl1))
14922 maybe_apply_pragma_weak (decl1);
14925 /* We are now in the scope of the function being defined. */
14926 current_function_decl = decl1;
14928 /* Save the parm names or decls from this function's declarator
14929 where store_parm_decls will find them. */
14930 current_function_parms = DECL_ARGUMENTS (decl1);
14932 /* Let the user know we're compiling this function. */
14933 announce_function (decl1);
14935 gcc_assert (DECL_INITIAL (decl1));
14937 /* This function may already have been parsed, in which case just
14938 return; our caller will skip over the body without parsing. */
14939 if (DECL_INITIAL (decl1) != error_mark_node)
14940 return true;
14942 /* Initialize RTL machinery. We cannot do this until
14943 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
14944 even when processing a template; this is how we get
14945 CFUN set up, and our per-function variables initialized.
14946 FIXME factor out the non-RTL stuff. */
14947 bl = current_binding_level;
14948 allocate_struct_function (decl1, processing_template_decl);
14950 /* Initialize the language data structures. Whenever we start
14951 a new function, we destroy temporaries in the usual way. */
14952 cfun->language = ggc_cleared_alloc<language_function> ();
14953 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
14954 current_binding_level = bl;
14956 if (!processing_template_decl && type_uses_auto (restype))
14958 FNDECL_USED_AUTO (decl1) = true;
14959 current_function_auto_return_pattern = restype;
14962 /* Start the statement-tree, start the tree now. */
14963 DECL_SAVED_TREE (decl1) = push_stmt_list ();
14965 /* If we are (erroneously) defining a function that we have already
14966 defined before, wipe out what we knew before. */
14967 if (!DECL_PENDING_INLINE_P (decl1))
14968 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
14970 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
14972 /* We know that this was set up by `grokclassfn'. We do not
14973 wait until `store_parm_decls', since evil parse errors may
14974 never get us to that point. Here we keep the consistency
14975 between `current_class_type' and `current_class_ptr'. */
14976 tree t = DECL_ARGUMENTS (decl1);
14978 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
14979 gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
14981 cp_function_chain->x_current_class_ref
14982 = cp_build_fold_indirect_ref (t);
14983 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
14984 cp_function_chain->x_current_class_ptr = t;
14986 /* Constructors and destructors need to know whether they're "in
14987 charge" of initializing virtual base classes. */
14988 t = DECL_CHAIN (t);
14989 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
14991 current_in_charge_parm = t;
14992 t = DECL_CHAIN (t);
14994 if (DECL_HAS_VTT_PARM_P (decl1))
14996 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
14997 current_vtt_parm = t;
15001 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
15002 /* Implicitly-defined methods (like the
15003 destructor for a class in which no destructor
15004 is explicitly declared) must not be defined
15005 until their definition is needed. So, we
15006 ignore interface specifications for
15007 compiler-generated functions. */
15008 && !DECL_ARTIFICIAL (decl1));
15010 if (processing_template_decl)
15011 /* Don't mess with interface flags. */;
15012 else if (DECL_INTERFACE_KNOWN (decl1))
15014 tree ctx = decl_function_context (decl1);
15016 if (DECL_NOT_REALLY_EXTERN (decl1))
15017 DECL_EXTERNAL (decl1) = 0;
15019 if (ctx != NULL_TREE && vague_linkage_p (ctx))
15020 /* This is a function in a local class in an extern inline
15021 or template function. */
15022 comdat_linkage (decl1);
15024 /* If this function belongs to an interface, it is public.
15025 If it belongs to someone else's interface, it is also external.
15026 This only affects inlines and template instantiations. */
15027 else if (!finfo->interface_unknown && honor_interface)
15029 if (DECL_DECLARED_INLINE_P (decl1)
15030 || DECL_TEMPLATE_INSTANTIATION (decl1))
15032 DECL_EXTERNAL (decl1)
15033 = (finfo->interface_only
15034 || (DECL_DECLARED_INLINE_P (decl1)
15035 && ! flag_implement_inlines
15036 && !DECL_VINDEX (decl1)));
15038 /* For WIN32 we also want to put these in linkonce sections. */
15039 maybe_make_one_only (decl1);
15041 else
15042 DECL_EXTERNAL (decl1) = 0;
15043 DECL_INTERFACE_KNOWN (decl1) = 1;
15044 /* If this function is in an interface implemented in this file,
15045 make sure that the back end knows to emit this function
15046 here. */
15047 if (!DECL_EXTERNAL (decl1))
15048 mark_needed (decl1);
15050 else if (finfo->interface_unknown && finfo->interface_only
15051 && honor_interface)
15053 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
15054 interface, we will have both finfo->interface_unknown and
15055 finfo->interface_only set. In that case, we don't want to
15056 use the normal heuristics because someone will supply a
15057 #pragma implementation elsewhere, and deducing it here would
15058 produce a conflict. */
15059 comdat_linkage (decl1);
15060 DECL_EXTERNAL (decl1) = 0;
15061 DECL_INTERFACE_KNOWN (decl1) = 1;
15062 DECL_DEFER_OUTPUT (decl1) = 1;
15064 else
15066 /* This is a definition, not a reference.
15067 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
15068 if (!GNU_INLINE_P (decl1))
15069 DECL_EXTERNAL (decl1) = 0;
15071 if ((DECL_DECLARED_INLINE_P (decl1)
15072 || DECL_TEMPLATE_INSTANTIATION (decl1))
15073 && ! DECL_INTERFACE_KNOWN (decl1))
15074 DECL_DEFER_OUTPUT (decl1) = 1;
15075 else
15076 DECL_INTERFACE_KNOWN (decl1) = 1;
15079 /* Determine the ELF visibility attribute for the function. We must not
15080 do this before calling "pushdecl", as we must allow "duplicate_decls"
15081 to merge any attributes appropriately. We also need to wait until
15082 linkage is set. */
15083 if (!DECL_CLONED_FUNCTION_P (decl1))
15084 determine_visibility (decl1);
15086 if (!processing_template_decl)
15087 maybe_instantiate_noexcept (decl1);
15089 begin_scope (sk_function_parms, decl1);
15091 ++function_depth;
15093 if (DECL_DESTRUCTOR_P (decl1)
15094 || (DECL_CONSTRUCTOR_P (decl1)
15095 && targetm.cxx.cdtor_returns_this ()))
15097 cdtor_label = create_artificial_label (input_location);
15098 LABEL_DECL_CDTOR (cdtor_label) = true;
15101 start_fname_decls ();
15103 store_parm_decls (current_function_parms);
15105 if (!processing_template_decl
15106 && (flag_lifetime_dse > 1)
15107 && DECL_CONSTRUCTOR_P (decl1)
15108 && !DECL_CLONED_FUNCTION_P (decl1)
15109 /* Clobbering an empty base is harmful if it overlays real data. */
15110 && !is_empty_class (current_class_type)
15111 /* We can't clobber safely for an implicitly-defined default constructor
15112 because part of the initialization might happen before we enter the
15113 constructor, via AGGR_INIT_ZERO_FIRST (c++/68006). */
15114 && !implicit_default_ctor_p (decl1))
15115 finish_expr_stmt (build_clobber_this ());
15117 if (!processing_template_decl
15118 && DECL_CONSTRUCTOR_P (decl1)
15119 && sanitize_flags_p (SANITIZE_VPTR)
15120 && !DECL_CLONED_FUNCTION_P (decl1)
15121 && !implicit_default_ctor_p (decl1))
15122 cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr);
15124 start_lambda_scope (decl1);
15126 return true;
15130 /* Like start_preparsed_function, except that instead of a
15131 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
15133 Returns true on success. If the DECLARATOR is not suitable
15134 for a function, we return false, which tells the parser to
15135 skip the entire function. */
15137 bool
15138 start_function (cp_decl_specifier_seq *declspecs,
15139 const cp_declarator *declarator,
15140 tree attrs)
15142 tree decl1;
15144 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
15145 invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION, decl1);
15146 if (decl1 == error_mark_node)
15147 return false;
15148 /* If the declarator is not suitable for a function definition,
15149 cause a syntax error. */
15150 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
15152 error ("invalid function declaration");
15153 return false;
15156 if (DECL_MAIN_P (decl1))
15157 /* main must return int. grokfndecl should have corrected it
15158 (and issued a diagnostic) if the user got it wrong. */
15159 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
15160 integer_type_node));
15162 return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
15165 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
15166 FN. */
15168 static bool
15169 use_eh_spec_block (tree fn)
15171 return (flag_exceptions && flag_enforce_eh_specs
15172 && !processing_template_decl
15173 && !type_throw_all_p (TREE_TYPE (fn))
15174 /* We insert the EH_SPEC_BLOCK only in the original
15175 function; then, it is copied automatically to the
15176 clones. */
15177 && !DECL_CLONED_FUNCTION_P (fn)
15178 /* Implicitly-generated constructors and destructors have
15179 exception specifications. However, those specifications
15180 are the union of the possible exceptions specified by the
15181 constructors/destructors for bases and members, so no
15182 unallowed exception will ever reach this function. By
15183 not creating the EH_SPEC_BLOCK we save a little memory,
15184 and we avoid spurious warnings about unreachable
15185 code. */
15186 && !DECL_DEFAULTED_FN (fn));
15189 /* Store the parameter declarations into the current function declaration.
15190 This is called after parsing the parameter declarations, before
15191 digesting the body of the function.
15193 Also install to binding contour return value identifier, if any. */
15195 static void
15196 store_parm_decls (tree current_function_parms)
15198 tree fndecl = current_function_decl;
15199 tree parm;
15201 /* This is a chain of any other decls that came in among the parm
15202 declarations. If a parm is declared with enum {foo, bar} x;
15203 then CONST_DECLs for foo and bar are put here. */
15204 tree nonparms = NULL_TREE;
15206 if (current_function_parms)
15208 /* This case is when the function was defined with an ANSI prototype.
15209 The parms already have decls, so we need not do anything here
15210 except record them as in effect
15211 and complain if any redundant old-style parm decls were written. */
15213 tree specparms = current_function_parms;
15214 tree next;
15216 /* Must clear this because it might contain TYPE_DECLs declared
15217 at class level. */
15218 current_binding_level->names = NULL;
15220 /* If we're doing semantic analysis, then we'll call pushdecl
15221 for each of these. We must do them in reverse order so that
15222 they end in the correct forward order. */
15223 specparms = nreverse (specparms);
15225 for (parm = specparms; parm; parm = next)
15227 next = DECL_CHAIN (parm);
15228 if (TREE_CODE (parm) == PARM_DECL)
15229 pushdecl (parm);
15230 else
15232 /* If we find an enum constant or a type tag,
15233 put it aside for the moment. */
15234 TREE_CHAIN (parm) = NULL_TREE;
15235 nonparms = chainon (nonparms, parm);
15239 /* Get the decls in their original chain order and record in the
15240 function. This is all and only the PARM_DECLs that were
15241 pushed into scope by the loop above. */
15242 DECL_ARGUMENTS (fndecl) = get_local_decls ();
15244 else
15245 DECL_ARGUMENTS (fndecl) = NULL_TREE;
15247 /* Now store the final chain of decls for the arguments
15248 as the decl-chain of the current lexical scope.
15249 Put the enumerators in as well, at the front so that
15250 DECL_ARGUMENTS is not modified. */
15251 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
15253 if (use_eh_spec_block (current_function_decl))
15254 current_eh_spec_block = begin_eh_spec_block ();
15258 /* We have finished doing semantic analysis on DECL, but have not yet
15259 generated RTL for its body. Save away our current state, so that
15260 when we want to generate RTL later we know what to do. */
15262 static void
15263 save_function_data (tree decl)
15265 struct language_function *f;
15267 /* Save the language-specific per-function data so that we can
15268 get it back when we really expand this function. */
15269 gcc_assert (!DECL_PENDING_INLINE_P (decl));
15271 /* Make a copy. */
15272 f = ggc_alloc<language_function> ();
15273 memcpy (f, cp_function_chain, sizeof (struct language_function));
15274 DECL_SAVED_FUNCTION_DATA (decl) = f;
15276 /* Clear out the bits we don't need. */
15277 f->base.x_stmt_tree.x_cur_stmt_list = NULL;
15278 f->bindings = NULL;
15279 f->x_local_names = NULL;
15280 f->base.local_typedefs = NULL;
15284 /* Set the return value of the constructor (if present). */
15286 static void
15287 finish_constructor_body (void)
15289 tree val;
15290 tree exprstmt;
15292 if (targetm.cxx.cdtor_returns_this ())
15294 /* Any return from a constructor will end up here. */
15295 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15297 val = DECL_ARGUMENTS (current_function_decl);
15298 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15299 DECL_RESULT (current_function_decl), val);
15300 /* Return the address of the object. */
15301 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15302 add_stmt (exprstmt);
15306 /* Do all the processing for the beginning of a destructor; set up the
15307 vtable pointers and cleanups for bases and members. */
15309 static void
15310 begin_destructor_body (void)
15312 tree compound_stmt;
15314 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
15315 issued an error message. We still want to try to process the
15316 body of the function, but initialize_vtbl_ptrs will crash if
15317 TYPE_BINFO is NULL. */
15318 if (COMPLETE_TYPE_P (current_class_type))
15320 compound_stmt = begin_compound_stmt (0);
15321 /* Make all virtual function table pointers in non-virtual base
15322 classes point to CURRENT_CLASS_TYPE's virtual function
15323 tables. */
15324 initialize_vtbl_ptrs (current_class_ptr);
15325 finish_compound_stmt (compound_stmt);
15327 if (flag_lifetime_dse
15328 /* Clobbering an empty base is harmful if it overlays real data. */
15329 && !is_empty_class (current_class_type))
15331 if (sanitize_flags_p (SANITIZE_VPTR)
15332 && (flag_sanitize_recover & SANITIZE_VPTR) == 0
15333 && TYPE_CONTAINS_VPTR_P (current_class_type))
15335 tree binfo = TYPE_BINFO (current_class_type);
15336 tree ref
15337 = cp_build_fold_indirect_ref (current_class_ptr);
15339 tree vtbl_ptr = build_vfield_ref (ref, TREE_TYPE (binfo));
15340 tree vtbl = build_zero_cst (TREE_TYPE (vtbl_ptr));
15341 tree stmt = cp_build_modify_expr (input_location, vtbl_ptr,
15342 NOP_EXPR, vtbl,
15343 tf_warning_or_error);
15344 finish_decl_cleanup (NULL_TREE, stmt);
15346 else
15347 finish_decl_cleanup (NULL_TREE, build_clobber_this ());
15350 /* And insert cleanups for our bases and members so that they
15351 will be properly destroyed if we throw. */
15352 push_base_cleanups ();
15356 /* At the end of every destructor we generate code to delete the object if
15357 necessary. Do that now. */
15359 static void
15360 finish_destructor_body (void)
15362 tree exprstmt;
15364 /* Any return from a destructor will end up here; that way all base
15365 and member cleanups will be run when the function returns. */
15366 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15368 if (targetm.cxx.cdtor_returns_this ())
15370 tree val;
15372 val = DECL_ARGUMENTS (current_function_decl);
15373 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15374 DECL_RESULT (current_function_decl), val);
15375 /* Return the address of the object. */
15376 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15377 add_stmt (exprstmt);
15381 /* Do the necessary processing for the beginning of a function body, which
15382 in this case includes member-initializers, but not the catch clauses of
15383 a function-try-block. Currently, this means opening a binding level
15384 for the member-initializers (in a ctor), member cleanups (in a dtor),
15385 and capture proxies (in a lambda operator()). */
15387 tree
15388 begin_function_body (void)
15390 tree stmt;
15392 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
15393 return NULL_TREE;
15395 if (processing_template_decl)
15396 /* Do nothing now. */;
15397 else
15398 /* Always keep the BLOCK node associated with the outermost pair of
15399 curly braces of a function. These are needed for correct
15400 operation of dwarfout.c. */
15401 keep_next_level (true);
15403 stmt = begin_compound_stmt (BCS_FN_BODY);
15405 if (processing_template_decl)
15406 /* Do nothing now. */;
15407 else if (DECL_DESTRUCTOR_P (current_function_decl))
15408 begin_destructor_body ();
15410 return stmt;
15413 /* Do the processing for the end of a function body. Currently, this means
15414 closing out the cleanups for fully-constructed bases and members, and in
15415 the case of the destructor, deleting the object if desired. Again, this
15416 is only meaningful for [cd]tors, since they are the only functions where
15417 there is a significant distinction between the main body and any
15418 function catch clauses. Handling, say, main() return semantics here
15419 would be wrong, as flowing off the end of a function catch clause for
15420 main() would also need to return 0. */
15422 void
15423 finish_function_body (tree compstmt)
15425 if (compstmt == NULL_TREE)
15426 return;
15428 /* Close the block. */
15429 finish_compound_stmt (compstmt);
15431 if (processing_template_decl)
15432 /* Do nothing now. */;
15433 else if (DECL_CONSTRUCTOR_P (current_function_decl))
15434 finish_constructor_body ();
15435 else if (DECL_DESTRUCTOR_P (current_function_decl))
15436 finish_destructor_body ();
15439 /* Given a function, returns the BLOCK corresponding to the outermost level
15440 of curly braces, skipping the artificial block created for constructor
15441 initializers. */
15443 tree
15444 outer_curly_brace_block (tree fndecl)
15446 tree block = DECL_INITIAL (fndecl);
15447 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15448 return block;
15449 block = BLOCK_SUBBLOCKS (block);
15450 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15451 return block;
15452 block = BLOCK_SUBBLOCKS (block);
15453 gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
15454 return block;
15457 /* If FNDECL is a class's key method, add the class to the list of
15458 keyed classes that should be emitted. */
15460 static void
15461 record_key_method_defined (tree fndecl)
15463 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
15464 && DECL_VIRTUAL_P (fndecl)
15465 && !processing_template_decl)
15467 tree fnclass = DECL_CONTEXT (fndecl);
15468 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
15469 vec_safe_push (keyed_classes, fnclass);
15473 /* Subroutine of finish_function.
15474 Save the body of constexpr functions for possible
15475 future compile time evaluation. */
15477 static void
15478 maybe_save_function_definition (tree fun)
15480 if (!processing_template_decl
15481 && DECL_DECLARED_CONSTEXPR_P (fun)
15482 && !cp_function_chain->invalid_constexpr
15483 && !DECL_CLONED_FUNCTION_P (fun))
15484 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
15487 /* Finish up a function declaration and compile that function
15488 all the way to assembler language output. The free the storage
15489 for the function definition. INLINE_P is TRUE if we just
15490 finished processing the body of an in-class inline function
15491 definition. (This processing will have taken place after the
15492 class definition is complete.) */
15494 tree
15495 finish_function (bool inline_p)
15497 tree fndecl = current_function_decl;
15498 tree fntype, ctype = NULL_TREE;
15500 /* When we get some parse errors, we can end up without a
15501 current_function_decl, so cope. */
15502 if (fndecl == NULL_TREE)
15503 return error_mark_node;
15505 finish_lambda_scope ();
15507 if (c_dialect_objc ())
15508 objc_finish_function ();
15510 record_key_method_defined (fndecl);
15512 fntype = TREE_TYPE (fndecl);
15514 /* TREE_READONLY (fndecl) = 1;
15515 This caused &foo to be of type ptr-to-const-function
15516 which then got a warning when stored in a ptr-to-function variable. */
15518 gcc_assert (building_stmt_list_p ());
15519 /* The current function is being defined, so its DECL_INITIAL should
15520 be set, and unless there's a multiple definition, it should be
15521 error_mark_node. */
15522 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
15524 /* For a cloned function, we've already got all the code we need;
15525 there's no need to add any extra bits. */
15526 if (!DECL_CLONED_FUNCTION_P (fndecl))
15528 /* Make it so that `main' always returns 0 by default. */
15529 if (DECL_MAIN_P (current_function_decl))
15530 finish_return_stmt (integer_zero_node);
15532 if (use_eh_spec_block (current_function_decl))
15533 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
15534 (TREE_TYPE (current_function_decl)),
15535 current_eh_spec_block);
15538 /* If we're saving up tree structure, tie off the function now. */
15539 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
15541 finish_fname_decls ();
15543 /* If this function can't throw any exceptions, remember that. */
15544 if (!processing_template_decl
15545 && !cp_function_chain->can_throw
15546 && !flag_non_call_exceptions
15547 && !decl_replaceable_p (fndecl))
15548 TREE_NOTHROW (fndecl) = 1;
15550 /* This must come after expand_function_end because cleanups might
15551 have declarations (from inline functions) that need to go into
15552 this function's blocks. */
15554 /* If the current binding level isn't the outermost binding level
15555 for this function, either there is a bug, or we have experienced
15556 syntax errors and the statement tree is malformed. */
15557 if (current_binding_level->kind != sk_function_parms)
15559 /* Make sure we have already experienced errors. */
15560 gcc_assert (errorcount);
15562 /* Throw away the broken statement tree and extra binding
15563 levels. */
15564 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
15566 while (current_binding_level->kind != sk_function_parms)
15568 if (current_binding_level->kind == sk_class)
15569 pop_nested_class ();
15570 else
15571 poplevel (0, 0, 0);
15574 poplevel (1, 0, 1);
15576 /* Statements should always be full-expressions at the outermost set
15577 of curly braces for a function. */
15578 gcc_assert (stmts_are_full_exprs_p ());
15580 /* If there are no return statements in a function with auto return type,
15581 the return type is void. But if the declared type is something like
15582 auto*, this is an error. */
15583 if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
15584 && TREE_TYPE (fntype) == current_function_auto_return_pattern)
15586 if (is_auto (current_function_auto_return_pattern))
15588 apply_deduced_return_type (fndecl, void_type_node);
15589 fntype = TREE_TYPE (fndecl);
15591 else if (!current_function_returns_value
15592 && !current_function_returns_null)
15594 error ("no return statements in function returning %qT",
15595 current_function_auto_return_pattern);
15596 inform (input_location, "only plain %<auto%> return type can be "
15597 "deduced to %<void%>");
15601 // If this is a concept, check that the definition is reasonable.
15602 if (DECL_DECLARED_CONCEPT_P (fndecl))
15603 check_function_concept (fndecl);
15605 /* Lambda closure members are implicitly constexpr if possible. */
15606 if (cxx_dialect >= cxx17
15607 && LAMBDA_TYPE_P (CP_DECL_CONTEXT (fndecl)))
15608 DECL_DECLARED_CONSTEXPR_P (fndecl)
15609 = ((processing_template_decl
15610 || is_valid_constexpr_fn (fndecl, /*complain*/false))
15611 && potential_constant_expression (DECL_SAVED_TREE (fndecl)));
15613 /* Save constexpr function body before it gets munged by
15614 the NRV transformation. */
15615 maybe_save_function_definition (fndecl);
15617 /* Invoke the pre-genericize plugin before we start munging things. */
15618 if (!processing_template_decl)
15619 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
15621 /* Perform delayed folding before NRV transformation. */
15622 if (!processing_template_decl)
15623 cp_fold_function (fndecl);
15625 /* Set up the named return value optimization, if we can. Candidate
15626 variables are selected in check_return_expr. */
15627 if (current_function_return_value)
15629 tree r = current_function_return_value;
15630 tree outer;
15632 if (r != error_mark_node
15633 /* This is only worth doing for fns that return in memory--and
15634 simpler, since we don't have to worry about promoted modes. */
15635 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
15636 /* Only allow this for variables declared in the outer scope of
15637 the function so we know that their lifetime always ends with a
15638 return; see g++.dg/opt/nrv6.C. We could be more flexible if
15639 we were to do this optimization in tree-ssa. */
15640 && (outer = outer_curly_brace_block (fndecl))
15641 && chain_member (r, BLOCK_VARS (outer)))
15642 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
15644 current_function_return_value = NULL_TREE;
15647 /* Remember that we were in class scope. */
15648 if (current_class_name)
15649 ctype = current_class_type;
15651 /* Must mark the RESULT_DECL as being in this function. */
15652 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
15654 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
15655 to the FUNCTION_DECL node itself. */
15656 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
15658 /* Save away current state, if appropriate. */
15659 if (!processing_template_decl)
15660 save_function_data (fndecl);
15662 /* Complain if there's just no return statement. */
15663 if (warn_return_type
15664 && !VOID_TYPE_P (TREE_TYPE (fntype))
15665 && !dependent_type_p (TREE_TYPE (fntype))
15666 && !current_function_returns_value && !current_function_returns_null
15667 /* Don't complain if we abort or throw. */
15668 && !current_function_returns_abnormally
15669 /* Don't complain if there's an infinite loop. */
15670 && !current_function_infinite_loop
15671 /* Don't complain if we are declared noreturn. */
15672 && !TREE_THIS_VOLATILE (fndecl)
15673 && !DECL_NAME (DECL_RESULT (fndecl))
15674 && !TREE_NO_WARNING (fndecl)
15675 /* Structor return values (if any) are set by the compiler. */
15676 && !DECL_CONSTRUCTOR_P (fndecl)
15677 && !DECL_DESTRUCTOR_P (fndecl)
15678 && targetm.warn_func_return (fndecl))
15680 warning (OPT_Wreturn_type,
15681 "no return statement in function returning non-void");
15682 TREE_NO_WARNING (fndecl) = 1;
15685 /* Store the end of the function, so that we get good line number
15686 info for the epilogue. */
15687 cfun->function_end_locus = input_location;
15689 /* Complain about parameters that are only set, but never otherwise used. */
15690 if (warn_unused_but_set_parameter
15691 && !processing_template_decl
15692 && errorcount == unused_but_set_errorcount
15693 && !DECL_CLONED_FUNCTION_P (fndecl))
15695 tree decl;
15697 for (decl = DECL_ARGUMENTS (fndecl);
15698 decl;
15699 decl = DECL_CHAIN (decl))
15700 if (TREE_USED (decl)
15701 && TREE_CODE (decl) == PARM_DECL
15702 && !DECL_READ_P (decl)
15703 && DECL_NAME (decl)
15704 && !DECL_ARTIFICIAL (decl)
15705 && !TREE_NO_WARNING (decl)
15706 && !DECL_IN_SYSTEM_HEADER (decl)
15707 && TREE_TYPE (decl) != error_mark_node
15708 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
15709 && (!CLASS_TYPE_P (TREE_TYPE (decl))
15710 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
15711 warning_at (DECL_SOURCE_LOCATION (decl),
15712 OPT_Wunused_but_set_parameter,
15713 "parameter %qD set but not used", decl);
15714 unused_but_set_errorcount = errorcount;
15717 /* Complain about locally defined typedefs that are not used in this
15718 function. */
15719 maybe_warn_unused_local_typedefs ();
15721 /* Possibly warn about unused parameters. */
15722 if (warn_unused_parameter
15723 && !processing_template_decl
15724 && !DECL_CLONED_FUNCTION_P (fndecl))
15725 do_warn_unused_parameter (fndecl);
15727 /* Genericize before inlining. */
15728 if (!processing_template_decl)
15730 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
15731 cp_genericize (fndecl);
15732 /* Clear out the bits we don't need. */
15733 f->x_current_class_ptr = NULL;
15734 f->x_current_class_ref = NULL;
15735 f->x_eh_spec_block = NULL;
15736 f->x_in_charge_parm = NULL;
15737 f->x_vtt_parm = NULL;
15738 f->x_return_value = NULL;
15739 f->bindings = NULL;
15740 f->extern_decl_map = NULL;
15741 f->infinite_loops = NULL;
15743 /* Clear out the bits we don't need. */
15744 local_names = NULL;
15746 /* We're leaving the context of this function, so zap cfun. It's still in
15747 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
15748 set_cfun (NULL);
15749 current_function_decl = NULL;
15751 /* If this is an in-class inline definition, we may have to pop the
15752 bindings for the template parameters that we added in
15753 maybe_begin_member_template_processing when start_function was
15754 called. */
15755 if (inline_p)
15756 maybe_end_member_template_processing ();
15758 /* Leave the scope of the class. */
15759 if (ctype)
15760 pop_nested_class ();
15762 --function_depth;
15764 /* Clean up. */
15765 current_function_decl = NULL_TREE;
15767 invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
15768 return fndecl;
15771 /* Create the FUNCTION_DECL for a function definition.
15772 DECLSPECS and DECLARATOR are the parts of the declaration;
15773 they describe the return type and the name of the function,
15774 but twisted together in a fashion that parallels the syntax of C.
15776 This function creates a binding context for the function body
15777 as well as setting up the FUNCTION_DECL in current_function_decl.
15779 Returns a FUNCTION_DECL on success.
15781 If the DECLARATOR is not suitable for a function (it defines a datum
15782 instead), we return 0, which tells yyparse to report a parse error.
15784 May return void_type_node indicating that this method is actually
15785 a friend. See grokfield for more details.
15787 Came here with a `.pushlevel' .
15789 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
15790 CHANGES TO CODE IN `grokfield'. */
15792 tree
15793 grokmethod (cp_decl_specifier_seq *declspecs,
15794 const cp_declarator *declarator, tree attrlist)
15796 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
15797 &attrlist);
15799 if (fndecl == error_mark_node)
15800 return error_mark_node;
15802 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
15804 error ("invalid member function declaration");
15805 return error_mark_node;
15808 if (attrlist)
15809 cplus_decl_attributes (&fndecl, attrlist, 0);
15811 /* Pass friends other than inline friend functions back. */
15812 if (fndecl == void_type_node)
15813 return fndecl;
15815 if (DECL_IN_AGGR_P (fndecl))
15817 if (DECL_CLASS_SCOPE_P (fndecl))
15818 error ("%qD is already defined in class %qT", fndecl,
15819 DECL_CONTEXT (fndecl));
15820 return error_mark_node;
15823 check_template_shadow (fndecl);
15825 if (TREE_PUBLIC (fndecl))
15826 DECL_COMDAT (fndecl) = 1;
15827 DECL_DECLARED_INLINE_P (fndecl) = 1;
15828 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
15830 /* We process method specializations in finish_struct_1. */
15831 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
15833 fndecl = push_template_decl (fndecl);
15834 if (fndecl == error_mark_node)
15835 return fndecl;
15838 if (! DECL_FRIEND_P (fndecl))
15840 if (DECL_CHAIN (fndecl))
15842 fndecl = copy_node (fndecl);
15843 TREE_CHAIN (fndecl) = NULL_TREE;
15847 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
15849 DECL_IN_AGGR_P (fndecl) = 1;
15850 return fndecl;
15854 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
15855 we can lay it out later, when and if its type becomes complete.
15857 Also handle constexpr variables where the initializer involves
15858 an unlowered PTRMEM_CST because the class isn't complete yet. */
15860 void
15861 maybe_register_incomplete_var (tree var)
15863 gcc_assert (VAR_P (var));
15865 /* Keep track of variables with incomplete types. */
15866 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
15867 && DECL_EXTERNAL (var))
15869 tree inner_type = TREE_TYPE (var);
15871 while (TREE_CODE (inner_type) == ARRAY_TYPE)
15872 inner_type = TREE_TYPE (inner_type);
15873 inner_type = TYPE_MAIN_VARIANT (inner_type);
15875 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
15876 /* RTTI TD entries are created while defining the type_info. */
15877 || (TYPE_LANG_SPECIFIC (inner_type)
15878 && TYPE_BEING_DEFINED (inner_type)))
15880 incomplete_var iv = {var, inner_type};
15881 vec_safe_push (incomplete_vars, iv);
15883 else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
15884 && decl_constant_var_p (var)
15885 && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
15887 /* When the outermost open class is complete we can resolve any
15888 pointers-to-members. */
15889 tree context = outermost_open_class ();
15890 incomplete_var iv = {var, context};
15891 vec_safe_push (incomplete_vars, iv);
15896 /* Called when a class type (given by TYPE) is defined. If there are
15897 any existing VAR_DECLs whose type has been completed by this
15898 declaration, update them now. */
15900 void
15901 complete_vars (tree type)
15903 unsigned ix;
15904 incomplete_var *iv;
15906 for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
15908 if (same_type_p (type, iv->incomplete_type))
15910 tree var = iv->decl;
15911 tree type = TREE_TYPE (var);
15913 if (type != error_mark_node
15914 && (TYPE_MAIN_VARIANT (strip_array_types (type))
15915 == iv->incomplete_type))
15917 /* Complete the type of the variable. The VAR_DECL itself
15918 will be laid out in expand_expr. */
15919 complete_type (type);
15920 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
15923 /* Remove this entry from the list. */
15924 incomplete_vars->unordered_remove (ix);
15926 else
15927 ix++;
15930 /* Check for pending declarations which may have abstract type. */
15931 complete_type_check_abstract (type);
15934 /* If DECL is of a type which needs a cleanup, build and return an
15935 expression to perform that cleanup here. Return NULL_TREE if no
15936 cleanup need be done. DECL can also be a _REF when called from
15937 split_nonconstant_init_1. */
15939 tree
15940 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
15942 tree type;
15943 tree attr;
15944 tree cleanup;
15946 /* Assume no cleanup is required. */
15947 cleanup = NULL_TREE;
15949 if (error_operand_p (decl))
15950 return cleanup;
15952 /* Handle "__attribute__((cleanup))". We run the cleanup function
15953 before the destructor since the destructor is what actually
15954 terminates the lifetime of the object. */
15955 if (DECL_P (decl))
15956 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
15957 else
15958 attr = NULL_TREE;
15959 if (attr)
15961 tree id;
15962 tree fn;
15963 tree arg;
15965 /* Get the name specified by the user for the cleanup function. */
15966 id = TREE_VALUE (TREE_VALUE (attr));
15967 /* Look up the name to find the cleanup function to call. It is
15968 important to use lookup_name here because that is what is
15969 used in c-common.c:handle_cleanup_attribute when performing
15970 initial checks on the attribute. Note that those checks
15971 include ensuring that the function found is not an overloaded
15972 function, or an object with an overloaded call operator,
15973 etc.; we can rely on the fact that the function found is an
15974 ordinary FUNCTION_DECL. */
15975 fn = lookup_name (id);
15976 arg = build_address (decl);
15977 if (!mark_used (decl, complain) && !(complain & tf_error))
15978 return error_mark_node;
15979 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
15980 if (cleanup == error_mark_node)
15981 return error_mark_node;
15983 /* Handle ordinary C++ destructors. */
15984 type = TREE_TYPE (decl);
15985 if (type_build_dtor_call (type))
15987 int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
15988 tree addr;
15989 tree call;
15991 if (TREE_CODE (type) == ARRAY_TYPE)
15992 addr = decl;
15993 else
15994 addr = build_address (decl);
15996 call = build_delete (TREE_TYPE (addr), addr,
15997 sfk_complete_destructor, flags, 0, complain);
15998 if (call == error_mark_node)
15999 cleanup = error_mark_node;
16000 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
16001 /* Discard the call. */;
16002 else if (cleanup)
16003 cleanup = cp_build_compound_expr (cleanup, call, complain);
16004 else
16005 cleanup = call;
16008 /* build_delete sets the location of the destructor call to the
16009 current location, even though the destructor is going to be
16010 called later, at the end of the current scope. This can lead to
16011 a "jumpy" behavior for users of debuggers when they step around
16012 the end of the block. So let's unset the location of the
16013 destructor call instead. */
16014 protected_set_expr_location (cleanup, UNKNOWN_LOCATION);
16016 if (cleanup
16017 && DECL_P (decl)
16018 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl)))
16019 /* Treat objects with destructors as used; the destructor may do
16020 something substantive. */
16021 && !mark_used (decl, complain) && !(complain & tf_error))
16022 return error_mark_node;
16024 return cleanup;
16028 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
16029 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
16030 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
16032 tree
16033 static_fn_type (tree memfntype)
16035 tree fntype;
16036 tree args;
16038 if (TYPE_PTRMEMFUNC_P (memfntype))
16039 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
16040 if (POINTER_TYPE_P (memfntype)
16041 || TREE_CODE (memfntype) == FUNCTION_DECL)
16042 memfntype = TREE_TYPE (memfntype);
16043 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
16044 return memfntype;
16045 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
16046 args = TYPE_ARG_TYPES (memfntype);
16047 cp_ref_qualifier rqual = type_memfn_rqual (memfntype);
16048 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
16049 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype), rqual);
16050 fntype = (cp_build_type_attribute_variant
16051 (fntype, TYPE_ATTRIBUTES (memfntype)));
16052 fntype = (build_exception_variant
16053 (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
16054 if (TYPE_HAS_LATE_RETURN_TYPE (memfntype))
16055 TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
16056 return fntype;
16059 /* DECL was originally constructed as a non-static member function,
16060 but turned out to be static. Update it accordingly. */
16062 void
16063 revert_static_member_fn (tree decl)
16065 tree stype = static_fn_type (decl);
16066 cp_cv_quals quals = type_memfn_quals (stype);
16067 cp_ref_qualifier rqual = type_memfn_rqual (stype);
16069 if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
16070 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
16072 TREE_TYPE (decl) = stype;
16074 if (DECL_ARGUMENTS (decl))
16075 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
16076 DECL_STATIC_FUNCTION_P (decl) = 1;
16079 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
16080 one of the language-independent trees. */
16082 enum cp_tree_node_structure_enum
16083 cp_tree_node_structure (union lang_tree_node * t)
16085 switch (TREE_CODE (&t->generic))
16087 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
16088 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
16089 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
16090 case OVERLOAD: return TS_CP_OVERLOAD;
16091 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
16092 case PTRMEM_CST: return TS_CP_PTRMEM;
16093 case BASELINK: return TS_CP_BASELINK;
16094 case TEMPLATE_DECL: return TS_CP_TEMPLATE_DECL;
16095 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
16096 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
16097 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
16098 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
16099 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
16100 case CONSTRAINT_INFO: return TS_CP_CONSTRAINT_INFO;
16101 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
16102 default: return TS_CP_GENERIC;
16106 /* Build the void_list_node (void_type_node having been created). */
16107 tree
16108 build_void_list_node (void)
16110 tree t = build_tree_list (NULL_TREE, void_type_node);
16111 return t;
16114 bool
16115 cp_missing_noreturn_ok_p (tree decl)
16117 /* A missing noreturn is ok for the `main' function. */
16118 return DECL_MAIN_P (decl);
16121 /* Return the decl used to identify the COMDAT group into which DECL should
16122 be placed. */
16124 tree
16125 cxx_comdat_group (tree decl)
16127 /* Virtual tables, construction virtual tables, and virtual table
16128 tables all go in a single COMDAT group, named after the primary
16129 virtual table. */
16130 if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
16131 decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
16132 /* For all other DECLs, the COMDAT group is the mangled name of the
16133 declaration itself. */
16134 else
16136 while (DECL_THUNK_P (decl))
16138 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
16139 into the same section as the target function. In that case
16140 we must return target's name. */
16141 tree target = THUNK_TARGET (decl);
16142 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
16143 && DECL_SECTION_NAME (target) != NULL
16144 && DECL_ONE_ONLY (target))
16145 decl = target;
16146 else
16147 break;
16151 return decl;
16154 /* Returns the return type for FN as written by the user, which may include
16155 a placeholder for a deduced return type. */
16157 tree
16158 fndecl_declared_return_type (tree fn)
16160 fn = STRIP_TEMPLATE (fn);
16161 if (FNDECL_USED_AUTO (fn))
16163 struct language_function *f = NULL;
16164 if (DECL_STRUCT_FUNCTION (fn))
16165 f = DECL_STRUCT_FUNCTION (fn)->language;
16166 if (f == NULL)
16167 f = DECL_SAVED_FUNCTION_DATA (fn);
16168 return f->x_auto_return_pattern;
16170 return TREE_TYPE (TREE_TYPE (fn));
16173 /* Returns true iff DECL was declared with an auto type and it has
16174 not yet been deduced to a real type. */
16176 bool
16177 undeduced_auto_decl (tree decl)
16179 if (cxx_dialect < cxx11)
16180 return false;
16181 return type_uses_auto (TREE_TYPE (decl));
16184 /* Complain if DECL has an undeduced return type. */
16186 bool
16187 require_deduced_type (tree decl, tsubst_flags_t complain)
16189 if (undeduced_auto_decl (decl))
16191 if (complain & tf_error)
16192 error ("use of %qD before deduction of %<auto%>", decl);
16193 return false;
16195 return true;
16198 #include "gt-cp-decl.h"